Skip to content
Snippets Groups Projects
Commit ccf7988b authored by Tom Warren's avatar Tom Warren Committed by Albert ARIBAUD
Browse files

tegra2: Enable MMC for Seaboard


This adds the required GPIO and pinmux configuration to make eMMC / SD work
on Seaboard.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Tested-by: default avatarTom Warren <twarren@nvidia.com>
parent 20e18e05
No related branches found
No related tags found
No related merge requests found
......@@ -160,6 +160,7 @@ int board_mmc_init(bd_t *bd)
/* Enable clocks, muxes, etc. for SDMMC controllers */
clock_init_mmc();
pin_mux_mmc();
gpio_config_mmc();
debug("board_mmc_init: init eMMC\n");
/* init dev 0, eMMC chip, with 4-bit bus */
......@@ -171,18 +172,6 @@ int board_mmc_init(bd_t *bd)
return 0;
}
/* this is a weak define that we are overriding */
int board_mmc_getcd(u8 *cd, struct mmc *mmc)
{
debug("board_mmc_getcd called\n");
/*
* Hard-code CD presence for now. Need to add GPIO inputs
* for Seaboard & Harmony (& Kaen/Aebl/Wario?)
*/
*cd = 1;
return 0;
}
#endif
#ifdef CONFIG_BOARD_EARLY_INIT_F
......
......@@ -26,6 +26,7 @@
void tegra2_start(void);
void gpio_config_uart(void);
void gpio_config_mmc(void);
int tegra2_mmc_init(int dev_index, int bus_width);
#endif /* BOARD_H */
......@@ -24,6 +24,9 @@
#include <common.h>
#include <asm/io.h>
#include <asm/arch/tegra2.h>
#ifdef CONFIG_TEGRA2_MMC
#include <mmc.h>
#endif
/*
* Routine: gpio_config_uart
......@@ -32,3 +35,26 @@
void gpio_config_uart(void)
{
}
#ifdef CONFIG_TEGRA2_MMC
/*
* Routine: gpio_config_mmc
* Description: Set GPIOs for SD card
*/
void gpio_config_mmc(void)
{
/* Not implemented for now */
}
/* this is a weak define that we are overriding */
int board_mmc_getcd(u8 *cd, struct mmc *mmc)
{
debug("board_mmc_getcd called\n");
/*
* Hard-code CD presence for now. Need to add GPIO inputs
* for Harmony
*/
*cd = 1;
return 0;
}
#endif
......@@ -24,7 +24,10 @@
#include <common.h>
#include <asm/io.h>
#include <asm/arch/tegra2.h>
#include <asm/arch/gpio.h>
#include <asm/gpio.h>
#ifdef CONFIG_TEGRA2_MMC
#include <mmc.h>
#endif
/*
* Routine: gpio_config_uart
......@@ -50,3 +53,33 @@ void gpio_config_uart(void)
val |= 1 << GPIO_BIT(gp);
writel(val, &bank->gpio_dir_out[GPIO_PORT(gp)]);
}
#ifdef CONFIG_TEGRA2_MMC
/*
* Routine: gpio_config_mmc
* Description: Set GPIOs for SDMMC3 SDIO slot.
*/
void gpio_config_mmc(void)
{
/* Set EN_VDDIO_SD (GPIO I6) */
gpio_direction_output(GPIO_PI6, 1);
/* Config pin as GPI for Card Detect (GPIO I5) */
gpio_direction_input(GPIO_PI5);
}
/* this is a weak define that we are overriding */
int board_mmc_getcd(u8 *cd, struct mmc *mmc)
{
debug("board_mmc_getcd called\n");
*cd = 1; /* Assume card is inserted, or eMMC */
if (IS_SD(mmc)) {
/* Seaboard SDMMC3 = SDIO3_CD = GPIO_PI5 */
if (gpio_get_value(GPIO_PI5))
*cd = 0;
}
return 0;
}
#endif
......@@ -452,7 +452,7 @@ static int tegra2_mmc_initialize(int dev_index, int bus_width)
mmc->host_caps = MMC_MODE_8BIT;
else
mmc->host_caps = MMC_MODE_4BIT;
mmc->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
mmc->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS | MMC_MODE_HC;
/*
* min freq is for card identification, and is the highest
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment