diff mbox

[U-Boot,RESEND,1/2] mmc:fix: Set mmc width according to MMC host capabilities

Message ID 1334839158-23544-2-git-send-email-l.majewski@samsung.com
State Superseded, archived
Delegated to: Andy Fleming
Headers show

Commit Message

Łukasz Majewski April 19, 2012, 12:39 p.m. UTC
This patch sets the MMC width according to the MMC host capabilities.
It turned out, that there are some targets (e.g. GONI), which are able
to read data from SPI only at 4 bit mode.
This patch restricts the width number according to the MMC host.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Andy Fleming <afleming@gmail.com>
---
 drivers/mmc/mmc.c |    4 +++-
 include/mmc.h     |    3 +++
 2 files changed, 6 insertions(+), 1 deletions(-)

Comments

Lei Wen April 19, 2012, 2:27 p.m. UTC | #1
On Thu, Apr 19, 2012 at 8:39 PM, Lukasz Majewski <l.majewski@samsung.com> wrote:
> This patch sets the MMC width according to the MMC host capabilities.
> It turned out, that there are some targets (e.g. GONI), which are able
> to read data from SPI only at 4 bit mode.
> This patch restricts the width number according to the MMC host.
>
> Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Cc: Andy Fleming <afleming@gmail.com>
> ---
>  drivers/mmc/mmc.c |    4 +++-
>  include/mmc.h     |    3 +++
>  2 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index e70fa9f..618960e 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -1199,7 +1199,9 @@ int mmc_startup(struct mmc *mmc)
>                else
>                        mmc_set_clock(mmc, 25000000);
>        } else {
> -               for (width = EXT_CSD_BUS_WIDTH_8; width >= 0; width--) {
> +               width = ((mmc->host_caps & MMC_MODE_MASK_WIDTH_BITS) >>
> +                        MMC_MODE_WIDTH_BITS_SHIFT);
> +               for (; width >= 0; width--) {
>                        /* Set the card to use 4 bit*/
>                        err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
>                                        EXT_CSD_BUS_WIDTH, width);
> diff --git a/include/mmc.h b/include/mmc.h
> index f52df70..ee16349 100644
> --- a/include/mmc.h
> +++ b/include/mmc.h
> @@ -47,6 +47,9 @@
>  #define MMC_MODE_SPI           0x400
>  #define MMC_MODE_HC            0x800
>
> +#define MMC_MODE_MASK_WIDTH_BITS (MMC_MODE_4BIT | MMC_MODE_8BIT)
> +#define MMC_MODE_WIDTH_BITS_SHIFT 8
> +
>  #define SD_DATA_4BIT   0x00040000
>
>  #define IS_SD(x) (x->version & SD_VERSION_SD)
> --
> 1.7.2.3
>
Acked-by: Lei Wen <leiwen@marvell.com>

Thanks,
Lei
diff mbox

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index e70fa9f..618960e 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1199,7 +1199,9 @@  int mmc_startup(struct mmc *mmc)
 		else
 			mmc_set_clock(mmc, 25000000);
 	} else {
-		for (width = EXT_CSD_BUS_WIDTH_8; width >= 0; width--) {
+		width = ((mmc->host_caps & MMC_MODE_MASK_WIDTH_BITS) >>
+			 MMC_MODE_WIDTH_BITS_SHIFT);
+		for (; width >= 0; width--) {
 			/* Set the card to use 4 bit*/
 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
 					EXT_CSD_BUS_WIDTH, width);
diff --git a/include/mmc.h b/include/mmc.h
index f52df70..ee16349 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -47,6 +47,9 @@ 
 #define MMC_MODE_SPI		0x400
 #define MMC_MODE_HC		0x800
 
+#define MMC_MODE_MASK_WIDTH_BITS (MMC_MODE_4BIT | MMC_MODE_8BIT)
+#define MMC_MODE_WIDTH_BITS_SHIFT 8
+
 #define SD_DATA_4BIT	0x00040000
 
 #define IS_SD(x) (x->version & SD_VERSION_SD)