@@ -336,12 +336,10 @@ static void _memblock_merge_memory(void)
336336void 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 }
0 commit comments