aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2021-02-08 21:43:25 +0000
committerWarner Losh <imp@FreeBSD.org>2021-02-08 21:47:49 +0000
commit35af933173d516101f4c44af328fbe2d6e587869 (patch)
treec7e99ab5bcf1295e471a1bb8d24da381c1a5b74f /sys
parentadc4ea97bd775cb49df5dbfd71dd497c834ae150 (diff)
downloadsrc-35af933173d516101f4c44af328fbe2d6e587869.tar.gz
src-35af933173d516101f4c44af328fbe2d6e587869.zip
acpi: limit the AMDI0020/AMDI0010 workaround to an option
It appears that production versions of EPYC firmware get the _STA method right for these nodes. In fact, this workaround breaks on production hardware by including too many uart nodes. This work around was for pre-release hardware that wound up not having a large deployment. Move this work around to a kernel option since the machines that needed it have been powered off and are difficult to resurrect. Should there be a more significant deployment than is understood, we can restrict it based on smbios strings. Discussed with: mmacy@, seanc@, jhb@ MFC After: 3 days
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/options1
-rw-r--r--sys/dev/acpica/acpi.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/sys/conf/options b/sys/conf/options
index 77979b72fe58..2f324143c574 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -705,6 +705,7 @@ ACPI_DEBUG opt_acpi.h
ACPI_MAX_TASKS opt_acpi.h
ACPI_MAX_THREADS opt_acpi.h
DEV_ACPI opt_acpi.h
+ACPI_EARLY_EPYC_WAR opt_acpi.h
# options for IOMMU support
IOMMU opt_iommu.h
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index 04c8c1b27625..18623a6ab240 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -2273,6 +2273,8 @@ acpi_DeviceIsPresent(device_t dev)
h = acpi_get_handle(dev);
if (h == NULL)
return (FALSE);
+
+#ifdef ACPI_EARLY_EPYC_WAR
/*
* Certain Treadripper boards always returns 0 for FreeBSD because it
* only returns non-zero for the OS string "Windows 2015". Otherwise it
@@ -2281,6 +2283,7 @@ acpi_DeviceIsPresent(device_t dev)
*/
if (acpi_MatchHid(h, "AMDI0020") || acpi_MatchHid(h, "AMDI0010"))
return (TRUE);
+#endif
status = acpi_GetInteger(h, "_STA", &s);