Srinivas Pandruvada
ff7c991714
cpufreq: intel_pstate: Fix scaling max/min limits with Turbo 3.0
...
When scaling max/min settings are changed, internally they are converted
to a ratio using the max turbo 1 core turbo frequency. This works fine
when 1 core max is same irrespective of the core. But under Turbo 3.0,
this will not be the case. For example:
Core 0: max turbo pstate: 43 (4.3GHz)
Core 1: max turbo pstate: 45 (4.5GHz)
In this case 1 core turbo ratio will be maximum of all, so it will be
45 (4.5GHz). Suppose scaling max is set to 4GHz (ratio 40) for all cores
,then on core one it will be
= max_state * policy->max / max_freq;
= 43 * (4000000/4500000) = 38 (3.8GHz)
= 38
which is 200MHz less than the desired.
On core2, it will be correctly set to ratio 40 (4GHz). Same holds true
for scaling min frequency limit. So this requires usage of correct turbo
max frequency for core one, which in this case is 4.3GHz. So we need to
adjust per CPU cpu->pstate.turbo_freq using the maximum HWP ratio of that
core.
This change uses the HWP capability of a core to adjust max turbo
frequency. But since Broadwell HWP doesn't use ratios in the HWP
capabilities, we have to use legacy max 1 core turbo ratio. This is not
a problem as the HWP capabilities don't differ among cores in Broadwell.
We need to check for non Broadwell CPU model for applying this change,
though.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: 4.6+ <stable@vger.kernel.org> # 4.6+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-06-19 10:40:29 +02:00
..
acpi-cpufreq.c
Additional power management updates for 4.18-rc1
2018-06-13 07:24:18 -07:00
amd_freq_sensitivity.c
cpufreq: AMD: Ignore the check for ProcFeedback in ST/CZ
2018-02-07 11:26:37 +01:00
arm_big_little.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
arm_big_little.h
cpufreq: arm_big_little: make function arguments and structure pointer const
2017-11-08 23:22:19 +01:00
arm_big_little_dt.c
cpufreq: arm_big_little: make cpufreq_arm_bL_ops structures const
2017-11-08 23:22:20 +01:00
armada-37xx-cpufreq.c
cpufreq: add suspend/resume support in Armada 37xx DVFS driver
2018-05-10 11:43:59 +02:00
bmips-cpufreq.c
treewide: kmalloc() -> kmalloc_array()
2018-06-12 16:19:22 -07:00
brcmstb-avs-cpufreq.c
treewide: devm_kzalloc() -> devm_kcalloc()
2018-06-12 16:19:22 -07:00
cppc_cpufreq.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
cpufreq-dt-platdev.c
cpufreq: Add Kryo CPU scaling driver
2018-05-30 12:53:11 +02:00
cpufreq-dt.c
cpufreq: dt: Allow platform specific suspend/resume callbacks
2018-05-10 11:43:59 +02:00
cpufreq-dt.h
cpufreq: dt: Allow platform specific suspend/resume callbacks
2018-05-10 11:43:59 +02:00
cpufreq-nforce2.c
cpufreq: Add CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING cpufreq driver flag
2017-07-26 00:15:46 +02:00
cpufreq.c
cpufreq: Use static SRCU initializer
2018-05-30 11:16:59 +02:00
cpufreq_conservative.c
cpufreq: governor: Drop min_sampling_rate
2017-07-22 02:25:20 +02:00
cpufreq_governor.c
cpufreq: governors: Fix long idle detection logic in load calculation
2018-06-08 11:40:44 +02:00
cpufreq_governor.h
cpufreq: Replace "max_transition_latency" with "dynamic_switching"
2017-07-26 00:15:45 +02:00
cpufreq_governor_attr_set.c
cpufreq: governor: Move abstract gov_attr_set code to seperate file
2016-04-02 01:09:01 +02:00
cpufreq_ondemand.c
cpufreq: governor: Drop min_sampling_rate
2017-07-22 02:25:20 +02:00
cpufreq_ondemand.h
cpufreq: ondemand: Don't keep a copy of freq_table pointer
2016-06-09 00:58:06 +02:00
cpufreq_performance.c
cpufreq: governor: Get rid of governor events
2016-06-02 23:24:15 +02:00
cpufreq_powersave.c
cpufreq: governor: Get rid of governor events
2016-06-02 23:24:15 +02:00
cpufreq_stats.c
cpufreq: stats: Change return type of cpufreq_stats_update() as void
2018-01-05 13:22:46 +01:00
cpufreq_userspace.c
cpufreq: governor: Get rid of governor events
2016-06-02 23:24:15 +02:00
davinci-cpufreq.c
ARM: davinci: da850: fix da850_set_pll0rate()
2017-01-02 15:02:51 +05:30
e_powersaver.c
cpufreq: e_powersaver: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
elanfreq.c
cpufreq: elanfreq: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
exynos5440-cpufreq.c
cpufreq: Add and use cpufreq_for_each_{valid_,}entry_idx()
2018-02-08 10:21:39 +01:00
freq_table.c
cpufreq: Drop cpufreq_table_validate_and_show()
2018-04-10 08:40:45 +02:00
gx-suspmod.c
cpufreq: Add CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING cpufreq driver flag
2017-07-26 00:15:46 +02:00
highbank-cpufreq.c
ia64-acpi-cpufreq.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
imx6q-cpufreq.c
Additional power management updates for 4.18-rc1
2018-06-13 07:24:18 -07:00
intel_pstate.c
cpufreq: intel_pstate: Fix scaling max/min limits with Turbo 3.0
2018-06-19 10:40:29 +02:00
Kconfig
cpufreq: remove at32ap-cpufreq
2018-02-07 11:44:23 +01:00
Kconfig.arm
cpufreq: kryo: allow building as a loadable module
2018-06-06 08:29:29 +02:00
Kconfig.powerpc
Kconfig.x86
sched/x86: Change CONFIG_SCHED_ITMT to CONFIG_SCHED_MC_PRIO
2016-11-30 08:27:08 +01:00
kirkwood-cpufreq.c
cpufreq: kirkwood-cpufreq:- Handle return value of clk_prepare_enable()
2017-05-30 00:09:41 +02:00
longhaul.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
longhaul.h
longrun.c
cpufreq: Don't set transition_latency for setpolicy drivers
2017-07-26 00:15:43 +02:00
loongson1-cpufreq.c
CPUFREQ: Loongson1: Replace goto out with return in ls1x_cpufreq_probe()
2016-05-13 14:02:08 +02:00
loongson2_cpufreq.c
cpufreq: Loongson2: constify platform_device_id
2017-08-18 01:44:21 +02:00
Makefile
cpufreq: Add Kryo CPU scaling driver
2018-05-30 12:53:11 +02:00
maple-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
mediatek-cpufreq.c
cpufreq: mediatek: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
mvebu-cpufreq.c
cpufreq: mvebu: Free opp if registering failed
2017-12-16 02:29:43 +01:00
omap-cpufreq.c
PM / OPP: Update OPP users to put reference
2017-01-30 09:22:21 +01:00
p4-clockmod.c
cpufreq: p4-clockmod: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
pasemi-cpufreq.c
cpufreq: Add and use cpufreq_for_each_{valid_,}entry_idx()
2018-02-08 10:21:39 +01:00
pcc-cpufreq.c
Revert "cpufreq: pcc-cpufreq: update default value of cpuinfo_transition_latency"
2016-07-22 23:51:06 +02:00
pmac32-cpufreq.c
cpufreq: Add CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING cpufreq driver flag
2017-07-26 00:15:46 +02:00
pmac64-cpufreq.c
cpufreq: Convert to using %pOF instead of full_name
2017-08-25 01:20:46 +02:00
powernow-k6.c
cpufreq: powernow: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
powernow-k7.c
cpufreq: powernow: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
powernow-k7.h
powernow-k8.c
cpufreq: powernow: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
powernow-k8.h
powernv-cpufreq.c
cpufreq: powernv: Fix hardlockup due to synchronous smp_call in timer interrupt
2018-04-27 16:16:10 +10:00
ppc_cbe_cpufreq.c
cpufreq: ppc_cbe: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
ppc_cbe_cpufreq.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
ppc_cbe_cpufreq_pervasive.c
ppc_cbe_cpufreq_pmi.c
cpufreq: Remove CPUFREQ_START notifier event
2017-02-04 00:05:30 +01:00
pxa2xx-cpufreq.c
cpufreq: pxa: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
pxa3xx-cpufreq.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
qcom-cpufreq-kryo.c
cpufreq: kryo: Add module remove and exit
2018-06-19 10:35:59 +02:00
qoriq-cpufreq.c
cpufreq: qoirq: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
s3c24xx-cpufreq-debugfs.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
s3c24xx-cpufreq.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
s3c64xx-cpufreq.c
cpufreq: s3c64xx: remove incorrect __init annotation
2016-12-21 02:54:18 +01:00
s3c2410-cpufreq.c
s3c2412-cpufreq.c
cpufreq: Use consistent prefixing via pr_fmt
2016-04-09 01:35:18 +02:00
s3c2416-cpufreq.c
cpufreq: s3c2416: double free on driver init error path
2017-02-09 01:22:45 +01:00
s3c2440-cpufreq.c
cpufreq: s3c2440: fix spelling mistake: "divsiors" -> "divisors"
2018-05-10 11:50:42 +02:00
s5pv210-cpufreq.c
cpufreq: s5pv210: add missing of_node_put()
2017-07-26 22:54:01 +02:00
sa1100-cpufreq.c
cpufreq: Add CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING cpufreq driver flag
2017-07-26 00:15:46 +02:00
sa1110-cpufreq.c
cpufreq: Add CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING cpufreq driver flag
2017-07-26 00:15:46 +02:00
sc520_freq.c
cpufreq: sc520: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
scmi-cpufreq.c
firmware: arm_scmi: rename get_transition_latency and add_opps_to_device
2018-05-10 10:49:40 +01:00
scpi-cpufreq.c
cpufreq: scpi: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
sfi-cpufreq.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
sh-cpufreq.c
cpufreq: sh: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
sparc-us2e-cpufreq.c
cpufreq: sparc: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
sparc-us3-cpufreq.c
cpufreq: sparc: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
spear-cpufreq.c
treewide: kzalloc() -> kcalloc()
2018-06-12 16:19:22 -07:00
speedstep-centrino.c
cpufreq: speedstep: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
speedstep-ich.c
cpufreq: speedstep: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
speedstep-lib.c
cpufreq: speedstep: fix speedstep_detect_processor()'s return type
2018-05-10 11:46:00 +02:00
speedstep-lib.h
speedstep-smi.c
cpufreq: speedstep: Don't validate the frequency table twice
2018-03-20 12:07:52 +01:00
sti-cpufreq.c
cpufreq: Convert to using %pOF instead of full_name
2017-08-25 01:20:46 +02:00
tango-cpufreq.c
cpufreq: dt: Don't use generic platdev driver for tango
2017-07-22 02:20:59 +02:00
tegra20-cpufreq.c
cpufreq: tegra20: Wrap cpufreq into platform driver
2018-05-21 13:44:24 +02:00
tegra124-cpufreq.c
cpufreq: tegra124: No need of setting platform-data
2016-04-09 01:12:09 +02:00
tegra186-cpufreq.c
cpufreq: tegra186: Don't validate the frequency table twice
2018-03-20 12:07:53 +01:00
ti-cpufreq.c
cpufreq: ti-cpufreq: Use devres managed API in probe()
2018-06-06 08:34:31 +02:00
unicore2-cpufreq.c
cpufreq: Add CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING cpufreq driver flag
2017-07-26 00:15:46 +02:00
vexpress-spc-cpufreq.c
cpufreq: arm_big_little: make cpufreq_arm_bL_ops structures const
2017-11-08 23:22:20 +01:00