From mboxrd@z Thu Jan 1 00:00:00 1970 From: Przemyslaw Marczak Date: Tue, 10 Jun 2014 13:32:57 +0200 Subject: [U-Boot] [PATCH 03/10] board:samsung: check the mmc boot device and init the right mmc driver. In-Reply-To: <1402399510-8965-1-git-send-email-p.marczak@samsung.com> References: <1402399510-8965-1-git-send-email-p.marczak@samsung.com> Message-ID: <1402399984-9343-1-git-send-email-p.marczak@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de It is possible to boot from a few media devices, especially using a micro SD or eMMC slots. In this situation, boot device should be registered as block device 0 in the MMC framework, because CONFIG_SYS_MMC_ENV_DEV is usually set to "0" in the most config cases. Signed-off-by: Przemyslaw Marczak Cc: Piotr Wilczek Cc: Minkyu Kang --- board/samsung/common/board.c | 32 ++++++++++++++++++++++++-------- include/samsung/misc.h | 5 +++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c index 9dc7c83..2970340 100644 --- a/board/samsung/common/board.c +++ b/board/samsung/common/board.c @@ -25,6 +25,8 @@ #include #include +static int bootmode; + DECLARE_GLOBAL_DATA_PTR; int __exynos_early_init_f(void) @@ -243,19 +245,33 @@ int board_eth_init(bd_t *bis) int board_mmc_init(bd_t *bis) { int ret; + struct exynos4_power *pwr = (struct exynos4_power *) + samsung_get_base_power(); + + bootmode = BOOT_MODE(readl(&pwr->om_stat)); + if (bootmode == BOOT_SDMMC) { +#ifdef CONFIG_SDHCI + /* mmc initializattion for available channels */ + ret = exynos_mmc_init(gd->fdt_blob); +#endif #ifdef CONFIG_DWMMC - /* dwmmc initializattion for available channels */ - ret = exynos_dwmmc_init(gd->fdt_blob); - if (ret) - debug("dwmmc init failed\n"); + /* dwmmc initializattion for available channels */ + ret = exynos_dwmmc_init(gd->fdt_blob); +#endif + } else { +#ifdef CONFIG_DWMMC + /* dwmmc initializattion for available channels */ + ret = exynos_dwmmc_init(gd->fdt_blob); #endif - #ifdef CONFIG_SDHCI - /* mmc initializattion for available channels */ - ret = exynos_mmc_init(gd->fdt_blob); + /* mmc initializattion for available channels */ + ret = exynos_mmc_init(gd->fdt_blob); +#endif + } + if (ret) debug("mmc init failed\n"); -#endif + return ret; } #endif diff --git a/include/samsung/misc.h b/include/samsung/misc.h index 10653a1..87b53ec 100644 --- a/include/samsung/misc.h +++ b/include/samsung/misc.h @@ -28,4 +28,9 @@ void check_boot_mode(void); void draw_logo(void); #endif +#define BOOT_SDMMC 0x2 +#define BOOT_MODE_MASK (0x1f) +#define BOOT_MODE_SHIFT (0x1) +#define BOOT_MODE(x) ((x >> BOOT_MODE_SHIFT) & BOOT_MODE_MASK) + #endif /* __SAMSUNG_MISC_COMMON_H__ */ -- 1.9.1