Skip to content
  • Andre Przywara's avatar
    ARM: add C function to switch to non-secure state · 1ef92385
    Andre Przywara authored
    
    
    The core specific part of the work is done in the assembly routine
    in nonsec_virt.S, introduced with the previous patch, but for the full
    glory we need to setup the GIC distributor interface once for the
    whole system, which is done in C here.
    The routine is placed in arch/arm/cpu/armv7 to allow easy access from
    other ARMv7 boards.
    
    We check the availability of the security extensions first.
    
    Since we need a safe way to access the GIC, we use the PERIPHBASE
    registers on Cortex-A15 and A7 CPUs and do some sanity checks.
    Boards not implementing the CBAR can override this value via a
    configuration file variable.
    
    Then we actually do the GIC enablement:
    a) enable the GIC distributor, both for non-secure and secure state
       (GICD_CTLR[1:0] = 11b)
    b) allow all interrupts to be handled from non-secure state
       (GICD_IGROUPRn = 0xFFFFFFFF)
    
    The core specific GIC setup is then done in the assembly routine.
    
    Signed-off-by: default avatarAndre Przywara <andre.przywara@linaro.org>
    1ef92385