linux-stable/drivers/cpufreq
Dhananjay Ugwekar 5d9a354cf8 cpufreq/amd-pstate: Set the initial min_freq to lowest_nonlinear_freq
According to the AMD architectural programmer's manual volume 2 [1], in
section "17.6.4.1 CPPC_CAPABILITY_1" lowest_nonlinear_perf is described
as "Reports the most energy efficient performance level (in terms of
performance per watt). Above this threshold, lower performance levels
generally result in increased energy efficiency. Reducing performance
below this threshold does not result in total energy savings for a given
computation, although it reduces instantaneous power consumption". So
lowest_nonlinear_perf is the most power efficient performance level, and
going below that would lead to a worse performance/watt.

Also, setting the minimum frequency to lowest_nonlinear_freq (instead of
lowest_freq) allows the CPU to idle at a higher frequency which leads
to more time being spent in a deeper idle state (as trivial idle tasks
are completed sooner). This has shown a power benefit in some systems,
in other systems, power consumption has increased but so has the
throughput/watt.

Modify the initial policy_data->min set by cpufreq-core to
lowest_nonlinear_freq, in the ->verify() callback. Also set the
cpudata->req[0] to FREQ_QOS_MIN_DEFAULT_VALUE (i.e. 0), so that it also
gets overriden by the check in verify function.

Link: https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf [1]

Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20241017053927.25285-3-Dhananjay.Ugwekar@amd.com
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
2024-10-28 14:54:35 -05:00
..
acpi-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
amd_freq_sensitivity.c cpufreq: amd_freq_sensitivity: Add missing pci_dev_put() 2022-11-30 19:50:04 +01:00
amd-pstate-trace.c cpufreq: amd-pstate: Add trace for AMD P-State module 2021-12-30 18:51:39 +01:00
amd-pstate-trace.h cpufreq: amd-pstate: Add more tracepoint for AMD P-State module 2022-03-09 19:53:01 +01:00
amd-pstate-ut.c second round of amd-pstate changes for 6.12 (second try): 2024-09-11 18:22:23 +02:00
amd-pstate.c cpufreq/amd-pstate: Set the initial min_freq to lowest_nonlinear_freq 2024-10-28 14:54:35 -05:00
amd-pstate.h cpufreq/amd-pstate: Export symbols for changing modes 2024-09-11 10:23:23 -05:00
apple-soc-cpufreq.c cpufreq: Fix warning on unused of_device_id tables for !CONFIG_OF 2024-09-04 20:43:59 +05:30
armada-8k-cpufreq.c cpufreq: armada-8k: Avoid excessive stack usage 2024-08-07 12:11:46 +05:30
armada-37xx-cpufreq.c cpufreq: Explicitly include correct DT includes 2023-07-20 16:01:57 +05:30
bmips-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
brcmstb-avs-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
cppc_cpufreq.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
cpufreq_conservative.c cpufreq: conservative: Simplify the condition of storing 'down_threshold' 2023-10-06 21:55:13 +02:00
cpufreq_governor_attr_set.c cpufreq: Move to_gov_attr_set() to cpufreq.h 2022-02-04 19:22:34 +01:00
cpufreq_governor.c cpufreq: governor: Free dbs_data directly when gov->init() fails 2023-08-29 20:21:35 +02:00
cpufreq_governor.h cpufreq: governor: Use kobject release() method to free dbs_data 2022-04-13 15:22:41 +02:00
cpufreq_ondemand.c cpufreq: Remove references to 10ms min sampling rate 2024-02-24 15:02:33 +01:00
cpufreq_ondemand.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cpufreq_performance.c cpufreq: Introduce CPUFREQ_GOV_STRICT_TARGET 2020-11-10 18:31:17 +01:00
cpufreq_powersave.c cpufreq: Introduce CPUFREQ_GOV_STRICT_TARGET 2020-11-10 18:31:17 +01:00
cpufreq_stats.c cpufreq: stats: Fix buffer overflow detection in trans_stats() 2023-10-24 22:02:06 +02:00
cpufreq_userspace.c cpufreq: userspace: Move is_managed indicator into per-policy structure 2023-10-06 22:01:26 +02:00
cpufreq-dt-platdev.c cpufreq: Add SM7325 to cpufreq-dt-platdev blocklist 2024-09-04 20:43:59 +05:30
cpufreq-dt.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
cpufreq-dt.h cpufreq: dt: Allow platform specific intermediate callbacks 2020-03-12 15:43:52 +05:30
cpufreq-nforce2.c cpufreq: nforce2: Remove empty exit() callback 2024-07-05 11:41:30 +05:30
cpufreq.c cpufreq: use proper units for frequency 2024-10-28 12:24:29 +01:00
davinci-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
e_powersaver.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
elanfreq.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
freq_table.c cpufreq: Fix up printing large CPU numbers and frequency values 2024-04-30 12:55:01 +02:00
gx-suspmod.c cpufreq: Avoid creating excessively large stack frames 2020-01-27 10:33:33 +01:00
highbank-cpufreq.c cpufreq: Add __init annotation to module init funcs 2022-09-26 11:15:04 +05:30
imx6q-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
imx-cpufreq-dt.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
intel_pstate.c cpufreq: intel_pstate: Make hwp_notify_lock a raw spinlock 2024-10-01 20:43:39 +02:00
Kconfig cpufreq: Drop CONFIG_ARM and CONFIG_ARM64 dependency on Arm drivers 2024-09-04 20:43:58 +05:30
Kconfig.arm cpufreq: Enable COMPILE_TEST on Arm drivers 2024-09-04 20:43:58 +05:30
Kconfig.powerpc cpufreq: Fix Kconfig indentation 2019-11-29 11:52:02 +01:00
Kconfig.x86 cpufreq: amd-pstate: Make amd-pstate unit tests depend on amd-pstate 2024-06-24 13:17:56 -05:00
kirkwood-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
longhaul.c cpufreq: longhaul: Fix kernel-doc param for longhaul_setstate 2024-05-28 12:20:13 +05:30
longhaul.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
longrun.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
loongson2_cpufreq.c cpufreq: loongson2: Remove empty exit() callback 2024-07-05 11:41:46 +05:30
loongson3_cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
Makefile cpufreq: Add Loongson-3 CPUFreq driver support 2024-07-09 08:45:43 +05:30
maple-cpufreq.c cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros 2024-08-02 14:45:20 +02:00
mediatek-cpufreq-hw.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
mediatek-cpufreq.c cpufreq: Fix warning on unused of_device_id tables for !CONFIG_OF 2024-09-04 20:43:59 +05:30
mvebu-cpufreq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
omap-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
p4-clockmod.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
pasemi-cpufreq.c cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros 2024-08-02 14:45:20 +02:00
pcc-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
pmac32-cpufreq.c powerpc: rename SPRN_HID2 define to SPRN_HID2_750FX 2024-05-08 00:25:00 +10:00
pmac64-cpufreq.c ARM cpufreq updates for 6.12 2024-09-06 20:50:46 +02:00
powernow-k6.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
powernow-k7.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
powernow-k7.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
powernow-k8.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
powernow-k8.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 347 2019-06-05 17:37:08 +02:00
powernv-cpufreq.c ARM cpufreq updates for 6.12 2024-09-06 20:50:46 +02:00
ppc_cbe_cpufreq_pervasive.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 153 2019-05-30 11:26:32 -07:00
ppc_cbe_cpufreq_pmi.c cpufreq: Explicitly include correct DT includes 2023-07-20 16:01:57 +05:30
ppc_cbe_cpufreq.c cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros 2024-08-02 14:45:20 +02:00
ppc_cbe_cpufreq.h cpufreq: powerpc_cbe: Switch to QoS requests for freq limits 2019-08-26 10:02:01 +02:00
pxa2xx-cpufreq.c cpufreq: pxa3: move clk register access to clk driver 2022-05-07 22:55:49 +02:00
pxa3xx-cpufreq.c cpufreq: pxa3: move clk register access to clk driver 2022-05-07 22:55:49 +02:00
qcom-cpufreq-hw.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
qcom-cpufreq-nvmem.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
qoriq-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
raspberrypi-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
s3c64xx-cpufreq.c cpufreq: s3c64xx: Remove pointless NULL check in s3c64xx_cpufreq_driver_init 2019-10-23 08:53:23 +05:30
s5pv210-cpufreq.c cpufreq: Introducing CPUFREQ_RELATION_E 2021-10-05 16:33:05 +02:00
sa1110-cpufreq.c ARM: sa1100: remove unused board files 2023-01-12 10:53:12 +01:00
sc520_freq.c cpufreq: sc520_freq: add 'fallthrough' to one case 2021-05-21 18:52:13 +02:00
scmi-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
scpi-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
sh-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
sparc-us2e-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
sparc-us3-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
spear-cpufreq.c cpufreq: spear: Use of_property_for_each_u32() instead of open coding 2024-08-07 12:11:45 +05:30
speedstep-centrino.c ARM cpufreq updates for 6.11 2024-07-09 17:58:20 +02:00
speedstep-ich.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
speedstep-lib.c cpufreq: speedstep: remove unneeded semicolon 2020-10-28 18:04:07 +01:00
speedstep-lib.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
speedstep-smi.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
sti-cpufreq.c cpufreq: Use of_property_present() 2024-08-07 12:11:45 +05:30
sun50i-cpufreq-nvmem.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
tegra20-cpufreq.c Devicetree updates for v6.4, part 2: 2023-04-27 10:09:05 -07:00
tegra124-cpufreq.c cpupfreq: tegra124: eliminate uses of of_node_put() 2024-04-19 11:55:44 +05:30
tegra186-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
tegra194-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
ti-cpufreq.c cpufreq: ti-cpufreq: Use socinfo to get revision in AM62 family 2024-09-04 20:43:59 +05:30
vexpress-spc-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00