summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plat/imx/imx8qm/imx8qm_bl31_setup.c29
-rw-r--r--plat/imx/imx8qm/include/platform_def.h3
-rw-r--r--plat/imx/imx8qx/imx8qx_bl31_setup.c29
-rw-r--r--plat/imx/imx8qx/include/platform_def.h3
4 files changed, 58 insertions, 6 deletions
diff --git a/plat/imx/imx8qm/imx8qm_bl31_setup.c b/plat/imx/imx8qm/imx8qm_bl31_setup.c
index b7732fb7..4940f351 100644
--- a/plat/imx/imx8qm/imx8qm_bl31_setup.c
+++ b/plat/imx/imx8qm/imx8qm_bl31_setup.c
@@ -160,8 +160,8 @@ static int lpuart32_serial_init(unsigned int base)
void mx8_partition_resources(void)
{
sc_rm_pt_t secure_part, os_part;
- sc_rm_mr_t mr, mr_record = 64;
- sc_faddr_t start, end;
+ sc_rm_mr_t mr, mr_record = 64, mr_ocram = 64;
+ sc_faddr_t start, end, reg_end;
bool owned, owned2;
sc_err_t err;
int i;
@@ -197,7 +197,11 @@ void mx8_partition_resources(void)
NOTICE("Memreg %u 0x%llx -- 0x%llx\n", mr, start, end);
if (BL31_BASE >= start && (BL31_LIMIT - 1) <= end) {
mr_record = mr; /* Record the mr for ATF running */
- } else {
+ }
+ else if (0 >= start && (OCRAM_BASE + OCRAM_ALIAS_SIZE - 1) <= end) {
+ mr_ocram = mr;
+ }
+ else {
err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
if (err)
ERROR("Memreg assign failed, 0x%llx -- 0x%llx, \
@@ -233,6 +237,25 @@ void mx8_partition_resources(void)
}
}
+ if (mr_ocram != 64) {
+ err = sc_rm_get_memreg_info(ipc_handle, mr_ocram, &start, &end);
+ reg_end = end;
+ if (err) {
+ ERROR("Memreg get info failed, %u\n", mr_ocram);
+ } else {
+ if ((OCRAM_BASE + OCRAM_ALIAS_SIZE - 1) < end) {
+ err = sc_rm_memreg_alloc(ipc_handle, &mr, OCRAM_BASE + OCRAM_ALIAS_SIZE, reg_end);
+ if (err) {
+ ERROR("sc_rm_memreg_alloc failed, 0x%llx -- 0x%llx\n", (sc_faddr_t)OCRAM_BASE + OCRAM_ALIAS_SIZE, reg_end);
+ } else {
+ err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
+ if (err)
+ ERROR("Memreg assign failed, 0x%llx -- 0x%llx\n", (sc_faddr_t)OCRAM_BASE + OCRAM_ALIAS_SIZE, reg_end);
+ }
+ }
+ }
+ }
+
owned = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_0_PID0);
if (owned) {
err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
diff --git a/plat/imx/imx8qm/include/platform_def.h b/plat/imx/imx8qm/include/platform_def.h
index 9da04890..4b02a3f8 100644
--- a/plat/imx/imx8qm/include/platform_def.h
+++ b/plat/imx/imx8qm/include/platform_def.h
@@ -40,6 +40,9 @@
#define BL31_BASE 0x80000000
#define BL31_LIMIT 0x80020000
+#define OCRAM_BASE 0x100000
+#define OCRAM_ALIAS_SIZE 0x18000 /* The lower 96KB is in OCRAM alias from 0x0 */
+
#define PLAT_GICD_BASE 0x51a00000
#define PLAT_GICR_BASE 0x51b00000
#define PLAT_CCI_BASE 0x52090000
diff --git a/plat/imx/imx8qx/imx8qx_bl31_setup.c b/plat/imx/imx8qx/imx8qx_bl31_setup.c
index 73920b75..83d11fc9 100644
--- a/plat/imx/imx8qx/imx8qx_bl31_setup.c
+++ b/plat/imx/imx8qx/imx8qx_bl31_setup.c
@@ -155,8 +155,8 @@ static int lpuart32_serial_init(unsigned int base)
void imx8_partition_resources(void)
{
sc_rm_pt_t secure_part, os_part;
- sc_rm_mr_t mr, mr_record = 64;
- sc_faddr_t start, end;
+ sc_rm_mr_t mr, mr_record = 64, mr_ocram = 64;
+ sc_faddr_t start, end, reg_end;
sc_err_t err;
bool owned;
int i;
@@ -198,7 +198,11 @@ void imx8_partition_resources(void)
NOTICE("Memreg %u 0x%llx -- 0x%llx\n", mr, start, end);
if (BL31_BASE >= start && (BL31_LIMIT - 1) <= end) {
mr_record = mr; /* Record the mr for ATF running */
- } else {
+ }
+ else if (0 >= start && (OCRAM_BASE + OCRAM_ALIAS_SIZE - 1) <= end) {
+ mr_ocram = mr;
+ }
+ else {
err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
if (err)
ERROR("Memreg assign failed, 0x%llx -- 0x%llx, \
@@ -234,6 +238,25 @@ void imx8_partition_resources(void)
}
}
+ if (mr_ocram != 64) {
+ err = sc_rm_get_memreg_info(ipc_handle, mr_ocram, &start, &end);
+ reg_end = end;
+ if (err) {
+ ERROR("Memreg get info failed, %u\n", mr_ocram);
+ } else {
+ if ((OCRAM_BASE + OCRAM_ALIAS_SIZE - 1) < end) {
+ err = sc_rm_memreg_alloc(ipc_handle, &mr, OCRAM_BASE + OCRAM_ALIAS_SIZE, reg_end);
+ if (err) {
+ ERROR("sc_rm_memreg_alloc failed, 0x%llx -- 0x%llx\n", (sc_faddr_t)OCRAM_BASE + OCRAM_ALIAS_SIZE, reg_end);
+ } else {
+ err = sc_rm_assign_memreg(ipc_handle, os_part, mr);
+ if (err)
+ ERROR("Memreg assign failed, 0x%llx -- 0x%llx\n", (sc_faddr_t)OCRAM_BASE + OCRAM_ALIAS_SIZE, reg_end);
+ }
+ }
+ }
+ }
+
owned = sc_rm_is_resource_owned(ipc_handle, SC_R_M4_0_PID0);
if (owned) {
err = sc_rm_set_resource_movable(ipc_handle, SC_R_M4_0_PID0,
diff --git a/plat/imx/imx8qx/include/platform_def.h b/plat/imx/imx8qx/include/platform_def.h
index 40f01464..6e9d13c5 100644
--- a/plat/imx/imx8qx/include/platform_def.h
+++ b/plat/imx/imx8qx/include/platform_def.h
@@ -35,6 +35,9 @@
#define BL31_BASE 0x80000000
#define BL31_LIMIT 0x80020000
+#define OCRAM_BASE 0x100000
+#define OCRAM_ALIAS_SIZE 0x18000 /* The lower 96KB is in OCRAM alias from 0x0 */
+
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ull << 32)
#define PLAT_PHY_ADDR_SPACE_SIZE (1ull << 32)