diff options
author | Peng Fan <peng.fan@nxp.com> | 2018-06-26 20:33:01 +0800 |
---|---|---|
committer | Peng Fan <peng.fan@nxp.com> | 2018-06-27 09:55:13 +0800 |
commit | 00b653ec4b51a211ae735ffe0d3c9de7a8979947 (patch) | |
tree | 4bbc23bf084e45ce3a6546c4f438eac9c059db9f | |
parent | 6e0bb7c7cfaac12f34faf2d78700426ddbe599d6 (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.c | 58 | ||||
-rw-r--r-- | plat/freescale/imx8qxp/imx8qxp_bl31_setup.c | 36 |
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 |