MLK-15323-1 imx8m: get boot device from rom sw info
authorPeng Fan <peng.fan@nxp.com>
Mon, 3 Jul 2017 05:59:48 +0000 (13:59 +0800)
committerJason Liu <jason.hui.liu@nxp.com>
Thu, 2 Nov 2017 18:36:59 +0000 (02:36 +0800)
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>
arch/arm/cpu/armv8/imx8m/soc.c
arch/arm/include/asm/arch-imx8m/imx-regs.h

index cad596f..d692d3f 100644 (file)
@@ -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;
-}
index fe87a22..94cb87a 100644 (file)
@@ -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__ */