summaryrefslogtreecommitdiff
path: root/src/acpi
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2020-06-18 13:44:29 +0300
committerAngel Pons <th3fanbus@gmail.com>2020-11-19 22:58:11 +0000
commit4a3f67a9f22f52c2f495cf3708ffb2a92bd9fa70 (patch)
tree7cb45e365edfe4bf86eb67e254e6aeea0985d0cc /src/acpi
parentdc5539fe16ba025e6ab6b1a964653d8a82069be7 (diff)
ACPI S3: Split arch-agnostic parts
Change-Id: I9fc2d1cdbb280f781045882bc4ac98c67946953e Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/42614 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Diffstat (limited to 'src/acpi')
-rw-r--r--src/acpi/Makefile.inc3
-rw-r--r--src/acpi/acpi_pm.c31
2 files changed, 34 insertions, 0 deletions
diff --git a/src/acpi/Makefile.inc b/src/acpi/Makefile.inc
index f70b23ff5b..2f06be1a2c 100644
--- a/src/acpi/Makefile.inc
+++ b/src/acpi/Makefile.inc
@@ -3,6 +3,7 @@
ifeq ($(CONFIG_HAVE_ACPI_TABLES),y)
ramstage-y += acpi.c
+ramstage-y += acpi_pm.c
ramstage-y += acpigen.c
ramstage-y += acpigen_dptf.c
ramstage-y += acpigen_dsm.c
@@ -15,6 +16,8 @@ ramstage-y += pld.c
ramstage-y += sata.c
ramstage-y += soundwire.c
+postcar-y += acpi_pm.c
+
ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/acpi_tables.c),)
ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/acpi_tables.c
endif
diff --git a/src/acpi/acpi_pm.c b/src/acpi/acpi_pm.c
new file mode 100644
index 0000000000..cecf878910
--- /dev/null
+++ b/src/acpi/acpi_pm.c
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <acpi/acpi.h>
+#include <console/console.h>
+#include <romstage_handoff.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)
+{
+}