Skip to content

Commit 67979fe

Browse files
committed
map pages later
1 parent 7e319bf commit 67979fe

File tree

4 files changed

+32
-29
lines changed

4 files changed

+32
-29
lines changed

components/drivers/core/mnt.c

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ static int rootfs_mnt_init(void)
4545
rt_size_t mem_region_nr;
4646
rt_region_t *mem_region;
4747
rt_uint64_t initrd_start = 0, initrd_end = 0;
48+
struct rt_mmblk_reg *iter = RT_NULL;
4849

4950
rt_slist_for_each_entry(iter, &(rt_memblock_get_reserved()->reg_list), node)
5051
{

components/mm/mm_memblock.c

+15-24
Original file line numberDiff line numberDiff line change
@@ -336,12 +336,10 @@ static void _memblock_merge_memory(void)
336336
void rt_memblock_setup_memory_environment(void)
337337
{
338338
struct rt_mmblk_reg *iter = RT_NULL, *start_reg = RT_NULL, *end_reg = RT_NULL;
339-
static struct mem_desc platform_mem_desc = {0};
340-
rt_region_t platform_mem_region = {.start = ~0UL,
341-
.end = 0};
342339
rt_region_t reg = {0};
343340
rt_size_t mem = 0;
344341
struct rt_mmblk_reg *m, *r;
342+
void *err;
345343

346344
_memblock_merge_memory();
347345

@@ -350,29 +348,8 @@ void rt_memblock_setup_memory_environment(void)
350348
rt_slist_for_each_entry(iter, &(mmblk_memory.reg_list), node)
351349
{
352350
LOG_I(" %-*.s [%p, %p]", RT_NAME_MAX, iter->memreg.name, iter->memreg.start, iter->memreg.end);
353-
354-
if (platform_mem_region.start > iter->memreg.start)
355-
{
356-
platform_mem_region.start = iter->memreg.start;
357-
}
358-
359-
if (platform_mem_region.end < iter->memreg.end)
360-
{
361-
platform_mem_region.end = iter->memreg.end;
362-
}
363351
}
364352

365-
/* create MMU mapping of system memory */
366-
platform_mem_region.start = RT_ALIGN_DOWN(platform_mem_region.start, ARCH_PAGE_SIZE);
367-
platform_mem_region.end = RT_ALIGN(platform_mem_region.end, ARCH_PAGE_SIZE);
368-
369-
platform_mem_desc.paddr_start = platform_mem_region.start;
370-
platform_mem_desc.vaddr_start = platform_mem_region.start - PV_OFFSET;
371-
platform_mem_desc.vaddr_end = platform_mem_region.end - PV_OFFSET - 1;
372-
platform_mem_desc.attr = NORMAL_MEM;
373-
374-
rt_hw_mmu_setup(&rt_kernel_space, &platform_mem_desc, 1);
375-
376353
LOG_I("Reserved memory:");
377354

378355
rt_slist_for_each_entry(iter, &(mmblk_reserved.reg_list), node)
@@ -389,10 +366,24 @@ void rt_memblock_setup_memory_environment(void)
389366
/* install usable memory to system page */
390367
for_each_free_region(m, r, MEMBLOCK_NONE, &reg.start, &reg.end)
391368
{
369+
reg.start = RT_ALIGN(reg.start, ARCH_PAGE_SIZE);
370+
reg.end = RT_ALIGN_DOWN(reg.end, ARCH_PAGE_SIZE);
371+
372+
if (reg.start >= reg.end)
373+
continue;
374+
392375
LOG_I("physical memory region [%p-%p] installed to system page", reg.start, reg.end);
393376

394377
reg.start -= PV_OFFSET;
395378
reg.end -= PV_OFFSET;
379+
380+
struct rt_mm_va_hint hint = {.flags = MMF_MAP_FIXED,
381+
.limit_start = rt_kernel_space.start,
382+
.limit_range_size = rt_kernel_space.size,
383+
.map_size = reg.end - reg.start,
384+
.prefer = (void *)reg.start};
385+
386+
rt_aspace_map_phy(&rt_kernel_space, &hint, MMU_MAP_K_RWCB, (reg.start + PV_OFFSET) >> MM_PAGE_SHIFT, &err);
396387
rt_page_install(reg);
397388
mem += reg.end - reg.start;
398389
}

libcpu/aarch64/common/mmu.c

-5
Original file line numberDiff line numberDiff line change
@@ -828,14 +828,9 @@ void rt_hw_mem_setup_early(unsigned long *tbl0, unsigned long *tbl1,
828828
int ret;
829829
unsigned long count = (size + ARCH_SECTION_MASK) >> ARCH_SECTION_SHIFT;
830830
unsigned long normal_attr = MMU_MAP_CUSTOM(MMU_AP_KAUN, NORMAL_MEM);
831-
832-
#ifdef RT_USING_SMART
833-
unsigned long va = KERNEL_VADDR_START;
834-
#else
835831
extern unsigned char _start;
836832
unsigned long va = (unsigned long) &_start;
837833
va = RT_ALIGN_DOWN(va, 0x200000);
838-
#endif
839834

840835
/* setup pv off */
841836
rt_kmem_pvoff_set(pv_off);

libcpu/aarch64/common/setup.c

+16
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ void rt_hw_common_setup(void)
206206
rt_size_t init_page_start, init_page_end;
207207
rt_size_t fdt_start, fdt_end;
208208
rt_region_t init_page_region = { 0 };
209+
rt_region_t platform_mem_region = { 0 };
210+
static struct mem_desc platform_mem_desc;
209211

210212
system_vectors_init();
211213

@@ -224,6 +226,9 @@ void rt_hw_common_setup(void)
224226
fdt_start = init_page_end;
225227
fdt_end = RT_ALIGN(fdt_start + fdt_size, ARCH_PAGE_SIZE);
226228

229+
platform_mem_region.start = kernel_start;
230+
platform_mem_region.end = fdt_end;
231+
227232
rt_memblock_reserve_memory("kernel", kernel_start, kernel_end, MEMBLOCK_NONE);
228233
rt_memblock_reserve_memory("memheap", heap_start, heap_end, MEMBLOCK_NONE);
229234
rt_memblock_reserve_memory("init-page", init_page_start, init_page_end, MEMBLOCK_NONE);
@@ -238,6 +243,17 @@ void rt_hw_common_setup(void)
238243
init_page_region.end = init_page_end - PV_OFFSET;
239244
rt_page_init(init_page_region);
240245

246+
/* create MMU mapping of kernel memory */
247+
platform_mem_region.start = RT_ALIGN_DOWN(platform_mem_region.start, ARCH_PAGE_SIZE);
248+
platform_mem_region.end = RT_ALIGN(platform_mem_region.end, ARCH_PAGE_SIZE);
249+
250+
platform_mem_desc.paddr_start = platform_mem_region.start;
251+
platform_mem_desc.vaddr_start = platform_mem_region.start - PV_OFFSET;
252+
platform_mem_desc.vaddr_end = platform_mem_region.end - PV_OFFSET - 1;
253+
platform_mem_desc.attr = NORMAL_MEM;
254+
255+
rt_hw_mmu_setup(&rt_kernel_space, &platform_mem_desc, 1);
256+
241257
if (rt_fdt_prefetch(fdt_ptr))
242258
{
243259
/* Platform cannot be initialized */

0 commit comments

Comments
 (0)