ACPICA: clear fields reserved before FADT r3
Linux-2.6.21 stopped booting on a P4/HT because Linux wrote the FADT.CST_CNT value to the SMI_CMD. Apparently this stumbled over some SMM instability, such as confusing SMM when invoking it from cpu1. Linux did this because even though the r2 FADT reserves the CST_CNT field, this BIOS set that field and Linux used it. Turns out that up through 2.6.20 we explicitly cleared cst_control for r2 FADTs. So here we go back to doing that, plus also clear some additional fields that are reserved until FADT r3. http://bugzilla.kernel.org/show_bug.cgi?id=8346 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
de46c33745
commit
79fff27002
1 changed files with 12 additions and 0 deletions
|
@ -347,6 +347,18 @@ static void acpi_tb_convert_fadt(void)
|
|||
acpi_gbl_xpm1b_enable.space_id = acpi_gbl_FADT.xpm1a_event_block.space_id;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* For ACPI 1.0 FADTs, ensure that reserved fields (which should be zero)
|
||||
* are indeed zero. This will workaround BIOSs that inadvertently placed
|
||||
* values in these fields.
|
||||
*/
|
||||
if (acpi_gbl_FADT.header.revision < 3) {
|
||||
acpi_gbl_FADT.preferred_profile = 0;
|
||||
acpi_gbl_FADT.pstate_control = 0;
|
||||
acpi_gbl_FADT.cst_control = 0;
|
||||
acpi_gbl_FADT.boot_flags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
|
Reference in a new issue