u-boot-brain/arch/arm/mach-sunxi
Andre Przywara 83843c9b3a sunxi: A64: do an RMR switch if started in AArch32 mode
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: Andre Przywara <andre.przywara@arm.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Reviewed-by: Jagan Teki <jagan@openedev.com>
2017-01-04 16:37:42 +01:00
..
board.c spl: sunxi: Drop spl_board_announce_boot_device() 2016-12-09 08:40:16 -05:00
clock_sun4i.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
clock_sun6i.c sun6i: Restrict some register initialization to Allwinner A31 SoC 2017-01-04 16:37:40 +01:00
clock_sun8i_a83t.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
clock_sun9i.c sunxi: add initial clock setup for sun9i for SPL 2016-10-30 11:38:04 +01:00
clock.c sunxi: add gtbus-initialisation for sun9i 2016-10-30 11:38:04 +01:00
cpu_info.c sunxi: fix SID read on H3 2016-12-20 16:08:50 +01:00
dram_helpers.c ARM: Rework and correct barrier definitions 2016-08-05 07:23:57 -04:00
dram_sun4i.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
dram_sun6i.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
dram_sun8i_a23.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
dram_sun8i_a33.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
dram_sun8i_a83t.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
dram_sun8i_h3.c sunxi: Fix H3 DRAM impedance calibration on rev. A chips 2016-10-10 09:24:00 +02:00
dram_sun9i.c sunxi: DRAM initialisation for sun9i 2016-10-30 11:38:04 +01:00
gtbus_sun9i.c sunxi: add gtbus-initialisation for sun9i 2016-10-30 11:38:04 +01:00
Makefile sunxi: add gtbus-initialisation for sun9i 2016-10-30 11:38:04 +01:00
p2wi.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
pinmux.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
pmic_bus.c sunxi: power: add AXP809 support 2016-05-25 17:52:39 +02:00
prcm.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
rmr_switch.S sunxi: A64: do an RMR switch if started in AArch32 mode 2017-01-04 16:37:42 +01:00
rsb.c sunxi: Move cpu independent code to mach directory 2016-04-01 09:52:28 +02:00
usb_phy.c sunxi: A64: enable USB support 2016-10-30 11:38:04 +01:00