summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylvain Garrigues <sylvain@sylvaingarrigues.com>2016-04-20 23:35:28 +0200
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 20:03:50 -0600
commite031dcbc348281ae31f85c72df89fd9c0f829931 (patch)
treee75b090361ce2c5616432e01523aa2d0bb89c16b
parent8b89cfed94c43184b8bde76770a82300efce31c8 (diff)
downloadhqemu-e031dcbc348281ae31f85c72df89fd9c0f829931.zip
hqemu-e031dcbc348281ae31f85c72df89fd9c0f829931.tar.gz
hw/arm/boot: always clear r0 when booting kernels
The 32-bit ARM Linux kernel booting ABI requires that r0 is 0 when calling the kernel image. A bug in commit 10b8ec73e610e01 meant that for boards which use the write_board_setup hook (which means "highbank", "midway", "raspi2" and "xilinx-zynq-a9") we were incorrectly skipping the "clear r0" instruction in the mini-bootloader. Use the right offset in the "add lr, pc, #n" instruction so that we return from the board-setup code to the correct place. Signed-off-by: Sylvain Garrigues <sylvain@sylvaingarrigues.com> [PMM: Expanded commit message] Cc: qemu-stable@nongnu.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/arm/boot.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index 5975fbf..5876945 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -68,7 +68,7 @@ static const ARMInsnFixup bootloader_aarch64[] = {
*/
static const ARMInsnFixup bootloader[] = {
- { 0xe28fe008 }, /* add lr, pc, #8 */
+ { 0xe28fe004 }, /* add lr, pc, #4 */
{ 0xe51ff004 }, /* ldr pc, [pc, #-4] */
{ 0, FIXUP_BOARD_SETUP },
#define BOOTLOADER_NO_BOARD_SETUP_OFFSET 3
OpenPOWER on IntegriCloud