@@ -336,12 +336,10 @@ static void _memblock_merge_memory(void)
336
336
void rt_memblock_setup_memory_environment (void )
337
337
{
338
338
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 };
342
339
rt_region_t reg = {0 };
343
340
rt_size_t mem = 0 ;
344
341
struct rt_mmblk_reg * m , * r ;
342
+ void * err ;
345
343
346
344
_memblock_merge_memory ();
347
345
@@ -350,29 +348,8 @@ void rt_memblock_setup_memory_environment(void)
350
348
rt_slist_for_each_entry (iter , & (mmblk_memory .reg_list ), node )
351
349
{
352
350
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
- }
363
351
}
364
352
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
-
376
353
LOG_I ("Reserved memory:" );
377
354
378
355
rt_slist_for_each_entry (iter , & (mmblk_reserved .reg_list ), node )
@@ -389,10 +366,24 @@ void rt_memblock_setup_memory_environment(void)
389
366
/* install usable memory to system page */
390
367
for_each_free_region (m , r , MEMBLOCK_NONE , & reg .start , & reg .end )
391
368
{
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
+
392
375
LOG_I ("physical memory region [%p-%p] installed to system page" , reg .start , reg .end );
393
376
394
377
reg .start -= PV_OFFSET ;
395
378
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 );
396
387
rt_page_install (reg );
397
388
mem += reg .end - reg .start ;
398
389
}
0 commit comments