diff options
author | Zhao Yakui <yakui.zhao@intel.com> | 2008-06-24 06:02:57 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2008-07-16 17:27:05 -0400 |
commit | 2a2a64714d9c40f7705c4de1e79a5b855c7211a9 (patch) | |
tree | cc140e964124f14f668c83fccccf73fc3320bb63 | |
parent | da5e09a1b3e5a9fc0b15a3feb64e921ccc55ba74 (diff) |
ACPI: Disable MWAIT via DMI on broken Compal board
If a system matches in this DMI table,
Linux will disable MWAIT support for idle.
ie. "idle=nomwait" is automatically invoked
and C1_FFH and C2C3_FFH access mode are disabled.
http://bugzilla.kernel.org/show_bug.cgi?id=10807
http://bugzilla.kernel.org/show_bug.cgi?id=10914
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Signed-off-by: Li Shaohua <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
-rw-r--r-- | drivers/acpi/processor_core.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 4e1bb89fd6c3..ec0f2d581ece 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c | |||
@@ -120,6 +120,29 @@ static const struct file_operations acpi_processor_info_fops = { | |||
120 | 120 | ||
121 | DEFINE_PER_CPU(struct acpi_processor *, processors); | 121 | DEFINE_PER_CPU(struct acpi_processor *, processors); |
122 | struct acpi_processor_errata errata __read_mostly; | 122 | struct acpi_processor_errata errata __read_mostly; |
123 | static int set_no_mwait(const struct dmi_system_id *id) | ||
124 | { | ||
125 | printk(KERN_NOTICE PREFIX "%s detected - " | ||
126 | "disable mwait for CPU C-stetes\n", id->ident); | ||
127 | idle_nomwait = 1; | ||
128 | return 0; | ||
129 | } | ||
130 | |||
131 | static struct dmi_system_id __cpuinitdata processor_idle_dmi_table[] = { | ||
132 | { | ||
133 | set_no_mwait, "IFL91 board", { | ||
134 | DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"), | ||
135 | DMI_MATCH(DMI_SYS_VENDOR, "ZEPTO"), | ||
136 | DMI_MATCH(DMI_PRODUCT_VERSION, "3215W"), | ||
137 | DMI_MATCH(DMI_BOARD_NAME, "IFL91") }, NULL}, | ||
138 | { | ||
139 | set_no_mwait, "Extensa 5220", { | ||
140 | DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), | ||
141 | DMI_MATCH(DMI_SYS_VENDOR, "ACER"), | ||
142 | DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), | ||
143 | DMI_MATCH(DMI_BOARD_NAME, "Columbia") }, NULL}, | ||
144 | {}, | ||
145 | }; | ||
123 | 146 | ||
124 | /* -------------------------------------------------------------------------- | 147 | /* -------------------------------------------------------------------------- |
125 | Errata Handling | 148 | Errata Handling |
@@ -1100,6 +1123,11 @@ static int __init acpi_processor_init(void) | |||
1100 | return -ENOMEM; | 1123 | return -ENOMEM; |
1101 | acpi_processor_dir->owner = THIS_MODULE; | 1124 | acpi_processor_dir->owner = THIS_MODULE; |
1102 | 1125 | ||
1126 | /* | ||
1127 | * Check whether the system is DMI table. If yes, OSPM | ||
1128 | * should not use mwait for CPU-states. | ||
1129 | */ | ||
1130 | dmi_check_system(processor_idle_dmi_table); | ||
1103 | result = cpuidle_register_driver(&acpi_idle_driver); | 1131 | result = cpuidle_register_driver(&acpi_idle_driver); |
1104 | if (result < 0) | 1132 | if (result < 0) |
1105 | goto out_proc; | 1133 | goto out_proc; |