Re: [RFC 0/3] cpufreq: cppc: Add support for frequency invariance

From: Viresh Kumar
Date: Thu Aug 27 2020 - 03:52:03 EST


On 25-08-20, 10:56, Ionela Voinescu wrote:
> I've been putting some more thought/code into this one and I believe
> something as follows might look nicer as well as cover a few corner cases
> (ignore implementation details for now, they can be changed):

I saw the other patchset you sent where AMU can be used as the backend
for CPPC driver, which means that if AMU IP is present on the platform
it will be used by the CPPC to get the perf counts, right ?

> - Have a per cpu value that marks the use of either AMUs, CPPC, or
> cpufreq for freq invariance (can be done with per-cpu variable or with
> cpumasks)
>
> - arch_topology.c: initialization code as follows:
>
> for_each_present_cpu(cpu) {
> if (freq_inv_amus_valid(cpu) &&
> !freq_inv_set_max_ratio(cpufreq_get_hw_max_freq(cpu) * 1000,
> arch_timer_get_rate(), cpu)) {
> per_cpu(inv_source, cpu) = INV_AMU_COUNTERS;
> continue;
> }
> if (freq_inv_cppc_counters_valid(cpu) &&
> !freq_inv_set_max_ratio(cppc_max_perf, cppc_ref_perf, cpu)) {
> per_cpu(inv_source, cpu) = INV_CPPC_COUNTERS;
> continue;
> }
> if (!cpufreq_supports_freq_invariance() ||
> freq_inv_set_max_ratio(cpufreq_get_hw_max_freq(cpu),
> 1, cpu)) {
> pr_info("FIE disabled: no valid source for CPU%d.", cpu);
> return 0;
> }
> }

Based on that (your other patchset), I think this can get further
simplified to whomsoever can register first for freq invariance.

i.e. if CPPC registers for it first then there is no need to check
AMUs further (as CPPC will be using AMUs anyway), else we will
fallback to AMU, else cpufreq.

Is that understanding correct ?

--
viresh