From a89479656631ce52f5c4755814a87222ad47d040 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Mon, 30 Jun 2025 12:48:48 +0800 Subject: [PATCH] [CPU/AARCH64] Fixup MMU 1. Configure the kernel default vaddr by RAM and TEXT offset. 2. Check the p_addr 2M align when set the stride in `rt_hw_mmu_map`. Signed-off-by: GuEe-GUI <2991707448@qq.com> --- libcpu/aarch64/common/mmu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libcpu/aarch64/common/mmu.c b/libcpu/aarch64/common/mmu.c index eea3e66cb1..afa70cb90d 100644 --- a/libcpu/aarch64/common/mmu.c +++ b/libcpu/aarch64/common/mmu.c @@ -54,7 +54,7 @@ /* restrict virtual address on usage of RT_NULL */ #ifndef KERNEL_VADDR_START -#define KERNEL_VADDR_START 0x1000 +#define KERNEL_VADDR_START (ARCH_RAM_OFFSET + ARCH_TEXT_OFFSET) #endif volatile unsigned long MMUTable[512] __attribute__((aligned(4 * 1024))); @@ -283,7 +283,9 @@ void *rt_hw_mmu_map(rt_aspace_t aspace, void *v_addr, void *p_addr, size_t size, while (remaining_sz) { - if (((rt_ubase_t)v_addr & ARCH_SECTION_MASK) || (remaining_sz < ARCH_SECTION_SIZE)) + if (((rt_ubase_t)v_addr & ARCH_SECTION_MASK) || + ((rt_ubase_t)p_addr & ARCH_SECTION_MASK) || + (remaining_sz < ARCH_SECTION_SIZE)) { /* legacy 4k mapping */ stride = ARCH_PAGE_SIZE;