• Ulf Hansson's avatar
    cpuidle: psci: Prepare to use OS initiated suspend mode via PM domains · a0cf3194
    Ulf Hansson authored
    The per CPU variable psci_power_state, contains an array of fixed values,
    which reflects the corresponding arm,psci-suspend-param parsed from DT, for
    each of the available CPU idle states.
    
    This isn't sufficient when using the hierarchical CPU topology in DT, in
    combination with having PSCI OS initiated (OSI) mode enabled. More
    precisely, in OSI mode, Linux is responsible of telling the PSCI FW what
    idle state the cluster (a group of CPUs) should enter, while in PSCI
    Platform Coordinated (PC) mode, each CPU independently votes for an idle
    state of the cluster.
    
    For this reason, introduce a per CPU variable called domain_state and
    implement two helper functions to read/write its value. Then let the
    domain_state take precedence over the regular selected state, when entering
    and idle state.
    
    To avoid executing the above OSI specific code in the ->enter() callback,
    while operating in the default PSCI Platform Coordinated mode, let's also
    add a new enter-function and use it for OSI.
    Co-developed-by: default avatarLina Iyer <lina.iyer@linaro.org>
    Signed-off-by: default avatarLina Iyer <lina.iyer@linaro.org>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Reviewed-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Acked-by: default avatarRafael J. Wysocki <rafael@kernel.org>
    a0cf3194
cpuidle-psci.c 6.65 KB