arm-trusted-firmware/plat/arm/board
Oliver Swede 7ee4db6e47 plat/arm/board/arm_fpga: Add PSCI implementation for FPGA images
This adds a basic PSCI implementation allow secondary CPUs to be
released from an initial state and continue through to the warm boot
entrypoint.

Each secondary CPU is kept in a holding pen, whereby it polls the value
representing its hold state, by reading this from an array that acts as
a table for all the PEs. The hold states are initially set to 0 for all
cores to indicate that the executing core should continue polling.
To prevent the secondary CPUs from interfering with the platform's
initialization, they are only updated by the primary CPU once the cold
boot sequence has completed and fpga_pwr_domain_on(mpidr) is called.
The polling target CPU will then read 1 (which indicates that it should
branch to the warm reset entrypoint) and then jump to that address
rather than continue polling.

In addition to the initial polling behaviour of the secondary CPUs
before their warm boot reset sequence, they are also placed in a
low-power wfe() state at the end of each poll; accordingly, the PSCI
fpga_pwr_domain_on(mpidr) function also signals an event to all cores
(after updating the target CPU's hold entry) to wake them from this
state, allowing any secondary CPUs that are still polling to check
their hold state again.
This method is in accordance with both the PSCI and Linux kernel
recommendations, as the lessened overhead reduces the energy
consumption associated with the busy-loop.

The table of hold entries is implemented by a global array as shared SRAM
(which is used by other platforms in similar implementations) is not
available on the FPGA images.

Signed-off-by: Oliver Swede <oli.swede@arm.com>
Change-Id: I65cfd1892f8be1dfcb285f0e1e94e7a9870cdf5a
2020-03-26 20:40:48 +00:00
..
a5ds fconf: Add dynamic config DTBs info as property 2020-02-07 13:51:32 +00:00
arm_fpga plat/arm/board/arm_fpga: Add PSCI implementation for FPGA images 2020-03-26 20:40:48 +00:00
common plat/arm: Retrieve the right ROTPK when using the dualroot CoT 2020-02-24 11:01:48 +01:00
corstone700 corstone700: set UART clocks to 32MHz 2020-02-17 17:04:46 +00:00
fvp Merge "FVP: In BL31/SP_MIN, map only the needed DRAM region statically" into integration 2020-03-18 10:38:39 +00:00
fvp_ve fconf: Add dynamic config DTBs info as property 2020-02-07 13:51:32 +00:00
juno juno/sgm: Maximize space allocated to SCP_BL2 2020-03-12 15:12:23 +00:00
n1sdp Merge "n1sdp: Enable the NEOVERSE_N1_EXTERNAL_LLC flag" into integration 2020-03-12 10:09:31 +00:00
rddaniel board/rddaniel: add NSAID sources for TZC400 driver 2020-03-12 18:36:29 +05:30
rde1edge plat/arm: Pass cookie argument down to arm_get_rotpk_info() 2020-02-24 11:01:46 +01:00
rdn1edge plat/arm: Pass cookie argument down to arm_get_rotpk_info() 2020-02-24 11:01:46 +01:00
sgi575 plat/arm: Pass cookie argument down to arm_get_rotpk_info() 2020-02-24 11:01:46 +01:00
sgm775 Merge changes from topic "sb/dualroot" into integration 2020-03-10 18:34:56 +00:00