[CPUFREQ] powernow-k8: read P-state from HW
By definition, "cpuinfo_cur_freq" should report the value from HW. So, don't depend on the cached value. Instead read P-state directly from HW, while taking into account the erratum 311 workaround for Fam 11h processors. Cc: Andreas Herrmann <andreas.herrmann3@amd.com> Cc: Langsdorf, Mark <mark.langsdorf@amd.com> Cc: Thomas Renninger <trenn@suse.de> Signed-off-by: Naga Chumbalkar <nagananda.chumbalkar@hp.com> Reviewed-by: Andreas Herrmann <andreas.herrmann3@amd.com> Tested-by: Andreas Herrmann <andreas.herrmann3@amd.com> Acked-by: Langsdorf, Mark <mark.langsdorf@amd.com> Signed-off-by: Thomas Renninger <trenn@suse.de> Signed-off-by: Dave Jones <davej@redhat.com>hifive-unleashed-5.1
parent
b394f1dfc0
commit
532cfee6ba
|
@ -118,20 +118,17 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data)
|
||||||
u32 i = 0;
|
u32 i = 0;
|
||||||
|
|
||||||
if (cpu_family == CPU_HW_PSTATE) {
|
if (cpu_family == CPU_HW_PSTATE) {
|
||||||
if (data->currpstate == HW_PSTATE_INVALID) {
|
rdmsr(MSR_PSTATE_STATUS, lo, hi);
|
||||||
/* read (initial) hw pstate if not yet set */
|
i = lo & HW_PSTATE_MASK;
|
||||||
rdmsr(MSR_PSTATE_STATUS, lo, hi);
|
data->currpstate = i;
|
||||||
i = lo & HW_PSTATE_MASK;
|
|
||||||
|
/*
|
||||||
|
* a workaround for family 11h erratum 311 might cause
|
||||||
|
* an "out-of-range Pstate if the core is in Pstate-0
|
||||||
|
*/
|
||||||
|
if ((boot_cpu_data.x86 == 0x11) && (i >= data->numps))
|
||||||
|
data->currpstate = HW_PSTATE_0;
|
||||||
|
|
||||||
/*
|
|
||||||
* a workaround for family 11h erratum 311 might cause
|
|
||||||
* an "out-of-range Pstate if the core is in Pstate-0
|
|
||||||
*/
|
|
||||||
if (i >= data->numps)
|
|
||||||
data->currpstate = HW_PSTATE_0;
|
|
||||||
else
|
|
||||||
data->currpstate = i;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
Loading…
Reference in New Issue