This puts the code from barebox_uncompress inline into the caller. Also we now call the uncompressed binary with the memory and boarddata arguments, so everything is ready for the uncompressed image to pick up the values. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- arch/arm/cpu/start-pbl.c | 64 +++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/arch/arm/cpu/start-pbl.c b/arch/arm/cpu/start-pbl.c index e612d51..751e4fa 100644 --- a/arch/arm/cpu/start-pbl.c +++ b/arch/arm/cpu/start-pbl.c @@ -120,47 +120,13 @@ void noinline errorfn(char *error) while (1); } -static void barebox_uncompress(void *compressed_start, unsigned int len) -{ - void (*barebox)(void); - /* - * remap_cached currently does not work rendering the feature - * of enabling the MMU in the PBL useless. disable for now. - */ - int use_mmu = 0; - - /* set 128 KiB at the end of the MALLOC_BASE for early malloc */ - free_mem_ptr = MALLOC_BASE + MALLOC_SIZE - SZ_128K; - free_mem_end_ptr = free_mem_ptr + SZ_128K; - - ttb = (void *)((free_mem_ptr - 0x4000) & ~0x3fff); - - if (use_mmu) - mmu_enable((unsigned long)compressed_start, len); - - if (IS_ENABLED(CONFIG_THUMB2_BAREBOX)) - barebox = (void *)(TEXT_BASE + 1); - else - barebox = (void *)TEXT_BASE; - - decompress((void *)compressed_start, - len, - NULL, NULL, - (void *)TEXT_BASE, NULL, errorfn); - - if (use_mmu) - mmu_disable(); - - flush_icache(); - - barebox(); -} - static noinline void __barebox_arm_entry(uint32_t membase, uint32_t memsize, uint32_t boarddata) { + void (*barebox)(uint32_t, uint32_t, uint32_t); uint32_t offset; uint32_t pg_start, pg_end, pg_len; + int use_mmu = 0; /* Get offset between linked address and runtime address */ offset = get_runtime_offset(); @@ -180,7 +146,31 @@ static noinline void __barebox_arm_entry(uint32_t membase, uint32_t memsize, setup_c(); - barebox_uncompress((void *)pg_start, pg_len); + /* set 128 KiB at the end of the MALLOC_BASE for early malloc */ + free_mem_ptr = membase + memsize - SZ_256K; + free_mem_end_ptr = free_mem_ptr + SZ_128K; + + ttb = (void *)((free_mem_ptr - 0x4000) & ~0x3fff); + + if (use_mmu) + mmu_enable(membase, memsize); + + decompress((void *)pg_start, + pg_len, + NULL, NULL, + (void *)TEXT_BASE, NULL, errorfn); + + if (use_mmu) + mmu_disable(); + + flush_icache(); + + if (IS_ENABLED(CONFIG_THUMB2_BAREBOX)) + barebox = (void *)(TEXT_BASE + 1); + else + barebox = (void *)TEXT_BASE; + + barebox(membase, memsize, boarddata); } /* -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox