Re: [U-Boot] [PATCH 4/5] mmc: sh_sdhi: Add MMC version 5.0 support

2017-05-25 Thread Jaehoon Chung
On 05/13/2017 10:51 PM, Marek Vasut wrote:
> From: Kouei Abe 
> 
> Renesas SDHI SD/MMC driver did not support MMC version 5.0 devices.
> This adds MMC version 5.0 device support.
> 
> Signed-off-by: Kouei Abe 
> Signed-off-by: Hiroyuki Yokoyama 
> Signed-off-by: Marek Vasut 
> Cc: Hiroyuki Yokoyama 
> Cc: Nobuhiro Iwamatsu 
> Cc: Jaehoon Chung 
> ---
>  arch/arm/mach-rmobile/include/mach/sh_sdhi.h |  7 ++-
>  drivers/mmc/sh_sdhi.c| 24 +++-
>  2 files changed, 25 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/arm/mach-rmobile/include/mach/sh_sdhi.h 
> b/arch/arm/mach-rmobile/include/mach/sh_sdhi.h
> index a5ea45b707..1fb0648b12 100644
> --- a/arch/arm/mach-rmobile/include/mach/sh_sdhi.h
> +++ b/arch/arm/mach-rmobile/include/mach/sh_sdhi.h
> @@ -50,8 +50,10 @@
>  /* SDHI CMD VALUE */
>  #define CMD_MASK 0x
>  #define SDHI_APP 0x0040
> +#define SDHI_MMC_SEND_OP_COND0x0701
>  #define SDHI_SD_APP_SEND_SCR 0x0073
>  #define SDHI_SD_SWITCH   0x1C06
> +#define SDHI_MMC_SEND_EXT_CSD0x1C08
>  
>  /* SDHI_PORTSEL */
>  #define USE_1PORT(1 << 8) /* 1 port */
> @@ -120,7 +122,10 @@
>  #define CLK_ENABLE   (1 << 8)
>  
>  /* SDHI_OPTION */
> -#define OPT_BUS_WIDTH_1  (1 << 15)   /* bus width = 
> 1 bit */
> +#define OPT_BUS_WIDTH_M  (5 << 13)   /* 101b 
> (15-13bit) */

What is WIDTH_M?

> +#define OPT_BUS_WIDTH_1  (4 << 13)   /* bus width = 
> 1 bit */
> +#define OPT_BUS_WIDTH_4  (0 << 13)   /* bus width = 
> 4 bit */
> +#define OPT_BUS_WIDTH_8  (1 << 13)   /* bus width = 
> 8 bit */
>  
>  /* SDHI_ERR_STS1 */
>  #define ERR_STS1_CRC_ERROR   ((1 << 11) | (1 << 10) | (1 << 9) | \
> diff --git a/drivers/mmc/sh_sdhi.c b/drivers/mmc/sh_sdhi.c
> index d1dd0f0fc3..c64beb6e2a 100644
> --- a/drivers/mmc/sh_sdhi.c
> +++ b/drivers/mmc/sh_sdhi.c
> @@ -489,6 +489,13 @@ static unsigned short sh_sdhi_set_cmd(struct 
> sh_sdhi_host *host,
>   else /* SD_SWITCH */
>   opc = SDHI_SD_SWITCH;
>   break;
> + case MMC_CMD_SEND_OP_COND:
> + opc = SDHI_MMC_SEND_OP_COND;
> + break;
> + case MMC_CMD_SEND_EXT_CSD:
> + if (data)
> + opc = SDHI_MMC_SEND_EXT_CSD;
> + break;
>   default:
>   break;
>   }
> @@ -513,6 +520,7 @@ static unsigned short sh_sdhi_data_trans(struct 
> sh_sdhi_host *host,
>   case MMC_CMD_READ_SINGLE_BLOCK:
>   case SDHI_SD_APP_SEND_SCR:
>   case SDHI_SD_SWITCH: /* SD_SWITCH */
> + case SDHI_MMC_SEND_EXT_CSD:
>   ret = sh_sdhi_single_read(host, data);
>   break;
>   default:
> @@ -648,12 +656,18 @@ static int sh_sdhi_set_ios(struct mmc *mmc)
>   if (ret)
>   return -EINVAL;
>  
> - if (mmc->bus_width == 4)
> - sh_sdhi_writew(host, SDHI_OPTION, ~OPT_BUS_WIDTH_1 &
> -sh_sdhi_readw(host, SDHI_OPTION));
> + if (mmc->bus_width == 8)
> + sh_sdhi_writew(host, SDHI_OPTION,
> +OPT_BUS_WIDTH_8 | (~OPT_BUS_WIDTH_M &
> +sh_sdhi_readw(host, SDHI_OPTION)));
> + else if (mmc->bus_width == 4)
> + sh_sdhi_writew(host, SDHI_OPTION,
> +OPT_BUS_WIDTH_4 | (~OPT_BUS_WIDTH_M &
> +sh_sdhi_readw(host, SDHI_OPTION)));
>   else
> - sh_sdhi_writew(host, SDHI_OPTION, OPT_BUS_WIDTH_1 |
> -sh_sdhi_readw(host, SDHI_OPTION));
> + sh_sdhi_writew(host, SDHI_OPTION,
> +OPT_BUS_WIDTH_1 | (~OPT_BUS_WIDTH_M &
> +sh_sdhi_readw(host, SDHI_OPTION)));
>  
>   debug("clock = %d, buswidth = %d\n", mmc->clock, mmc->bus_width);
>  
> 

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH 4/5] mmc: sh_sdhi: Add MMC version 5.0 support

2017-05-13 Thread Nobuhiro Iwamatsu
Hi,

2017-05-13 22:51 GMT+09:00 Marek Vasut :
> From: Kouei Abe 
>
> Renesas SDHI SD/MMC driver did not support MMC version 5.0 devices.
> This adds MMC version 5.0 device support.
>
> Signed-off-by: Kouei Abe 
> Signed-off-by: Hiroyuki Yokoyama 
> Signed-off-by: Marek Vasut 
> Cc: Hiroyuki Yokoyama 
> Cc: Nobuhiro Iwamatsu 
> Cc: Jaehoon Chung 

Reviewed-by: Nobuhiro Iwamatsu 

> ---
>  arch/arm/mach-rmobile/include/mach/sh_sdhi.h |  7 ++-
>  drivers/mmc/sh_sdhi.c| 24 +++-
>  2 files changed, 25 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-rmobile/include/mach/sh_sdhi.h 
> b/arch/arm/mach-rmobile/include/mach/sh_sdhi.h
> index a5ea45b707..1fb0648b12 100644
> --- a/arch/arm/mach-rmobile/include/mach/sh_sdhi.h
> +++ b/arch/arm/mach-rmobile/include/mach/sh_sdhi.h
> @@ -50,8 +50,10 @@
>  /* SDHI CMD VALUE */
>  #define CMD_MASK   0x
>  #define SDHI_APP   0x0040
> +#define SDHI_MMC_SEND_OP_COND  0x0701
>  #define SDHI_SD_APP_SEND_SCR   0x0073
>  #define SDHI_SD_SWITCH 0x1C06
> +#define SDHI_MMC_SEND_EXT_CSD  0x1C08
>
>  /* SDHI_PORTSEL */
>  #define USE_1PORT  (1 << 8) /* 1 port */
> @@ -120,7 +122,10 @@
>  #define CLK_ENABLE (1 << 8)
>
>  /* SDHI_OPTION */
> -#define OPT_BUS_WIDTH_1(1 << 15)   /* bus width 
> = 1 bit */
> +#define OPT_BUS_WIDTH_M(5 << 13)   /* 101b 
> (15-13bit) */
> +#define OPT_BUS_WIDTH_1(4 << 13)   /* bus width 
> = 1 bit */
> +#define OPT_BUS_WIDTH_4(0 << 13)   /* bus width 
> = 4 bit */
> +#define OPT_BUS_WIDTH_8(1 << 13)   /* bus width 
> = 8 bit */
>
>  /* SDHI_ERR_STS1 */
>  #define ERR_STS1_CRC_ERROR ((1 << 11) | (1 << 10) | (1 << 9) | \
> diff --git a/drivers/mmc/sh_sdhi.c b/drivers/mmc/sh_sdhi.c
> index d1dd0f0fc3..c64beb6e2a 100644
> --- a/drivers/mmc/sh_sdhi.c
> +++ b/drivers/mmc/sh_sdhi.c
> @@ -489,6 +489,13 @@ static unsigned short sh_sdhi_set_cmd(struct 
> sh_sdhi_host *host,
> else /* SD_SWITCH */
> opc = SDHI_SD_SWITCH;
> break;
> +   case MMC_CMD_SEND_OP_COND:
> +   opc = SDHI_MMC_SEND_OP_COND;
> +   break;
> +   case MMC_CMD_SEND_EXT_CSD:
> +   if (data)
> +   opc = SDHI_MMC_SEND_EXT_CSD;
> +   break;
> default:
> break;
> }
> @@ -513,6 +520,7 @@ static unsigned short sh_sdhi_data_trans(struct 
> sh_sdhi_host *host,
> case MMC_CMD_READ_SINGLE_BLOCK:
> case SDHI_SD_APP_SEND_SCR:
> case SDHI_SD_SWITCH: /* SD_SWITCH */
> +   case SDHI_MMC_SEND_EXT_CSD:
> ret = sh_sdhi_single_read(host, data);
> break;
> default:
> @@ -648,12 +656,18 @@ static int sh_sdhi_set_ios(struct mmc *mmc)
> if (ret)
> return -EINVAL;
>
> -   if (mmc->bus_width == 4)
> -   sh_sdhi_writew(host, SDHI_OPTION, ~OPT_BUS_WIDTH_1 &
> -  sh_sdhi_readw(host, SDHI_OPTION));
> +   if (mmc->bus_width == 8)
> +   sh_sdhi_writew(host, SDHI_OPTION,
> +  OPT_BUS_WIDTH_8 | (~OPT_BUS_WIDTH_M &
> +  sh_sdhi_readw(host, SDHI_OPTION)));
> +   else if (mmc->bus_width == 4)
> +   sh_sdhi_writew(host, SDHI_OPTION,
> +  OPT_BUS_WIDTH_4 | (~OPT_BUS_WIDTH_M &
> +  sh_sdhi_readw(host, SDHI_OPTION)));
> else
> -   sh_sdhi_writew(host, SDHI_OPTION, OPT_BUS_WIDTH_1 |
> -  sh_sdhi_readw(host, SDHI_OPTION));
> +   sh_sdhi_writew(host, SDHI_OPTION,
> +  OPT_BUS_WIDTH_1 | (~OPT_BUS_WIDTH_M &
> +  sh_sdhi_readw(host, SDHI_OPTION)));
>
> debug("clock = %d, buswidth = %d\n", mmc->clock, mmc->bus_width);
>
> --
> 2.11.0
>



-- 
Nobuhiro Iwamatsu
   iwamatsu at {nigauri.org / debian.org}
   GPG ID: 40AD1FA6
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot