diff mbox

[U-Boot] arm64: Juno/FVP: adjust kernel load address

Message ID 1451922216-14477-1-git-send-email-andre.przywara@arm.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Andre Przywara Jan. 4, 2016, 3:43 p.m. UTC
The default kernel load offset for an arm64 kernel is 0x80000, so
U-Boot takes cares of moving the loaded kernel to a matching memory
location just before booting it.
Since we run with caches off, this takes a while for any decently
sized kernel - with no output explaining the reason for the delay
(unless one uses a DEBUG build).
By adjusting the default load offset for Juno and VFP to be 512K
aligned in the first place we can skip this copying and boot much
faster.
Tested on Juno.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 include/configs/vexpress_aemv8a.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Linus Walleij Jan. 5, 2016, 9:48 a.m. UTC | #1
On Mon, Jan 4, 2016 at 4:43 PM, Andre Przywara <andre.przywara@arm.com> wrote:

> The default kernel load offset for an arm64 kernel is 0x80000, so
> U-Boot takes cares of moving the loaded kernel to a matching memory
> location just before booting it.
> Since we run with caches off, this takes a while for any decently
> sized kernel - with no output explaining the reason for the delay
> (unless one uses a DEBUG build).
> By adjusting the default load offset for Juno and VFP to be 512K
> aligned in the first place we can skip this copying and boot much
> faster.
> Tested on Juno.
>
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>

Pretty cool. Almost deserves a comment directly in the config
file so people don't screw up the geniusness :)

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij
Ryan Harkin Jan. 5, 2016, 2:41 p.m. UTC | #2
On 5 January 2016 at 09:48, Linus Walleij <linus.walleij@linaro.org> wrote:
> On Mon, Jan 4, 2016 at 4:43 PM, Andre Przywara <andre.przywara@arm.com> wrote:
>
>> The default kernel load offset for an arm64 kernel is 0x80000, so
>> U-Boot takes cares of moving the loaded kernel to a matching memory
>> location just before booting it.
>> Since we run with caches off, this takes a while for any decently
>> sized kernel - with no output explaining the reason for the delay
>> (unless one uses a DEBUG build).
>> By adjusting the default load offset for Juno and VFP to be 512K
>> aligned in the first place we can skip this copying and boot much
>> faster.
>> Tested on Juno.
>>
>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>
> Pretty cool. Almost deserves a comment directly in the config
> file so people don't screw up the geniusness :)
>

And I tested it on Juno.  At first I didn't notice much difference,
but then I actually timed it and it ~halves the time to get the kernel
started from 9 secs to about 4 or 5 secs on my R0 board (after hitting
enter on "run bootcmd").

I didn't test the FVP change because I always use the DRAM config and
I'm not set up to test semihosting.  However, the DRAM config already
has this change, so I'm confident it's the right thing to do.

> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Ryan Harkin <ryan.harkin@linaro.org>

>
> Yours,
> Linus Walleij
Tom Rini Jan. 9, 2016, 3:35 a.m. UTC | #3
On Mon, Jan 04, 2016 at 03:43:36PM +0000, Andre Przywara wrote:

> The default kernel load offset for an arm64 kernel is 0x80000, so
> U-Boot takes cares of moving the loaded kernel to a matching memory
> location just before booting it.
> Since we run with caches off, this takes a while for any decently
> sized kernel - with no output explaining the reason for the delay
> (unless one uses a DEBUG build).
> By adjusting the default load offset for Juno and VFP to be 512K
> aligned in the first place we can skip this copying and boot much
> faster.
> Tested on Juno.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> Tested-by: Ryan Harkin <ryan.harkin@linaro.org>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/include/configs/vexpress_aemv8a.h b/include/configs/vexpress_aemv8a.h
index c767f90..814934a 100644
--- a/include/configs/vexpress_aemv8a.h
+++ b/include/configs/vexpress_aemv8a.h
@@ -189,7 +189,7 @@ 
 #define CONFIG_EXTRA_ENV_SETTINGS	\
 				"kernel_name=norkern\0"	\
 				"kernel_alt_name=Image\0"	\
-				"kernel_addr=0x80000000\0" \
+				"kernel_addr=0x80080000\0" \
 				"initrd_name=ramdisk.img\0"	\
 				"initrd_addr=0x84000000\0"	\
 				"fdt_name=board.dtb\0" \
@@ -233,7 +233,7 @@ 
 #elif CONFIG_TARGET_VEXPRESS64_BASE_FVP
 #define CONFIG_EXTRA_ENV_SETTINGS	\
 				"kernel_name=Image\0"		\
-				"kernel_addr=0x80000000\0"	\
+				"kernel_addr=0x80080000\0"	\
 				"initrd_name=ramdisk.img\0"	\
 				"initrd_addr=0x88000000\0"	\
 				"fdt_name=devtree.dtb\0"	\