Skip to content

Commit

Permalink
cpufreq: powernv: Remove global pstate ramp-down timer in POWER9
Browse files Browse the repository at this point in the history
POWER9 does not support global pstate requests for the chip. So remove
the timer logic which slowly ramps down the global pstate in P9
platforms.

Signed-off-by: Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
[mpe: Drop NULL check before kfree(policy->driver_data)]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Shilpasri G Bhat authored and Michael Ellerman committed Jul 9, 2018
1 parent 2606484 commit dcb1433
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions drivers/cpufreq/powernv-cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -758,8 +758,13 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy,

cur_msec = jiffies_to_msecs(get_jiffies_64());

spin_lock(&gpstates->gpstate_lock);
freq_data.pstate_id = idx_to_pstate(new_index);
if (!gpstates) {
freq_data.gpstate_id = freq_data.pstate_id;
goto no_gpstate;
}

spin_lock(&gpstates->gpstate_lock);

if (!gpstates->last_sampled_time) {
gpstate_idx = new_index;
Expand Down Expand Up @@ -809,6 +814,7 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy,

spin_unlock(&gpstates->gpstate_lock);

no_gpstate:
/*
* Use smp_call_function to send IPI and execute the
* mtspr on target CPU. We could do that without IPI
Expand Down Expand Up @@ -843,6 +849,13 @@ static int powernv_cpufreq_cpu_init(struct cpufreq_policy *policy)
kernfs_put(kn);
}

policy->freq_table = powernv_freqs;
policy->fast_switch_possible = true;

if (pvr_version_is(PVR_POWER9))
return 0;

/* Initialise Gpstate ramp-down timer only on POWER8 */
gpstates = kzalloc(sizeof(*gpstates), GFP_KERNEL);
if (!gpstates)
return -ENOMEM;
Expand All @@ -857,8 +870,6 @@ static int powernv_cpufreq_cpu_init(struct cpufreq_policy *policy)
msecs_to_jiffies(GPSTATE_TIMER_INTERVAL);
spin_lock_init(&gpstates->gpstate_lock);

policy->freq_table = powernv_freqs;
policy->fast_switch_possible = true;
return 0;
}

Expand Down Expand Up @@ -998,7 +1009,8 @@ static void powernv_cpufreq_stop_cpu(struct cpufreq_policy *policy)
freq_data.pstate_id = idx_to_pstate(powernv_pstate_info.min);
freq_data.gpstate_id = idx_to_pstate(powernv_pstate_info.min);
smp_call_function_single(policy->cpu, set_pstate, &freq_data, 1);
del_timer_sync(&gpstates->timer);
if (gpstates)
del_timer_sync(&gpstates->timer);
}

static unsigned int powernv_fast_switch(struct cpufreq_policy *policy,
Expand Down

0 comments on commit dcb1433

Please sign in to comment.