summaryrefslogtreecommitdiff
path: root/plat/imx/imx8qxp
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
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')
-rw-r--r--plat/imx/imx8qxp/imx8qxp_bl31_setup.c18
-rw-r--r--plat/imx/imx8qxp/include/sec_rsrc.h14
2 files changed, 29 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
*/
diff --git a/plat/imx/imx8qxp/include/sec_rsrc.h b/plat/imx/imx8qxp/include/sec_rsrc.h
index 46585881..34d234dc 100644
--- a/plat/imx/imx8qxp/include/sec_rsrc.h
+++ b/plat/imx/imx8qxp/include/sec_rsrc.h
@@ -16,3 +16,17 @@ sc_rsrc_t secure_rsrcs[] = {
sc_rsrc_t ns_access_allowed[] = {
SC_R_GIC,
};
+
+struct mem_region {
+ unsigned long start;
+ unsigned long end;
+};
+
+struct mem_region ns_mem_region[] = {
+ {0x000000000, 0x01BFFFFFF},
+ {0x034000000, 0x037FFFFFF},
+ {0x070000000, 0x07FFFFFFF},
+ {0x080000000, 0x0FFFFFFFF},
+ {0x400000000, 0x43FFFFFFF},
+ {0x880000000, 0xFFFFFFFFF},
+};