• Jeenu Viswambharan's avatar
    PSCI: Optimize call paths if all participants are cache-coherent · b0408e87
    Jeenu Viswambharan authored
    
    
    The current PSCI implementation can apply certain optimizations upon the
    assumption that all PSCI participants are cache-coherent.
    
      - Skip performing cache maintenance during power-up.
    
      - Skip performing cache maintenance during power-down:
    
        At present, on the power-down path, CPU driver disables caches and
        MMU, and performs cache maintenance in preparation for powering down
        the CPU. This means that PSCI must perform additional cache
        maintenance on the extant stack for correct functioning.
    
        If all participating CPUs are cache-coherent, CPU driver would
        neither disable MMU nor perform cache maintenance. The CPU being
        powered down, therefore, remain cache-coherent throughout all PSCI
        call paths. This in turn means that PSCI cache maintenance
        operations are not required during power down.
    
      - Choose spin locks instead of bakery locks:
    
        The current PSCI implementation must synchronize both cache-coherent
        and non-cache-coherent participants. Mutual exclusion primitives are
        not guaranteed to function on non-coherent memory. For this reason,
        the current PSCI implementation had to resort to bakery locks.
    
        If all participants are cache-coherent, the implementation can
        enable MMU and data caches early, and substitute bakery locks for
        spin locks. Spin locks make use of architectural mutual exclusion
        primitives, and are lighter and faster.
    
    The optimizations are applied when HW_ASSISTED_COHERENCY build option is
    enabled, as it's expected that all PSCI participants are cache-coherent
    in those systems.
    
    Change-Id: Iac51c3ed318ea7e2120f6b6a46fd2db2eae46ede
    Signed-off-by: default avatarJeenu Viswambharan <jeenu.viswambharan@arm.com>
    b0408e87
psci_common.c 37.3 KB