mail archive of the barebox mailing list
 help / color / mirror / Atom feed
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

  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