Felix Held has submitted this change. ( https://review.coreboot.org/c/coreboot/+/61384 )
Change subject: drivers/wifi/generic: Add support for UntrustedDevice ACPI property ......................................................................
drivers/wifi/generic: Add support for UntrustedDevice ACPI property
The Linux kernel has the idea of an "untrusted" PCI device, which may have limited I/O and memory access permissions, depending on which IOMMU domains it may be a part of.
https://crrev.com/c/3406512 is a backport to the ChromiumOS kernel which checks for this property.
BUG=b:215424986 TEST=dump SSDT on google/redrix, verify it contains the expected UntrustedDevice property
Change-Id: I1a02ca7c5f717097ec97cf6373b9e0b81a13e05d Signed-off-by: Tim Wawrzynczak twawrzynczak@chromium.org Reviewed-on: https://review.coreboot.org/c/coreboot/+/61384 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Subrata Banik subratabanik@google.com Reviewed-by: Kangheui Won khwon@chromium.org --- M src/drivers/wifi/generic/acpi.c M src/drivers/wifi/generic/chip.h 2 files changed, 20 insertions(+), 2 deletions(-)
Approvals: build bot (Jenkins): Verified Kangheui Won: Looks good to me, but someone else must approve Subrata Banik: Looks good to me, approved
diff --git a/src/drivers/wifi/generic/acpi.c b/src/drivers/wifi/generic/acpi.c index 3cc1c63..f4ffa5e 100644 --- a/src/drivers/wifi/generic/acpi.c +++ b/src/drivers/wifi/generic/acpi.c @@ -26,6 +26,9 @@ /* Unique ID for the WIFI _DSM */ #define ACPI_DSM_OEM_WIFI_UUID "F21202BF-8F78-4DC6-A5B3-1F738E285ADE"
+/* Unique ID for the Wifi _DSD */ +#define ACPI_DSD_UNTRUSTED_UUID "88566a92-1a61-466d-949a-6d12809d480c" + __weak int get_wifi_sar_limits(union wifi_sar_limits *sar_limits) { return -1; @@ -508,10 +511,22 @@ /* Scope */ acpigen_write_scope(scope);
- /* Wake capabilities */ - if (config) + if (config) { + /* Wake capabilities */ acpigen_write_PRW(config->wake, ACPI_S3);
+ /* Add _DSD for UntrustedDevice property. */ + if (config->is_untrusted) { + struct acpi_dp *dsd, *pkg; + + dsd = acpi_dp_new_table("_DSD"); + pkg = acpi_dp_new_table(ACPI_DSD_UNTRUSTED_UUID); + acpi_dp_add_integer(pkg, "UntrustedDevice", 1); + acpi_dp_add_package(dsd, pkg); + acpi_dp_write(dsd); + } + } + /* Fill regulatory domain structure */ if (CONFIG(HAVE_REGULATORY_DOMAIN)) { /* diff --git a/src/drivers/wifi/generic/chip.h b/src/drivers/wifi/generic/chip.h index e3b0ba5..35726f2 100644 --- a/src/drivers/wifi/generic/chip.h +++ b/src/drivers/wifi/generic/chip.h @@ -9,6 +9,9 @@ */ struct drivers_wifi_generic_config { unsigned int wake; + /* When set to true, this will add a _DSD which contains a single + property, `UntrustedDevice`, set to 1, to the ACPI Device. */ + bool is_untrusted; };
#endif /* _GENERIC_WIFI_H_ */