bsp/imx: Adjust workspace according to device tree

This commit is contained in:
Sebastian Huber
2018-10-24 10:17:58 +02:00
parent 8ba76b9e28
commit 01595a4f32
2 changed files with 50 additions and 4 deletions

View File

@@ -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 * embedded brains GmbH
* Dornierstr. 4 * Dornierstr. 4
@@ -15,11 +15,18 @@
#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION #define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION
#include <bsp.h> #include <bsp.h>
#include <bsp/bootcard.h>
#include <bsp/fdt.h>
#include <bsp/linker-symbols.h>
#include <bsp/start.h> #include <bsp/start.h>
#include <bsp/arm-cp15-start.h> #include <bsp/arm-cp15-start.h>
#include <bsp/arm-a9mpcore-start.h> #include <bsp/arm-a9mpcore-start.h>
BSP_START_DATA_SECTION static const arm_cp15_start_section_config #include <libfdt.h>
#define WORKSPACE_ENTRY_INDEX 8
BSP_START_DATA_SECTION static arm_cp15_start_section_config
imx_mmu_config_table[] = { imx_mmu_config_table[] = {
ARMV7_CP15_START_DEFAULT_SECTIONS, 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) 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_A,
ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z 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(); setup_mmu_and_cache();
bsp_start_clear_bss(); 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);
}

View File

@@ -30,7 +30,6 @@ librtemsbsp_a_SOURCES =
# Shared # Shared
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c