From mboxrd@z Thu Jan 1 00:00:00 1970
From: Przemyslaw Marczak
Date: Wed, 18 Feb 2015 11:50:41 +0100
Subject: [U-Boot] [PATCH 3/4] mmc: exynos dwmmc: check boot mode before
init dwmmc
In-Reply-To:
References: <1424178544-28632-1-git-send-email-p.marczak@samsung.com>
<1424178544-28632-4-git-send-email-p.marczak@samsung.com>
Message-ID: <54E46E81.6030303@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
Hello Simon,
On 02/18/2015 06:02 AM, Simon Glass wrote:
> Hi Przemyslaw,
>
> On 17 February 2015 at 06:09, Przemyslaw Marczak wrote:
>> Before this commit, the mmc devices were always registered
>> in the same order. So dwmmc channel 0 was registered as mmc 0,
>> channel 1 as mmc 1, etc.
>> In case of possibility to boot from more then one device,
>> the CONFIG_SYS_MMC_ENV_DEV should always point to right mmc device.
>>
>> This can be achieved by init boot device as first, so it will be
>> always registered as mmc 0. Thanks to this, the 'saveenv' command
>> will work fine for all mmc boot devices.
>>
>> Exynos based boards usually uses mmc host channels configuration:
>> - 0, or 0+1 for 8 bit - as a default boot device (usually eMMC)
>> - 2 for 4bit - as an optional boot device (usually SD card slot)
>>
>> And usually the boot order is defined by OM pin configuration,
>> which can be changed in a few ways, eg.
>> - Odroid U3 - eMMC card insertion -> first boot from eMMC
>> - Odroid X2/XU3 - boot priority jumper
>>
>> By this commit, Exynos dwmmc driver will check the OM pin configuration,
>> and then try to init the boot device and register it as mmc 0.
>
> I think a better way to do this would be to make
> CONFIG_SYS_MMC_ENV_DEV support an option where the device can be
> selected at run-time.
>
> However that would probably be better done when the drive rmodel
> conversion is complete.
>
> So this seems a reasonable patch given where we are.
>
> Reviewed-by: Simon Glass
>
This was just a quick solution to solve the issue on XU3, when the same
binary can boot from sd or eMMC slots.
>>
>> Signed-off-by: Przemyslaw Marczak
>> Cc: Minkyu Kang
>> Cc: Jaehoon Chung
>> Cc: Pantelis Antoniou
>> Cc: Simon Glass
>> Cc: Akshay Saraswat
>> ---
>> drivers/mmc/exynos_dw_mmc.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c
>> index dfa209b..91f0163 100644
>> --- a/drivers/mmc/exynos_dw_mmc.c
>> +++ b/drivers/mmc/exynos_dw_mmc.c
>> @@ -13,6 +13,7 @@
>> #include
>> #include
>> #include
>> +#include
>> #include
>> #include
>>
>> @@ -166,7 +167,6 @@ static int exynos_dwmci_get_config(const void *blob, int node,
>> if (host->dev_index == host->dev_id)
>> host->dev_index = host->dev_id - PERIPH_ID_SDMMC0;
>>
>> -
>> /* Get the bus width from the device node */
>> host->buswidth = fdtdec_get_int(blob, node, "samsung,bus-width", 0);
>> if (host->buswidth <= 0) {
>> @@ -229,12 +229,21 @@ int exynos_dwmmc_init(const void *blob)
>> {
>> int compat_id;
>> int node_list[DWMMC_MAX_CH_NUM];
>> + int boot_dev_node;
>> int err = 0, count;
>>
>> compat_id = COMPAT_SAMSUNG_EXYNOS_DWMMC;
>>
>> count = fdtdec_find_aliases_for_id(blob, "mmc",
>> compat_id, node_list, DWMMC_MAX_CH_NUM);
>> +
>> + /* For DWMMC always set boot device as mmc 0 */
>> + if (count >= 3 && get_boot_mode() == BOOT_MODE_SD) {
>> + boot_dev_node = node_list[2];
>> + node_list[2] = node_list[0];
>> + node_list[0] = boot_dev_node;
>> + }
>> +
>> err = exynos_dwmci_process_node(blob, node_list, count);
>>
>> return err;
>> --
>> 1.9.1
>>
>
> Regards,
> Simon
>
Thank you for the review. I will send the second version soon.
Best regards,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com