From: Alexander Aring <alex.aring@gmail.com>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 29/34] ARM: Factor out early mmu code
Date: Sun, 27 Jan 2013 15:54:35 +0100 [thread overview]
Message-ID: <20130127145433.GA1217@x61s.8.8.8.8> (raw)
In-Reply-To: <1359283623-1782-30-git-send-email-s.hauer@pengutronix.de>
Hi,
On Sun, Jan 27, 2013 at 11:46:58AM +0100, Sascha Hauer wrote:
> 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);
Maybe we can use ALIGN macro from common.h here?
Only a small change, but it's easier to understand code.
I can send a patch for this, if you like that idea.
Similar we can create a macro ALIGN_DOWN for start.
Regards
Alex
> +
> + 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 6610be6..96a9dcf 100644
> --- a/arch/arm/cpu/start-pbl.c
> +++ b/arch/arm/cpu/start-pbl.c
> @@ -57,64 +57,6 @@ extern void *input_data_end;
> #include "../../../lib/decompress_inflate.c"
> #endif
>
> -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 noinline errorfn(char *error)
> {
> while (1);
> @@ -122,25 +64,11 @@ static void noinline errorfn(char *error)
>
> 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);
> -
> decompress((void *)compressed_start,
> len,
> NULL, NULL,
> (void *)TEXT_BASE, NULL, errorfn);
>
> - 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
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2013-01-27 14:54 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-27 10:46 [PATCH] Add new ARM entry point for barebox Sascha Hauer
2013-01-27 10:46 ` [PATCH 01/34] ARM: Add new " Sascha Hauer
2013-01-27 10:46 ` [PATCH 02/34] ARM: add __noreturn to board_init_lowlevel_return Sascha Hauer
2013-01-27 10:46 ` [PATCH 03/34] ARM i.MX: Use SRAM stack in lowlevel code Sascha Hauer
2013-01-27 10:46 ` [PATCH 04/34] ARM i.MX: Add i.MX specific entry point for barebox Sascha Hauer
2013-01-27 10:46 ` [PATCH 05/34] ARM i.MX: prepare external nand boot for SoC specific entry Sascha Hauer
2013-01-27 10:46 ` [PATCH 06/34] ARM i.MX boards: switch to barebox_arm_entry Sascha Hauer
2013-01-27 10:46 ` [PATCH 07/34] ARM MXS " Sascha Hauer
2013-01-27 10:46 ` [PATCH 08/34] ARM OMAP " Sascha Hauer
2013-01-27 10:46 ` [PATCH 09/34] ARM Samsung " Sascha Hauer
2013-01-27 10:46 ` [PATCH 10/34] ARM PXA " Sascha Hauer
2013-01-27 10:46 ` [PATCH 11/34] ARM ep93xx " Sascha Hauer
2013-01-27 10:46 ` [PATCH 12/34] ARM tegra " Sascha Hauer
2013-01-27 10:46 ` [PATCH 13/34] ARM nomadik " Sascha Hauer
2013-01-27 10:46 ` [PATCH 14/34] ARM versatile " Sascha Hauer
2013-01-27 10:46 ` [PATCH 15/34] ARM netx " Sascha Hauer
2013-01-27 10:46 ` [PATCH 16/34] ARM clep7212: " Sascha Hauer
2013-01-27 16:32 ` Alexander Shiyan
2013-01-28 7:41 ` Sascha Hauer
2013-01-27 10:46 ` [PATCH 17/34] ARM raspberrypi: " Sascha Hauer
2013-01-27 10:46 ` [PATCH 18/34] ARM AT91 mmccpu: Fix non existing define Sascha Hauer
2013-01-27 10:46 ` [PATCH 19/34] ARM AT91: switch to barebox_arm_entry part1 Sascha Hauer
2013-01-27 10:51 ` Jean-Christophe PLAGNIOL-VILLARD
2013-01-27 11:09 ` Sascha Hauer
2013-01-27 10:46 ` [PATCH 20/34] ARM AT91: switch at91rm9200 board to barebox_arm_entry Sascha Hauer
2013-01-27 10:46 ` [PATCH 21/34] ARM AT91: switch remaining boards " Sascha Hauer
2013-01-27 16:24 ` Jean-Christophe PLAGNIOL-VILLARD
2013-01-27 10:46 ` [PATCH 22/34] ARM: remove now unused MACH_[HAS|DO]_LOWLEVEL_INIT Sascha Hauer
2013-01-27 10:46 ` [PATCH 23/34] ARM start-pbl: make board_init_lowlevel_return static Sascha Hauer
2013-01-27 10:46 ` [PATCH 24/34] ARM start-pbl: call uncompressed binary with arguments Sascha Hauer
2013-01-27 10:46 ` [PATCH 25/34] ARM start: pickup parameters from pbl Sascha Hauer
2013-01-27 10:46 ` [PATCH 26/34] ARM: Setup stack at end of SDRAM Sascha Hauer
2013-01-27 10:46 ` [PATCH 27/34] ARM pbl: Use dynamic parameters for early malloc space Sascha Hauer
2013-01-27 10:46 ` [PATCH 28/34] ARM mmu: pickup already enabled mmu 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 [this message]
2013-01-28 7:35 ` Sascha Hauer
2013-01-27 10:46 ` [PATCH 30/34] ARM: Enable mmu early Sascha Hauer
2013-01-27 10:47 ` [PATCH 31/34] ARM: Automatically determine malloc size Sascha Hauer
2013-01-27 10:47 ` [PATCH 32/34] generic memory layout: fix deps for [MALLOC|STACK]_BASE Sascha Hauer
2013-01-27 10:47 ` [PATCH 33/34] ARM: disable HAVE_CONFIGURABLE_MEMORY_LAYOUT Sascha Hauer
2013-01-27 10:47 ` [PATCH 34/34] ARM pbl: inline decompress function Sascha Hauer
2013-02-01 7:59 [PATCH v2] Add new ARM entry point for barebox Sascha Hauer
2013-02-01 7:59 ` [PATCH 29/34] ARM: Factor out early mmu 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=20130127145433.GA1217@x61s.8.8.8.8 \
--to=alex.aring@gmail.com \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
/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