From ac18a24a27067ce3deb7bab4bfedd283ef2d8524 Mon Sep 17 00:00:00 2001 From: "Shiratori, Takehiro" Date: Thu, 7 Mar 2019 16:51:18 +0900 Subject: [PATCH] arm64: fix phys_to_virt() calculation to be the same as Linux. Change-Id: Ibbe17d33fd80eacff990b053fa17d8d320c227f1 --- arch/arm64/kernel/memory.c | 4 ++-- executer/user/arch/arm64/arch-eclair.c | 2 +- executer/user/arch/arm64/include/arch-eclair.h | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) 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)