soc/intel: Return ACPI_S4 as previous sleep state

pmc_prev_sleep_state() isn't handling the case where acpi_sleep_from_pm1()
returns ACPI_S4. Pass that value along so it can get set as a
prev_sleep_state. Without this, consumers see prev_sleep_state as 0
and always treat resume as a cold boot. With this, consumers can
correctly do behavior specific to S4 resume, like skipping the
disconnect IPC command to the PMC on Alderlake systems.

BUG=b:230031158
TEST=Resume from S4 on Primus4es

Signed-off-by: Evan Green <evgreen@chromium.org>
Change-Id: I3fb3dc428a749db80293e51a04a2096514a7b689
Reviewed-on: https://review.coreboot.org/c/coreboot/+/64002
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Subrata Banik <subratabanik@google.com>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
This commit is contained in:
Evan Green 2022-05-02 12:22:51 -07:00 committed by Felix Held
parent 4852c11406
commit 7ef5158c7d
1 changed files with 3 additions and 0 deletions

View File

@ -399,6 +399,9 @@ static int pmc_prev_sleep_state(const struct chipset_power_state *ps)
if (CONFIG(HAVE_ACPI_RESUME)) if (CONFIG(HAVE_ACPI_RESUME))
prev_sleep_state = ACPI_S3; prev_sleep_state = ACPI_S3;
break; break;
case ACPI_S4:
prev_sleep_state = ACPI_S4;
break;
case ACPI_S5: case ACPI_S5:
prev_sleep_state = ACPI_S5; prev_sleep_state = ACPI_S5;
break; break;