[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