summaryrefslogtreecommitdiff
path: root/libcpu
diff options
context:
space:
mode:
authorwangqinglin <[email protected]>2023-06-12 19:49:18 +0800
committerGitHub <[email protected]>2023-06-12 19:49:18 +0800
commit76d8416e72989e4394fd44c0644e50fe9e5f198a (patch)
tree2bb885563b343dba5921905ad04dbb81370d01c4 /libcpu
parentedaa0d9c8a53b1f9b0be71e47074f00044906de5 (diff)
修复aarch64-qemu启动失败问题 (#7661)
Diffstat (limited to 'libcpu')
-rw-r--r--libcpu/aarch64/common/mmu.c10
-rw-r--r--libcpu/aarch64/cortex-a/entry_point.S2
2 files changed, 6 insertions, 6 deletions
diff --git a/libcpu/aarch64/common/mmu.c b/libcpu/aarch64/common/mmu.c
index 19c74390e7..e6a98e4741 100644
--- a/libcpu/aarch64/common/mmu.c
+++ b/libcpu/aarch64/common/mmu.c
@@ -771,19 +771,19 @@ void rt_hw_mem_setup_early(unsigned long *tbl0, unsigned long *tbl1,
unsigned long size, unsigned long pv_off)
{
int ret;
-
- /* setup pv off */
- rt_kmem_pvoff_set(pv_off);
+ unsigned long count = (size + ARCH_SECTION_MASK) >> ARCH_SECTION_SHIFT;
+ unsigned long normal_attr = MMU_MAP_CUSTOM(MMU_AP_KAUN, NORMAL_MEM);
#ifdef RT_USING_SMART
unsigned long va = KERNEL_VADDR_START;
#else
extern unsigned char __start;
unsigned long va = (unsigned long) &__start;
+ va = RT_ALIGN_DOWN(va, 0x200000);
#endif
- unsigned long count = (size + ARCH_SECTION_MASK) >> ARCH_SECTION_SHIFT;
- unsigned long normal_attr = MMU_MAP_CUSTOM(MMU_AP_KAUN, NORMAL_MEM);
+ /* setup pv off */
+ rt_kmem_pvoff_set(pv_off);
/* clean the first two pages */
rt_memset((char *)tbl0, 0, ARCH_PAGE_SIZE);
diff --git a/libcpu/aarch64/cortex-a/entry_point.S b/libcpu/aarch64/cortex-a/entry_point.S
index 611f36da71..9e4adddac7 100644
--- a/libcpu/aarch64/cortex-a/entry_point.S
+++ b/libcpu/aarch64/cortex-a/entry_point.S
@@ -134,7 +134,7 @@ __start:
mov x3,0
#endif
- ldr x2, =0x01000000 /* map 16M memory for kernel space */
+ ldr x2, =0x10000000 /* map 256M memory for kernel space */
bl rt_hw_mem_setup_early
ldr x30, =after_mmu_enable /* set LR to after_mmu_enable function, it's a v_addr */