diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2020-11-18 07:40:21 +0200 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2021-01-23 20:19:47 +0000 |
commit | ac0dc4a8401e4531aa60a56d9ad4dfa0450eca78 (patch) | |
tree | d39f26cd8065a8189e9ddf1b05d4b23fe013ca86 | |
parent | 540902ca47a9831d87761925b5df2699efc882a1 (diff) | |
download | coreboot-ac0dc4a8401e4531aa60a56d9ad4dfa0450eca78.tar.xz |
ACPI S3: Replace stashed acpi_slp_typ value
We currently have a mixture of calls used to determine
global ACPI S3 state. Reduce the boilerplate, ultimately
acpi_wakeup_is_s3() should be the only to keep.
Change-Id: Iff950d2bcf7eacbbdd40865abf62c35a2e8c3c69
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47694
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | src/acpi/acpi_pm.c | 24 | ||||
-rw-r--r-- | src/include/acpi/acpi.h | 4 | ||||
-rw-r--r-- | src/lib/romstage_handoff.c | 15 |
3 files changed, 15 insertions, 28 deletions
diff --git a/src/acpi/acpi_pm.c b/src/acpi/acpi_pm.c index 540b6d2bee..c1e99962a9 100644 --- a/src/acpi/acpi_pm.c +++ b/src/acpi/acpi_pm.c @@ -1,32 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <acpi/acpi.h> -#include <console/console.h> -#include <romstage_handoff.h> #include <smbios.h> -/* This is filled with acpi_handoff_wakeup_s3() call early in ramstage. */ -static int acpi_slp_type = -1; - -static void acpi_handoff_wakeup(void) -{ - if (acpi_slp_type < 0) { - if (romstage_handoff_is_resume()) { - printk(BIOS_DEBUG, "S3 Resume\n"); - acpi_slp_type = ACPI_S3; - } else { - printk(BIOS_DEBUG, "Normal boot\n"); - acpi_slp_type = ACPI_S0; - } - } -} - -int acpi_handoff_wakeup_s3(void) -{ - acpi_handoff_wakeup(); - return (acpi_slp_type == ACPI_S3); -} - void __weak mainboard_suspend_resume(void) { } diff --git a/src/include/acpi/acpi.h b/src/include/acpi/acpi.h index 3b9e9776e9..fa24902331 100644 --- a/src/include/acpi/acpi.h +++ b/src/include/acpi/acpi.h @@ -49,6 +49,7 @@ #include <device/device.h> #include <uuid.h> #include <cper.h> +#include <romstage_handoff.h> #include <types.h> #define RSDP_SIG "RSD PTR " /* RSDT pointer signature */ @@ -1078,7 +1079,6 @@ unsigned long acpi_create_lpi_desc_ncst(acpi_lpi_desc_ncst_t *lpi_desc, uint16_t void __noreturn acpi_resume(void *wake_vec); void mainboard_suspend_resume(void); void *acpi_find_wakeup_vector(void); -int acpi_handoff_wakeup_s3(void); /* ACPI_Sn assignments are defined to always equal the sleep state numbers */ enum { @@ -1134,7 +1134,7 @@ static inline int acpi_is_wakeup_s3(void) if (ENV_ROMSTAGE_OR_BEFORE) return (acpi_get_sleep_type() == ACPI_S3); - return acpi_handoff_wakeup_s3(); + return romstage_handoff_is_resume(); } static inline uintptr_t acpi_align_current(uintptr_t current) diff --git a/src/lib/romstage_handoff.c b/src/lib/romstage_handoff.c index 0a7a822f7b..faa2bc9f04 100644 --- a/src/lib/romstage_handoff.c +++ b/src/lib/romstage_handoff.c @@ -55,12 +55,23 @@ int romstage_handoff_init(int is_s3_resume) int romstage_handoff_is_resume(void) { + static int once, s3_resume; struct romstage_handoff *handoff; - handoff = cbmem_find(CBMEM_ID_ROMSTAGE_INFO); + if (once) + return s3_resume; + /* Only try evaluate handoff once for s3 resume state. */ + once = 1; + handoff = cbmem_find(CBMEM_ID_ROMSTAGE_INFO); if (handoff == NULL) return 0; - return handoff->s3_resume; + s3_resume = handoff->s3_resume; + if (s3_resume) + printk(BIOS_DEBUG, "S3 Resume\n"); + else + printk(BIOS_DEBUG, "Normal boot\n"); + + return s3_resume; } |