aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/p4-clockmod.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/p4-clockmod.c')
-rw-r--r--drivers/cpufreq/p4-clockmod.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/cpufreq/p4-clockmod.c b/drivers/cpufreq/p4-clockmod.c
index 6be3e0760c26..827629c9aad7 100644
--- a/drivers/cpufreq/p4-clockmod.c
+++ b/drivers/cpufreq/p4-clockmod.c
@@ -31,6 +31,7 @@
31#include <asm/processor.h> 31#include <asm/processor.h>
32#include <asm/msr.h> 32#include <asm/msr.h>
33#include <asm/timer.h> 33#include <asm/timer.h>
34#include <asm/cpu_device_id.h>
34 35
35#include "speedstep-lib.h" 36#include "speedstep-lib.h"
36 37
@@ -289,21 +290,25 @@ static struct cpufreq_driver p4clockmod_driver = {
289 .attr = p4clockmod_attr, 290 .attr = p4clockmod_attr,
290}; 291};
291 292
293static const struct x86_cpu_id cpufreq_p4_id[] = {
294 { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_ACC },
295 {}
296};
297
298/*
299 * Intentionally no MODULE_DEVICE_TABLE here: this driver should not
300 * be auto loaded. Please don't add one.
301 */
292 302
293static int __init cpufreq_p4_init(void) 303static int __init cpufreq_p4_init(void)
294{ 304{
295 struct cpuinfo_x86 *c = &cpu_data(0);
296 int ret; 305 int ret;
297 306
298 /* 307 /*
299 * THERM_CONTROL is architectural for IA32 now, so 308 * THERM_CONTROL is architectural for IA32 now, so
300 * we can rely on the capability checks 309 * we can rely on the capability checks
301 */ 310 */
302 if (c->x86_vendor != X86_VENDOR_INTEL) 311 if (!x86_match_cpu(cpufreq_p4_id) || !boot_cpu_has(X86_FEATURE_ACPI))
303 return -ENODEV;
304
305 if (!test_cpu_cap(c, X86_FEATURE_ACPI) ||
306 !test_cpu_cap(c, X86_FEATURE_ACC))
307 return -ENODEV; 312 return -ENODEV;
308 313
309 ret = cpufreq_register_driver(&p4clockmod_driver); 314 ret = cpufreq_register_driver(&p4clockmod_driver);