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