mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Andrey Smirnov <andrew.smirnov@gmail.com>
To: barebox@lists.infradead.org
Cc: Andrey Smirnov <andrew.smirnov@gmail.com>
Subject: [PATCH 06/28] ARM: mmu: Share code for create_sections()
Date: Tue,  8 May 2018 14:29:29 -0700	[thread overview]
Message-ID: <20180508212951.6446-7-andrew.smirnov@gmail.com> (raw)
In-Reply-To: <20180508212951.6446-1-andrew.smirnov@gmail.com>

Regular MMU code never creates anything but 1:1 mapping, and barring
that plus the call to __mmu_cache_flush(), early MMU code version of
the function is pretty much identical. To avoid code duplication, move
it to mmu.h and convert both regular and early MMU code to use it.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---
 arch/arm/cpu/mmu-early.c | 14 ++------------
 arch/arm/cpu/mmu.c       | 25 +++++++------------------
 arch/arm/cpu/mmu.h       |  8 ++++++++
 3 files changed, 17 insertions(+), 30 deletions(-)

diff --git a/arch/arm/cpu/mmu-early.c b/arch/arm/cpu/mmu-early.c
index f75cc7e4a..70ece0d2f 100644
--- a/arch/arm/cpu/mmu-early.c
+++ b/arch/arm/cpu/mmu-early.c
@@ -11,22 +11,12 @@
 
 static uint32_t *ttb;
 
-static void create_sections(unsigned long addr, int size_m, unsigned int flags)
-{
-	int i;
-
-	addr >>= 20;
-
-	for (i = size_m; i > 0; i--, addr++)
-		ttb[addr] = (addr << 20) | flags;
-}
-
 static void map_cachable(unsigned long start, unsigned long size)
 {
 	start = ALIGN_DOWN(start, SZ_1M);
 	size  = ALIGN(size, SZ_1M);
 
-	create_sections(start, size >> 20, PMD_SECT_AP_WRITE |
+	create_sections(ttb, start, size >> 20, PMD_SECT_AP_WRITE |
 			PMD_SECT_AP_READ | PMD_TYPE_SECT | PMD_SECT_WB);
 }
 
@@ -40,7 +30,7 @@ void mmu_early_enable(unsigned long membase, unsigned long memsize,
 	set_ttbr(ttb);
 	set_domain(DOMAIN_MANAGER);
 
-	create_sections(0, 4096, PMD_SECT_AP_WRITE |
+	create_sections(ttb, 0, 4096, PMD_SECT_AP_WRITE |
 			PMD_SECT_AP_READ | PMD_TYPE_SECT);
 
 	map_cachable(membase, memsize);
diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c
index 7e087d08f..0c367e47c 100644
--- a/arch/arm/cpu/mmu.c
+++ b/arch/arm/cpu/mmu.c
@@ -37,21 +37,7 @@
 #define PMD_SECT_DEF_UNCACHED (PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT)
 #define PMD_SECT_DEF_CACHED (PMD_SECT_WB | PMD_SECT_DEF_UNCACHED)
 
-static unsigned long *ttb;
-
-static void create_sections(unsigned long virt, unsigned long phys, int size_m,
-		unsigned int flags)
-{
-	int i;
-
-	phys >>= 20;
-	virt >>= 20;
-
-	for (i = size_m; i > 0; i--, virt++, phys++)
-		ttb[virt] = (phys << 20) | flags;
-
-	__mmu_cache_flush();
-}
+static uint32_t *ttb;
 
 /*
  * Do it the simple way for now and invalidate the entire
@@ -474,8 +460,9 @@ static int mmu_init(void)
 	set_domain(DOMAIN_MANAGER);
 
 	/* create a flat mapping using 1MiB sections */
-	create_sections(0, 0, PAGE_SIZE, PMD_SECT_AP_WRITE | PMD_SECT_AP_READ |
+	create_sections(ttb, 0, PAGE_SIZE, PMD_SECT_AP_WRITE | PMD_SECT_AP_READ |
 			PMD_TYPE_SECT);
+	__mmu_cache_flush();
 
 	vectors_init();
 
@@ -484,9 +471,11 @@ static int mmu_init(void)
 	 * This is to speed up the generation of 2nd level page tables
 	 * below
 	 */
-	for_each_memory_bank(bank)
-		create_sections(bank->start, bank->start, bank->size >> 20,
+	for_each_memory_bank(bank) {
+		create_sections(ttb, bank->start, bank->size >> 20,
 				PMD_SECT_DEF_CACHED);
+		__mmu_cache_flush();
+	}
 
 	__mmu_cache_on();
 
diff --git a/arch/arm/cpu/mmu.h b/arch/arm/cpu/mmu.h
index e71ff8e9a..59f72049f 100644
--- a/arch/arm/cpu/mmu.h
+++ b/arch/arm/cpu/mmu.h
@@ -24,5 +24,13 @@ static inline void set_domain(unsigned val)
 	asm volatile ("mcr  p15,0,%0,c3,c0,0" : : "r"(val) /*:*/);
 }
 
+static inline void
+create_sections(uint32_t *ttb, unsigned long addr,
+		int size_m, unsigned int flags)
+{
+	for (addr >>= 20; addr < size_m; addr++)
+		ttb[addr] = (addr << 20) | flags;
+}
+
 
 #endif /* __ARM_MMU_H */
-- 
2.17.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2018-05-08 21:30 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-08 21:29 [PATCH 00/28] ARM MMU code improvements and on-demand PTE allocation Andrey Smirnov
2018-05-08 21:29 ` [PATCH 01/28] ARM: mmu: Remove unused ARM_VECTORS_SIZE Andrey Smirnov
2018-05-08 21:29 ` [PATCH 02/28] ARM: mmu: Make use of IS_ALIGNED in arm_mmu_remap_sdram() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 03/28] ARM: mmu: Use ALIGN and ALIGN_DOWN in map_cachable() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 04/28] ARM: mmu: Introduce set_ttbr() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 05/28] ARM: mmu: Introduce set_domain() Andrey Smirnov
2018-05-08 21:29 ` Andrey Smirnov [this message]
2018-05-08 21:29 ` [PATCH 07/28] ARM: mmu: Separate index and address in create_sections() Andrey Smirnov
2018-05-14  6:47   ` Sascha Hauer
2018-05-15  5:41     ` Andrey Smirnov
2018-05-08 21:29 ` [PATCH 08/28] sizes.h: Sync with Linux 4.16 Andrey Smirnov
2018-05-08 21:29 ` [PATCH 09/28] ARM: mmu: Specify size in bytes in create_sections() Andrey Smirnov
2018-05-14  6:52   ` Sascha Hauer
2018-05-15  5:42     ` Andrey Smirnov
2018-05-08 21:29 ` [PATCH 10/28] ARM: mmu: Share code for initial flat mapping creation Andrey Smirnov
2018-05-08 21:29 ` [PATCH 11/28] ARM: mmu: Share PMD_SECT_DEF_CACHED Andrey Smirnov
2018-05-08 21:29 ` [PATCH 12/28] ARM: mmu: Drop needless shifting in map_io_sections() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 13/28] ARM: mmu: Replace hardcoded shifts with pgd_index() from Linux Andrey Smirnov
2018-05-08 21:29 ` [PATCH 14/28] ARM: mmu: Trivial simplification in arm_mmu_remap_sdram() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 15/28] ARM: mmu: Replace various SZ_1M with PGDIR_SIZE Andrey Smirnov
2018-05-08 21:29 ` [PATCH 16/28] ARM: mmu: Use PAGE_SIZE when specifying size of one page Andrey Smirnov
2018-05-08 21:29 ` [PATCH 17/28] ARM: mmu: Define and use PTRS_PER_PTE Andrey Smirnov
2018-05-08 21:29 ` [PATCH 18/28] ARM: mmu: Use PAGE_SIZE instead of magic right shift by 12 Andrey Smirnov
2018-05-08 21:29 ` [PATCH 19/28] ARM: mmu: Use xmemalign in arm_create_pte() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 20/28] ARM: mmu: Use xmemalign in mmu_init() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 21/28] ARM: mmu: Share code between dma_alloc_*() functions Andrey Smirnov
2018-05-08 21:29 ` [PATCH 22/28] ARM: mmu: Pass PTE flags a parameter to arm_create_pte() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 23/28] ARM: mmu: Make sure that address is 1M aligned in arm_create_pte() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 24/28] ARM: mmu: Use find_pte() to find PTE in create_vector_table() Andrey Smirnov
2018-05-08 21:29 ` [PATCH 25/28] ARM: mmu: Use dma_inv_range() in dma_sync_single_for_cpu() Andrey Smirnov
2018-05-09  8:49   ` Lucas Stach
2018-05-08 21:29 ` [PATCH 26/28] ARM: mmu: Simplify the use of dma_flush_range() Andrey Smirnov
2018-05-09  8:48   ` Lucas Stach
2018-05-14 23:37     ` Andrey Smirnov
2018-05-08 21:29 ` [PATCH 27/28] ARM: mmu: Implement on-demand PTE allocation Andrey Smirnov
2018-05-08 21:29 ` [PATCH 28/28] ARM: mmu: Introduce ARM_TTB_SIZE Andrey Smirnov
2018-05-14  7:06 ` [PATCH 00/28] ARM MMU code improvements and on-demand PTE allocation 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=20180508212951.6446-7-andrew.smirnov@gmail.com \
    --to=andrew.smirnov@gmail.com \
    --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