diff options
-rw-r--r-- | Documentation/x86/x86_64/boot-options.txt | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/acpi.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/acpi/boot.c | 5 | ||||
-rw-r--r-- | drivers/acpi/apei/hest.c | 3 |
4 files changed, 14 insertions, 1 deletions
diff --git a/Documentation/x86/x86_64/boot-options.txt b/Documentation/x86/x86_64/boot-options.txt index e9e8ddbbf376..1228b22e142b 100644 --- a/Documentation/x86/x86_64/boot-options.txt +++ b/Documentation/x86/x86_64/boot-options.txt | |||
@@ -176,6 +176,11 @@ ACPI | |||
176 | 176 | ||
177 | acpi=noirq Don't route interrupts | 177 | acpi=noirq Don't route interrupts |
178 | 178 | ||
179 | acpi=nocmcff Disable firmware first mode for corrected errors. This | ||
180 | disables parsing the HEST CMC error source to check if | ||
181 | firmware has set the FF flag. This may result in | ||
182 | duplicate corrected error reports. | ||
183 | |||
179 | PCI | 184 | PCI |
180 | 185 | ||
181 | pci=off Don't use PCI | 186 | pci=off Don't use PCI |
diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index b31bf97775fc..42db2b88953b 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h | |||
@@ -86,6 +86,7 @@ extern int acpi_pci_disabled; | |||
86 | extern int acpi_skip_timer_override; | 86 | extern int acpi_skip_timer_override; |
87 | extern int acpi_use_timer_override; | 87 | extern int acpi_use_timer_override; |
88 | extern int acpi_fix_pin2_polarity; | 88 | extern int acpi_fix_pin2_polarity; |
89 | extern int acpi_disable_cmcff; | ||
89 | 90 | ||
90 | extern u8 acpi_sci_flags; | 91 | extern u8 acpi_sci_flags; |
91 | extern int acpi_sci_override_gsi; | 92 | extern int acpi_sci_override_gsi; |
@@ -168,6 +169,7 @@ static inline void arch_acpi_set_pdc_bits(u32 *buf) | |||
168 | 169 | ||
169 | #define acpi_lapic 0 | 170 | #define acpi_lapic 0 |
170 | #define acpi_ioapic 0 | 171 | #define acpi_ioapic 0 |
172 | #define acpi_disable_cmcff 0 | ||
171 | static inline void acpi_noirq_set(void) { } | 173 | static inline void acpi_noirq_set(void) { } |
172 | static inline void acpi_disable_pci(void) { } | 174 | static inline void acpi_disable_pci(void) { } |
173 | static inline void disable_acpi(void) { } | 175 | static inline void disable_acpi(void) { } |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 230c8ea878e5..d1998d580080 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -66,6 +66,7 @@ EXPORT_SYMBOL(acpi_pci_disabled); | |||
66 | int acpi_lapic; | 66 | int acpi_lapic; |
67 | int acpi_ioapic; | 67 | int acpi_ioapic; |
68 | int acpi_strict; | 68 | int acpi_strict; |
69 | int acpi_disable_cmcff; | ||
69 | 70 | ||
70 | u8 acpi_sci_flags __initdata; | 71 | u8 acpi_sci_flags __initdata; |
71 | int acpi_sci_override_gsi __initdata; | 72 | int acpi_sci_override_gsi __initdata; |
@@ -1619,6 +1620,10 @@ static int __init parse_acpi(char *arg) | |||
1619 | /* "acpi=copy_dsdt" copys DSDT */ | 1620 | /* "acpi=copy_dsdt" copys DSDT */ |
1620 | else if (strcmp(arg, "copy_dsdt") == 0) { | 1621 | else if (strcmp(arg, "copy_dsdt") == 0) { |
1621 | acpi_gbl_copy_dsdt_locally = 1; | 1622 | acpi_gbl_copy_dsdt_locally = 1; |
1623 | } | ||
1624 | /* "acpi=nocmcff" disables FF mode for corrected errors */ | ||
1625 | else if (strcmp(arg, "nocmcff") == 0) { | ||
1626 | acpi_disable_cmcff = 1; | ||
1622 | } else { | 1627 | } else { |
1623 | /* Core will printk when we return error. */ | 1628 | /* Core will printk when we return error. */ |
1624 | return -EINVAL; | 1629 | return -EINVAL; |
diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c index b108b116bf28..502024502b13 100644 --- a/drivers/acpi/apei/hest.c +++ b/drivers/acpi/apei/hest.c | |||
@@ -262,7 +262,8 @@ void __init acpi_hest_init(void) | |||
262 | goto err; | 262 | goto err; |
263 | } | 263 | } |
264 | 264 | ||
265 | apei_hest_parse(hest_parse_cmc, NULL); | 265 | if (!acpi_disable_cmcff) |
266 | apei_hest_parse(hest_parse_cmc, NULL); | ||
266 | 267 | ||
267 | if (!ghes_disable) { | 268 | if (!ghes_disable) { |
268 | rc = apei_hest_parse(hest_parse_ghes_count, &ghes_count); | 269 | rc = apei_hest_parse(hest_parse_ghes_count, &ghes_count); |