mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: barebox@lists.infradead.org
Subject: [PATCH 29/34] ARM: Factor out early mmu code
Date: Fri,  1 Feb 2013 08:59:42 +0100	[thread overview]
Message-ID: <1359705587-9762-30-git-send-email-s.hauer@pengutronix.de> (raw)
In-Reply-To: <1359705587-9762-1-git-send-email-s.hauer@pengutronix.de>

Move early mmu code to a separate file so that it can be
used from the pbl and the regular image. Disabling the mmu
can be dropped since the regular mmu code is now able to
pickup an enabled mmu.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/cpu/Makefile    |    4 +--
 arch/arm/cpu/mmu-early.c |   53 ++++++++++++++++++++++++++++++++++
 arch/arm/cpu/mmu-early.h |    6 ++++
 arch/arm/cpu/start-pbl.c |   72 ----------------------------------------------
 4 files changed, 61 insertions(+), 74 deletions(-)
 create mode 100644 arch/arm/cpu/mmu-early.c
 create mode 100644 arch/arm/cpu/mmu-early.h

diff --git a/arch/arm/cpu/Makefile b/arch/arm/cpu/Makefile
index 4b0259c..44410ee 100644
--- a/arch/arm/cpu/Makefile
+++ b/arch/arm/cpu/Makefile
@@ -8,8 +8,8 @@ obj-y += start.o setupc.o
 #
 obj-$(CONFIG_CMD_ARM_CPUINFO) += cpuinfo.o
 obj-$(CONFIG_CMD_ARM_MMUINFO) += mmuinfo.o
-obj-$(CONFIG_MMU) += mmu.o cache.o
-pbl-$(CONFIG_MMU) += cache.o
+obj-$(CONFIG_MMU) += mmu.o cache.o mmu-early.o
+pbl-$(CONFIG_MMU) += cache.o mmu-early.o
 obj-$(CONFIG_CPU_32v4T) += cache-armv4.o
 pbl-$(CONFIG_CPU_32v4T) += cache-armv4.o
 obj-$(CONFIG_CPU_32v5) += cache-armv5.o
diff --git a/arch/arm/cpu/mmu-early.c b/arch/arm/cpu/mmu-early.c
new file mode 100644
index 0000000..b8b30df
--- /dev/null
+++ b/arch/arm/cpu/mmu-early.c
@@ -0,0 +1,53 @@
+#include <common.h>
+#include <asm/mmu.h>
+#include <errno.h>
+#include <sizes.h>
+#include <asm/memory.h>
+#include <asm/system.h>
+#include <asm/cache.h>
+
+#include "mmu.h"
+
+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 &= ~(SZ_1M - 1);
+	size = (size + (SZ_1M - 1)) & ~(SZ_1M - 1);
+
+	create_sections(start, size >> 20, PMD_SECT_AP_WRITE |
+			PMD_SECT_AP_READ | PMD_TYPE_SECT | PMD_SECT_WB);
+}
+
+void mmu_early_enable(uint32_t membase, uint32_t memsize, uint32_t _ttb)
+{
+	int i;
+
+	ttb = (uint32_t *)_ttb;
+
+	arm_set_cache_functions();
+
+	/* Set the ttb register */
+	asm volatile ("mcr  p15,0,%0,c2,c0,0" : : "r"(ttb) /*:*/);
+
+	/* Set the Domain Access Control Register */
+	i = 0x3;
+	asm volatile ("mcr  p15,0,%0,c3,c0,0" : : "r"(i) /*:*/);
+
+	create_sections(0, 4096, PMD_SECT_AP_WRITE |
+			PMD_SECT_AP_READ | PMD_TYPE_SECT);
+
+	map_cachable(membase, memsize);
+
+	__mmu_cache_on();
+}
diff --git a/arch/arm/cpu/mmu-early.h b/arch/arm/cpu/mmu-early.h
new file mode 100644
index 0000000..af21f52
--- /dev/null
+++ b/arch/arm/cpu/mmu-early.h
@@ -0,0 +1,6 @@
+#ifndef __ARM_CPU_MMU_EARLY_H
+#define __ARM_CPU_MMU_EARLY_H
+
+void mmu_early_enable(uint32_t membase, uint32_t memsize, uint32_t ttb);
+
+#endif /* __ARM_CPU_MMU_EARLY_H */
diff --git a/arch/arm/cpu/start-pbl.c b/arch/arm/cpu/start-pbl.c
index 9c168b3..0599c57 100644
--- a/arch/arm/cpu/start-pbl.c
+++ b/arch/arm/cpu/start-pbl.c
@@ -48,82 +48,10 @@ void __naked __section(.text_head_entry) pbl_start(void)
 extern void *input_data;
 extern void *input_data_end;
 
-static unsigned long *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 &= ~(SZ_1M - 1);
-	size = (size + (SZ_1M - 1)) & ~(SZ_1M - 1);
-
-	create_sections(start, size >> 20, PMD_SECT_AP_WRITE |
-			PMD_SECT_AP_READ | PMD_TYPE_SECT | PMD_SECT_WB);
-}
-
-static void mmu_enable(unsigned long compressed_start, unsigned int len)
-{
-	int i;
-
-	/* Set the ttb register */
-	asm volatile ("mcr  p15,0,%0,c2,c0,0" : : "r"(ttb) /*:*/);
-
-	/* Set the Domain Access Control Register */
-	i = 0x3;
-	asm volatile ("mcr  p15,0,%0,c3,c0,0" : : "r"(i) /*:*/);
-
-	create_sections(0, 4096, PMD_SECT_AP_WRITE |
-			PMD_SECT_AP_READ | PMD_TYPE_SECT);
-	/*
-	 * Setup all regions we need cacheable, namely:
-	 * - the stack
-	 * - the decompressor code
-	 * - the compressed image
-	 * - the uncompressed image
-	 * - the early malloc space
-	 */
-	map_cachable(STACK_BASE, STACK_SIZE);
-	map_cachable((unsigned long)&_text,
-			(unsigned long)&_end - (unsigned long)&_text);
-	map_cachable((unsigned long)compressed_start, len);
-	map_cachable(TEXT_BASE, len * 4);
-	map_cachable(free_mem_ptr, free_mem_end_ptr - free_mem_ptr);
-
-	__mmu_cache_on();
-}
-
-static void mmu_disable(void)
-{
-	__mmu_cache_flush();
-	__mmu_cache_off();
-}
-
 static void barebox_uncompress(void *compressed_start, unsigned int len)
 {
-	/*
-	 * remap_cached currently does not work rendering the feature
-	 * of enabling the MMU in the PBL useless. disable for now.
-	 */
-	int use_mmu = 0;
-
-	ttb = (void *)((free_mem_ptr - 0x4000) & ~0x3fff);
-
-	if (use_mmu)
-		mmu_enable((unsigned long)compressed_start, len);
-
 	pbl_barebox_uncompress((void*)TEXT_BASE, compressed_start, len);
 
-	if (use_mmu)
-		mmu_disable();
-
 	flush_icache();
 }
 
-- 
1.7.10.4


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

  parent reply	other threads:[~2013-02-01  8:00 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-01  7:59 [PATCH v2] Add new ARM entry point for barebox Sascha Hauer
2013-02-01  7:59 ` [PATCH 01/34] ARM: Add new " Sascha Hauer
2013-02-01  7:59 ` [PATCH 02/34] ARM: add __noreturn to board_init_lowlevel_return Sascha Hauer
2013-02-01  7:59 ` [PATCH 03/34] ARM i.MX: Use SRAM stack in lowlevel code Sascha Hauer
2013-02-01  7:59 ` [PATCH 04/34] ARM i.MX: Add i.MX specific entry point for barebox Sascha Hauer
2013-02-01  7:59 ` [PATCH 05/34] ARM i.MX: prepare external nand boot for SoC specific entry Sascha Hauer
2013-02-01  7:59 ` [PATCH 06/34] ARM i.MX boards: switch to barebox_arm_entry Sascha Hauer
2013-02-01  7:59 ` [PATCH 07/34] ARM MXS " Sascha Hauer
2013-02-01  7:59 ` [PATCH 08/34] ARM OMAP " Sascha Hauer
2013-02-01  7:59 ` [PATCH 09/34] ARM Samsung " Sascha Hauer
2013-02-01  7:59 ` [PATCH 10/34] ARM PXA " Sascha Hauer
2013-02-01  7:59 ` [PATCH 11/34] ARM ep93xx " Sascha Hauer
2013-02-01  7:59 ` [PATCH 12/34] ARM tegra " Sascha Hauer
2013-02-01  7:59 ` [PATCH 13/34] ARM nomadik " Sascha Hauer
2013-02-01  7:59 ` [PATCH 14/34] ARM versatile " Sascha Hauer
2013-02-01  7:59 ` [PATCH 15/34] ARM netx " Sascha Hauer
2013-02-01  7:59 ` [PATCH 16/34] ARM clep7212: " Sascha Hauer
2013-02-01  7:59 ` [PATCH 17/34] ARM raspberrypi: " Sascha Hauer
2013-02-01  7:59 ` [PATCH 18/34] ARM AT91: switch to barebox_arm_entry part1 Sascha Hauer
2013-02-01  8:11   ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-03 10:13     ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-01  7:59 ` [PATCH 19/34] ARM AT91: switch at91rm9200 board to barebox_arm_entry Sascha Hauer
2013-02-01  7:59 ` [PATCH 20/34] ARM AT91: switch sama5d3 " Sascha Hauer
2013-02-01  7:59 ` [PATCH 21/34] ARM AT91: switch remaining boards " Sascha Hauer
2013-02-01  8:12   ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-02 21:23   ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-01  7:59 ` [PATCH 22/34] ARM: remove now unused MACH_[HAS|DO]_LOWLEVEL_INIT Sascha Hauer
2013-02-01  7:59 ` [PATCH 23/34] ARM start-pbl: make board_init_lowlevel_return static Sascha Hauer
2013-02-01  7:59 ` [PATCH 24/34] ARM start-pbl: call uncompressed binary with arguments Sascha Hauer
2013-02-01  7:59 ` [PATCH 25/34] ARM start: pickup parameters from pbl Sascha Hauer
2013-02-01  7:59 ` [PATCH 26/34] ARM: Setup stack at end of SDRAM Sascha Hauer
2013-02-01  7:59 ` [PATCH 27/34] ARM pbl: Use dynamic parameters for early malloc space Sascha Hauer
2013-02-01  7:59 ` [PATCH 28/34] ARM mmu: pickup already enabled mmu Sascha Hauer
2013-02-01  7:59 ` Sascha Hauer [this message]
2013-02-01  7:59 ` [PATCH 30/34] ARM: Enable mmu early Sascha Hauer
2013-02-01  7:59 ` [PATCH 31/34] ARM: Automatically determine malloc size Sascha Hauer
2013-02-01  7:59 ` [PATCH 32/34] generic memory layout: fix deps for [MALLOC|STACK]_BASE Sascha Hauer
2013-02-01  7:59 ` [PATCH 33/34] ARM: disable HAVE_CONFIGURABLE_MEMORY_LAYOUT Sascha Hauer
2013-02-01  7:59 ` [PATCH 34/34] ARM pbl: inline decompress function Sascha Hauer
2013-02-01  8:15 ` [PATCH v2] Add new ARM entry point for barebox Jean-Christophe PLAGNIOL-VILLARD
  -- strict thread matches above, loose matches on Subject: below --
2013-01-27 10:46 [PATCH] " Sascha Hauer
2013-01-27 10:46 ` [PATCH 29/34] ARM: Factor out early mmu code Sascha Hauer
2013-01-27 14:54   ` Alexander Aring
2013-01-28  7:35     ` 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=1359705587-9762-30-git-send-email-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