x86: Fix RevF detection in powernow.c

The PowerNow! driver does not support RevF and earlier parts.
The current code checks for RevF processors in a function that
is not called.  Change the code path so that RevF processors
are detected and the driver fails registration.

Also fix cpufreq_add_cpu() to handle unsuccessful registration.

Signed-off-by: Mark Langsdorf <mark.langsdorf@amd.com>
This commit is contained in:
Keir Fraser committed 2009-10-23 10:11:52 +01:00
1 parent 5856aed296
commit 2220131142
2 files changed
+7 -39

No files matched your search

+4 -39
View File
@@ -273,59 +273,24 @@ static struct cpufreq_driver powernow_cpufreq_driver = {
};
unsigned int powernow_register_driver()
{
unsigned int ret;
ret = cpufreq_register_driver(&powernow_cpufreq_driver);
return ret;
}
int powernow_cpufreq_init(void)
{
unsigned int i, ret = 0;
unsigned int max_dom = 0;
cpumask_t *pt;
unsigned long *dom_mask;
for_each_online_cpu(i) {
struct cpuinfo_x86 *c = &cpu_data[i];
if (c->x86_vendor != X86_VENDOR_AMD)
if (c->x86_vendor != X86_VENDOR_AMD)
ret = -ENODEV;
else
else
{
u32 eax, ebx, ecx, edx;
cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
if ((edx & USE_HW_PSTATE) != USE_HW_PSTATE)
ret = -ENODEV;
}
}
if (ret)
return ret;
if (max_dom < processor_pminfo[i]->perf.domain_info.domain)
max_dom = processor_pminfo[i]->perf.domain_info.domain;
}
max_dom++;
dom_mask = xmalloc_array(unsigned long, BITS_TO_LONGS(max_dom));
if (!dom_mask)
return -ENOMEM;
bitmap_zero(dom_mask, max_dom);
pt = xmalloc_array(cpumask_t, max_dom);
if (!pt)
return -ENOMEM;
memset(pt, 0, max_dom * sizeof(cpumask_t));
/* get cpumask of each psd domain */
for_each_online_cpu(i) {
__set_bit(processor_pminfo[i]->perf.domain_info.domain, dom_mask);
cpu_set(i, pt[processor_pminfo[i]->perf.domain_info.domain]);
}
for_each_online_cpu(i)
processor_pminfo[i]->perf.shared_cpu_map =
pt[processor_pminfo[i]->perf.domain_info.domain];
xfree(pt);
xfree(dom_mask);
ret = cpufreq_register_driver(&powernow_cpufreq_driver);
return ret;
}
+3
View File
@@ -143,6 +143,9 @@ int cpufreq_add_cpu(unsigned int cpu)
!cpu_online(cpu))
return -EINVAL;
if (!cpufreq_driver)
return 0;
if (cpufreq_cpu_policy[cpu])
return 0;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.