• Oliver Swede's avatar
    plat/arm/board/arm_fpga: Add PSCI implementation for FPGA images · 7ee4db6e
    Oliver Swede authored
    
    
    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: default avatarOliver Swede <oli.swede@arm.com>
    Change-Id: I65cfd1892f8be1dfcb285f0e1e94e7a9870cdf5a
    7ee4db6e
fpga_topology.c 1.83 KB