MLK-20980 imx8qm/qxp_mek: Set kernel fdt according to M4 boot
authorYe Li <ye.li@nxp.com>
Mon, 25 Feb 2019 09:18:56 +0000 (01:18 -0800)
committerYe Li <ye.li@nxp.com>
Fri, 24 May 2019 11:28:19 +0000 (04:28 -0700)
When M4 is booted by ROM, we have to enable RPMSG in kernel, so need
to select the -rpmsg.dtb. If M4 is not enabled, use default kernel dtb.

Signed-off-by: Ye Li <ye.li@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
(cherry picked from commit 8a57be45e18295ce1b19799723775cf5b205281d)

arch/arm/include/asm/arch-imx8/sys_proto.h
arch/arm/mach-imx/imx8/cpu.c
board/freescale/imx8qm_mek/imx8qm_mek.c
board/freescale/imx8qxp_mek/imx8qxp_mek.c
include/configs/imx8qm_mek.h
include/configs/imx8qxp_mek.h

index bddd477..b432d4b 100644 (file)
@@ -19,3 +19,4 @@ enum boot_device get_boot_device(void);
 int print_bootinfo(void);
 void power_off_pd_devices(const char* permanent_on_devices[], int size);
 extern unsigned long rom_pointer[];
+bool check_m4_parts_boot(void);
index b0260c5..cbf3e78 100644 (file)
@@ -1753,6 +1753,34 @@ bool check_owned_udevice(struct udevice *dev)
        return check_owned_resource(resource_id);
 }
 
+bool check_m4_parts_boot(void)
+{
+       sc_rm_pt_t m4_parts[2];
+       int err;
+
+       err = sc_rm_get_resource_owner(-1, SC_R_M4_0_PID0, &m4_parts[0]);
+       if (err != SC_ERR_NONE) {
+               printf("%s get resource [%d] owner error: %d\n", __func__, SC_R_M4_0_PID0, err);
+               return false;
+       }
+
+       if (sc_pm_is_partition_started(-1, m4_parts[0]))
+               return true;
+
+       if (is_imx8qm()) {
+               err = sc_rm_get_resource_owner(-1, SC_R_M4_1_PID0, &m4_parts[1]);
+               if (err != SC_ERR_NONE) {
+                       printf("%s get resource [%d] owner error: %d\n", __func__, SC_R_M4_1_PID0, err);
+                       return false;
+               }
+
+               if (sc_pm_is_partition_started(-1, m4_parts[1]))
+                       return true;
+       }
+
+       return false;
+}
+
 #ifdef CONFIG_IMX_VSERVICE
 struct udevice * board_imx_vservice_find_mu(struct udevice *dev)
 {
index fbf1402..4846510 100644 (file)
@@ -481,6 +481,9 @@ int board_mmc_get_env_dev(int devno)
 
 int board_late_init(void)
 {
+       char *fdt_file;
+       bool m4_boot;
+
 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
        env_set("board_name", "MEK");
        env_set("board_rev", "iMX8QM");
@@ -491,6 +494,16 @@ int board_late_init(void)
        env_set("sec_boot", "yes");
 #endif
 
+       fdt_file = env_get("fdt_file");
+       m4_boot = check_m4_parts_boot();
+
+       if (fdt_file && !strcmp(fdt_file, "undefined")) {
+               if (m4_boot)
+                       env_set("fdt_file", "fsl-imx8qm-mek-rpmsg.dtb");
+               else
+                       env_set("fdt_file", "fsl-imx8qm-mek.dtb");
+       }
+
        return 0;
 }
 
index a4b7da7..2678278 100644 (file)
@@ -496,6 +496,9 @@ int board_mmc_get_env_dev(int devno)
 
 int board_late_init(void)
 {
+       char *fdt_file;
+       bool m4_boot;
+
 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
        env_set("board_name", "MEK");
        env_set("board_rev", "iMX8QXP");
@@ -506,6 +509,16 @@ int board_late_init(void)
        env_set("sec_boot", "yes");
 #endif
 
+       fdt_file = env_get("fdt_file");
+       m4_boot = check_m4_parts_boot();
+
+       if (fdt_file && !strcmp(fdt_file, "undefined")) {
+               if (m4_boot)
+                       env_set("fdt_file", "fsl-imx8qxp-mek-rpmsg.dtb");
+               else
+                       env_set("fdt_file", "fsl-imx8qxp-mek.dtb");
+       }
+
        return 0;
 }
 
index 254ca16..bfa1e02 100644 (file)
        "cntr_addr=0x98000000\0"                        \
        "cntr_file=os_cntr_signed.bin\0" \
        "boot_fdt=try\0" \
-       "fdt_file=fsl-imx8qm-mek.dtb\0" \
+       "fdt_file=undefined\0" \
        "initrd_addr=0x83100000\0" \
        "initrd_high=0xffffffffffffffff\0" \
        "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
index 3ab24d0..2520c4a 100644 (file)
        "cntr_addr=0x98000000\0"                        \
        "cntr_file=os_cntr_signed.bin\0" \
        "boot_fdt=try\0" \
-       "fdt_file=fsl-imx8qxp-mek.dtb\0" \
+       "fdt_file=undefined\0" \
        "initrd_addr=0x83100000\0" \
        "initrd_high=0xffffffffffffffff\0" \
        "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \