From 01595a4f321ad890270a3bc3e21c98ba51163562 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 24 Oct 2018 10:17:58 +0200 Subject: bsp/imx: Adjust workspace according to device tree --- bsps/arm/imx/start/bspstarthooks.c | 53 +++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) (limited to 'bsps/arm/imx') diff --git a/bsps/arm/imx/start/bspstarthooks.c b/bsps/arm/imx/start/bspstarthooks.c index c75b03415b..6a6b343af7 100644 --- a/bsps/arm/imx/start/bspstarthooks.c +++ b/bsps/arm/imx/start/bspstarthooks.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -15,11 +15,18 @@ #define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION #include +#include +#include +#include #include #include #include -BSP_START_DATA_SECTION static const arm_cp15_start_section_config +#include + +#define WORKSPACE_ENTRY_INDEX 8 + +BSP_START_DATA_SECTION static arm_cp15_start_section_config imx_mmu_config_table[] = { ARMV7_CP15_START_DEFAULT_SECTIONS, { @@ -29,9 +36,38 @@ imx_mmu_config_table[] = { } }; +BSP_START_DATA_SECTION static char memory_path[] = "/memory"; + BSP_START_TEXT_SECTION static void setup_mmu_and_cache(void) { - uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache( + const void *fdt; + int node; + uint32_t ctrl; + + fdt = bsp_fdt_get(); + node = fdt_path_offset_namelen( + fdt, + memory_path, + (int) sizeof(memory_path) - 1 + ); + + if (node >= 0) { + int len; + const void *val; + + val = fdt_getprop(fdt, node, "reg", &len); + if (len == 8) { + uint32_t begin; + uint32_t size; + + begin = fdt32_to_cpu(((fdt32_t *) val)[0]); + size = fdt32_to_cpu(((fdt32_t *) val)[1]); + + imx_mmu_config_table[WORKSPACE_ENTRY_INDEX].end = begin + size; + } + } + + ctrl = arm_cp15_start_setup_mmu_and_cache( ARM_CP15_CTRL_A, ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z ); @@ -65,3 +101,14 @@ BSP_START_TEXT_SECTION void bsp_start_hook_1(void) setup_mmu_and_cache(); bsp_start_clear_bss(); } + +void bsp_work_area_initialize(void) +{ + uintptr_t begin; + uintptr_t end; + + begin = imx_mmu_config_table[WORKSPACE_ENTRY_INDEX].begin; + end = imx_mmu_config_table[WORKSPACE_ENTRY_INDEX].end; + + bsp_work_area_initialize_default((void *) begin, end - begin); +} -- cgit v1.2.3