
On 05/13/2017 10:51 PM, Marek Vasut wrote:
From: Kouei Abe kouei.abe.cp@renesas.com
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 kouei.abe.cp@renesas.com Signed-off-by: Hiroyuki Yokoyama hiroyuki.yokoyama.vx@renesas.com Signed-off-by: Marek Vasut marek.vasut+renesas@gmail.com Cc: Hiroyuki Yokoyama hiroyuki.yokoyama.vx@renesas.com Cc: Nobuhiro Iwamatsu iwamatsu@nigauri.org Cc: Jaehoon Chung jh80.chung@samsung.com
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 0x0000ffff #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) */
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;
default: break; }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 &
elsesh_sdhi_readw(host, SDHI_OPTION)));
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);