blob: 4a1a254b9230f473301e17eb9de39a2114b56818 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* sbsa-ref starts U-Boot in XIP memory. Need to relocate U-Boot
* to DRAM which is already up. Instead of using SPL this simple loader
* is being used.
*/
relocate_check:
/* x0 contains the pointer to FDT provided by ATF */
adr x1, _start /* x1 <- Runtime value of _start */
ldr x2, _TEXT_BASE /* x2 <- Linked value of _start */
subs x9, x1, x2 /* x9 <- Run-vs-link offset */
beq reset
adrp x1, __image_copy_start /* x2 <- address bits [31:12] */
add x1, x1, :lo12:__image_copy_start/* x2 <- address bits [11:00] */
adrp x3, __image_copy_end /* x3 <- address bits [31:12] */
add x3, x3, :lo12:__image_copy_end /* x3 <- address bits [11:00] */
add x3, x3, #0x100000 /* 1 MiB for the DTB found at _end */
copy_loop:
ldp x10, x11, [x1], #16 /* copy from source address [x1] */
stp x10, x11, [x2], #16 /* copy to target address [x2] */
cmp x1, x3 /* until source end address [x3] */
b.lo copy_loop
isb
ldr x2, _TEXT_BASE /* x2 <- Linked value of _start */
br x2 /* Jump to linked address */
/* Never reaches this point */
1:
wfi
b 1b
relocate_done: