soc/intel/common/block/smm: Keep selected wake sources enabled in S5

The generic Intel SMM S5 entry path disables all GPEs before asserting
SLP_EN, which clears OS-armed wake enables (e.g. LAN_WAKE) and prevents
Wake-on-LAN from S5.

Add a mainboard override hook, mainboard_smi_sleep_finalize(), called
after the S5 teardown but before SLP_EN is asserted, allowing boards to
restore required wake sources.

Change-Id: I9e97308ed94961fc4c08a10714b1b53f198bb593
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/90792
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-by: Jérémy Compostella <jeremy.compostella@intel.com>
This commit is contained in:
Sean Rhodes 2026-01-18 21:18:35 +00:00
commit 8602d0e2aa
3 changed files with 5 additions and 0 deletions

View file

@ -226,6 +226,7 @@ void __weak southbridge_smi_handler(void) {}
void __weak mainboard_smi_gpi(u32 gpi_sts) {}
int __weak mainboard_smi_apmc(u8 data) { return 0; }
void __weak mainboard_smi_sleep(u8 slp_typ) {}
void __weak mainboard_smi_sleep_finalize(u8 slp_typ) {}
void __weak mainboard_smi_finalize(void) {}
void __weak smm_soc_early_init(void) {}

View file

@ -61,6 +61,7 @@ void southbridge_smi_handler(void);
void mainboard_smi_gpi(u32 gpi_sts);
int mainboard_smi_apmc(u8 data);
void mainboard_smi_sleep(u8 slp_typ);
void mainboard_smi_sleep_finalize(u8 slp_typ);
void mainboard_smi_finalize(void);
int mainboard_set_smm_log_level(void);

View file

@ -220,6 +220,9 @@ void smihandler_southbridge_sleep(
break;
}
/* Allow mainboard to restore wake sources (e.g. for S5 WOL). */
mainboard_smi_sleep_finalize(slp_typ);
/*
* Write back to the SLP register to cause the originally intended
* event again. We need to set BIT13 (SLP_EN) though to make the