From c197643d44f36b6758811a7e0c7bc8dade33acdb Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Wed, 12 Nov 2025 14:18:48 -0600 Subject: [PATCH] drivers/intel/gma/acpi: Add power management methods for GFX0 Add ACPI power state methods (_PS0, _PS3, _S0W, _S3D) to the GFX0 device definition to fix VIDEO_TDR_FAILURE 0x116 errors when resuming from S3 sleep under Windows on modern Intel platforms (TGL and newer). Windows requires these methods to properly manage GPU power states during sleep/resume cycles. Without them, Windows cannot determine the correct power state transitions, leading to display driver timeouts on resume. The methods are implemented as no-ops since integrated graphics power is managed by the platform, but Windows needs the method definitions to properly initialize and restore the GPU after S3 resume. TEST=build/boot starlabs/starlite_adl, verify S3 resume from Windows works properly without a VIDEO_TDR_FAILURE BSOD. Change-Id: Ib3f8060dee3281c2281d4e719be9aff9e0239b49 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/90013 Reviewed-by: Sean Rhodes Tested-by: build bot (Jenkins) --- src/drivers/intel/gma/acpi/gfx.asl | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/drivers/intel/gma/acpi/gfx.asl b/src/drivers/intel/gma/acpi/gfx.asl index 109543fd6f..b1f090cce5 100644 --- a/src/drivers/intel/gma/acpi/gfx.asl +++ b/src/drivers/intel/gma/acpi/gfx.asl @@ -3,4 +3,34 @@ Device (GFX0) { Name (_ADR, 0x00020000) + + /* + * Power state methods required for proper S3 resume support. + * Windows needs these to properly manage GPU power states during + * sleep/resume cycles. + */ + + /* Power state D0 (fully on) - called when device is powered on */ + Method (_PS0, 0, NotSerialized) + { + /* Integrated graphics power is managed by the platform */ + } + + /* Power state D3 (off) - called when device is powered off */ + Method (_PS3, 0, NotSerialized) + { + /* Integrated graphics power is managed by the platform */ + } + + /* Deepest sleep state from S0 - D3hot */ + Method (_S0W, 0x0, NotSerialized) + { + Return (0x03) /* D3hot */ + } + + /* Deepest sleep state from S3 - D3hot */ + Method (_S3D, 0x0, NotSerialized) + { + Return (0x03) /* D3hot - device can enter D3hot during S3 */ + } }