[U-Boot] [PATCH v2 09/18] x86: acpi: Switch to ACPI mode by ourselves instead of requested by OSPM
Bin Meng
bmeng.cn at gmail.com
Mon May 23 09:01:26 CEST 2016
On Thu, May 19, 2016 at 12:00 PM, Simon Glass <sjg at chromium.org> wrote:
> On 11 May 2016 at 08:45, Bin Meng <bmeng.cn at gmail.com> wrote:
>> Per ACPI spec, during ACPI OS initialization, OSPM can determine
>> that the ACPI hardware registers are owned by SMI (by way of the
>> SCI_EN bit in the PM1_CNT register), in which case the ACPI OS
>> issues the ACPI_ENABLE command to the SMI_CMD port. The SCI_EN bit
>> effectively tracks the ownership of the ACPI hardware registers.
>>
>> However since U-Boot does not support SMI, we report all 3 fields
>> in FADT (SMI_CMD, ACPI_ENABLE, ACPI_DISABLE) as zero, by following
>> the spec who says: these fields are reserved and must be zero on
>> system that does not support System Management mode.
>>
>> U-Boot seems to behave in a correct way that the ACPI spec allows,
>> at least Linux does not complain, but apparently Windows does not
>> think so. During Windows bring up debugging, it is observed that
>> even these 3 fields are zero, Windows are still trying to issue SMI
>> with hardcoded SMI port address and commands, and expecting SCI_EN
>> to be changed by the firmware. Eventually Windows gives us a BSOD
>> (Blue Screen of Death) saying ACPI_BIOS_ERROR and refuses to start.
>>
>> To fix this, turn on the SCI_EN bit by ourselves. With this patch,
>> now U-Boot can install and boot Windows 8.1/10 successfully with
>> the help of SeaBIOS using legacy interface (non-UEFI mode).
>>
>> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
>> ---
>>
>> Changes in v2: None
>>
>> arch/x86/include/asm/acpi_table.h | 3 +++
>> arch/x86/lib/acpi_table.c | 26 ++++++++++++++++++++++++++
>> 2 files changed, 29 insertions(+)
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
applied to u-boot-x86, thanks!
More information about the U-Boot
mailing list