[PATCH v2 16/34] ARM: mmu32: implement zero_page_*()
Sascha Hauer
s.hauer at pengutronix.de
Wed May 17 02:03:22 PDT 2023
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 at pengutronix.de>
---
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
More information about the barebox
mailing list