From mboxrd@z Thu Jan 1 00:00:00 1970 From: Minkyu Kang Date: Wed, 18 Jun 2014 15:30:26 +0900 Subject: [U-Boot] [PATCH v2 03/11] board:samsung: check the mmc boot device and init the right mmc driver. In-Reply-To: <1402566394-23342-3-git-send-email-p.marczak@samsung.com> References: <1402399510-8965-1-git-send-email-p.marczak@samsung.com> <1402566394-23342-1-git-send-email-p.marczak@samsung.com> <1402566394-23342-3-git-send-email-p.marczak@samsung.com> Message-ID: <53A13202.5040405@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 Dear Przemyslaw Marczak, On 12/06/14 18:46, Przemyslaw Marczak wrote: > 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(); Hm, no. This file is samsung common not only for exynos4. Although this code will not be made any problems for other SoCs (because om_stat is always first item of power), it looks weird. I think you can make new function for getting boot mode. > + > + 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) ((x) >> BOOT_MODE_SHIFT) > + > #endif /* __SAMSUNG_MISC_COMMON_H__ */ > Thanks, Minkyu Kang.