summaryrefslogtreecommitdiff
path: root/hw/arm_boot.c
diff options
context:
space:
mode:
authorLars Munch <lars@segv.dk>2010-05-08 22:43:35 +0200
committerAurelien Jarno <aurelien@aurel32.net>2010-05-31 19:40:41 +0200
commite03c22a98cf5deffd0dec2f9ff88a600aa330bc4 (patch)
treedbb06162b962ef194e422e40641d559b31087662 /hw/arm_boot.c
parent0f89cc7b6c33418f268126cc908b222e0d052f69 (diff)
downloadqemu-e03c22a98cf5deffd0dec2f9ff88a600aa330bc4.tar.gz
qemu-e03c22a98cf5deffd0dec2f9ff88a600aa330bc4.tar.bz2
qemu-e03c22a98cf5deffd0dec2f9ff88a600aa330bc4.zip
arm: fix arm kernel boot for non zero start addr
Booting an arm kernel has been broken a while when booting from non zero start address. This is due to the order of events: board init loads the kernel and sets register 15 to the start address and then qemu_system_reset reset the cpu making register 15 zero again. This patch fixes the usage of the register 15 start address trick in combination with arm_load_kernel. Signed-off-by: Lars Munch <lars@segv.dk> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'hw/arm_boot.c')
-rw-r--r--hw/arm_boot.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/arm_boot.c b/hw/arm_boot.c
index df031a5952..620550b5ab 100644
--- a/hw/arm_boot.c
+++ b/hw/arm_boot.c
@@ -187,6 +187,7 @@ static void main_cpu_reset(void *opaque)
env->regs[15] = info->entry & 0xfffffffe;
env->thumb = info->entry & 1;
} else {
+ env->regs[15] = info->loader_start;
if (old_param) {
set_kernel_args_old(info, info->initrd_size,
info->loader_start);