• Vikram Kanigiri's avatar
    Perform security setup separately for each ARM platform · a9cc84d7
    Vikram Kanigiri authored
    Prior to this patch, it was assumed that on all ARM platforms the bare
    minimal security setup required is to program TrustZone protection. This
    would always be done by programming the TZC-400 which was assumed to be
    present in all ARM platforms. The weak definition of
    platform_arm_security_setup() in plat/arm/common/arm_security.c
    reflected these assumptions.
    
    In reality, each ARM platform either decides at runtime whether
    TrustZone protection needs to be programmed (e.g. FVPs) or performs
    some security setup in addition to programming TrustZone protection
    (e.g. NIC setup on Juno). As a result, the weak definition of
    plat_arm_security_setup() is always overridden.
    
    When a platform needs to program TrustZone protection and implements the
    TZC-400 peripheral, it uses the arm_tzc_setup() function to do so. It is
    also possible to program TrustZone protection through other peripherals
    that include a TrustZone controller e.g. DMC-500. The programmer's
    interface is slightly different across these various peripherals.
    
    In order to satisfy the above requirements, this patch makes the
    following changes to the way security setup is done on ARM platforms.
    
    1. arm_security.c retains the definition of arm_tzc_setup() and has been
       renamed to arm_tzc400.c. This is to reflect the reliance on the
       TZC-400 peripheral to perform TrustZone programming. The new file is
       not automatically included in all platform ports through
       arm_common.mk. Each platform must include it explicitly in a platform
       specific makefile if needed.
    
       This approach enables introduction of similar library code to program
       TrustZone protection using a different peripheral. This code would be
       used by the subset of ARM platforms that implement this peripheral.
    
    2. Due to #1 above, existing platforms which implements the TZC-400 have been
       updated to include the necessary files for both BL2, BL2U and BL31
       images.
    
    Change-Id: I513c58f7a19fff2e9e9c3b95721592095bcb2735
    a9cc84d7
arm_tzc400.c 3.54 KB