• Achin Gupta's avatar
    Add APIs to preserve highest affinity level in OFF state · 0a46e2c3
    Achin Gupta authored
    This patch adds APIs to find, save and retrieve the highest affinity level which
    will enter or exit from the physical OFF state during a PSCI power management
    operation. The level is stored in per-cpu data.
    
    It then reworks the PSCI implementation to perform cache maintenance only
    when the handler for the highest affinity level to enter/exit the OFF state is
    called.
    
    For example. during a CPU_SUSPEND operation, state management is done prior to
    calling the affinity level specific handlers. The highest affinity level which
    will be turned off is determined using the psci_find_max_phys_off_afflvl()
    API. This level is saved using the psci_set_max_phys_off_afflvl() API. In the
    code that does generic handling for each level, prior to performing cache
    maintenance it is first determined if the current affinity level matches the
    value returned by psci_get_max_phys_off_afflvl(). Cache maintenance is done if
    the values match.
    
    This change allows the last CPU in a cluster to perform cache maintenance
    independently. Earlier, cache maintenance was started in the level 0 handler and
    finished in the level 1 handler. This change in approach will facilitate
    implementation of tf-issues#98.
    
    Change-Id: I57233f0a27b3ddd6ddca6deb6a88b234525b0ae6
    0a46e2c3
psci_common.c 20.3 KB