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