[PATCH 6/8] ARM: bootm: locate zImage higher into RAM

Sascha Hauer s.hauer at pengutronix.de
Fri Jan 10 06:05:57 EST 2014


The zImage should be placed where it won't be overwritten by the
uncompressed image, otherwise the kernel decompressing code has
to relocate the zImage before decompression. As Kernels tend to
become bigger put it into 32MiB into RAM if we have enough RAM
available.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/lib/bootm.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 3604df0..11ff98c 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -195,7 +195,17 @@ static int do_bootz_linux(struct image_data *data)
 	if (load_address == UIMAGE_INVALID_ADDRESS) {
 		struct memory_bank *bank = list_first_entry(&memory_banks,
 				struct memory_bank, list);
-		data->os_address = bank->start + SZ_8M;
+
+		/*
+		 * The kernel should stay in the first 128MiB of RAM, recommended
+		 * is 32MiB into RAM so that relocation prior to decompression
+		 * can be avoided.
+		 */
+		if (mem_size > SZ_64M)
+			data->os_address = bank->start + SZ_32M;
+		else
+			data->os_address = bank->start + SZ_8M;
+
 		load_address = data->os_address;
 		if (bootm_verbose(data))
 			printf("no os load address, defaulting to 0x%08lx\n",
-- 
1.8.5.2




More information about the barebox mailing list