summaryrefslogtreecommitdiff
path: root/plat/imx/imx8qxp/imx8qxp_bl31_setup.c
diff options
context:
space:
mode:
authorYe Li <ye.li@nxp.com>2017-06-07 03:41:22 -0500
committerAbel Vesa <abel.vesa@nxp.com>2018-06-08 17:34:09 +0300
commit6e04f50929ed302cda2a38910268a310d26e992b (patch)
tree8a0b07f70b75fc8852bff5376e8f773832c68120 /plat/imx/imx8qxp/imx8qxp_bl31_setup.c
parent58a3f2e6155f5372dcc8b17e72e34779b460d548 (diff)
iMX8QM/QXP: Allocate memory regions to NS partition
Not only the resources, but also the memory regions need to assign to non-secure partition. Otherwise, when the boot partition is secured, the OS non-secure partition can't access any memory. This patch currently assign all memory to NS partition, since it is not isolated, the current secure partition also can access them. In future, may need to change the regions for reserving some memory in secure partition for ATF and BL32. Signed-off-by: Ye Li <ye.li@nxp.com>
Diffstat (limited to 'plat/imx/imx8qxp/imx8qxp_bl31_setup.c')
-rw-r--r--plat/imx/imx8qxp/imx8qxp_bl31_setup.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/plat/imx/imx8qxp/imx8qxp_bl31_setup.c b/plat/imx/imx8qxp/imx8qxp_bl31_setup.c
index f655a8ce..2811caaa 100644
--- a/plat/imx/imx8qxp/imx8qxp_bl31_setup.c
+++ b/plat/imx/imx8qxp/imx8qxp_bl31_setup.c
@@ -182,6 +182,7 @@ void imx8_partition_resources(void)
{
sc_err_t err;
sc_rm_pt_t secure_part, os_part;
+ sc_rm_mr_t mr;
int i;
err = sc_rm_get_partition(ipc_handle, &secure_part);
@@ -192,7 +193,7 @@ void imx8_partition_resources(void)
err = sc_rm_set_parent(ipc_handle, os_part, secure_part);
/* set secure resources to NOT-movable */
- for(i = 0; i<(sizeof(secure_rsrcs)/sizeof(sc_rsrc_t)); i++){
+ for (i = 0; i < (sizeof(secure_rsrcs) / sizeof(sc_rsrc_t)); i++) {
err = sc_rm_set_resource_movable(ipc_handle,
secure_rsrcs[i], secure_rsrcs[i], false);
}
@@ -201,7 +202,7 @@ void imx8_partition_resources(void)
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++){
+ 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);
}
@@ -215,6 +216,17 @@ void imx8_partition_resources(void)
*
*/
+ for (i = 0; i < (sizeof(ns_mem_region) / sizeof(struct mem_region)); i++) {
+ err = sc_rm_memreg_alloc(ipc_handle, &mr, ns_mem_region[i].start, ns_mem_region[i].end);
+ if (err) {
+ ERROR("Memreg alloc failed, 0x%lx -- 0x%lx\n", ns_mem_region[i].start, ns_mem_region[i].end);
+ } else {
+ err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
+ if (err)
+ ERROR("Memreg assign failed, 0x%lx -- 0x%lx\n", ns_mem_region[i].start, ns_mem_region[i].end);
+ }
+ }
+
if (err)
NOTICE("Partitioning Failed\n");
else
@@ -276,7 +288,7 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
void bl31_plat_arch_setup(void)
{
/*
- * add the mmap
+ * add the mmap
* Change to 128KB?
* Fix Me
*/