• 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
    version.
    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>
    83843c9b
Name
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...