On 06/27/2014 11:40 AM, Minkyu Kang wrote:
Dear Przemyslaw Marczak,
On 26/06/14 23:15, Przemyslaw Marczak wrote:
It is possible to boot device using a micro SD or eMMC slots.
In this situation, boot device should be registered as a 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 <p.marc...@samsung.com>
---
Changes V3:
- separate two changes into two commits
---
board/samsung/common/board.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c
index ecf3f76..f07a900 100644
--- a/board/samsung/common/board.c
+++ b/board/samsung/common/board.c
@@ -251,18 +251,28 @@ int board_mmc_init(bd_t *bis)
{
int ret;
+ if (boot_device() == BOOT_DEVICE_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
+ }
+
It looks little confused.
Could you please re-arrange this code like this?
#ifdef CONFIG_SDHCI
if (boot....) {
} else {
}
#endif
#ifdef CONFIG_DWMMC
if (boot....) {
} else {
}
#endif
Thanks,
Minkyu Kang.
There are few schemes:
- defined SDHCI and DWMMC or
- defined SDHCI only or
- defined DWMMC only or
So I need #ifdefs to take into account those all schemes.
To clean some mess I can do something like this:
static int init_sdhci(void) {
#ifdef CONFIG_SDHCI
/* mmc initializattion for available channels */
return exynos_mmc_init(gd->fdt_blob);
#else
return 0;
#endif
}
static int init_dwmmc(void) {
#ifdef CONFIG_DWMMC
/* dwmmc initializattion for available channels */
return exynos_dwmmc_init(gd->fdt_blob);
#else
return 0;
#endif
}
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
int ret;
if (boot_device() == BOOT_DEVICE_SDMMC) {
ret = init_sdhci();
ret |= init_dwmmc();
} else {
ret = init_dwmmc();
ret |= init_sdhci();
}
if (ret)
debug("mmc init failed\n");
return ret;
}
#endif
or with the ternary operator:
int board_mmc_init(bd_t *bis)
{
int ret;
int sd_boot = (boot_device() == BOOT_DEVICE_SDMMC);
sd_boot ? ((ret = init_sdhci()) & (ret |= init_dwmmc()))
: ((ret = init_dwmmc()) & (ret |= init_sdhci()));
if (ret)
debug("mmc init failed\n");
return ret;
}
Thank you,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marc...@samsung.com
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot