/* 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: