diff options
author | Matt DeVillier <matt.devillier@amd.corp-partner.google.com> | 2023-08-08 11:37:03 -0500 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2023-08-09 19:08:57 +0000 |
commit | 7cf9c7451808421300a00279abb4d48c42e5050a (patch) | |
tree | b72b9119ac2fc312d27f65f50af4dbd71eacf79c /src/soc/amd/common/block | |
parent | dcce5a33e95b1fa3c09a0ab0a9e951336cbf096e (diff) |
soc/amd/*: Fix UART ACPI device status
Prior to commit d1c0f958d198 ("acpi: Call acpi_fill_ssdt() only for
enabled devices"), uart_inject_ssdt() was used to set the ACPI status
(_STA) for both enabled and disabled devices. The aforementioned commit
limited it to being called only on enabled devices, which left disabled
devices without any _STA method at all -- which the OS assumes means
that the device is present and enabled.
To fix this, create the _STA method in the UART asl code for each port,
and set the return value to a name variable (STAT) which defaults to
0 (not present/disabled). Then, have uart_inject_ssdt() set STAT to
present and enabled (0xF) for UARTs actually present on the board.
TEST=build/boot google/skyrim (frostflow), dump ACPI tables, and verify
that _STA returns 0xF only for UARTs enabled in devicetree.
Change-Id: Id89e74c3ea7f53280935898ee35311b7cf3b152a
Signed-off-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77092
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/amd/common/block')
-rw-r--r-- | src/soc/amd/common/block/uart/uart.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/soc/amd/common/block/uart/uart.c b/src/soc/amd/common/block/uart/uart.c index 96b9883b8c..ca678fd59b 100644 --- a/src/soc/amd/common/block/uart/uart.c +++ b/src/soc/amd/common/block/uart/uart.c @@ -67,13 +67,11 @@ static const char *uart_acpi_name(const struct device *dev) return NULL; } -/* This gets called for both enabled and disabled devices. */ +/* This gets called for enabled devices only. */ static void uart_inject_ssdt(const struct device *dev) { acpigen_write_scope(acpi_device_path(dev)); - - acpigen_write_STA(acpi_device_status(dev)); - + acpigen_write_store_int_to_namestr(acpi_device_status(dev), "STAT"); acpigen_pop_len(); /* Scope */ } #endif |