Investigating failed suspend/resume T61

John Baldwin jhb at freebsd.org
Thu May 29 13:51:08 UTC 2014


On Wednesday, May 28, 2014 6:14:34 pm Jung-uk Kim wrote:
> On 2014-05-28 17:29:35 -0400, John Baldwin wrote:
> > Err, I think it enables GPE1 as otherwise ACPICA assumes GPE1 has a
> > length of zero (and is thus invalid)?  Perhaps _PTS wants to frob
> > something that uses GPE1 that this fixes?
> 
> static void
> AcpiTbValidateFadt (
>     void)
> {
> ...
>     UINT8                   Length;
> ...
>     for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++)
>     {
> ...
>         Length = *ACPI_ADD_PTR (UINT8,
>                         &AcpiGbl_FADT, FadtInfoTable[i].Length);
> ...
> 
> Note the Length is read from the internal FADT and it is NOT a pointer.
> 
> ...
>         if (Address64->Address &&
>            (ACPI_MUL_8 (Length) <= ACPI_UINT8_MAX) &&
>            (Address64->BitWidth != ACPI_MUL_8 (Length)))
>         {
>             ACPI_BIOS_WARNING ((AE_INFO,
>                 "32/64X length mismatch in FADT/%s: %u/%u",
>                 Name, ACPI_MUL_8 (Length), Address64->BitWidth));
> +	    if (Length == 0)
> +	    {
> +		Length = ACPI_DIV_8 (Address64->BitWidth);
> +	    }
> 	}
> ...
>     }
> }
> 
> AFAICT, it does change anything in AcpiGbl_FADT.  If you really wanted
> to "patch" it, you had to do something like this:
> 
> +	    if (Length == 0)
> +	    {
> +		Length = ACPI_DIV_8 (Address64->BitWidth);
> +		*ACPI_ADD_PTR (UINT8,
> +		    &AcpiGbl_FADT, FadtInfoTable[i].Length) = Length;
> +	    }
> 
> However, it had to be done from AcpiEvGpeInitialize() in
> sys/contrib/dev/acpica/components/events/evgpeinit.c, IMHO.
> 
> ACPI_STATUS
> AcpiEvGpeInitialize (
>     void)
> {
> ...
>     if (AcpiGbl_FADT.Gpe1BlockLength &&
>         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>                    HERE!!!
>         AcpiGbl_FADT.XGpe1Block.Address)
>     {
> ...
> 
> What did I miss?

Nothing, I've no idea how this could possibly have affected suspend/resume on 
Sean's laptop then.  Maybe it was just a coincidence.

-- 
John Baldwin


More information about the freebsd-acpi mailing list