|
@@ -97,6 +97,9 @@ static int set_max_cstate(struct dmi_system_id *id)
|
|
|
/* Actually this shouldn't be __cpuinitdata, would be better to fix the
|
|
|
callers to only run once -AK */
|
|
|
static struct dmi_system_id __cpuinitdata processor_power_dmi_table[] = {
|
|
|
+ { set_max_cstate, "IBM ThinkPad R40e", {
|
|
|
+ DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
|
|
|
+ DMI_MATCH(DMI_BIOS_VERSION,"1SET70WW")}, (void *)1},
|
|
|
{ set_max_cstate, "IBM ThinkPad R40e", {
|
|
|
DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
|
|
|
DMI_MATCH(DMI_BIOS_VERSION,"1SET60WW")}, (void *)1},
|
|
@@ -365,7 +368,9 @@ static void acpi_processor_idle(void)
|
|
|
t1 = inl(acpi_fadt.xpm_tmr_blk.address);
|
|
|
/* Invoke C2 */
|
|
|
inb(cx->address);
|
|
|
- /* Dummy op - must do something useless after P_LVL2 read */
|
|
|
+ /* Dummy wait op - must do something useless after P_LVL2 read
|
|
|
+ because chipsets cannot guarantee that STPCLK# signal
|
|
|
+ gets asserted in time to freeze execution properly. */
|
|
|
t2 = inl(acpi_fadt.xpm_tmr_blk.address);
|
|
|
/* Get end time (ticks) */
|
|
|
t2 = inl(acpi_fadt.xpm_tmr_blk.address);
|
|
@@ -403,7 +408,7 @@ static void acpi_processor_idle(void)
|
|
|
t1 = inl(acpi_fadt.xpm_tmr_blk.address);
|
|
|
/* Invoke C3 */
|
|
|
inb(cx->address);
|
|
|
- /* Dummy op - must do something useless after P_LVL3 read */
|
|
|
+ /* Dummy wait op (see above) */
|
|
|
t2 = inl(acpi_fadt.xpm_tmr_blk.address);
|
|
|
/* Get end time (ticks) */
|
|
|
t2 = inl(acpi_fadt.xpm_tmr_blk.address);
|