Re: [PATCH v3 2/2] ACPI: CPPC: Add ospm_nominal_perf support
From: Sumit Gupta
Date: Tue Jun 09 2026 - 04:59:03 EST
On 28/05/26 17:37, Pierre Gondois wrote:
External email: Use caution opening links or attachments
Hello Sumit,
NIT:
Hi Pierre,
Thanks for the review and the complementary patch.
Going point by point:
1. Rollback for a partially applied multiple CPU write in
store_ospm_nominal_freq(): Agreed, will add into v4.
2. cppc_get_ospm_nominal_perf() and the show/init/exit coherence
checks that rely on it: I'd skip these as the register is write-only
as per spec.
IIUC having a write-only register doesn't mean we cannot read it.
Cf. cppc_get_desired_perf()
Good point.
v5 reads the register via a new cppc_get_ospm_nominal_perf().
So, show() returns the register value or "<unsupported>",
and dropped the cache/bool.
3. Initializing the register at startup and restoring at exit: In v3, we
dropped the unconditional cpu_init write so user values would
survive CPU hotplug. The spec also makes the explicit init
unnecessary: "If this register is not provided, then OSPM must
assume that the OSPM Nominal Performance value is equal to
the Nominal Performance value.". The unwritten default already
looks well defined.
The concern I had was for the scenario where:
- the driver is loaded
- the user sets an ospm_nominal_freq value
- the driver is unloaded
In such case, the ospm_nominal_freq value will still be set to a
non-default value. The modifications suggested previously would
allow to handle that case to come back to the default value.
FWIU, we have:
+------+ +---------+ +-----------+ +------+
| User | <-> | CPPC | <-> | CPPC | <-> | CPPC |
+------+ | driver | | reg | | HW |
+---------+ | interface | | reg |
+-----------+ +------+
So if we want to handle:
- the case described above
- the case you mentioned, i.e. hot-plugging CPUs
maybe the scratch values should be stored along the CPPC register
interface. This would allow to handle complex cases where CPUs
are hotplugged and the driver is loaded/unloaded ?
Note: the same kind of scenario should apply to the auto_sel register
Right.
After unload, the register keeps the user set value instead of the
firmware value. In a follow-up, I will restore the firmware value on
unload and reapply the user value across hotplug, grouping the
OSPM-set registers together (ospm_nominal_perf, auto_sel and EPP).
On my test platforms the registers survive hotplug, but that isn't
guaranteed in general.
I think it's better to keep the saved state in the cppc_cpufreq driver
rather than the CPPC register interface. intel_pstate and amd-pstate
do the same.
For reapply, will use a CPU hotplug callback rather than ->online/
->offline hooks. Those are only called when a policy gains its first
online CPU or loses its last one. cppc_cpufreq also has shared
(SHARED_TYPE_ANY) policy, offlining and onlining a single CPU
keeps the policy active, so neither hook is called for it. A per-CPU
hotplug callback is needed to cover that case.
Let me know if you have other thoughts.
Thank you,
Sumit Gupta