diff --git a/arch/arm/boards/qemu-virt64/Makefile b/arch/arm/boards/qemu-virt64/Makefile index e354607..b394dde 100644 --- a/arch/arm/boards/qemu-virt64/Makefile +++ b/arch/arm/boards/qemu-virt64/Makefile @@ -1,3 +1,3 @@ obj-y += init.o -lwl-y += lowlevel.o +lwl-y += lowlevel.o lowlevel_init.o bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-qemu-virt64 diff --git a/arch/arm/boards/qemu-virt64/lowlevel.c b/arch/arm/boards/qemu-virt64/lowlevel.c index 629e2e9..fcb0523 100644 --- a/arch/arm/boards/qemu-virt64/lowlevel.c +++ b/arch/arm/boards/qemu-virt64/lowlevel.c @@ -10,7 +10,9 @@ #include #include -void barebox_arm_reset_vector(uint32_t r0, uint32_t r1, uint32_t r2) +void qemu_virt64_start(uint32_t, uint32_t, uint32_t); + +void noinline qemu_virt64_start(uint32_t r0, uint32_t r1, uint32_t r2) { arm_cpu_lowlevel_init(); arm_setup_stack(0x40000000 + SZ_2G - SZ_16K); diff --git a/arch/arm/boards/qemu-virt64/lowlevel_init.S b/arch/arm/boards/qemu-virt64/lowlevel_init.S new file mode 100644 index 0000000..1967fad --- /dev/null +++ b/arch/arm/boards/qemu-virt64/lowlevel_init.S @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include +#include + +/* The DRAM is already setup */ +#define STACK_TOP 0x80000000 + +ENTRY_PROC(barebox_arm_reset_vector) + mov x0, #STACK_TOP + mov sp, x0 + b qemu_virt64_start +ENTRY_PROC_END(barebox_arm_reset_vector)