From 16fa339d8424facdef521dee8ba6f1ad9e047b8a Mon Sep 17 00:00:00 2001 From: Arthur Heymans Date: Mon, 6 Dec 2021 12:21:33 +0100 Subject: cpu/x86/Makefile.inc: Build smi_trigger on !HAVE_SMI_HANDLER MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A lot of soc code requires a definition of apm_control, which smm/smi_trigger.c provided for !HAVE_SMI_HANDLER, but is not added as a build target. Fixes building Q35 without smihandler. Change-Id: Ie57819b3d169311371a1caca83c9b0c796b46048 Signed-off-by: Arthur Heymans Reviewed-on: https://review.coreboot.org/c/coreboot/+/59913 Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons Reviewed-by: Kyösti Mälkki Reviewed-by: HAOUAS Elyes --- src/cpu/x86/Makefile.inc | 3 +++ src/cpu/x86/smi_trigger.c | 53 +++++++++++++++++++++++++++++++++++++++++++ src/cpu/x86/smm/Makefile.inc | 2 -- src/cpu/x86/smm/smi_trigger.c | 53 ------------------------------------------- 4 files changed, 56 insertions(+), 55 deletions(-) create mode 100644 src/cpu/x86/smi_trigger.c delete mode 100644 src/cpu/x86/smm/smi_trigger.c (limited to 'src/cpu/x86') diff --git a/src/cpu/x86/Makefile.inc b/src/cpu/x86/Makefile.inc index b9f6417a22..b9705286f8 100644 --- a/src/cpu/x86/Makefile.inc +++ b/src/cpu/x86/Makefile.inc @@ -8,7 +8,10 @@ all-$(CONFIG_ARCH_ALL_STAGES_X86_64) += 64bit/mode_switch.S subdirs-$(CONFIG_PARALLEL_MP) += name ramstage-$(CONFIG_PARALLEL_MP) += mp_init.c + ramstage-y += backup_default_smm.c +ramstage-y += smi_trigger.c +smm-y += smi_trigger.c subdirs-$(CONFIG_CPU_INTEL_COMMON_SMM) += ../intel/smm diff --git a/src/cpu/x86/smi_trigger.c b/src/cpu/x86/smi_trigger.c new file mode 100644 index 0000000000..e4c6dc9417 --- /dev/null +++ b/src/cpu/x86/smi_trigger.c @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include + +static void apmc_log(const char *fn, u8 cmd) +{ + switch (cmd) { + case APM_CNT_ACPI_DISABLE: + printk(BIOS_DEBUG, "%s: Disabling ACPI.\n", fn); + break; + case APM_CNT_ACPI_ENABLE: + printk(BIOS_DEBUG, "%s: Enabling ACPI.\n", fn); + break; + case APM_CNT_FINALIZE: + printk(BIOS_DEBUG, "%s: Finalizing SMM.\n", fn); + break; + case APM_CNT_ELOG_GSMI: + break; + case APM_CNT_SMMSTORE: + break; + case APM_CNT_SMMINFO: + break; + default: + printk(BIOS_DEBUG, "%s: Unknown APMC 0x%02x.\n", fn, cmd); + break; + } +} + +int apm_control(u8 cmd) +{ + /* Never proceed inside SMI handler or without one. */ + if (ENV_SMM || !CONFIG(HAVE_SMI_HANDLER)) + return -1; + + apmc_log(__func__, cmd); + + /* Now raise the SMI. */ + outb(cmd, APM_CNT); + + printk(BIOS_DEBUG, "APMC done.\n"); + return 0; +} + +u8 apm_get_apmc(void) +{ + /* Emulate B2 register as the FADT / Linux expects it */ + u8 cmd = inb(APM_CNT); + + apmc_log("SMI#", cmd); + return cmd; +} diff --git a/src/cpu/x86/smm/Makefile.inc b/src/cpu/x86/smm/Makefile.inc index 4d1cdf86ee..36aa113443 100644 --- a/src/cpu/x86/smm/Makefile.inc +++ b/src/cpu/x86/smm/Makefile.inc @@ -1,7 +1,6 @@ ## 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)) @@ -29,7 +28,6 @@ ramstage-srcs += $(obj)/cpu/x86/smm/smm.manual endif smm-y += save_state.c -smm-y += smi_trigger.c ifeq ($(CONFIG_SMM_TSEG),y) diff --git a/src/cpu/x86/smm/smi_trigger.c b/src/cpu/x86/smm/smi_trigger.c deleted file mode 100644 index e4c6dc9417..0000000000 --- a/src/cpu/x86/smm/smi_trigger.c +++ /dev/null @@ -1,53 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -#include -#include -#include - -static void apmc_log(const char *fn, u8 cmd) -{ - switch (cmd) { - case APM_CNT_ACPI_DISABLE: - printk(BIOS_DEBUG, "%s: Disabling ACPI.\n", fn); - break; - case APM_CNT_ACPI_ENABLE: - printk(BIOS_DEBUG, "%s: Enabling ACPI.\n", fn); - break; - case APM_CNT_FINALIZE: - printk(BIOS_DEBUG, "%s: Finalizing SMM.\n", fn); - break; - case APM_CNT_ELOG_GSMI: - break; - case APM_CNT_SMMSTORE: - break; - case APM_CNT_SMMINFO: - break; - default: - printk(BIOS_DEBUG, "%s: Unknown APMC 0x%02x.\n", fn, cmd); - break; - } -} - -int apm_control(u8 cmd) -{ - /* Never proceed inside SMI handler or without one. */ - if (ENV_SMM || !CONFIG(HAVE_SMI_HANDLER)) - return -1; - - apmc_log(__func__, cmd); - - /* Now raise the SMI. */ - outb(cmd, APM_CNT); - - printk(BIOS_DEBUG, "APMC done.\n"); - return 0; -} - -u8 apm_get_apmc(void) -{ - /* Emulate B2 register as the FADT / Linux expects it */ - u8 cmd = inb(APM_CNT); - - apmc_log("SMI#", cmd); - return cmd; -} -- cgit v1.2.3