acpi/arm64: ignore 5.1 FADTs that are reported as 5.0 [Linux 4.9.187]

This Linux kernel change "acpi/arm64: ignore 5.1 FADTs that are reported as 5.0" is included in the Linux 4.9.187 release. This change is authored by Ard Biesheuvel <ard.biesheuvel [at] linaro.org> on Wed Jun 19 14:18:31 2019 +0200. The commit for this change in Linux stable tree is d052488 (patch) which is from upstream commit 2af22f3. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 2af22f3.

acpi/arm64: ignore 5.1 FADTs that are reported as 5.0

[ Upstream commit 2af22f3ec3ca452f1e79b967f634708ff01ced8a ]

Some Qualcomm Snapdragon based laptops built to run Microsoft Windows
are clearly ACPI 5.1 based, given that that is the first ACPI revision
that supports ARM, and introduced the FADT 'arm_boot_flags' field,
which has a non-zero field on those systems.

So in these cases, infer from the ARM boot flags that the FADT must be
5.1 or later, and treat it as 5.1.

Acked-by: Sudeep Holla <sudeep.holla@arm.com>
Tested-by: Lee Jones <lee.jones@linaro.org>
Reviewed-by: Graeme Gregory <graeme.gregory@linaro.org>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Hanjun Guo <guohanjun@huawei.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 10 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 arch/arm64/kernel/acpi.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
index 252a6d9..1a95d13 100644
--- a/arch/arm64/kernel/acpi.c
+++ b/arch/arm64/kernel/acpi.c
@@ -157,10 +157,14 @@ static int __init acpi_fadt_sanity_check(void)
     */
    if (table->revision < 5 ||
       (table->revision == 5 && fadt->minor_revision < 1)) {
-       pr_err("Unsupported FADT revision %d.%d, should be 5.1+\n",
+       pr_err(FW_BUG "Unsupported FADT revision %d.%d, should be 5.1+\n",
               table->revision, fadt->minor_revision);
-       ret = -EINVAL;
-       goto out;
+
+       if (!fadt->arm_boot_flags) {
+           ret = -EINVAL;
+           goto out;
+       }
+       pr_err("FADT has ARM boot flags set, assuming 5.1\n");
    }

    if (!(fadt->flags & ACPI_FADT_HW_REDUCED)) {

Leave a Reply

Your email address will not be published. Required fields are marked *