imx: tpc70: Add board_boot_order() to distinguish between eMMC and SD boot
authorLukasz Majewski <lukma@denx.de>
Thu, 10 Oct 2019 14:11:24 +0000 (16:11 +0200)
committerStefano Babic <sbabic@denx.de>
Sun, 13 Oct 2019 20:49:11 +0000 (22:49 +0200)
The TPC70 can boot from SD card (debug/development) and eMMC (production).
The board_boot_order() function provides a run time check for the device
from which one wants to boot (it is selected by GPIO pins setup).

Moreover, a fallback to SD card is provided if the detection is not
possible or working properly.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c

index e284d5ec572d73eed97f744bf635f3ea79036f5b..e48a577f792c478ff1040a968811b5ff86439599 100644 (file)
@@ -308,6 +308,26 @@ int board_mmc_init(bd_t *bd)
        return fsl_esdhc_initialize(bd, &usdhc_cfg[0]);
 }
 
+void board_boot_order(u32 *spl_boot_list)
+{
+       u32 boot_device = spl_boot_device();
+       u32 reg = imx6_src_get_boot_mode();
+
+       reg = (reg & IMX6_BMODE_MASK) >> IMX6_BMODE_SHIFT;
+
+       debug("%s: boot device: 0x%x (0x4 SD, 0x6 eMMC)\n", __func__, reg);
+       if (boot_device == BOOT_DEVICE_MMC1)
+               if (reg == IMX6_BMODE_MMC || reg == IMX6_BMODE_EMMC)
+                       boot_device = BOOT_DEVICE_MMC2;
+
+       spl_boot_list[0] = boot_device;
+       /*
+        * Below boot device is a 'fallback' - it shall always be possible to
+        * boot from SD card
+        */
+       spl_boot_list[1] = BOOT_DEVICE_MMC1;
+}
+
 void board_init_f(ulong dummy)
 {
        /* setup AIPS and disable watchdog */