Skip to content
Snippets Groups Projects
Commit 576434b2 authored by Adam Ford's avatar Adam Ford Committed by Stefano Babic
Browse files

ARM: imx6q_logic: Cleanup boot sequence check


The board_boot_order() function currenly assumes that the boot source
is MMC/eMMC, but this isn't true for the NAND devices.

This patch cleans up board_boot_order() to check for NAND, SD, ESD,
MMC or EMMC.  Anything beyond these are not supported, so it will
default back to the serial downloader if any of those devices are not
available.

Fixes: 9fb50c68 ("ARM: imx6q_logic: Fix MMC2 booting")

Signed-off-by: default avatarAdam Ford <aford173@gmail.com>
parent 61d7e2bc
No related branches found
No related tags found
No related merge requests found
...@@ -156,29 +156,49 @@ void board_boot_order(u32 *spl_boot_list) ...@@ -156,29 +156,49 @@ void board_boot_order(u32 *spl_boot_list)
{ {
struct src *psrc = (struct src *)SRC_BASE_ADDR; struct src *psrc = (struct src *)SRC_BASE_ADDR;
unsigned int reg = readl(&psrc->sbmr1) >> 11; unsigned int reg = readl(&psrc->sbmr1) >> 11;
/* u32 boot_mode = imx6_src_get_boot_mode() & IMX6_BMODE_MASK;
* Upon reading BOOT_CFG register the following map is done: unsigned int bmode = readl(&src_base->sbmr2);
* Bit 11 and 12 of BOOT_CFG register can determine the current
* mmc port /* If bmode is serial or USB phy is active, return serial */
* 0x1 SD1-SOM if (((bmode >> 24) & 0x03) == 0x01 || is_usbotg_phy_active()) {
* 0x2 SD2-Baseboard spl_boot_list[0] = BOOT_DEVICE_BOARD;
*/ return;
}
reg &= 0x3; /* Only care about bottom 2 bits */
switch (reg) { switch (boot_mode >> IMX6_BMODE_SHIFT) {
case 0: case IMX6_BMODE_NAND_MIN ... IMX6_BMODE_NAND_MAX:
spl_boot_list[0] = BOOT_DEVICE_MMC1; spl_boot_list[0] = BOOT_DEVICE_NAND;
break; break;
case 1: case IMX6_BMODE_SD:
spl_boot_list[0] = BOOT_DEVICE_MMC2; case IMX6_BMODE_ESD:
case IMX6_BMODE_MMC:
case IMX6_BMODE_EMMC:
/*
* 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;
}
break;
default:
/* By default use USB downloader */
spl_boot_list[0] = BOOT_DEVICE_BOARD;
break; 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 */ /* As a last resort, use serial downloader */
spl_boot_list[2] = BOOT_DEVICE_BOARD; spl_boot_list[1] = BOOT_DEVICE_BOARD;
} }
static void ccgr_init(void) static void ccgr_init(void)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment