diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2020-06-01 15:11:14 +0300 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2020-06-16 08:02:18 +0000 |
commit | b6585481e8cb30ed04a1673b170af3df9e0e4320 (patch) | |
tree | 09d4fad217ffb0dd6fb33b4d8e4c8dc20bfd708f /src/cpu | |
parent | 94464474756f0cacdf04a70b95ec4a0462516a63 (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.inc | 1 | ||||
-rw-r--r-- | src/cpu/x86/smm/smi_trigger.c | 43 |
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; +} |