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>
This commit is contained in:
Arthur Heymans
2023-04-25 16:23:37 +02:00
committed by Lean Sheng Tan
parent cd48c7ece3
commit 0eb5974def
3 changed files with 23 additions and 0 deletions

View File

@@ -2364,3 +2364,17 @@ void acpigen_write_delay_until_namestr_int(uint32_t wait_ms, const char *name, u
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();
}