• Srinivas Pandruvada's avatar
    cpufreq: intel_pstate: Allow raw energy performance preference value · f473bf39
    Srinivas Pandruvada authored
    Currently using attribute "energy_performance_preference", user space can
    write one of the four per-defined preference string. These preference
    strings gets mapped to a hard-coded Energy-Performance Preference (EPP) or
    Energy-Performance Bias (EPB) knob.
    
    These four values are supposed to cover broad spectrum of use cases, but
    are not uniformly distributed in the range. There are number of cases,
    where this is not enough. For example:
    
    Suppose user wants more performance when connected to AC. Instead of using
    default "balance performance", the "performance" setting can be used. This
    changes EPP value from 0x80 to 0x00. But setting EPP to 0, results in
    electrical and thermal issues on some platforms. This results in
    aggressive throttling, which causes a drop in performance. But some value
    between 0x80 and 0x00 results in better performance. But that value can't
    be fixed as the power curve is not linear. In some cases just changing EPP
    from 0x80 to 0x75 is enough to get significant performance gain.
    
    Similarly on battery the default "balance_performance" mode can be
    aggressive in power consumption. But picking up the next choice
    "balance power" results in too much loss of performance, which results in
    bad user experience in use cases like "Google Hangout". It was observed
    that some value between these two EPP is optimal.
    
    This change allows fine grain EPP tuning for platform like Chromebook or
    for users who wants to fine tune power and performance.
    Here based on the product and use cases, different EPP values can be set.
    This change is similar to the change done for:
    /sys/devices/system/cpu/cpu*/power/energy_perf_bias
    where user has choice to write a predefined string or raw value.
    
    The change itself is trivial. When user preference doesn't match
    predefined string preferences and value is an unsigned integer and in
    range, use that value for EPP. When the EPP feature is not present
    writing raw value is not supported.
    Suggested-by: default avatarLen Brown <lenb@kernel.org>
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    f473bf39
intel_pstate.c 71.8 KB