summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2019-12-13 12:16:06 +0100
committerFelix Held <felix-coreboot@felixheld.de>2020-01-09 14:22:51 +0000
commitc83bab62b3657d97299c8368b6c610e4cbf994b6 (patch)
treef568d7f66b4a3491c6292040db29905111771de4 /src/drivers
parent5c8ff794a8dcb0760c137d3b2dff1879a4a8dad6 (diff)
downloadcoreboot-c83bab62b3657d97299c8368b6c610e4cbf994b6.tar.xz
acpi: Be more ACPI compliant when generating _UID
* Add function to generate unique _UID using CRC32 * Add function to write the _UID based on a device's ACPI path ACPI devices that have the same _HID must use different _UID. Linux doesn't care about _UID if it's not used. Windows 10 verifies the ACPI code on boot and BSODs if two devices with the same _HID share the same _UID. Fixes BSOD seen on Windows 10. Change-Id: I47cd5396060d325f9ce338afced6af021e7ff2b4 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/37695 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/crb/tis.c2
-rw-r--r--src/drivers/net/r8168.c3
-rw-r--r--src/drivers/pc80/tpm/tis.c2
-rw-r--r--src/drivers/wifi/generic.c3
4 files changed, 6 insertions, 4 deletions
diff --git a/src/drivers/crb/tis.c b/src/drivers/crb/tis.c
index f2aba48297..b1fbad01eb 100644
--- a/src/drivers/crb/tis.c
+++ b/src/drivers/crb/tis.c
@@ -117,7 +117,7 @@ static void crb_tpm_fill_ssdt(struct device *dev)
acpigen_write_name_string("_HID", "MSFT0101");
acpigen_write_name_string("_CID", "MSFT0101");
- acpigen_write_name_integer("_UID", 1);
+ acpi_device_write_uid(dev);
acpigen_write_STA(ACPI_STATUS_DEVICE_ALL_ON);
diff --git a/src/drivers/net/r8168.c b/src/drivers/net/r8168.c
index bc0132fc13..1bca8799aa 100644
--- a/src/drivers/net/r8168.c
+++ b/src/drivers/net/r8168.c
@@ -312,7 +312,8 @@ static void r8168_net_fill_ssdt(struct device *dev)
acpigen_write_scope(path);
acpigen_write_device(acpi_device_name(dev));
acpigen_write_name_string("_HID", R8168_ACPI_HID);
- acpigen_write_name_integer("_UID", 0);
+ acpi_device_write_uid(dev);
+
if (dev->chip_ops)
acpigen_write_name_string("_DDN", dev->chip_ops->name);
diff --git a/src/drivers/pc80/tpm/tis.c b/src/drivers/pc80/tpm/tis.c
index e9f14854c4..a35ef83d2c 100644
--- a/src/drivers/pc80/tpm/tis.c
+++ b/src/drivers/pc80/tpm/tis.c
@@ -902,7 +902,7 @@ static void lpc_tpm_fill_ssdt(struct device *dev)
acpigen_write_name("_CID");
acpigen_emit_eisaid("PNP0C31");
- acpigen_write_name_integer("_UID", 1);
+ acpi_device_write_uid(dev);
u32 did_vid = tpm_read_did_vid(0);
if (did_vid > 0 && did_vid < 0xffffffff)
diff --git a/src/drivers/wifi/generic.c b/src/drivers/wifi/generic.c
index 9f9f4faae7..fe2e39d29d 100644
--- a/src/drivers/wifi/generic.c
+++ b/src/drivers/wifi/generic.c
@@ -187,7 +187,8 @@ void generic_wifi_fill_ssdt(struct device *dev,
/* Device */
acpigen_write_scope(path);
acpigen_write_device(acpi_device_name(dev));
- acpigen_write_name_integer("_UID", 0);
+ acpi_device_write_uid(dev);
+
if (dev->chip_ops)
acpigen_write_name_string("_DDN", dev->chip_ops->name);