Commit 50fb0c451f8219d26612451933c7905457459bc4

Authored by Marek Vasut
Committed by Nobuhiro Iwamatsu
1 parent 8474681c3e

ARM: rmobile: salvator-x: Add SD support

Add support for the SD card slots on the Salvator-X board.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>

Showing 3 changed files with 102 additions and 5 deletions Side-by-side Diff

board/renesas/salvator-x/salvator-x.c
... ... @@ -2,7 +2,7 @@
2 2 * board/renesas/salvator-x/salvator-x.c
3 3 * This file is Salvator-X board support.
4 4 *
5   - * Copyright (C) 2015 Renesas Electronics Corporation
  5 + * Copyright (C) 2015-2017 Renesas Electronics Corporation
6 6 * Copyright (C) 2015 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
7 7 *
8 8 * SPDX-License-Identifier: GPL-2.0+
... ... @@ -22,6 +22,7 @@
22 22 #include <asm/arch/gpio.h>
23 23 #include <asm/arch/rmobile.h>
24 24 #include <asm/arch/rcar-mstp.h>
  25 +#include <asm/arch/sh_sdhi.h>
25 26 #include <i2c.h>
26 27 #include <mmc.h>
27 28  
28 29  
29 30  
30 31  
... ... @@ -48,14 +49,32 @@
48 49 #define TMU0_MSTP125 BIT(25) /* secure */
49 50 #define TMU1_MSTP124 BIT(24) /* non-secure */
50 51 #define SCIF2_MSTP310 BIT(10) /* SCIF2 */
  52 +#define SD0_MSTP314 BIT(14)
  53 +#define SD1_MSTP313 BIT(13)
  54 +#define SD2_MSTP312 BIT(12) /* either MMC0 */
  55 +#define SD3_MSTP311 BIT(11) /* either MMC1 */
51 56  
  57 +#define SD0CKCR 0xE6150074
  58 +#define SD1CKCR 0xE6150078
  59 +#define SD2CKCR 0xE6150268
  60 +#define SD3CKCR 0xE615026C
  61 +
52 62 int board_early_init_f(void)
53 63 {
54 64 /* TMU0,1 */ /* which use ? */
55 65 mstp_clrbits_le32(MSTPSR1, SMSTPCR1, TMU0_MSTP125 | TMU1_MSTP124);
56 66 /* SCIF2 */
57 67 mstp_clrbits_le32(MSTPSR3, SMSTPCR3, SCIF2_MSTP310);
  68 + /* eMMC */
  69 + mstp_clrbits_le32(MSTPSR3, SMSTPCR3, SD1_MSTP313 | SD2_MSTP312);
  70 + /* SDHI0, 3 */
  71 + mstp_clrbits_le32(MSTPSR3, SMSTPCR3, SD0_MSTP314 | SD3_MSTP311);
58 72  
  73 + writel(0, SD0CKCR);
  74 + writel(0, SD1CKCR);
  75 + writel(0, SD2CKCR);
  76 + writel(0, SD3CKCR);
  77 +
59 78 return 0;
60 79 }
61 80  
... ... @@ -82,6 +101,74 @@
82 101  
83 102 return 0;
84 103 }
  104 +
  105 +#ifdef CONFIG_SH_SDHI
  106 +int board_mmc_init(bd_t *bis)
  107 +{
  108 + int ret = -ENODEV;
  109 +
  110 + /* SDHI0 */
  111 + gpio_request(GPIO_GFN_SD0_DAT0, NULL);
  112 + gpio_request(GPIO_GFN_SD0_DAT1, NULL);
  113 + gpio_request(GPIO_GFN_SD0_DAT2, NULL);
  114 + gpio_request(GPIO_GFN_SD0_DAT3, NULL);
  115 + gpio_request(GPIO_GFN_SD0_CLK, NULL);
  116 + gpio_request(GPIO_GFN_SD0_CMD, NULL);
  117 + gpio_request(GPIO_GFN_SD0_CD, NULL);
  118 + gpio_request(GPIO_GFN_SD0_WP, NULL);
  119 +
  120 + gpio_request(GPIO_GP_5_2, NULL);
  121 + gpio_request(GPIO_GP_5_1, NULL);
  122 + gpio_direction_output(GPIO_GP_5_2, 1); /* power on */
  123 + gpio_direction_output(GPIO_GP_5_1, 1); /* 1: 3.3V, 0: 1.8V */
  124 +
  125 + ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI0_BASE, 0,
  126 + SH_SDHI_QUIRK_64BIT_BUF);
  127 + if (ret)
  128 + return ret;
  129 +
  130 + /* SDHI1/SDHI2 eMMC */
  131 + gpio_request(GPIO_GFN_SD1_DAT0, NULL);
  132 + gpio_request(GPIO_GFN_SD1_DAT1, NULL);
  133 + gpio_request(GPIO_GFN_SD1_DAT2, NULL);
  134 + gpio_request(GPIO_GFN_SD1_DAT3, NULL);
  135 + gpio_request(GPIO_GFN_SD2_DAT0, NULL);
  136 + gpio_request(GPIO_GFN_SD2_DAT1, NULL);
  137 + gpio_request(GPIO_GFN_SD2_DAT2, NULL);
  138 + gpio_request(GPIO_GFN_SD2_DAT3, NULL);
  139 + gpio_request(GPIO_GFN_SD2_CLK, NULL);
  140 + gpio_request(GPIO_GFN_SD2_CMD, NULL);
  141 + gpio_request(GPIO_GP_5_3, NULL);
  142 + gpio_request(GPIO_GP_5_9, NULL);
  143 + gpio_direction_output(GPIO_GP_5_3, 0); /* 1: 3.3V, 0: 1.8V */
  144 + gpio_direction_output(GPIO_GP_5_9, 0); /* 1: 3.3V, 0: 1.8V */
  145 +
  146 + ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI2_BASE, 1,
  147 + SH_SDHI_QUIRK_64BIT_BUF);
  148 + if (ret)
  149 + return ret;
  150 +
  151 + /* SDHI3 */
  152 + gpio_request(GPIO_GFN_SD3_DAT0, NULL); /* GP_4_9 */
  153 + gpio_request(GPIO_GFN_SD3_DAT1, NULL); /* GP_4_10 */
  154 + gpio_request(GPIO_GFN_SD3_DAT2, NULL); /* GP_4_11 */
  155 + gpio_request(GPIO_GFN_SD3_DAT3, NULL); /* GP_4_12 */
  156 + gpio_request(GPIO_GFN_SD3_CLK, NULL); /* GP_4_7 */
  157 + gpio_request(GPIO_GFN_SD3_CMD, NULL); /* GP_4_8 */
  158 + /* IPSR10 */
  159 + gpio_request(GPIO_FN_SD3_CD, NULL);
  160 + gpio_request(GPIO_FN_SD3_WP, NULL);
  161 +
  162 + gpio_request(GPIO_GP_3_15, NULL);
  163 + gpio_request(GPIO_GP_3_14, NULL);
  164 + gpio_direction_output(GPIO_GP_3_15, 1); /* power on */
  165 + gpio_direction_output(GPIO_GP_3_14, 1); /* 1: 3.3V, 0: 1.8V */
  166 +
  167 + ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI3_BASE, 2,
  168 + SH_SDHI_QUIRK_64BIT_BUF);
  169 + return ret;
  170 +}
  171 +#endif
85 172  
86 173 int dram_init(void)
87 174 {
configs/salvator-x_defconfig
... ... @@ -8,10 +8,12 @@
8 8 CONFIG_CMD_BOOTZ=y
9 9 CONFIG_CMD_FDT=y
10 10 CONFIG_R8A7795=y
11   -# CONFIG_CMD_IMI is not set
  11 +CONFIG_SH_SDHI=y
12 12 # CONFIG_CMD_IMLS is not set
13   -# CONFIG_CMD_XIMG is not set
  13 +CONFIG_CMD_EDITENV=y
  14 +CONFIG_CMD_SAVEENV=y
14 15 CONFIG_DOS_PARTITION=y
15   -# CONFIG_MMC is not set
  16 +CONFIG_MMC=y
  17 +CONFIG_GENERIC_MMC=y
16 18 CONFIG_OF_LIBFDT=y
include/configs/salvator-x.h
... ... @@ -24,7 +24,6 @@
24 24  
25 25 /* [A] Hyper Flash */
26 26 /* use to RPC(SPI Multi I/O Bus Controller) */
27   -#define CONFIG_ENV_IS_NOWHERE
28 27  
29 28 /* Board Clock */
30 29 /* XTAL_CLK : 33.33MHz */
... ... @@ -44,6 +43,15 @@
44 43 #define CONFIG_GICV2
45 44 #define GICD_BASE 0xF1010000
46 45 #define GICC_BASE 0xF1020000
  46 +
  47 +/* SDHI */
  48 +#define CONFIG_SH_SDHI_FREQ 200000000
  49 +
  50 +/* Environment in eMMC, at the end of 2nd "boot sector" */
  51 +#define CONFIG_ENV_IS_IN_MMC
  52 +#define CONFIG_ENV_OFFSET (-CONFIG_ENV_SIZE)
  53 +#define CONFIG_SYS_MMC_ENV_DEV 1
  54 +#define CONFIG_SYS_MMC_ENV_PART 2
47 55  
48 56 /* Module stop status bits */
49 57 /* MFIS, SCIF1 */