summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2017-07-03 13:59:48 +0800
committerJason Liu <jason.hui.liu@nxp.com>2017-11-03 02:36:59 +0800
commit0b37e92adfd6b63e5344bca57a80a3b7f3b0aee7 (patch)
tree68e9efaa90ee536706398eb8dd94da67aa2f9123 /arch
parentb934ca4fc452791c459c52d0d57226f370062565 (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>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/cpu/armv8/imx8m/soc.c41
-rw-r--r--arch/arm/include/asm/arch-imx8m/imx-regs.h22
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__ */