Marshall Dawson has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/40339 )
Change subject: soc/amd/picasso: Use S-number in SMI handler ......................................................................
soc/amd/picasso: Use S-number in SMI handler
Use S-State numbers in the slp_en handler. Subsequent changes will need to use the absolute value and not rely on an enum'ed value being correct.
Continue using the enumerated value for mainboard_smi_sleep().
BUG=b:153854742 TEST=Verify S3 works using other WIP changes
Signed-off-by: Marshall Dawson marshalldawson3rd@gmail.com Change-Id: Iad8fe0ed624933b490eb07be73cf9a67dfab9fd7 --- M src/soc/amd/picasso/smihandler.c 1 file changed, 12 insertions(+), 10 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/39/40339/1
diff --git a/src/soc/amd/picasso/smihandler.c b/src/soc/amd/picasso/smihandler.c index e4d1c86..d4f5b20 100644 --- a/src/soc/amd/picasso/smihandler.c +++ b/src/soc/amd/picasso/smihandler.c @@ -149,27 +149,29 @@ { uint32_t pci_ctrl, reg32; uint16_t pm1cnt, reg16; - uint8_t slp_typ, rst_ctrl; + uint8_t rst_ctrl; + int slp_num, s_state;
/* Figure out SLP_TYP */ pm1cnt = acpi_read16(MMIO_ACPI_PM1_CNT_BLK); printk(BIOS_SPEW, "SMI#: SLP = 0x%04x\n", pm1cnt); - slp_typ = acpi_sleep_from_pm1(pm1cnt); + slp_num = acpi_snum_from_pm1(pm1cnt); + s_state = acpi_sleep_from_pm1(pm1cnt);
/* Do any mainboard sleep handling */ - mainboard_smi_sleep(slp_typ); + mainboard_smi_sleep(s_state);
- switch (slp_typ) { - case ACPI_S0: + switch (slp_num) { + case 0: printk(BIOS_DEBUG, "SMI#: Entering S0 (On)\n"); break; - case ACPI_S3: + case 3: printk(BIOS_DEBUG, "SMI#: Entering S3 (Suspend-To-RAM)\n"); break; - case ACPI_S4: + case 4: printk(BIOS_DEBUG, "SMI#: Entering S4 (Suspend-To-Disk)\n"); break; - case ACPI_S5: + case 5: printk(BIOS_DEBUG, "SMI#: Entering S5 (Soft Power off)\n"); break; default: @@ -177,9 +179,9 @@ break; }
- if (slp_typ >= ACPI_S3) { + if (slp_num >= ACPI_S3) { /* Sleep Type Elog S3, S4, and S5 entry */ - elog_gsmi_add_event_byte(ELOG_TYPE_ACPI_ENTER, slp_typ); + elog_gsmi_add_event_byte(ELOG_TYPE_ACPI_ENTER, slp_num);
wbinvd();