Thread (40 messages) 40 messages, 3 authors, 2012-11-01

Re: [PATCH 20/28] ARM pbl: Call uncompressed binary with arguments

From: Jean-Christophe PLAGNIOL-VILLARD <hidden>
Date: 2012-10-18 07:32:19

On 23:03 Wed 17 Oct     , Sascha Hauer wrote:
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.
can we use atags / dt and machine_id

it more flexible and allow us to be called as a kernel

Best Regards,
J.
quoted hunk ↗ jump to hunk
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 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@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help