mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>
Subject: [PATCH v2 32/34] ARM: mmu32: Use pages for early MMU setup
Date: Wed, 17 May 2023 11:03:38 +0200	[thread overview]
Message-ID: <20230517090340.3954615-33-s.hauer@pengutronix.de> (raw)
In-Reply-To: <20230517090340.3954615-1-s.hauer@pengutronix.de>

Up to now we use 1MiB sections to setup the page tables in PBL. There
are two places where this leads to problems. First is OP-TEE, we have
to map the OP-TEE area with PTE_EXT_XN to prevent the instruction
prefetcher from speculating into that area. With the current section
mapping we have to align OPTEE_SIZE to 1MiB boundaries. The second
problem comes with SRAM where the PBL might be running. This SRAM has
to be mapped executable, but at the same time we should map the
surrounding areas non executable which is not always possible with
1MiB mapping granularity.

We now have everything in place to use two level page tables from PBL,
so use arch_remap_range() for the problematic cases.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/cpu/mmu_32.c | 31 +++++++------------------------
 1 file changed, 7 insertions(+), 24 deletions(-)

diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c
index 785b20c7fd..705d27a045 100644
--- a/arch/arm/cpu/mmu_32.c
+++ b/arch/arm/cpu/mmu_32.c
@@ -111,8 +111,10 @@ void dma_flush_range(void *ptr, size_t size)
 	unsigned long end = start + size;
 
 	__dma_flush_range(start, end);
+#ifndef __PBL__
 	if (outer_cache.flush_range)
 		outer_cache.flush_range(start, end);
+#endif
 }
 
 void dma_inv_range(void *ptr, size_t size)
@@ -120,8 +122,10 @@ void dma_inv_range(void *ptr, size_t size)
 	unsigned long start = (unsigned long)ptr;
 	unsigned long end = start + size;
 
+#ifndef __PBL__
 	if (outer_cache.inv_range)
 		outer_cache.inv_range(start, end);
+#endif
 	__dma_inv_range(start, end);
 }
 
@@ -542,16 +546,6 @@ void *dma_alloc_writecombine(size_t size, dma_addr_t *dma_handle)
 	return dma_alloc_map(size, dma_handle, ARCH_MAP_WRITECOMBINE);
 }
 
-static inline void map_region(unsigned long start, unsigned long size,
-			      uint64_t flags)
-
-{
-	start = ALIGN_DOWN(start, SZ_1M);
-	size  = ALIGN(size, SZ_1M);
-
-	create_sections(start, start + size - 1, flags);
-}
-
 void mmu_early_enable(unsigned long membase, unsigned long memsize)
 {
 	uint32_t *ttb = (uint32_t *)arm_mem_ttb(membase + memsize);
@@ -572,21 +566,10 @@ void mmu_early_enable(unsigned long membase, unsigned long memsize)
 	 */
 	create_flat_mapping();
 
-	/*
-	 * There can be SoCs that have a section shared between device memory
-	 * and the on-chip RAM hosting the PBL. Thus mark this section
-	 * uncachable, but executable.
-	 * On such SoCs, executing from OCRAM could cause the instruction
-	 * prefetcher to speculatively access that device memory, triggering
-	 * potential errant behavior.
-	 *
-	 * If your SoC has such a memory layout, you should rewrite the code
-	 * here to map the OCRAM page-wise.
-	 */
-	map_region((unsigned long)_stext, _etext - _stext, PMD_SECT_DEF_UNCACHED);
-
 	/* maps main memory as cachable */
-	map_region(membase, memsize - OPTEE_SIZE, PMD_SECT_DEF_CACHED);
+	arch_remap_range((void *)membase, memsize - OPTEE_SIZE, MAP_CACHED);
+	arch_remap_range((void *)membase + memsize - OPTEE_SIZE, OPTEE_SIZE, MAP_UNCACHED);
+	arch_remap_range(_stext, PAGE_ALIGN(_etext - _stext), MAP_CACHED);
 
 	__mmu_cache_on();
 }
-- 
2.39.2




  parent reply	other threads:[~2023-05-17  9:42 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-17  9:03 [PATCH v2 00/34] ARM: MMU rework Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 01/34] ARM: remove unused membase argument Sascha Hauer
2023-05-17 12:45   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 02/34] ARM: remove unused define Sascha Hauer
2023-05-17 12:45   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 03/34] ARM: rename __arm_mem_scratch to arm_mem_scratch Sascha Hauer
2023-05-17 12:46   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 04/34] ARM: put scratch mem area below OP-TEE Sascha Hauer
2023-05-17 12:48   ` Ahmad Fatoum
2023-05-17 13:14     ` Sascha Hauer
2023-05-17 15:50       ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 05/34] ARM: add arm_mem_optee() Sascha Hauer
2023-05-17 12:53   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 06/34] ARM: make arm_mem_scratch() a static inline function Sascha Hauer
2023-05-17 12:53   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 07/34] ARM: define stack base consistently Sascha Hauer
2023-05-17 12:55   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 08/34] ARM: move arm_mem_scratch_get() lower for consistency Sascha Hauer
2023-05-17 12:57   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 09/34] ARM: drop cache function initialization Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 10/34] ARM: Add _32 suffix to aarch32 specific filenames Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 11/34] ARM: cpu.c: remove unused include Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 12/34] ARM: mmu-common.c: use common mmu include Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 13/34] ARM: mmu32: rename mmu.h to mmu_32.h Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 14/34] ARM: mmu: implement MAP_FAULT Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 15/34] ARM: mmu64: Use arch_remap_range where possible Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 16/34] ARM: mmu32: implement zero_page_*() Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 17/34] ARM: i.MX: Drop HAB workaround Sascha Hauer
2023-05-17 13:01   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 18/34] ARM: Move early MMU after malloc initialization Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 19/34] ARM: mmu: move dma_sync_single_for_device to extra file Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 20/34] ARM: mmu: merge mmu-early_xx.c into mmu_xx.c Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 21/34] ARM: mmu: alloc 64k for early page tables Sascha Hauer
2023-05-17 13:03   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 22/34] ARM: mmu32: create alloc_pte() Sascha Hauer
2023-05-17 13:07   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 23/34] ARM: mmu64: " Sascha Hauer
2023-05-17 13:15   ` Ahmad Fatoum
2023-05-17 13:17   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 24/34] ARM: mmu: drop ttb argument Sascha Hauer
2023-05-17 13:23   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 25/34] ARM: mmu: always do MMU initialization early when MMU is enabled Sascha Hauer
2023-05-17 13:29   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 26/34] ARM: mmu32: Assume MMU is on Sascha Hauer
2023-05-17 13:36   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 27/34] ARM: mmu32: Fix pmd_flags_to_pte() for ARMv4/5/6 Sascha Hauer
2023-05-17 13:39   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 28/34] ARM: mmu32: Add pte_flags_to_pmd() Sascha Hauer
2023-05-17 13:43   ` Ahmad Fatoum
2023-05-17 14:44     ` Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 29/34] ARM: mmu32: add get_pte_flags, get_pmd_flags Sascha Hauer
2023-05-17 13:46   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 30/34] ARM: mmu32: move functions into c file Sascha Hauer
2023-05-17 13:48   ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 31/34] ARM: mmu32: read TTB value from register Sascha Hauer
2023-05-17 13:58   ` Ahmad Fatoum
2023-05-17 14:39     ` Sascha Hauer
2023-05-19  6:53       ` Ahmad Fatoum
2023-05-19  7:44         ` Sascha Hauer
2023-05-19  7:52           ` Ahmad Fatoum
2023-05-17  9:03 ` Sascha Hauer [this message]
2023-05-17 14:21   ` [PATCH v2 32/34] ARM: mmu32: Use pages for early MMU setup Ahmad Fatoum
2023-05-22  8:14     ` Sascha Hauer
2023-05-17  9:03 ` [PATCH v2 33/34] ARM: mmu32: Skip reserved ranges during initialization Sascha Hauer
2023-05-17 14:43   ` Ahmad Fatoum
2023-05-17 14:55     ` Sascha Hauer
2023-05-17 15:56       ` Ahmad Fatoum
2023-05-17  9:03 ` [PATCH v2 34/34] ARM: mmu64: Use two level pagetables in early code Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230517090340.3954615-33-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox