summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYe Li <ye.li@nxp.com>2017-06-19 03:12:09 -0500
committerYe Li <ye.li@nxp.com>2017-07-19 03:39:57 -0500
commitf14367e5c33a85a6b6a33f321f57d7c819dda45e (patch)
treee35ae0c255edc99979e365cb0ca972fc997d25b7
parentbda85378508fd73ff6e9aa709de8c9ab1bad0dd0 (diff)
imx8qm/qxp: Modify the memory regions allocation to NS partition
Change to search the ATF owned memory regions and assign them to non-secure OS partition. Not allocate new memory region for each one. Signed-off-by: Ye Li <ye.li@nxp.com>
-rw-r--r--plat/freescale/imx8qm/imx8qm_bl31_setup.c23
-rw-r--r--plat/freescale/imx8qm/include/sec_rsrc.h16
-rw-r--r--plat/freescale/imx8qxp/imx8qxp_bl31_setup.c23
-rw-r--r--plat/freescale/imx8qxp/include/sec_rsrc.h14
4 files changed, 30 insertions, 46 deletions
diff --git a/plat/freescale/imx8qm/imx8qm_bl31_setup.c b/plat/freescale/imx8qm/imx8qm_bl31_setup.c
index 9c942b1f..2035a98e 100644
--- a/plat/freescale/imx8qm/imx8qm_bl31_setup.c
+++ b/plat/freescale/imx8qm/imx8qm_bl31_setup.c
@@ -192,6 +192,8 @@ void mx8_partition_resources(void)
sc_err_t err;
sc_rm_pt_t secure_part, os_part;
sc_rm_mr_t mr;
+ bool owned;
+ sc_faddr_t start, end;
int i;
err = sc_rm_get_partition(ipc_handle, &secure_part);
@@ -225,14 +227,19 @@ void mx8_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);
+ for (mr = 0; mr < 64; mr++) {
+ owned = sc_rm_is_memreg_owned(ipc_handle, mr);
+ if (owned) {
+ err = sc_rm_get_memreg_info(ipc_handle, mr, &start, &end);
+ if (err) {
+ ERROR("Memreg get info failed, %u\n", mr);
+ } else {
+ NOTICE("Memreg %u 0x%lx -- 0x%lx\n", mr, start, end);
+
+ err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
+ if (err)
+ ERROR("Memreg assign failed, 0x%lx -- 0x%lx\n", start, end);
+ }
}
}
diff --git a/plat/freescale/imx8qm/include/sec_rsrc.h b/plat/freescale/imx8qm/include/sec_rsrc.h
index fa72c4cf..b05f0aa0 100644
--- a/plat/freescale/imx8qm/include/sec_rsrc.h
+++ b/plat/freescale/imx8qm/include/sec_rsrc.h
@@ -23,19 +23,3 @@ sc_rsrc_t ns_access_allowed[] = {
SC_R_GIC_SMMU,
SC_R_CCI
};
-
-struct mem_region {
- unsigned long start;
- unsigned long end;
-};
-
-struct mem_region ns_mem_region[] = {
- {0x000000000, 0x01BFFFFFF},
- {0x034000000, 0x037FFFFFF},
- {0x038000000, 0x03BFFFFFF},
- {0x060000000, 0x06FFFFFFF},
- {0x070000000, 0x07FFFFFFF},
- {0x080000000, 0x0FFFFFFFF},
- {0x400000000, 0x43FFFFFFF},
- {0x880000000, 0xFFFFFFFFF},
-};
diff --git a/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c b/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c
index 838cd669..90447b4d 100644
--- a/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c
+++ b/plat/freescale/imx8qxp/imx8qxp_bl31_setup.c
@@ -190,6 +190,8 @@ void imx8_partition_resources(void)
sc_err_t err;
sc_rm_pt_t secure_part, os_part;
sc_rm_mr_t mr;
+ bool owned;
+ sc_faddr_t start, end;
int i;
err = sc_rm_get_partition(ipc_handle, &secure_part);
@@ -223,14 +225,19 @@ 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);
+ for (mr = 0; mr < 64; mr++) {
+ owned = sc_rm_is_memreg_owned(ipc_handle, mr);
+ if (owned) {
+ err = sc_rm_get_memreg_info(ipc_handle, mr, &start, &end);
+ if (err) {
+ ERROR("Memreg get info failed, %u\n", mr);
+ } else {
+ NOTICE("Memreg %u 0x%lx -- 0x%lx\n", mr, start, end);
+
+ err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
+ if (err)
+ ERROR("Memreg assign failed, 0x%lx -- 0x%lx\n", start, end);
+ }
}
}
diff --git a/plat/freescale/imx8qxp/include/sec_rsrc.h b/plat/freescale/imx8qxp/include/sec_rsrc.h
index 34d234dc..46585881 100644
--- a/plat/freescale/imx8qxp/include/sec_rsrc.h
+++ b/plat/freescale/imx8qxp/include/sec_rsrc.h
@@ -16,17 +16,3 @@ 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},
-};