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>
This commit is contained in:
Kyösti Mälkki
2020-06-01 15:11:14 +03:00
committed by Patrick Georgi
parent 9446447475
commit b6585481e8
18 changed files with 68 additions and 53 deletions

View File

@@ -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))

View File

@@ -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;
}