From f14367e5c33a85a6b6a33f321f57d7c819dda45e Mon Sep 17 00:00:00 2001 From: Ye Li Date: Mon, 19 Jun 2017 03:12:09 -0500 Subject: 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 --- plat/freescale/imx8qm/imx8qm_bl31_setup.c | 23 +++++++++++++++-------- plat/freescale/imx8qm/include/sec_rsrc.h | 16 ---------------- plat/freescale/imx8qxp/imx8qxp_bl31_setup.c | 23 +++++++++++++++-------- plat/freescale/imx8qxp/include/sec_rsrc.h | 14 -------------- 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}, -}; -- cgit v1.2.3