diff --git a/arch/arm64/kernel/memory.c b/arch/arm64/kernel/memory.c index 901112a8..d441e924 100644 --- a/arch/arm64/kernel/memory.c +++ b/arch/arm64/kernel/memory.c @@ -3335,14 +3335,14 @@ unsigned long virt_to_phys(void *v) unsigned long va = (unsigned long)v; if (va >= MAP_ST_START) { - return va - MAP_ST_START; + return va - MAP_ST_START + arm64_st_phys_base; } return va - MAP_KERNEL_START + arm64_kernel_phys_base; } void *phys_to_virt(unsigned long p) { - return (void *)(p | MAP_ST_START); + return (void *)((p - arm64_st_phys_base) | MAP_ST_START); } int copy_from_user(void *dst, const void *src, size_t siz) diff --git a/executer/user/arch/arm64/arch-eclair.c b/executer/user/arch/arm64/arch-eclair.c index 038bb475..d8536b4e 100644 --- a/executer/user/arch/arm64/arch-eclair.c +++ b/executer/user/arch/arm64/arch-eclair.c @@ -56,7 +56,7 @@ uintptr_t virt_to_phys(uintptr_t va) extern uintptr_t kernel_base; if (va >= MAP_ST) { - return (va - MAP_ST); + return (va - MAP_ST + PHYS_OFFSET); } if (va >= MAP_KERNEL) { diff --git a/executer/user/arch/arm64/include/arch-eclair.h b/executer/user/arch/arm64/include/arch-eclair.h index 757dc2c5..a6ccb189 100644 --- a/executer/user/arch/arm64/include/arch-eclair.h +++ b/executer/user/arch/arm64/include/arch-eclair.h @@ -2,6 +2,9 @@ #ifndef HEADER_USER_ARM64_ECLAIR_H #define HEADER_USER_ARM64_ECLAIR_H +/* PHYS_OFFSET needs to be changed according to the environment. */ +#define PHYS_OFFSET 0x40000000 + #ifdef CONFIG_ARM64_64K_PAGES # # if (CONFIG_ARM64_VA_BITS == 42)