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:
parent
cd48c7ece3
commit
0eb5974def
|
@ -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_emit_byte(LOCAL7_OP);
|
||||||
acpigen_pop_len(); /* While */
|
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();
|
||||||
|
}
|
||||||
|
|
|
@ -695,4 +695,8 @@ void acpigen_resource_qword(u16 res_type, u16 gen_flags, u16 type_flags,
|
||||||
/* Emits Notify(namestr, value) */
|
/* Emits Notify(namestr, value) */
|
||||||
void acpigen_notify(const char *namestr, int 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__ */
|
#endif /* __ACPI_ACPIGEN_H__ */
|
||||||
|
|
|
@ -15,6 +15,11 @@ If (CONFIG(DISABLE_ACPI_HIBERNATE)) {
|
||||||
SSFG &= 0xf7
|
SSFG &= 0xf7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
External (\OSFG, IntObj)
|
||||||
|
If (CondRefOf(\OSFG)) {
|
||||||
|
SSFG = \OSFG
|
||||||
|
}
|
||||||
|
|
||||||
/* Supported sleep states: */
|
/* Supported sleep states: */
|
||||||
Name(\_S0, Package () {0x00, 0x00, 0x00, 0x00} ) /* (S0) - working state */
|
Name(\_S0, Package () {0x00, 0x00, 0x00, 0x00} ) /* (S0) - working state */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue