summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2017-05-19 12:15:29 -0700
committerStefan Agner <stefan.agner@toradex.com>2017-05-22 17:09:55 -0700
commita03211ad94d1972fa255c5892665e14ca623d218 (patch)
treecf2c8b9bd216b5e4fe90d6b6b16e768d77ab9131
parent216ea24dc0bdd1d9555cddc57e19d5f8efa23beb (diff)
hello_world_ddr: add RDC memory mapping
Configure RDC memory mapping when running firmware from DDR. Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
-rw-r--r--examples/imx7_colibri_m4/demo_apps/hello_world_ddr/hardware_init.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/imx7_colibri_m4/demo_apps/hello_world_ddr/hardware_init.c b/examples/imx7_colibri_m4/demo_apps/hello_world_ddr/hardware_init.c
index 147f3f3..fc7f1ac 100644
--- a/examples/imx7_colibri_m4/demo_apps/hello_world_ddr/hardware_init.c
+++ b/examples/imx7_colibri_m4/demo_apps/hello_world_ddr/hardware_init.c
@@ -31,11 +31,44 @@
#include "board.h"
#include "pin_mux.h"
+void RDC_memory_init(void)
+{
+ uint32_t start, end;
+#if defined(__CC_ARM)
+ extern uint32_t Image$$VECTOR_ROM$$Base[];
+ extern uint32_t Image$$ER_m_text$$Limit[];
+ extern uint32_t Image$$RW_m_data$$Base[];
+ extern uint32_t Image$$RW_m_data$$Limit[];
+
+ start = (uint32_t)Image$$VECTOR_ROM$$Base & 0xFFFFF000;
+ end = (uint32_t)(Image$$ER_m_text$$Limit + (Image$$RW_m_data$$Limit - Image$$RW_m_data$$Base));
+ end = (end + 0xFFF) & 0xFFFFF000;
+ RDC_SetMrAccess(RDC, rdcMrMmdc, start, end, (3 << (BOARD_DOMAIN_ID * 2)), true, false);
+#else
+ extern uint32_t __MMDC_CODE_START;
+ extern uint32_t __MMDC_CODE_END;
+ extern uint32_t __MMDC_DATA_START;
+ extern uint32_t __MMDC_DATA_END;
+
+ start = round_down(__MMDC_CODE_START, RDC_REGION_RES_MMDC);
+ end = round_up(__MMDC_CODE_END, RDC_REGION_RES_MMDC);
+ RDC_SetMrAccess(RDC, rdcMrMmdc, start, end, (3 << (BOARD_DOMAIN_ID * 2)), true, false);
+
+ start = round_down(__MMDC_DATA_START, RDC_REGION_RES_MMDC);
+ end = round_up(__MMDC_DATA_END, RDC_REGION_RES_MMDC);
+ RDC_SetMrAccess(RDC, rdcMrMmdc + 1, start, end, (3 << (BOARD_DOMAIN_ID * 2)), true, false);
+#endif
+
+}
+
void hardware_init(void)
{
/* Board specific RDC settings */
BOARD_RdcInit();
+ /* Bound part of the DDR Memory to M4 Core */
+ RDC_memory_init();
+
/* Board specific clock settings */
BOARD_ClockInit();