Skip to content

Commit 11703c7

Browse files
committed
Merge tag 'cpufreq-arm-updates-6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm
Merge more ARM cpufreq updates for 6.9 from Viresh Kumar: "- zero initialize a cpumask (Marek Szyprowski). - Boost support for scmi cpufreq driver (Sibi Sankar)." * tag 'cpufreq-arm-updates-6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm: cpufreq: scmi: Enable boost support firmware: arm_scmi: Add support for marking certain frequencies as turbo cpufreq: dt: always allocate zeroed cpumask
2 parents f37a4d6 + a8e949d commit 11703c7

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

drivers/cpufreq/cpufreq-dt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ static int dt_cpufreq_early_init(struct device *dev, int cpu)
208208
if (!priv)
209209
return -ENOMEM;
210210

211-
if (!alloc_cpumask_var(&priv->cpus, GFP_KERNEL))
211+
if (!zalloc_cpumask_var(&priv->cpus, GFP_KERNEL))
212212
return -ENOMEM;
213213

214214
cpumask_set_cpu(cpu, priv->cpus);

drivers/cpufreq/scmi-cpufreq.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct scmi_data {
3030

3131
static struct scmi_protocol_handle *ph;
3232
static const struct scmi_perf_proto_ops *perf_ops;
33+
static struct cpufreq_driver scmi_cpufreq_driver;
3334

3435
static unsigned int scmi_cpufreq_get_rate(unsigned int cpu)
3536
{
@@ -167,6 +168,12 @@ scmi_get_rate_limit(u32 domain, bool has_fast_switch)
167168
return rate_limit;
168169
}
169170

171+
static struct freq_attr *scmi_cpufreq_hw_attr[] = {
172+
&cpufreq_freq_attr_scaling_available_freqs,
173+
NULL,
174+
NULL,
175+
};
176+
170177
static int scmi_cpufreq_init(struct cpufreq_policy *policy)
171178
{
172179
int ret, nr_opp, domain;
@@ -276,6 +283,17 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy)
276283
policy->transition_delay_us =
277284
scmi_get_rate_limit(domain, policy->fast_switch_possible);
278285

286+
if (policy_has_boost_freq(policy)) {
287+
ret = cpufreq_enable_boost_support();
288+
if (ret) {
289+
dev_warn(cpu_dev, "failed to enable boost: %d\n", ret);
290+
goto out_free_opp;
291+
} else {
292+
scmi_cpufreq_hw_attr[1] = &cpufreq_freq_attr_scaling_boost_freqs;
293+
scmi_cpufreq_driver.boost_enabled = true;
294+
}
295+
}
296+
279297
return 0;
280298

281299
out_free_opp:
@@ -334,7 +352,7 @@ static struct cpufreq_driver scmi_cpufreq_driver = {
334352
CPUFREQ_NEED_INITIAL_FREQ_CHECK |
335353
CPUFREQ_IS_COOLING_DEV,
336354
.verify = cpufreq_generic_frequency_table_verify,
337-
.attr = cpufreq_generic_attr,
355+
.attr = scmi_cpufreq_hw_attr,
338356
.target_index = scmi_cpufreq_set_target,
339357
.fast_switch = scmi_cpufreq_fast_switch,
340358
.get = scmi_cpufreq_get_rate,

drivers/firmware/arm_scmi/perf.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,9 @@ static int scmi_dvfs_device_opps_add(const struct scmi_protocol_handle *ph,
871871
else
872872
freq = dom->opp[idx].indicative_freq * dom->mult_factor;
873873

874+
/* All OPPs above the sustained frequency are treated as turbo */
875+
data.turbo = freq > dom->sustained_freq_khz * 1000;
876+
874877
data.level = dom->opp[idx].perf;
875878
data.freq = freq;
876879

0 commit comments

Comments
 (0)