diff options
Diffstat (limited to 'meta-linaro-integration/recipes-overlayed/fwts/files/0003-ACPI-a-missing-FACS-table-can-be-ignored-under-some.patch')
-rw-r--r-- | meta-linaro-integration/recipes-overlayed/fwts/files/0003-ACPI-a-missing-FACS-table-can-be-ignored-under-some.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/meta-linaro-integration/recipes-overlayed/fwts/files/0003-ACPI-a-missing-FACS-table-can-be-ignored-under-some.patch b/meta-linaro-integration/recipes-overlayed/fwts/files/0003-ACPI-a-missing-FACS-table-can-be-ignored-under-some.patch new file mode 100644 index 0000000..2a54533 --- /dev/null +++ b/meta-linaro-integration/recipes-overlayed/fwts/files/0003-ACPI-a-missing-FACS-table-can-be-ignored-under-some.patch | |||
@@ -0,0 +1,85 @@ | |||
1 | From 778310b83da2358a4e25444fcf9101e16f0a8b5b Mon Sep 17 00:00:00 2001 | ||
2 | From: Fu Wei <fu.wei@linaro.org> | ||
3 | Date: Tue, 25 Nov 2014 17:24:20 +0800 | ||
4 | Subject: [PATCH 3/3] ACPI: a missing FACS table can be ignored under some | ||
5 | circumstances | ||
6 | |||
7 | Both of the FADT fields FIRMWARE_CTRL and X_FIRMWARE_CTRL are | ||
8 | allowed to be null, if and only if ACPI is operating in hardware- | ||
9 | reduced mode. If the ACPI tables are from before ACPI 5.0, or if | ||
10 | ACPI is not operating in hardware-reduced mode, at least one of the | ||
11 | FIRMWARE_CTRL or X_FIRMWARE_CTRL fields _must_ be non-null. | ||
12 | |||
13 | This patch corrects the logic to ensure that a missing FACS is only | ||
14 | allowed under the proper circumstances. | ||
15 | |||
16 | Upstream-status: Accepted [14.12.00] | ||
17 | Signed-off-by: Fu Wei <fu.wei@linaro.org> | ||
18 | --- | ||
19 | src/acpi/acpitables/acpitables.c | 5 +++-- | ||
20 | src/lib/src/fwts_acpi_tables.c | 24 +++++++++++++++++------- | ||
21 | 2 files changed, 20 insertions(+), 9 deletions(-) | ||
22 | |||
23 | diff --git a/src/acpi/acpitables/acpitables.c b/src/acpi/acpitables/acpitables.c | ||
24 | index 255261c..3d261cb 100644 | ||
25 | --- a/src/acpi/acpitables/acpitables.c | ||
26 | +++ b/src/acpi/acpitables/acpitables.c | ||
27 | @@ -75,10 +75,11 @@ static void acpi_table_check_fadt(fwts_framework *fw, fwts_acpi_table_info *tabl | ||
28 | |||
29 | if (fadt->firmware_control == 0) { | ||
30 | if (table->length >= 140) { | ||
31 | - if (fadt->x_firmware_ctrl == 0) { | ||
32 | + if ((fadt->x_firmware_ctrl == 0) && !(fwts_acpi_is_reduced_hardware(fadt))) { | ||
33 | fwts_failed(fw, LOG_LEVEL_CRITICAL, "FADTFACSZero", "FADT 32 bit FIRMWARE_CONTROL and 64 bit X_FIRMWARE_CONTROL (FACS address) are null."); | ||
34 | fwts_advice(fw, "The 32 bit FIRMWARE_CTRL or 64 bit X_FIRMWARE_CTRL should point to a valid " | ||
35 | - "Firmware ACPI Control Structure (FACS). This is a firmware bug and needs to be fixed."); | ||
36 | + "Firmware ACPI Control Structure (FACS) when ACPI hardware reduced mode is not set. " | ||
37 | + "This is a firmware bug and needs to be fixed."); | ||
38 | } | ||
39 | } else { | ||
40 | fwts_failed(fw, LOG_LEVEL_MEDIUM, "FADT32BitFACSNull", "FADT 32 bit FIRMWARE_CONTROL is null."); | ||
41 | diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c | ||
42 | index 7f73a10..a8285f1 100644 | ||
43 | --- a/src/lib/src/fwts_acpi_tables.c | ||
44 | +++ b/src/lib/src/fwts_acpi_tables.c | ||
45 | @@ -373,6 +373,7 @@ static int fwts_acpi_handle_fadt( | ||
46 | const fwts_acpi_table_provenance provenance) | ||
47 | { | ||
48 | static uint64_t facs_last_phys_addr; /* default to zero */ | ||
49 | + int result = FWTS_ERROR; | ||
50 | |||
51 | /* | ||
52 | * The FADT handling may occur twice if it appears | ||
53 | @@ -384,13 +385,22 @@ static int fwts_acpi_handle_fadt( | ||
54 | |||
55 | facs_last_phys_addr = phys_addr; | ||
56 | |||
57 | - /* Determine FACS addr and load it */ | ||
58 | - if (fwts_acpi_handle_fadt_tables(fw, fadt, | ||
59 | - "FACS", "FIRMWARE_CTRL", "X_FIRMWARE_CTRL", | ||
60 | - &fadt->firmware_control, &fadt->x_firmware_ctrl, | ||
61 | - provenance) != FWTS_OK) { | ||
62 | - fwts_log_error(fw, "Failed to load FACS!"); | ||
63 | - return FWTS_ERROR; | ||
64 | + /* Determine FACS addr and load it. | ||
65 | + * Will ignore the missing FACS in the hardware-reduced mode. | ||
66 | + */ | ||
67 | + result = fwts_acpi_handle_fadt_tables(fw, fadt, | ||
68 | + "FACS", "FIRMWARE_CTRL", "X_FIRMWARE_CTRL", | ||
69 | + &fadt->firmware_control, &fadt->x_firmware_ctrl, | ||
70 | + provenance); | ||
71 | + if ( result != FWTS_OK) { | ||
72 | + if ((result == FWTS_NULL_POINTER) && | ||
73 | + fwts_acpi_is_reduced_hardware(fadt)) { | ||
74 | + fwts_log_info(fw, "Ignore the missing FACS. " | ||
75 | + "It is optional in hardware-reduced mode"); | ||
76 | + } else { | ||
77 | + fwts_log_error(fw, "Failed to load FACS!"); | ||
78 | + return FWTS_ERROR; | ||
79 | + } | ||
80 | } | ||
81 | /* Determine DSDT addr and load it */ | ||
82 | if (fwts_acpi_handle_fadt_tables(fw, fadt, | ||
83 | -- | ||
84 | 2.1.1 | ||
85 | |||