summaryrefslogtreecommitdiff
path: root/plat/imx/imx8qm/imx8qm_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/imx8qm/imx8qm_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/imx8qm/imx8qm_bl31_setup.c')
-rw-r--r--plat/imx/imx8qm/imx8qm_bl31_setup.c73
1 files changed, 42 insertions, 31 deletions
diff --git a/plat/imx/imx8qm/imx8qm_bl31_setup.c b/plat/imx/imx8qm/imx8qm_bl31_setup.c
index ddb3ab19..668a71b8 100644
--- a/plat/imx/imx8qm/imx8qm_bl31_setup.c
+++ b/plat/imx/imx8qm/imx8qm_bl31_setup.c
@@ -189,46 +189,57 @@ static int lpuart32_serial_init(unsigned int base)
void mx8_partition_resources(void)
{
- sc_err_t err;
- sc_rm_pt_t secure_part, os_part;
- int i;
+ 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);
+ err = sc_rm_get_partition(ipc_handle, &secure_part);
- err = sc_rm_partition_alloc(ipc_handle, &os_part, false, false,
- false, false, false);
+ err = sc_rm_partition_alloc(ipc_handle, &os_part, false, false,
+ false, false, false);
- err = sc_rm_set_parent(ipc_handle, os_part, secure_part);
+ 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++){
- err = sc_rm_set_resource_movable(ipc_handle, secure_rsrcs[i],
- secure_rsrcs[i], false);
+ /* set secure resources to NOT-movable */
+ 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);
+ }
- }
+ /* move all movable resources and pins to non-secure partition */
+ err = sc_rm_move_all(ipc_handle, secure_part, os_part, true, true);
- /* 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);
+ }
- /* 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
+ *
+ * sc_rm_set_memreg_permissions
+ *
+ * sc_rm_set_pin_movable
+ *
+ */
- /*
- * sc_rm_set_peripheral_permissions
- *
- * sc_rm_set_memreg_permissions
- *
- * sc_rm_set_pin_movable
- *
- */
+ 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
- NOTICE("Non-secure Partitioning Succeeded\n");
+ if (err)
+ NOTICE("Partitioning Failed\n");
+ else
+ NOTICE("Non-secure Partitioning Succeeded\n");
}