• Srinivas Pandruvada's avatar
    cpufreq: intel_pstate: Process HWP Guaranteed change notification · 57577c99
    Srinivas Pandruvada authored
    It is possible that HWP guaranteed ratio is changed in response to
    change in power and thermal limits. For example when Intel Speed Select
    performance profile is changed or there is change in TDP, hardware can
    send notifications. It is possible that the guaranteed ratio is
    increased. This creates an issue when turbo is disabled, as the old
    limits set in MSR_HWP_REQUEST are still lower and hardware will clip
    to older limits.
    
    This change enables HWP interrupt and process HWP interrupts. When
    guaranteed is changed, calls cpufreq_update_policy() so that driver
    callbacks are called to update to new HWP limits. This callback
    is called from a delayed workqueue of 10ms to avoid frequent updates.
    
    Although the scope of IA32_HWP_INTERRUPT is per logical cpu, on some
    plaforms interrupt is generated on all CPUs. This is particularly a
    problem during initialization, when the driver didn't allocated
    data for other CPUs. So this change uses a cpumask of enabled CPUs and
    process interrupts on those CPUs only.
    
    When the cpufreq offline() or suspend() callback is called, HWP interrupt
    is disabled on those CPUs and also cancels any pending work item.
    
    Spin lock is used to protect data and processing shared with interrupt
    handler. Here READ_ONCE(), WRITE_ONCE() macros are used to designate
    shared data, even though spin lock act as an optimization barrier here.
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Tested-by: pablomh@gmail.com
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    57577c99
intel_pstate.c 86.7 KB