diff options
author | Peng Fan <peng.fan@nxp.com> | 2017-07-03 13:59:48 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2017-11-03 02:36:59 +0800 |
commit | 0b37e92adfd6b63e5344bca57a80a3b7f3b0aee7 (patch) | |
tree | 68e9efaa90ee536706398eb8dd94da67aa2f9123 | |
parent | b934ca4fc452791c459c52d0d57226f370062565 (diff) |
MLK-15323-1 imx8m: get boot device from rom sw info
ROM will update ROM_SW_INFO according to boot media, so U-Boot could
reuse that info.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
-rw-r--r-- | arch/arm/cpu/armv8/imx8m/soc.c | 41 | ||||
-rw-r--r-- | arch/arm/include/asm/arch-imx8m/imx-regs.h | 22 |
2 files changed, 57 insertions, 6 deletions
diff --git a/arch/arm/cpu/armv8/imx8m/soc.c b/arch/arm/cpu/armv8/imx8m/soc.c index cad596fd5bb..d692d3f0f31 100644 --- a/arch/arm/cpu/armv8/imx8m/soc.c +++ b/arch/arm/cpu/armv8/imx8m/soc.c @@ -190,6 +190,41 @@ int arch_auxiliary_core_check_up(u32 core_id) } #endif +enum boot_device get_boot_device(void) +{ + struct bootrom_sw_info **p = + (struct bootrom_sw_info **)ROM_SW_INFO_ADDR; + + enum boot_device boot_dev = SD1_BOOT; + u8 boot_type = (*p)->boot_dev_type; + u8 boot_instance = (*p)->boot_dev_instance; + + switch (boot_type) { + case BOOT_TYPE_SD: + boot_dev = boot_instance + SD1_BOOT; + break; + case BOOT_TYPE_MMC: + boot_dev = boot_instance + MMC1_BOOT; + break; + case BOOT_TYPE_NAND: + boot_dev = NAND_BOOT; + break; + case BOOT_TYPE_QSPI: + boot_dev = QSPI_BOOT; + break; + case BOOT_TYPE_WEIM: + boot_dev = WEIM_NOR_BOOT; + break; + case BOOT_TYPE_SPINOR: + boot_dev = SPI_NOR_BOOT; + break; + default: + break; + } + + return boot_dev; +} + #ifdef CONFIG_SERIAL_TAG void get_board_serial(struct tag_serialnr *serialnr) { @@ -198,9 +233,3 @@ void get_board_serial(struct tag_serialnr *serialnr) serialnr->high = 0; } #endif - -enum boot_device get_boot_device(void) -{ - /* TODO: */ - return SD2_BOOT; -} diff --git a/arch/arm/include/asm/arch-imx8m/imx-regs.h b/arch/arm/include/asm/arch-imx8m/imx-regs.h index fe87a222509..94cb87a3282 100644 --- a/arch/arm/include/asm/arch-imx8m/imx-regs.h +++ b/arch/arm/include/asm/arch-imx8m/imx-regs.h @@ -241,6 +241,28 @@ struct wdog_regs { u16 wmcr; /* Miscellaneous Control */ }; +/* Boot device type */ +#define BOOT_TYPE_SD 0x1 +#define BOOT_TYPE_MMC 0x2 +#define BOOT_TYPE_NAND 0x3 +#define BOOT_TYPE_QSPI 0x4 +#define BOOT_TYPE_WEIM 0x5 +#define BOOT_TYPE_SPINOR 0x6 +#define BOOT_TYPE_USB 0xF + +#define ROM_SW_INFO_ADDR 0x000009e8 + +struct bootrom_sw_info { + u8 reserved_1; + u8 boot_dev_instance; + u8 boot_dev_type; + u8 reserved_2; + u32 core_freq; + u32 axi_freq; + u32 ddr_freq; + u32 tick_freq; + u32 reserved_3[3]; +}; #endif #endif /* __ASM_ARCH_MSCALE_REGS_H__ */ |