
On Wed, Aug 23, 2017 at 7:41 PM, Maxime Ripard maxime.ripard@free-electrons.com wrote:
The current code, if there's both an eMMC and an MMC slot available on the board, will swap the MMC indices based on whether we booted from the eMMC or the MMC. This way, the MMC we're supposed to boot on will always have the index 0.
However, this causes various issues, for example when using other components that base their behaviour on the MMC index, such as fastboot.
Let's remove that hack, and take the opposite approach. The MMC will always have the same index, but the bootcmd will pick the same device than the one we booted from. This is done through the introduction of the mmc_bootdev environment variable that will be filled by the board code based on the boot device informations we can get from the SoC.
In order to not introduce regressions, we also need to adjust the fastboot MMC device and the environment device in order to set it to the eMMC, over the MMC, like it used to be the case.
Signed-off-by: Maxime Ripard maxime.ripard@free-electrons.com
board/sunxi/board.c | 20 ++++++-------------- include/configs/sunxi-common.h | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 20 deletions(-)
diff --git a/board/sunxi/board.c b/board/sunxi/board.c index e1d48140878f..664c7d2d8126 100644 --- a/board/sunxi/board.c +++ b/board/sunxi/board.c @@ -492,20 +492,6 @@ int board_mmc_init(bd_t *bis) return -1; #endif
-#if !defined(CONFIG_SPL_BUILD) && CONFIG_MMC_SUNXI_SLOT_EXTRA == 2
/*
* On systems with an emmc (mmc2), figure out if we are booting from
* the emmc and if we are make it "mmc dev 0" so that boot.scr, etc.
* are searched there first. Note we only do this for u-boot proper,
* not for the SPL, see spl_boot_device().
*/
if (readb(SPL_ADDR + 0x28) == SUNXI_BOOTED_FROM_MMC2) {
/* Booting from emmc / mmc2, swap */
mmc0->block_dev.devnum = 1;
mmc1->block_dev.devnum = 0;
}
-#endif
return 0;
} #endif @@ -725,12 +711,18 @@ int misc_init_r(void)
setenv("fel_booted", NULL); setenv("fel_scriptaddr", NULL);
setenv("mmc_bootdev", NULL);
This doesn't apply on master due to commit 382bee57f19b ("env: Rename setenv() to env_set()").
Works as advertised once fixed and applied.
Tested-by: Chen-Yu Tsai wens@csie.org