imx: Introduce CONFIG_SPL_FORCE_MMC_BOOT to force MMC boot on falcon mode

This change tries to fix the following problem:

- The board boots (to be more precise - ROM loads SPL) from a slow SPI-NOR
  memory.
  As a result the spl_boot_device() will return SPI-NOR as a boot device
  (which is correct).

- The problem is that in 'falcon boot' the eMMC is used as a boot medium to
  load kernel from its partition.
  Calling spl_boot_device() will break things as it returns SPI-NOR device.

To fix this issue the new CONFIG_SPL_FORCE_MMC_BOOT Kconfig flag is
introduced to handle this special use case. By default it is not defined,
so there is no change in the legacy code flow.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
Lukasz Majewski 2019-09-09 15:32:13 +02:00 committed by Stefano Babic
parent 45aac6dd7a
commit 772b55723b
2 changed files with 20 additions and 0 deletions

View File

@ -178,7 +178,18 @@ int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
/* called from spl_mmc to see type of boot mode for storage (RAW or FAT) */
u32 spl_boot_mode(const u32 boot_device)
{
/*
* When CONFIG_SPL_FORCE_MMC_BOOT is defined the 'boot_device' is used
* unconditionally to decide about device to use for booting.
* This is crucial for falcon boot mode, when board boots up (i.e. ROM
* loads SPL) from slow SPI-NOR memory and afterwards the SPL's 'falcon' boot
* mode is used to load Linux OS from eMMC partition.
*/
#ifdef CONFIG_SPL_FORCE_MMC_BOOT
switch (boot_device) {
#else
switch (spl_boot_device()) {
#endif
/* for MMC return either RAW or FAT mode */
case BOOT_DEVICE_MMC1:
case BOOT_DEVICE_MMC2:

View File

@ -608,6 +608,15 @@ config SPL_MMC_SUPPORT
this option to build the drivers in drivers/mmc as part of an SPL
build.
config SPL_FORCE_MMC_BOOT
bool "Force SPL booting from MMC"
depends on SPL_MMC_SUPPORT
default n
help
Force SPL to use MMC device for Linux kernel booting even when the
SoC ROM recognized boot medium is not eMMC/SD. This is crucial for
factory or 'falcon mode' booting.
config SPL_MMC_TINY
bool "Tiny MMC framework in SPL"
depends on SPL_MMC_SUPPORT