[PATCH]arm64: ignore FACS load failed for arm64
Alex Hung
alex.hung at canonical.com
Wed Nov 5 03:05:55 UTC 2014
I saw Al had a discussion on awsg mailing list on this topic. Will it be
better if we wait until his ECR merge to ACPI5.next and re-visit this topic?
On 14-10-21 06:01 AM, Al Stone wrote:
> On 10/20/2014 04:03 AM, Colin Ian King wrote:
>> On 20/10/14 09:37, Fu Wei wrote:
>>> arm64: ignore load failed for FACS which is involved in old
>>> BIOS style suspend/hibernate and does not make sense on arm64.
>>>
>>> Signed-off-by: Fu Wei <fu.wei at linaro.org>
>>> ---
>>> src/lib/src/fwts_acpi_tables.c | 5 +++++
>>> 1 file changed, 5 insertions(+)
>>>
>>> diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
>>> index 56498e0..0641d93 100644
>>> --- a/src/lib/src/fwts_acpi_tables.c
>>> +++ b/src/lib/src/fwts_acpi_tables.c
>>> @@ -375,7 +375,12 @@ static int fwts_acpi_handle_fadt(
>>> "FACS", "FIRMWARE_CTRL", "X_FIRMWARE_CTRL",
>>> &fadt->firmware_control, &fadt->x_firmware_ctrl,
>>> provenance) != FWTS_OK) {
>>> +#if defined(__aarch64__)
>>> + fwts_log_warning(fw, "Failed to load FACS: Cannot determine "
>>> + "address of FACS from FADT. IGNORE for AArch64 platform!");
>>> +#else
>>> return FWTS_ERROR;
>>> +#endif
>>> }
>>> /* Determine DSDT addr and load it */
>>> if (fwts_acpi_handle_fadt_tables(fw, fadt,
>>>
>> I've re-read the relevant sections of the ACPI 5.1 specification and I
>> can't see any mention of this table being mandatory or not; so a failure
>> on it not existing may be wrong for any architecture.
>>
>> Does the Fixed ACPI Description Table Fixed Feature Flags
>> HW_REDUCED_ACPI bit being set to 1 imply that the FACS not existing is
>> OK? (See ACPI 5.1, able 5-35, bit 20).
> Ick. The spec is ambiguous. I could not find anything that explicitly
> said FACS is mandatory or optional. HW reduced mode does not affect
> the *existence* of the FACS table, though; both the FIRMWARE_CTRL and
> X_FIRMWARE_CTRL fields are allowed and usable in HW reduced (top of
> section 5.2.9) and at least one of them must be non-zero (per table
> 5-34). So, that would imply there must be an FACS, but it is not explicit.
>
> But, there's also things like the Global Lock in the FACS must not be
> used in HW reduced mode. And, the FACS fields for the waking vector
> probably don't even make sense on ARMv8. But, the Hardware Signature
> might make sense if a TPM is in use.
>
> So I guess -- based on what I'm seeing in the spec -- I would still
> leave this as an error if neither FIRMWARE_CTRL or X_FIRMWARE_CTRL is
> set. This seems to be a legitimate (if not weird) bug in the tables
> as currently defined.
>
> I'll try to put together an ECR to clarify this in the spec and make
> the table optional.
>
>
>> If that is a reasonable assumption, maybe that would be a better way of
>> checking. E.g.
>>
>> diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
>> index 56498e0..97a7bd4 100644
>> --- a/src/lib/src/fwts_acpi_tables.c
>> +++ b/src/lib/src/fwts_acpi_tables.c
>> @@ -311,6 +311,9 @@ static int fwts_acpi_handle_fadt_tables(
>> }
>> /* Is it sane? */
>> if (addr == 0) {
>> + /* HW_REDUCED - address can be zero */
>> + if (fadt->flags & (1 << 20))
>> + return FWTS_OK;
>> fwts_log_error(fw, "Failed to load %s: Cannot
>> determine "
>> "address of %s from FADT, fields %s and
>> %s are zero.",
>> name, name, name_addr32, name_addr64);
>> @@ -320,6 +323,9 @@ static int fwts_acpi_handle_fadt_tables(
>> addr = (off_t)*addr32;
>> /* Is it sane? */
>> if (addr == 0) {
>> + /* HW_REDUCED - address can be zero */
>> + if (fadt->flags & (1 << 20))
>> + return FWTS_OK;
>> fwts_log_error(fw, "Failed to load %s: Cannot
>> determine "
>> "address of %s from FADT, field %s is
>> zero.",
>> name, name, name_addr32);
>>
>>
>> Colin
>>
>
More information about the fwts-devel
mailing list