• Andre Przywara's avatar
    sunxi: A64: do an RMR switch if started in AArch32 mode · 83843c9b
    Andre Przywara authored
    The Allwinner A64 SoC starts execution in AArch32 mode, and both
    the boot ROM and Allwinner's boot0 keep running in this mode.
    So U-Boot gets entered in 32-bit, although we want it to run in AArch64.
    By using a "magic" instruction, which happens to be an almost-NOP in
    AArch64 and a branch in AArch32, we differentiate between being
    entered in 64-bit or 32-bit mode.
    If in 64-bit mode, we proceed with the branch to reset, but in 32-bit
    mode we trigger an RMR write to bring the core into AArch64/EL3 and
    re-enter U-Boot at CONFIG_SYS_TEXT_BASE.
    This allows a 64-bit U-Boot to be both entered in 32 and 64-bit mode,
    so we can use the same start code for the SPL and the U-Boot proper.
    We use the existing custom header (boot0.h) functionality, but restrict
    the existing boot0 header reservation to the non-SPL build now. A SPL
    wouldn't need such header anyway. This allows to have both options
    defined and lets us use one for the SPL and the other for U-Boot proper.
    Also add arch/arm/mach-sunxi/rmr_switch.S, which contains the original
    ARM assembly code and instructions how to re-generate the encoded
    Signed-off-by: 's avatarAndre Przywara <andre.przywara@arm.com>
    Acked-by: 's avatarMaxime Ripard <maxime.ripard@free-electrons.com>
    Reviewed-by: 's avatarJagan Teki <jagan@openedev.com>
Last commit
Last update
Kconfig Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README.pine64 Loading commit data...
ahci.c Loading commit data...
board.c Loading commit data...
dram_sun4i_auto.c Loading commit data...
dram_sun5i_auto.c Loading commit data...
dram_timings_sun4i.h Loading commit data...
gmac.c Loading commit data...