From 1d49d3e40b1bc1dcd25e26781277f3fa6409551b Mon Sep 17 00:00:00 2001 From: Reka Norman Date: Wed, 30 Nov 2022 16:33:16 +1100 Subject: mb/google/brya: Don't add MPTS to both DSDT and SSDT commit 52ccd293d7 ("mb/google/brya: Implement shutdown function for dGPU") started unconditionally adding MPTS to the SSDT. On variants with HAVE_WWAN_POWER_SEQUENCE selected, MPTS is already added to the DSDT via wwan_power.asl. The duplicate definition results in a kernel error: ERR kernel: [ 0.109237] ACPI BIOS Error (bug): Failure creating named object [\_SB.MPTS], AE_ALREADY_EXISTS (20210730/dswload2-327) ERR kernel: [ 0.109242] ACPI Error: AE_ALREADY_EXISTS, During name lookup/catalog (20210730/psobject-220) Don't add MPTS to the SSDT if HAVE_WWAN_POWER_SEQUENCE is selected. There are no variants which use both, so this should only result in empty MPTS methods being removed. BUG=b:260380268 TEST=On pujjo, the SSDT no longer contains an empty MPTS method, there's no kernel error, and the WWAN power-off sequence is met. Change-Id: I9f411aae81ea87aa9c8fc7754c3709e398771a32 Signed-off-by: Reka Norman Reviewed-on: https://review.coreboot.org/c/coreboot/+/70146 Reviewed-by: Kangheui Won Reviewed-by: Subrata Banik Tested-by: build bot (Jenkins) --- src/mainboard/google/brya/mainboard.c | 43 +++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 12 deletions(-) (limited to 'src/mainboard/google/brya') diff --git a/src/mainboard/google/brya/mainboard.c b/src/mainboard/google/brya/mainboard.c index 4e0cf080d2..966f19eef4 100644 --- a/src/mainboard/google/brya/mainboard.c +++ b/src/mainboard/google/brya/mainboard.c @@ -132,6 +132,36 @@ static void mainboard_generate_dgpu_shutdown(const struct device *dev) acpigen_emit_namestring(acpi_device_path_join(parent, "PGPR._OFF")); } +static void mainboard_generate_mpts(void) +{ + const struct device *wwan = DEV_PTR(rp6_wwan); + const struct device *dgpu = DEV_PTR(dgpu); + + /* + * If HAVE_WWAN_POWER_SEQUENCE is selected, MPTS will be added to the + * DSDT via wwan_power.asl. We can't add MPTS to the SSDT as well, + * since the duplicate definition will result in a kernel error. + * + * This special case can be removed in the future if the power-off + * sequences for all WWAN devices used on brya are moved to the SSDT. + */ + if (CONFIG(HAVE_WWAN_POWER_SEQUENCE)) { + if (wwan || dgpu) + printk(BIOS_ERR, "Skip adding duplicate MPTS entry to SSDT\n"); + return; + } + + acpigen_write_scope("\\_SB"); + acpigen_write_method_serialized("MPTS", 1); + if (wwan) + mainboard_generate_wwan_shutdown(wwan); + if (dgpu) + mainboard_generate_dgpu_shutdown(dgpu); + + acpigen_write_method_end(); /* Method */ + acpigen_write_scope_end(); /* Scope */ +} + static void mainboard_generate_s0ix_hook(void) { acpigen_write_if_lequal_op_int(ARG0_OP, 1); @@ -151,18 +181,7 @@ static void mainboard_generate_s0ix_hook(void) static void mainboard_fill_ssdt(const struct device *dev) { - const struct device *wwan = DEV_PTR(rp6_wwan); - const struct device *dgpu = DEV_PTR(dgpu); - - acpigen_write_scope("\\_SB"); - acpigen_write_method_serialized("MPTS", 1); - if (wwan) - mainboard_generate_wwan_shutdown(wwan); - if (dgpu) - mainboard_generate_dgpu_shutdown(dgpu); - - acpigen_write_method_end(); /* Method */ - acpigen_write_scope_end(); /* Scope */ + mainboard_generate_mpts(); /* for variant to fill additional SSDT */ variant_fill_ssdt(dev); -- cgit v1.2.3