summaryrefslogtreecommitdiff
path: root/plat/freescale/imx8qm/imx8qm_bl31_setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'plat/freescale/imx8qm/imx8qm_bl31_setup.c')
-rw-r--r--plat/freescale/imx8qm/imx8qm_bl31_setup.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/plat/freescale/imx8qm/imx8qm_bl31_setup.c b/plat/freescale/imx8qm/imx8qm_bl31_setup.c
index fd6a403b..257ce7fc 100644
--- a/plat/freescale/imx8qm/imx8qm_bl31_setup.c
+++ b/plat/freescale/imx8qm/imx8qm_bl31_setup.c
@@ -44,6 +44,7 @@
#include <sci/sci.h>
#include <xlat_tables.h>
#include <lpuart.h>
+#include <sec_rsrc.h>
/* linker defined symbols */
extern unsigned long __RO_START__;
@@ -182,6 +183,45 @@ static int lpuart32_serial_init(unsigned int base)
return 0;
}
+void mx8_partition_resources(void)
+{
+ sc_err_t err;
+ sc_rm_pt_t secure_part, os_part;
+ int i;
+
+ 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_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);
+
+ }
+
+ /* move all movable resources and pins to non-secure partition */
+ err = sc_rm_move_all(ipc_handle, secure_part, os_part, true, true);
+
+ /*
+ * sc_rm_set_peripheral_permissions
+ *
+ * sc_rm_set_memreg_permissions
+ *
+ * sc_rm_set_pin_movable
+ *
+ */
+
+ if(err)
+ NOTICE("Partitioning Failed\n");
+ else
+ NOTICE("Non-secure Partitioning Succeeded\n");
+
+}
+
void bl31_early_platform_setup(bl31_params_t *from_bl2,
void *plat_params_from_bl2)
{
@@ -221,6 +261,12 @@ void bl31_early_platform_setup(bl31_params_t *from_bl2,
console_init(IMX_BOOT_UART_BASE, IMX_BOOT_UART_CLK_IN_HZ,
IMX_CONSOLE_BAUDRATE);
#endif
+ /* create new partition for non-secure OS/Hypervisor
+ *
+ * uses global structs defined in sec_rsrc.h */
+
+ mx8_partition_resources();
+
/*
* tell BL3-1 where the non-secure software image is located
* and the entry state information.