allwinner: Use the arisc to turn off ARM cores
authorAndre Przywara <andre.przywara@arm.com>
Thu, 27 Sep 2018 23:43:32 +0000 (00:43 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Sat, 20 Oct 2018 15:23:59 +0000 (16:23 +0100)
commit7db0c96023281d8a530f5e011a232e5d56557437
tree66c6c58e9b33e99aeac87fefa1c7659be02c4940
parent11480b9010d4b188e06395b7ac01b4aa164a110d
allwinner: Use the arisc to turn off ARM cores

PSCI requires a core to turn itself off, which we can't do properly by
just executing an algorithm on that very core. As a consequence we just
put a core into WFI on CPU_OFF right now.
To fix this let's task the "arisc" management processor (an OpenRISC
core) with that task of asserting reset and turning off the core's power
domain. We use a handcrafted sequence of OpenRISC instructions to
achieve this, and hand this data over to the new sunxi_execute_arisc_code()
routine.
The commented source code for this routine is provided in a separate file,
but the ATF code contains the already encoded instructions as data.
The H6 uses the same algorithm, but differs in the MMIO addresses, so
provide a SoC (family) specific copy of that code.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
plat/allwinner/common/arisc_off.S [new file with mode: 0644]
plat/allwinner/common/sunxi_cpu_ops.c
plat/allwinner/common/sunxi_pm.c
plat/allwinner/sun50i_a64/include/core_off_arisc.h [new file with mode: 0644]
plat/allwinner/sun50i_h6/include/core_off_arisc.h [new file with mode: 0644]