Skip to content
Snippets Groups Projects
Forked from Reform / reform-boundary-uboot
Source project has a limited visibility.
  • Andre Przywara's avatar
    ba6a1698
    ARM: add SMP support for non-secure switch · ba6a1698
    Andre Przywara authored
    
    Currently the non-secure switch is only done for the boot processor.
    To enable full SMP support, we have to switch all secondary cores
    into non-secure state also.
    
    So we add an entry point for secondary CPUs coming out of low-power
    state and make sure we put them into WFI again after having switched
    to non-secure state.
    For this we acknowledge and EOI the wake-up IPI, then go into WFI.
    Once being kicked out of it later, we sanity check that the start
    address has actually been changed (since another attempt to switch
    to non-secure would block the core) and jump to the new address.
    
    The actual CPU kick is done by sending an inter-processor interrupt
    via the GIC to all CPU interfaces except the requesting processor.
    The secondary cores will then setup their respective GIC CPU
    interface.
    While this approach is pretty universal across several ARMv7 boards,
    we make this function weak in case someone needs to tweak this for
    a specific board.
    
    The way of setting the secondary's start address is board specific,
    but mostly different only in the actual SMP pen address, so we also
    provide a weak default implementation and just depend on the proper
    address to be set in the config file.
    
    Signed-off-by: default avatarAndre Przywara <andre.przywara@linaro.org>
    ba6a1698
    History
    ARM: add SMP support for non-secure switch
    Andre Przywara authored
    
    Currently the non-secure switch is only done for the boot processor.
    To enable full SMP support, we have to switch all secondary cores
    into non-secure state also.
    
    So we add an entry point for secondary CPUs coming out of low-power
    state and make sure we put them into WFI again after having switched
    to non-secure state.
    For this we acknowledge and EOI the wake-up IPI, then go into WFI.
    Once being kicked out of it later, we sanity check that the start
    address has actually been changed (since another attempt to switch
    to non-secure would block the core) and jump to the new address.
    
    The actual CPU kick is done by sending an inter-processor interrupt
    via the GIC to all CPU interfaces except the requesting processor.
    The secondary cores will then setup their respective GIC CPU
    interface.
    While this approach is pretty universal across several ARMv7 boards,
    we make this function weak in case someone needs to tweak this for
    a specific board.
    
    The way of setting the secondary's start address is board specific,
    but mostly different only in the actual SMP pen address, so we also
    provide a weak default implementation and just depend on the proper
    address to be set in the config file.
    
    Signed-off-by: default avatarAndre Przywara <andre.przywara@linaro.org>