summaryrefslogtreecommitdiffstats
path: root/arch/arm/cpu/start-pbl.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-01-26 00:24:18 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-02-04 15:52:41 +0100
commit93ef44fc4e15ee621ef0882c80752590af89188d (patch)
tree85ba2d5307761cbc9cc4b933025458bfaa8aee91 /arch/arm/cpu/start-pbl.c
parent02c0f0bfc8a7ec0070402c73290a18e0e7f5efbe (diff)
downloadbarebox-93ef44fc4e15ee621ef0882c80752590af89188d.tar.gz
barebox-93ef44fc4e15ee621ef0882c80752590af89188d.tar.xz
ARM: Factor out early mmu code
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>
Diffstat (limited to 'arch/arm/cpu/start-pbl.c')
-rw-r--r--arch/arm/cpu/start-pbl.c72
1 files changed, 0 insertions, 72 deletions
diff --git a/arch/arm/cpu/start-pbl.c b/arch/arm/cpu/start-pbl.c
index 9c168b3c24..0599c57e75 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();
}