We have functions to access the zero page and to make it faulting again. Implement them for AArch32. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- arch/arm/cpu/Kconfig | 3 ++- arch/arm/cpu/mmu-common.c | 11 +++++++++++ arch/arm/cpu/mmu_32.c | 5 ++--- arch/arm/cpu/mmu_64.c | 10 ---------- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/arch/arm/cpu/Kconfig b/arch/arm/cpu/Kconfig index 26f07043fe..40dd35833a 100644 --- a/arch/arm/cpu/Kconfig +++ b/arch/arm/cpu/Kconfig @@ -11,6 +11,7 @@ config CPU_32 select HAVE_MOD_ARCH_SPECIFIC select HAS_DMA select HAVE_PBL_IMAGE + select ARCH_HAS_ZERO_PAGE config CPU_64 bool @@ -19,6 +20,7 @@ config CPU_64 select HAVE_PBL_MULTI_IMAGES select HAS_DMA select ARCH_WANT_FRAME_POINTERS + select ARCH_HAS_ZERO_PAGE # Select CPU types depending on the architecture selected. This selects # which CPUs we support in the kernel image, and the compiler instruction @@ -92,7 +94,6 @@ config CPU_V8 select ARM_EXCEPTIONS select GENERIC_FIND_NEXT_BIT select ARCH_HAS_STACK_DUMP - select ARCH_HAS_ZERO_PAGE config CPU_XSC3 bool diff --git a/arch/arm/cpu/mmu-common.c b/arch/arm/cpu/mmu-common.c index e6cc3b974f..02f512c2c6 100644 --- a/arch/arm/cpu/mmu-common.c +++ b/arch/arm/cpu/mmu-common.c @@ -11,6 +11,7 @@ #include <asm/system.h> #include <asm/barebox-arm.h> #include <memory.h> +#include <zero_page.h> #include "mmu-common.h" void dma_sync_single_for_cpu(dma_addr_t address, size_t size, @@ -57,6 +58,16 @@ void dma_free_coherent(void *mem, dma_addr_t dma_handle, size_t size) free(mem); } +void zero_page_access(void) +{ + arch_remap_range(0x0, PAGE_SIZE, MAP_CACHED); +} + +void zero_page_faulting(void) +{ + arch_remap_range(0x0, PAGE_SIZE, MAP_FAULT); +} + static int mmu_init(void) { if (list_empty(&memory_banks)) { diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c index a1ecc49f03..7b31938ecd 100644 --- a/arch/arm/cpu/mmu_32.c +++ b/arch/arm/cpu/mmu_32.c @@ -9,6 +9,7 @@ #include <init.h> #include <mmu.h> #include <errno.h> +#include <zero_page.h> #include <linux/sizes.h> #include <asm/memory.h> #include <asm/barebox-arm.h> @@ -362,7 +363,6 @@ static int set_vector_table(unsigned long adr) static void create_zero_page(void) { struct resource *zero_sdram; - u32 *zero; zero_sdram = request_sdram_region("zero page", 0x0, PAGE_SIZE); if (zero_sdram) { @@ -372,8 +372,7 @@ static void create_zero_page(void) */ pr_debug("zero page is in SDRAM area, currently not supported\n"); } else { - zero = arm_create_pte(0x0, pte_flags_uncached); - zero[0] = 0; + zero_page_faulting(); pr_debug("Created zero page\n"); } } diff --git a/arch/arm/cpu/mmu_64.c b/arch/arm/cpu/mmu_64.c index 0639d0f1ce..c7c16b527b 100644 --- a/arch/arm/cpu/mmu_64.c +++ b/arch/arm/cpu/mmu_64.c @@ -172,16 +172,6 @@ static void mmu_enable(void) set_cr(get_cr() | CR_M | CR_C | CR_I); } -void zero_page_access(void) -{ - arch_remap_range(0x0, PAGE_SIZE, MAP_CACHED); -} - -void zero_page_faulting(void) -{ - arch_remap_range(0x0, PAGE_SIZE, MAP_FAULT); -} - /* * Prepare MMU for usage enable it. */ -- 2.39.2