Changeset d3f60af in rtems
- Timestamp:
- 03/02/17 14:25:34 (7 years ago)
- Branches:
- 5, master
- Children:
- c0dafd7b
- Parents:
- 35136d3
- Location:
- c/src/lib/libbsp/powerpc/qoriq
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/powerpc/qoriq/Makefile.am
r35136d3 rd3f60af 58 58 ../../shared/gnatinstallhandler.c \ 59 59 ../../shared/bspclean.c \ 60 ../../shared/bspgetworkarea.c \61 60 ../../shared/src/bsp-fdt.c \ 62 61 ../shared/src/ppc-exc-handler-table.c \ -
c/src/lib/libbsp/powerpc/qoriq/startup/mmu-config.c
r35136d3 rd3f60af 8 8 9 9 /* 10 * Copyright (c) 2011 -2015embedded brains GmbH. All rights reserved.10 * Copyright (c) 2011, 2017 embedded brains GmbH. All rights reserved. 11 11 * 12 12 * embedded brains GmbH … … 22 22 23 23 #include <bsp.h> 24 #include <bsp/bootcard.h> 25 #include <bsp/fdt.h> 26 #include <bsp/linker-symbols.h> 24 27 #include <bsp/mmu.h> 25 #include <bsp/linker-symbols.h>26 28 #include <bsp/qoriq.h> 29 30 #include <sys/param.h> 31 32 #include <libfdt.h> 33 34 #include <rtems/config.h> 27 35 28 36 #define TEXT __attribute__((section(".bsp_start_text"))) … … 96 104 } 97 105 98 static const entry DATA config [] = { 106 #define WORKSPACE_ENTRY_INDEX 0 107 108 static entry DATA config[] = { 109 /* Must be first entry, see WORKSPACE_ENTRY_INDEX */ 110 ENTRY_RW(bsp_section_work_begin, bsp_section_work_size), 111 99 112 #if defined(RTEMS_MULTIPROCESSING) && \ 100 113 defined(QORIQ_INTERCOM_AREA_BEGIN) && \ … … 120 133 ENTRY_RW(bsp_section_bss_begin, bsp_section_bss_size), 121 134 ENTRY_RW(bsp_section_rwextra_begin, bsp_section_rwextra_size), 122 ENTRY_RW(bsp_section_work_begin, bsp_section_work_size),123 135 ENTRY_RW(bsp_section_stack_begin, bsp_section_stack_size), 124 136 ENTRY_IO(bsp_section_nocache_begin, bsp_section_nocache_size), … … 135 147 }; 136 148 149 static DATA char memory_path[] = "/memory"; 150 151 static void TEXT config_fdt_adjust(void) 152 { 153 const void *fdt = bsp_fdt_get(); 154 int node; 155 156 node = fdt_path_offset_namelen( 157 fdt, 158 memory_path, 159 (int) sizeof(memory_path) - 1 160 ); 161 162 if (node >= 0) { 163 int len; 164 const void *val; 165 uint64_t begin; 166 uint64_t size; 167 168 val = fdt_getprop(fdt, node, "reg", &len); 169 if (len == 8) { 170 begin = fdt32_to_cpu(((fdt32_t *) val)[0]); 171 size = fdt32_to_cpu(((fdt32_t *) val)[1]); 172 } else if (len == 16) { 173 begin = fdt64_to_cpu(((fdt64_t *) val)[0]); 174 size = fdt64_to_cpu(((fdt64_t *) val)[1]); 175 } else { 176 begin = 0; 177 size = 0; 178 } 179 180 size = MAX(size, 0x80000000U); 181 182 if (begin == 0 && size > (uintptr_t) bsp_section_work_end) { 183 config[WORKSPACE_ENTRY_INDEX].size += (uintptr_t) size 184 - (uintptr_t) bsp_section_work_end; 185 } 186 } 187 } 188 137 189 void TEXT qoriq_mmu_config(int first_tlb, int scratch_tlb) 138 190 { … … 140 192 int i = 0; 141 193 194 config_fdt_adjust(); 142 195 qoriq_mmu_context_init(&context); 143 196 … … 166 219 qoriq_mmu_write_to_tlb1(&context, first_tlb); 167 220 } 221 222 void TEXT bsp_work_area_initialize(void) 223 { 224 const entry *we = &config[WORKSPACE_ENTRY_INDEX]; 225 uintptr_t begin = we->begin; 226 uintptr_t end = begin + we->size; 227 228 #ifdef BSP_INTERRUPT_STACK_AT_WORK_AREA_BEGIN 229 begin += rtems_configuration_get_interrupt_stack_size(); 230 #endif 231 232 bsp_work_area_initialize_default((void *) begin, end - begin); 233 }
Note: See TracChangeset
for help on using the changeset viewer.