Lean Sheng Tan has submitted this change. ( https://review.coreboot.org/c/coreboot/+/74762 )
Change subject: acpigen: Add a runtime method to override exposed _Sx sleep states ......................................................................
acpigen: Add a runtime method to override exposed _Sx sleep states
This allows mainboards to override available sleep states at runtime. This is done by adding a IntObj in SSDT that DSDT consumes to override the available _Sx states.
Signed-off-by: Arthur Heymans arthur@aheymans.xyz Change-Id: Ic21830c1ef9c183b1e3005cc1f8b7daf7e9ea998 Reviewed-on: https://review.coreboot.org/c/coreboot/+/74762 Reviewed-by: Nico Huber nico.h@gmx.de Reviewed-by: Jakub Czapiga jacz@semihalf.com Reviewed-by: Jan Samek jan.samek@siemens.com Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Lean Sheng Tan sheng.tan@9elements.com --- M src/acpi/acpigen.c M src/include/acpi/acpigen.h M src/southbridge/intel/common/acpi/sleepstates.asl 3 files changed, 43 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Nico Huber: Looks good to me, but someone else must approve Lean Sheng Tan: Looks good to me, approved Jan Samek: Looks good to me, but someone else must approve Jakub Czapiga: Looks good to me, but someone else must approve
diff --git a/src/acpi/acpigen.c b/src/acpi/acpigen.c index d613bec..94a6f90 100644 --- a/src/acpi/acpigen.c +++ b/src/acpi/acpigen.c @@ -2364,3 +2364,17 @@ acpigen_emit_byte(LOCAL7_OP); acpigen_pop_len(); /* While */ } + +void acpigen_ssdt_override_sleep_states(bool enable_s1, bool enable_s2, bool enable_s3, + bool enable_s4) +{ + assert(!(enable_s1 && CONFIG(ACPI_S1_NOT_SUPPORTED))); + assert(!(enable_s3 && !CONFIG(HAVE_ACPI_RESUME))); + assert(!(enable_s4 && CONFIG(DISABLE_ACPI_HIBERNATE))); + + acpigen_write_scope("\"); + uint32_t sleep_enable = (enable_s1 << 0) | (enable_s2 << 1) + | (enable_s3 << 2) | (enable_s4 << 3); + acpigen_write_name_dword("OSFG", sleep_enable); + acpigen_pop_len(); +} diff --git a/src/include/acpi/acpigen.h b/src/include/acpi/acpigen.h index 180e937..fc1d01b 100644 --- a/src/include/acpi/acpigen.h +++ b/src/include/acpi/acpigen.h @@ -695,4 +695,8 @@ /* Emits Notify(namestr, value) */ void acpigen_notify(const char *namestr, int value);
+/* Create a namespace \OSFG to override the enabled sleep states */ +void acpigen_ssdt_override_sleep_states(bool enable_s1, bool enable_s2, bool enable_s3, + bool enable_s4); + #endif /* __ACPI_ACPIGEN_H__ */ diff --git a/src/southbridge/intel/common/acpi/sleepstates.asl b/src/southbridge/intel/common/acpi/sleepstates.asl index 079ab1a..14ed86e 100644 --- a/src/southbridge/intel/common/acpi/sleepstates.asl +++ b/src/southbridge/intel/common/acpi/sleepstates.asl @@ -15,6 +15,11 @@ SSFG &= 0xf7 }
+External (\OSFG, IntObj) +If (CondRefOf(\OSFG)) { + SSFG = \OSFG +} + /* Supported sleep states: */ Name(_S0, Package () {0x00, 0x00, 0x00, 0x00} ) /* (S0) - working state */