aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2018-06-26 20:33:01 +0800
committerPeng Fan <peng.fan@nxp.com>2018-06-27 09:55:13 +0800
commit00b653ec4b51a211ae735ffe0d3c9de7a8979947 (patch)
tree4bbc23bf084e45ce3a6546c4f438eac9c059db9f
parent6e0bb7c7cfaac12f34faf2d78700426ddbe599d6 (diff)
imx8: postpone moving resources to non-secure partitionrel_imx_4.9.88_2.2.0_8qxp_beta2
With flash_uboot_cm4ddr in imx-mkimage, the m4 code will access ddr. However after m4 core moved to non-secure partition, the ddr memory is still in secure partition. Then m4 core will fault. So postpone moving resources including m4 core, until other resources, such as memory/pin moved to non-secure partition. Signed-off-by: Peng Fan <peng.fan@nxp.com> (cherry picked from commit 1c8ce0ad5f583ec41026d4ab5bef622f1b45aecd)
-rw-r--r--plat/freescale/imx8qm/imx8qm_bl31_setup.c58
-rw-r--r--plat/freescale/imx8qxp/imx8qxp_bl31_setup.c36
2 files changed, 47 insertions, 47 deletions
diff --git a/plat/freescale/imx8qm/imx8qm_bl31_setup.c b/plat/freescale/imx8qm/imx8qm_bl31_setup.c
index 6b58e9e7..3b380871 100644
--- a/plat/freescale/imx8qm/imx8qm_bl31_setup.c
+++ b/plat/freescale/imx8qm/imx8qm_bl31_setup.c
@@ -185,35 +185,6 @@ void mx8_partition_resources(void)
secure_rsrcs[i], false);
}
- owned = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_0_PID0);
- if (owned)
- err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
- SC_R_M4_0_PID0, false);
-
- owned2 = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_1_PID0);
- if (owned2)
- err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_1_PID0,
- SC_R_M4_1_PID0, false);
- /* move all movable resources and pins to non-secure partition */
- err = sc_rm_move_all(ipc_handle, secure_part, os_part, true, true);
-
- /* iterate through peripherals to give NS OS part access */
- for (i = 0; i < (sizeof(ns_access_allowed) / sizeof(sc_rsrc_t)); i++) {
- err = sc_rm_set_peripheral_permissions(ipc_handle, ns_access_allowed[i],
- os_part, SC_RM_PERM_FULL);
- }
-
- if (owned) {
- err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
- SC_R_M4_0_PID0, true);
- err = sc_rm_assign_resource(ipc_handle, os_part, SC_R_M4_0_PID0);
- }
- if (owned2) {
- err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_1_PID0,
- SC_R_M4_1_PID0, true);
- err = sc_rm_assign_resource(ipc_handle, os_part, SC_R_M4_1_PID0);
- }
-
/*
* sc_rm_set_peripheral_permissions
*
@@ -272,6 +243,35 @@ void mx8_partition_resources(void)
}
}
+ owned = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_0_PID0);
+ if (owned)
+ err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
+ SC_R_M4_0_PID0, false);
+
+ owned2 = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_1_PID0);
+ if (owned2)
+ err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_1_PID0,
+ SC_R_M4_1_PID0, false);
+ /* move all movable resources and pins to non-secure partition */
+ err = sc_rm_move_all(ipc_handle, secure_part, os_part, true, true);
+
+ /* iterate through peripherals to give NS OS part access */
+ for (i = 0; i < (sizeof(ns_access_allowed) / sizeof(sc_rsrc_t)); i++) {
+ err = sc_rm_set_peripheral_permissions(ipc_handle, ns_access_allowed[i],
+ os_part, SC_RM_PERM_FULL);
+ }
+
+ if (owned) {
+ err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
+ SC_R_M4_0_PID0, true);
+ err = sc_rm_assign_resource(ipc_handle, os_part, SC_R_M4_0_PID0);
+ }
+ if (owned2) {
+ err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_1_PID0,
+ SC_R_M4_1_PID0, true);
+ err = sc_rm_assign_resource(ipc_handle, os_part, SC_R_M4_1_PID0);
+ }
+
if (err)
NOTICE("Partitioning Failed\n");
else
diff --git a/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c b/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c
index eaeda345..d9820241 100644
--- a/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c
+++ b/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c
@@ -183,24 +183,6 @@ void imx8_partition_resources(void)
secure_rsrcs[i], secure_rsrcs[i], false);
}
- owned = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_0_PID0);
- if (owned)
- err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
- SC_R_M4_0_PID0, false);
- /* move all movable resources and pins to non-secure partition */
- err = sc_rm_move_all(ipc_handle, secure_part, os_part, true, true);
- if (owned) {
- err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
- SC_R_M4_0_PID0, true);
- err = sc_rm_assign_resource(ipc_handle, os_part, SC_R_M4_0_PID0);
- }
-
- /* iterate through peripherals to give NS OS part access */
- for (i = 0; i< (sizeof(ns_access_allowed) / sizeof(sc_rsrc_t)); i++) {
- err = sc_rm_set_peripheral_permissions(ipc_handle,
- ns_access_allowed[i], os_part, SC_RM_PERM_FULL);
- }
-
/*
* sc_rm_set_peripheral_permissions
*
@@ -259,6 +241,24 @@ void imx8_partition_resources(void)
}
}
+ owned = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_0_PID0);
+ if (owned)
+ err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
+ SC_R_M4_0_PID0, false);
+ /* move all movable resources and pins to non-secure partition */
+ err = sc_rm_move_all(ipc_handle, secure_part, os_part, true, true);
+ if (owned) {
+ err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
+ SC_R_M4_0_PID0, true);
+ err = sc_rm_assign_resource(ipc_handle, os_part, SC_R_M4_0_PID0);
+ }
+
+ /* iterate through peripherals to give NS OS part access */
+ for (i = 0; i< (sizeof(ns_access_allowed) / sizeof(sc_rsrc_t)); i++) {
+ err = sc_rm_set_peripheral_permissions(ipc_handle,
+ ns_access_allowed[i], os_part, SC_RM_PERM_FULL);
+ }
+
if (err)
NOTICE("Partitioning Failed\n");
else