From 9fb50c68daa696056c7842989e5f7fae1d326b34 Mon Sep 17 00:00:00 2001 From: Adam Ford Date: Tue, 8 Oct 2019 08:01:12 -0500 Subject: [PATCH] ARM: imx6q_logic: Fix MMC2 booting With the reverting of a previous change to spl_boot_device, this board needs a new solution to determining if we're booting from MMC1 or MMC2. This patch creates board_boot_order function which overrides the standard, and returns not only MMC1, or MMC2, but also can fall back to NAND or the serial downloader should other boot options fail. Signed-off-by: Adam Ford --- board/logicpd/imx6/imx6logic.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/board/logicpd/imx6/imx6logic.c b/board/logicpd/imx6/imx6logic.c index 7fb6dc4..4bacd86 100644 --- a/board/logicpd/imx6/imx6logic.c +++ b/board/logicpd/imx6/imx6logic.c @@ -207,6 +207,35 @@ struct fsl_esdhc_cfg usdhc_cfg[] = { {USDHC2_BASE_ADDR} /* Baseboard */ }; +void board_boot_order(u32 *spl_boot_list) +{ + struct src *psrc = (struct src *)SRC_BASE_ADDR; + unsigned int reg = readl(&psrc->sbmr1) >> 11; + /* + * Upon reading BOOT_CFG register the following map is done: + * Bit 11 and 12 of BOOT_CFG register can determine the current + * mmc port + * 0x1 SD1-SOM + * 0x2 SD2-Baseboard + */ + + reg &= 0x3; /* Only care about bottom 2 bits */ + switch (reg) { + case 0: + spl_boot_list[0] = BOOT_DEVICE_MMC1; + break; + case 1: + spl_boot_list[0] = BOOT_DEVICE_MMC2; + break; + } + + /* If we cannot find a valid MMC/SD card, try NAND */ + spl_boot_list[1] = BOOT_DEVICE_NAND; + + /* As a last resort, use serial downloader */ + spl_boot_list[2] = BOOT_DEVICE_BOARD; +} + int board_mmc_init(bd_t *bis) { struct src *psrc = (struct src *)SRC_BASE_ADDR; -- 2.7.4