summaryrefslogtreecommitdiff
path: root/board/nvidia
diff options
context:
space:
mode:
authorDoug Anderson <dianders@chromium.org>2011-10-17 17:56:54 -0700
committerGerrit <chrome-bot@google.com>2011-10-28 11:08:57 -0700
commit59700e830d14730f4df65feb83c0fe0a5e3e33b9 (patch)
tree2ac65ca0dc9e1bde8d48f1f7dc2a464aa52f3bdd /board/nvidia
parent186e1be5e2555ff51d496ad7a179b5988ae6be9a (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.dts23
-rw-r--r--board/nvidia/cardhu/tegra30.dtsi32
-rw-r--r--board/nvidia/common/board.c24
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);