• Vaidyanathan Srinivasan's avatar
    cpufreq: powernv: cpufreq driver for powernv platform · b3d627a5
    Vaidyanathan Srinivasan authored
    Backend driver to dynamically set voltage and frequency on
    IBM POWER non-virtualized platforms.  Power management SPRs
    are used to set the required PState.
    
    This driver works in conjunction with cpufreq governors
    like 'ondemand' to provide a demand based frequency and
    voltage setting on IBM POWER non-virtualized platforms.
    
    PState table is obtained from OPAL v3 firmware through device
    tree.
    
    powernv_cpufreq back-end driver would parse the relevant device-tree
    nodes and initialise the cpufreq subsystem on powernv platform.
    
    The code was originally written by svaidy@linux.vnet.ibm.com. Over
    time it was modified to accomodate bug-fixes as well as updates to the
    the cpu-freq core. Relevant portions of the change logs corresponding
    to those modifications are noted below:
    
     * The policy->cpus needs to be populated in a hotplug-invariant
       manner instead of using cpu_sibling_mask() which varies with
       cpu-hotplug. This is because the cpufreq core code copies this
       content into policy->related_cpus mask which should not vary on
       cpu-hotplug. [Authored by srivatsa.bhat@linux.vnet.ibm.com]
    
     * Create a helper routine that can return the cpu-frequency for the
       corresponding pstate_id. Also, cache the values of the pstate_max,
       pstate_min and pstate_nominal and nr_pstates in a static structure
       so that they can be reused in the future to perform any
       validations. [Authored by ego@linux.vnet.ibm.com]
    
     * Create a driver attribute named cpuinfo_nominal_freq which creates
       a sysfs read-only file named cpuinfo_nominal_freq. Export the
       frequency corresponding to the nominal_pstate through this
       interface.
    
         Nominal frequency is the highest non-turbo frequency for the
       platform.  This is generally used for setting governor policies
       from user space for optimal energy efficiency. [Authored by
       ego@linux.vnet.ibm.com]
    
     * Implement a powernv_cpufreq_get(unsigned int cpu) method which will
       return the current operating frequency. Export this via the sysfs
       interface cpuinfo_cur_freq by setting powernv_cpufreq_driver.get to
       powernv_cpufreq_get(). [Authored by ego@linux.vnet.ibm.com]
    
    [Change log updated by ego@linux.vnet.ibm.com]
    Reviewed-by: default avatarPreeti U Murthy <preeti@linux.vnet.ibm.com>
    Signed-off-by: default avatarVaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
    Signed-off-by: default avatarSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarGautham R. Shenoy <ego@linux.vnet.ibm.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    b3d627a5
Makefile 4.91 KB