[U-Boot] [PATCH 3/4] arm: rmobile: gose: Add support SDHI

Nobuhiro Iwamatsu nobuhiro.iwamatsu.yj at renesas.com
Thu Feb 12 07:37:20 CET 2015


Gose board has three SDHI port.
This adds GPIO configuration and initialization function of SDHI, and
enables MMC command.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj at renesas.com>
---
 board/renesas/gose/gose.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++
 configs/gose_defconfig    |  1 +
 include/configs/gose.h    |  6 +++++
 3 files changed, 74 insertions(+)

diff --git a/board/renesas/gose/gose.c b/board/renesas/gose/gose.c
index d72bc29..bace439 100644
--- a/board/renesas/gose/gose.c
+++ b/board/renesas/gose/gose.c
@@ -18,6 +18,7 @@
 #include <asm/gpio.h>
 #include <asm/arch/rmobile.h>
 #include <asm/arch/rcar-mstp.h>
+#include <asm/arch/sh_sdhi.h>
 #include <netdev.h>
 #include <miiphy.h>
 #include <i2c.h>
@@ -48,6 +49,14 @@ void s_init(void)
 #define SCIF0_MSTP721	(1 << 21)
 #define ETHER_MSTP813	(1 << 13)
 
+#define SDHI0_MSTP314	(1 << 14)
+#define SDHI1_MSTP312	(1 << 12)
+#define SDHI2_MSTP311	(1 << 11)
+
+#define SD1CKCR		0xE6150078
+#define SD2CKCR		0xE615026C
+#define SD_97500KHZ	0x7
+
 int board_early_init_f(void)
 {
 	/* TMU0 */
@@ -59,6 +68,12 @@ int board_early_init_f(void)
 	/* ETHER */
 	mstp_clrbits_le32(MSTPSR8, SMSTPCR8, ETHER_MSTP813);
 
+	/* SDHI */
+	mstp_clrbits_le32(MSTPSR3, SMSTPCR3,
+			  SDHI0_MSTP314 | SDHI1_MSTP312 | SDHI2_MSTP311);
+	writel(SD_97500KHZ, SD1CKCR);
+	writel(SD_97500KHZ, SD2CKCR);
+
 	return 0;
 }
 
@@ -126,6 +141,58 @@ int board_eth_init(bd_t *bis)
 	return ret;
 }
 
+int board_mmc_init(bd_t *bis)
+{
+	int ret = -ENODEV;
+
+#ifdef CONFIG_SH_SDHI
+	gpio_request(GPIO_FN_SD0_DATA0, NULL);
+	gpio_request(GPIO_FN_SD0_DATA1, NULL);
+	gpio_request(GPIO_FN_SD0_DATA2, NULL);
+	gpio_request(GPIO_FN_SD0_DATA3, NULL);
+	gpio_request(GPIO_FN_SD0_CLK, NULL);
+	gpio_request(GPIO_FN_SD0_CMD, NULL);
+	gpio_request(GPIO_FN_SD0_CD, NULL);
+	gpio_request(GPIO_FN_SD2_DATA0, NULL);
+	gpio_request(GPIO_FN_SD2_DATA1, NULL);
+	gpio_request(GPIO_FN_SD2_DATA2, NULL);
+	gpio_request(GPIO_FN_SD2_DATA3, NULL);
+	gpio_request(GPIO_FN_SD2_CLK, NULL);
+	gpio_request(GPIO_FN_SD2_CMD, NULL);
+	gpio_request(GPIO_FN_SD2_CD, NULL);
+
+	/* SDHI 0 */
+	gpio_request(GPIO_GP_7_17, NULL);
+	gpio_request(GPIO_GP_2_12, NULL);
+	gpio_direction_output(GPIO_GP_7_17, 1); /* power on */
+	gpio_direction_output(GPIO_GP_2_12, 1); /* 1: 3.3V, 0: 1.8V */
+
+	ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI0_BASE, 0,
+			   SH_SDHI_QUIRK_16BIT_BUF);
+	if (ret)
+		return ret;
+
+	/* SDHI 1 */
+	gpio_request(GPIO_GP_7_18, NULL);
+	gpio_request(GPIO_GP_2_13, NULL);
+	gpio_direction_output(GPIO_GP_7_18, 1); /* power on */
+	gpio_direction_output(GPIO_GP_2_13, 1); /* 1: 3.3V, 0: 1.8V */
+
+	ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI1_BASE, 1, 0);
+	if (ret)
+		return ret;
+
+	/* SDHI 2 */
+	gpio_request(GPIO_GP_7_19, NULL);
+	gpio_request(GPIO_GP_2_26, NULL);
+	gpio_direction_output(GPIO_GP_7_19, 1); /* power on */
+	gpio_direction_output(GPIO_GP_2_26, 1); /* 1: 3.3V, 0: 1.8V */
+
+	ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI2_BASE, 2, 0);
+#endif
+	return ret;
+}
+
 int dram_init(void)
 {
 	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
diff --git a/configs/gose_defconfig b/configs/gose_defconfig
index b5b7682..353f854 100644
--- a/configs/gose_defconfig
+++ b/configs/gose_defconfig
@@ -3,3 +3,4 @@ CONFIG_RMOBILE=y
 CONFIG_TARGET_GOSE=y
 CONFIG_DM=y
 CONFIG_DM_SERIAL=y
+CONFIG_SH_SDHI=y
diff --git a/include/configs/gose.h b/include/configs/gose.h
index 808a8b0..0dc28c7 100644
--- a/include/configs/gose.h
+++ b/include/configs/gose.h
@@ -98,4 +98,10 @@
 /* SCIF0 */
 #define CONFIG_SMSTP7_ENA	0x00200000
 
+/* SDHI */
+#define CONFIG_MMC
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_SH_SDHI_FREQ		97500000
+
 #endif	/* __GOSE_H */
-- 
2.1.3



More information about the U-Boot mailing list