diff options
author | Doug Anderson <dianders@chromium.org> | 2011-10-17 17:56:54 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2011-10-28 11:08:57 -0700 |
commit | 59700e830d14730f4df65feb83c0fe0a5e3e33b9 (patch) | |
tree | 2ac65ca0dc9e1bde8d48f1f7dc2a464aa52f3bdd /board/nvidia | |
parent | 186e1be5e2555ff51d496ad7a179b5988ae6be9a (diff) |
mmc: tegra3: Add MMC support for Tegra3 (specifically, waluigi)
BUG=chromium-os:21540
TEST=Able to talk to MMC1 on Waluigi w/ future config changes.
Specifically:
1. mmcinfo 0 - works (shows info)
2. mmcinfo 1 - works (shows info)
3. mmc rescan 1; mmc part 1 - works (shows partitions)
Change-Id: I730d3b91088f20ccf7ca20f3f31f7d59514af243
Signed-off-by: Doug Anderson <dianders@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/10661
Reviewed-by: Tom Warren <twarren@nvidia.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'board/nvidia')
-rw-r--r-- | board/nvidia/cardhu/tegra3-waluigi.dts | 23 | ||||
-rw-r--r-- | board/nvidia/cardhu/tegra30.dtsi | 32 | ||||
-rw-r--r-- | board/nvidia/common/board.c | 24 |
3 files changed, 79 insertions, 0 deletions
diff --git a/board/nvidia/cardhu/tegra3-waluigi.dts b/board/nvidia/cardhu/tegra3-waluigi.dts index 20e3e833fa..6115397955 100644 --- a/board/nvidia/cardhu/tegra3-waluigi.dts +++ b/board/nvidia/cardhu/tegra3-waluigi.dts @@ -17,6 +17,9 @@ aliases { console = "/serial@70006300"; + sdmmc0 = "/sdhci@78000600"; + sdmmc1 = "/sdhci@78000000"; + i2c0 = "/i2c@0x7000d000"; i2c1 = "/i2c@0x7000c000"; i2c2 = "/i2c@0x7000c400"; @@ -40,4 +43,24 @@ */ clock-frequency = <408000000>; }; + + /* External SD card - SDMMC1 */ + sdhci@78000000 { + status = "ok"; + width = <4>; /* width of SDIO port */ + removable = <1>; + /* Parameter 3 bit 0:1=output, 0=input; bit 1:1=high, 0=low */ + cd-gpio = <&gpio 69 0>; /* card detect, GMI_IORDY => I.05 */ + wp-gpio = <&gpio 155 0>; /* write protect, VI_D11 => T.03 */ + power-gpio = <&gpio 31 3>; /* power enable, VI_HSYNC => D.07 */ + }; + + /* Internal eMMC - SDMMC4 */ + emmc: sdhci@78000600 { + status = "ok"; + width = <4>; /* width of SDIO port */ + removable = <0>; + power-gpio = <&gpio 25 3>; /* power enable, gpio PD1 */ + }; + }; diff --git a/board/nvidia/cardhu/tegra30.dtsi b/board/nvidia/cardhu/tegra30.dtsi index 9e663107f7..09d522dbf7 100644 --- a/board/nvidia/cardhu/tegra30.dtsi +++ b/board/nvidia/cardhu/tegra30.dtsi @@ -73,6 +73,38 @@ status = "disabled"; }; + sdhci@78000000 { + compatible = "nvidia,tegra250-sdhci"; + reg = <0x78000000 0x200>; + interrupts = <46>; + periph-id = <14>; // PERIPH_ID_SDMMC1 + status = "disabled"; + }; + + sdhci@78000200 { + compatible = "nvidia,tegra250-sdhci"; + reg = <0x78000200 0x200>; + interrupts = <47>; + periph-id = <9>; // PERIPH_ID_SDMMC2 + status = "disabled"; + }; + + sdhci@78000400 { + compatible = "nvidia,tegra250-sdhci"; + reg = <0x78000400 0x200>; + interrupts = <51>; + periph-id = <69>; // PERIPH_ID_SDMMC3 + status = "disabled"; + }; + + sdhci@78000600 { + compatible = "nvidia,tegra250-sdhci"; + reg = <0x78000600 0x200>; + interrupts = <63>; + periph-id = <15>; // PERIPH_ID_SDMMC4 + status = "disabled"; + }; + i2c@0x7000c000 { compatible = "nvidia,tegra250-i2c"; reg = <0x7000c000 0x006c>; diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index 035a32a663..6c74c546ce 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -56,6 +56,7 @@ #include "pmu.h" #ifdef CONFIG_TEGRA_MMC +#include <asm/arch/pmu.h> #include <mmc.h> #endif #ifdef CONFIG_OF_CONTROL @@ -178,6 +179,7 @@ static void pin_mux_switches(void) */ static void pin_mux_mmc(void) { +#ifdef CONFIG_TEGRA2 /* SDMMC4: config 3, x8 on 2nd set of pins */ pinmux_set_func(PINGRP_ATB, PMUX_FUNC_SDIO4); pinmux_set_func(PINGRP_GMA, PMUX_FUNC_SDIO4); @@ -195,6 +197,7 @@ static void pin_mux_mmc(void) pinmux_tristate_disable(PINGRP_SDC); pinmux_tristate_disable(PINGRP_SDD); pinmux_tristate_disable(PINGRP_SDB); +#endif } #endif @@ -223,6 +226,25 @@ static void gpio_init(const void *blob) } /* + * Do I2C/PMU writes to bring up SD card bus power + * + */ +static void board_sdmmc_voltage_init(void) +{ +#if defined(CONFIG_TEGRA3) && defined(CONFIG_TEGRA_MMC) + /* + * Voltage for SDMMC on Tegra30 Cardhu variants is on + * LDO5 and should be at 3.3. + * + * TODO(dianders): Should be in device tree. + */ + uchar ldo5_to_3_3v = PMU_LDO5_SEL(33) | PMU_LDO5_ON; + + pmu_write(PMU_LDO5_REG, &ldo5_to_3_3v, 1); +#endif +} + +/* * Routine: power_det_init * Description: turn off power detects */ @@ -288,6 +310,8 @@ int board_init(void) warmboot_prepare_code(TEGRA_LP0_ADDR, TEGRA_LP0_SIZE); #endif + board_sdmmc_voltage_init(); + /* boot param addr */ gd->bd->bi_boot_params = (NV_PA_SDRAM_BASE + 0x100); |