[SeaBIOS] [PATCH]: enable USE_PLATFORM_CLOCK bit in FADT flags
Gleb Natapov
gleb at redhat.com
Thu Jul 19 09:17:39 CEST 2012
On Tue, Jul 17, 2012 at 02:18:00PM -0300, Marcelo Tosatti wrote:
>
> Enable bit 15 (USE_PLATFORM_CLOCK) of FADT flags field so that
> older Windows guests do not make use of the TSC for timestamping.
>
> >From the ACPI manual:
>
> "A value of one indicates that OSPM should use a platform provided timer
> to drive any monotonically non-decreasing counters, such as OSPM
> performance counter services. Which particular platform timer will be
> used is OSPM specific, however, it is recommended that the timer used is
> based on the following algorithm: If the HPET is exposed to OSPM, OSPM
> should use the HPET. Otherwise, OSPM will use the ACPI power management
> timer. A value of one indicates that the platform is known to have a
> correctly implemented ACPI power management timer."
>
> Problems using the TSC include:
>
> 1) Migration to a host with different frequency.
> 2) Unsynchronized TSCs in SMP hosts (KVM does not guarantee
> synchronization).
> 3) Processors which do not increment TSC on low power states.
>
> Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
>
Looks good to me.
> diff --git a/src/acpi.c b/src/acpi.c
> index 0559443..fd5c7ea 100644
> --- a/src/acpi.c
> +++ b/src/acpi.c
> @@ -336,8 +336,9 @@ build_fadt(int bdf)
> fadt->plvl3_lat = cpu_to_le16(0xfff); // C3 state not supported
> fadt->gpe0_blk = cpu_to_le32(0xafe0);
> fadt->gpe0_blk_len = 4;
> - /* WBINVD + PROC_C1 + SLP_BUTTON + FIX_RTC */
> - fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 5) | (1 << 6));
> + /* WBINVD + PROC_C1 + SLP_BUTTON + FIX_RTC + USE_PLATFORM_CLOCK */
> + fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 5) | (1 << 6) |
> + (1 << 15));
>
> build_header((void*)fadt, FACP_SIGNATURE, sizeof(*fadt), 1);
>
--
Gleb.
More information about the SeaBIOS
mailing list