[U-Boot] [PATCH v4 04/12] board:samsung: check the boot device and init the right mmc driver.

Jaehoon Chung
2014-07-04T11:08:23Z

Hi, Przemyslaw.

On 07/04/2014 05:07 PM, Przemyslaw Marczak wrote:
> Hello Jaehoon,
>
> On 07/04/2014 07:45 AM, Jaehoon Chung wrote:
>> Hi, Przemyslaw.
>>
>> On 07/02/2014 08:50 PM, 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.marczak@samsung.com>
>>> ---
>>> Changes V3:
>>> - separate two changes into two commits
>>>
>>> Changes V4:
>>> - board.c: add functions: init_mmc() and init_dwmmc()
>>> - board_mmc_init(): call get_boot_mode()
>>> ---
>>> board/samsung/common/board.c | 37 +++++++++++++++++++++++++++----------
>>> 1 file changed, 27 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c
>>> index 9dc7c83..4d3f216 100644
>>> --- a/board/samsung/common/board.c
>>> +++ b/board/samsung/common/board.c
>>> @@ -240,22 +240,39 @@ int board_eth_init(bd_t *bis)
>>> }
>>>
>>> #ifdef CONFIG_GENERIC_MMC
>>> -int board_mmc_init(bd_t *bis)
>>> +static int init_mmc(void)
>>> +{
>>> +#ifdef CONFIG_SDHCI
>>> + return exynos_mmc_init(gd->fdt_blob);
>>> +#else
>>> + return 0;
>>> +#endif
>>> +}
>>> +
>>> +static int init_dwmmc(void)
>>> {
>>> - int ret;
>>> #ifdef CONFIG_DWMMC
>>> - /* dwmmc initializattion for available channels */
>>> - ret = exynos_dwmmc_init(gd->fdt_blob);
>>> - if (ret)
>>> - debug("dwmmc init failed\n");
>>> + return exynos_dwmmc_init(gd->fdt_blob);
>>> +#else
>>> + return 0;
>>> #endif
>>> +}
>>> +
>>> +int board_mmc_init(bd_t *bis)
>>> +{
>>> + int ret;
>>> +
>>> + if (get_boot_mode() == BOOT_MODE_MMC) {
>>> + ret = init_mmc();
>>> + ret |= init_dwmmc();
>>> + } else {
>>> + ret = init_dwmmc();
>>> + ret |= init_mmc();
>>> + }
>> Well, i have some confusion for this.
>> Did you consider the case like init_dwmmc() is succeed and init_mmc() is failed?
>> it's hard to control the error for both.
>>
>> Best Regards,
>> Jaehoon Chung
>
> In our vendor init code, the value returned by this function has no significant meaning since there is no implementation of function "cpu_mmc_init()".
Ok..then ret value is used to just "debug display", right?

Best Regards,
Jaehoon Chung

>
> So checking this error is just for a debug purposes:
> # if (ret)
> # debug("mmc init failed\n");
>
> and the returned value:
> mmc | dwmmc -> ret
> 0 | 1 -> 1
> 1 | 0 -> 1
> 1 | 1 -> 1
> 0 | 0 -> 0
>
> So we have an error message on any error.
>
>>>
>>> -#ifdef CONFIG_SDHCI
>>> - /* mmc initializattion for available channels */
>>> - ret = exynos_mmc_init(gd->fdt_blob);
>>> if (ret)
>>> debug("mmc init failed\n");
>>> -#endif
>>> +
>>> return ret;
>>> }
>>> #endif
>>>
>>
>>
>
> Thank you,