From mboxrd@z Thu Jan 1 00:00:00 1970
From: Przemyslaw Marczak
Date: Fri, 27 Jun 2014 13:34:13 +0200
Subject: [U-Boot] [PATCH v3 03/11] board:samsung: check the boot device
and init the right mmc driver.
In-Reply-To: <53AD3C03.3030303@samsung.com>
References: <1402566394-23342-1-git-send-email-p.marczak@samsung.com>
<1403792137-3113-1-git-send-email-p.marczak@samsung.com>
<1403792137-3113-4-git-send-email-p.marczak@samsung.com>
<53AD3C03.3030303@samsung.com>
Message-ID: <53AD56B5.2090301@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
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
>> ---
>> 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.marczak at samsung.com