summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2020-06-01 15:11:14 +0300
committerPatrick Georgi <pgeorgi@google.com>2020-06-16 08:02:18 +0000
commitb6585481e8cb30ed04a1673b170af3df9e0e4320 (patch)
tree09d4fad217ffb0dd6fb33b4d8e4c8dc20bfd708f /src/cpu
parent94464474756f0cacdf04a70b95ec4a0462516a63 (diff)
arch/x86: Create helper for APM_CNT SMI triggers
Attempts to write to APM_CNT IO port should always be guarded with a test to verify SMI handler has been installed. Immediate followup removes redundant HAVE_SMI_HANDLER tests. Change-Id: If3fb0f1a8b32076f1d9f3fea9f817dd4b093ad98 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/41971 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Patrick Rudolph <siro@das-labor.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/x86/smm/Makefile.inc1
-rw-r--r--src/cpu/x86/smm/smi_trigger.c43
2 files changed, 44 insertions, 0 deletions
diff --git a/src/cpu/x86/smm/Makefile.inc b/src/cpu/x86/smm/Makefile.inc
index 500f169edb..dbe567a8a2 100644
--- a/src/cpu/x86/smm/Makefile.inc
+++ b/src/cpu/x86/smm/Makefile.inc
@@ -1,6 +1,7 @@
## SPDX-License-Identifier: GPL-2.0-only
ramstage-y += smm_module_loader.c
+ramstage-y += smi_trigger.c
ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
$(eval $(call create_class_compiler,smm,x86_32))
diff --git a/src/cpu/x86/smm/smi_trigger.c b/src/cpu/x86/smm/smi_trigger.c
new file mode 100644
index 0000000000..f1031a00f6
--- /dev/null
+++ b/src/cpu/x86/smm/smi_trigger.c
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <arch/io.h>
+#include <console/console.h>
+#include <cpu/x86/smm.h>
+
+int apm_control(u8 cmd)
+{
+ if (!CONFIG(HAVE_SMI_HANDLER))
+ return -1;
+
+ switch (cmd) {
+ case APM_CNT_CST_CONTROL:
+ break;
+ case APM_CNT_PST_CONTROL:
+ break;
+ case APM_CNT_ACPI_DISABLE:
+ printk(BIOS_DEBUG, "Disabling ACPI via APMC.\n");
+ break;
+ case APM_CNT_ACPI_ENABLE:
+ printk(BIOS_DEBUG, "Enabling ACPI via APMC.\n");
+ break;
+ case APM_CNT_GNVS_UPDATE:
+ break;
+ case APM_CNT_FINALIZE:
+ printk(BIOS_DEBUG, "Finalizing SMM.\n");
+ break;
+ case APM_CNT_ELOG_GSMI:
+ break;
+ case APM_CNT_SMMSTORE:
+ break;
+ case APM_CNT_SMMINFO:
+ break;
+ default:
+ break;
+ }
+
+ /* Now raise the SMI. */
+ outb(cmd, APM_CNT);
+
+ printk(BIOS_DEBUG, "APMC done.\n");
+ return 0;
+}