[PATCH 2/4] ACPI: workaround x86 firmware with mis-matched FADT/MADT revisions

From: Al Stone
Date: Tue Oct 13 2015 - 17:51:13 EST


Looking across multiple versions of the ACPI specification, certain
versions introduce new revision numbers for the FADT and/or MADT
tables. So, for example, an FADT indicating it is revision 4 should
not be paired with an MADT revision of anything less than 2.

However, there are systems out there that do not update the revision
fields in the FADT and MADT tables as they should. So, for arm64, we
can be stricter in complying with the specification, but we need to
relax the checking for legacy systems.

Signed-off-by: Al Stone <al.stone@xxxxxxxxxx>
---
drivers/acpi/tables.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
index e5cfd72..3b5ddfb 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -407,9 +407,17 @@ static int __init bad_madt_entry(struct acpi_table_header *table,
ms++;
}
if (!ms->num_types) {
- pr_err("undefined version for either FADT %d.%d or MADT %d\n",
- major, minor, madt->header.revision);
- return 1;
+ if (IS_ENABLED(CONFIG_ARM64)) {
+ /* Enforce this stricture on arm64... */
+ pr_err("undefined version for either FADT %d.%d or MADT %d\n",
+ major, minor, madt->header.revision);
+ return 1;
+ } else {
+ /* ... but relax it on legacy systems so they boot */
+ pr_warn("undefined version for either FADT %d.%d or MADT %d\n",
+ major, minor, madt->header.revision);
+ return 0;
+ }
}

if (entry->type >= ms->num_types) {
--
2.4.3


--------------020400080004050109020606
Content-Type: text/x-patch;
name="0003-ACPI-workaround-FADT-always-being-revision-2.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="0003-ACPI-workaround-FADT-always-being-revision-2.patch"