[U-Boot] [PATCH 1/2] arm: Make reset position-independent
Albert ARIBAUD
albert.u.boot at aribaud.net
Fri Sep 12 07:51:52 CEST 2014
Hi Benoît,
On Wed, 3 Sep 2014 23:32:33 +0200, Benoît Thébaudeau
<benoit.thebaudeau.dev at gmail.com> wrote:
> Some boards, like mx31pdk and tx25, require the beginning of the SPL
> code to be position-independent. For these two boards, this is because
> they use the i.MX external NAND boot, which starts by executing the
> first NAND Flash page from the NFC page buffer. The SPL then needs to
> copy itself to its actual link address in order to free the NFC page
> buffer and use it to load the non-SPL image from Flash before running
> it. This means that the SPL runtime address differs from its link
> address between the reset and the initial copy performed by
> board_init_f(), so this part of the SPL binary must be
> position-independent.
>
> This requirement was broken by commit 41623c9 'arm: move exception
> handling out of start.S files', which used an absolute address to branch
> to the reset routine. This new commit restores the original behavior,
> which just performed a relative branch. This fixes the boot of mx31pdk
> and tx25.
>
> Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau.dev at gmail.com>
> Reported-by: Helmut Raiger <helmut.raiger at hale.at>
> Cc: Albert Aribaud <albert.u.boot at aribaud.net>
> Cc: Magnus Lilja <lilja.magnus at gmail.com>
> Cc: John Rigby <jcrigby at gmail.com>
> ---
> arch/arm/lib/vectors.S | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S
> index 493f337..843b18f 100644
> --- a/arch/arm/lib/vectors.S
> +++ b/arch/arm/lib/vectors.S
> @@ -50,7 +50,7 @@
> #endif
>
> _start:
> - ldr pc, _reset
> + b reset
> ldr pc, _undefined_instruction
> ldr pc, _software_interrupt
> ldr pc, _prefetch_abort
> @@ -77,7 +77,6 @@ _start:
> .globl _irq
> .globl _fiq
>
> -_reset: .word reset
> _undefined_instruction: .word undefined_instruction
> _software_interrupt: .word software_interrupt
> _prefetch_abort: .word prefetch_abort
Applied (as a bug fix) to u-boot-arm/master, thanks!
Amicalement,
--
Albert.
More information about the U-Boot
mailing list