diff options
author | Fred Reitberger <reitbergerfred@gmail.com> | 2022-10-14 14:04:04 -0400 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-10-17 13:42:46 +0000 |
commit | f73a3a5e08d7906e4ce1152a820ac52a3547a842 (patch) | |
tree | 645e60c7700f4ffabd75be7d67cf32a874b41eb0 /src/soc/amd/common/block | |
parent | 9efe34a3960c7186cc3f88e442aaaf5d789a019f (diff) |
soc/amd/*/smihandler: Make fch_apmc_smi_handler common
Rename soc/amd/common/block/cpu/smm/smi_ampc_helper.c to smi_apmc.c and
add the fch_apmc_smi_handler function.
Remove the duplicated function from picasso, cezanne, mendocino, and
morgana SoC.
The stoneyridge soc does not implement the APM_CNT_SMMINFO handler, so
give the handler a unique name that does not conflict with the common
handler name.
Signed-off-by: Fred Reitberger <reitbergerfred@gmail.com>
Change-Id: I2e6fb59a1ee15b075ee3bbb5f95debe884b66789
Reviewed-on: https://review.coreboot.org/c/coreboot/+/68441
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
Diffstat (limited to 'src/soc/amd/common/block')
-rw-r--r-- | src/soc/amd/common/block/cpu/smm/Makefile.inc | 2 | ||||
-rw-r--r-- | src/soc/amd/common/block/cpu/smm/smi_apmc.c (renamed from src/soc/amd/common/block/cpu/smm/smi_apmc_helper.c) | 32 | ||||
-rw-r--r-- | src/soc/amd/common/block/include/amdblocks/smm.h | 1 |
3 files changed, 34 insertions, 1 deletions
diff --git a/src/soc/amd/common/block/cpu/smm/Makefile.inc b/src/soc/amd/common/block/cpu/smm/Makefile.inc index 5694d1d9ca..3b6fb807e5 100644 --- a/src/soc/amd/common/block/cpu/smm/Makefile.inc +++ b/src/soc/amd/common/block/cpu/smm/Makefile.inc @@ -5,7 +5,7 @@ postcar-y += smm_helper.c ramstage-y += finalize.c ramstage-y += smm_relocate.c ramstage-y += smm_helper.c -smm-y += smi_apmc_helper.c +smm-y += smi_apmc.c smm-y += smi_handler.c endif # CONFIG_SOC_AMD_COMMON_BLOCK_SMM diff --git a/src/soc/amd/common/block/cpu/smm/smi_apmc_helper.c b/src/soc/amd/common/block/cpu/smm/smi_apmc.c index 7b3afc2b81..0eab86c9da 100644 --- a/src/soc/amd/common/block/cpu/smm/smi_apmc_helper.c +++ b/src/soc/amd/common/block/cpu/smm/smi_apmc.c @@ -1,6 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ +#include <acpi/acpi.h> +#include <amdblocks/acpi.h> +#include <amdblocks/psp.h> #include <amdblocks/smm.h> +#include <arch/io.h> #include <cpu/amd/amd64_save_state.h> #include <cpu/x86/smm.h> #include <elog.h> @@ -84,3 +88,31 @@ void handle_smi_store(void) /* drivers/smmstore/smi.c */ io_smi->rax = smmstore_exec(sub_command, (void *)(uintptr_t)reg_ebx); } + +void fch_apmc_smi_handler(void) +{ + const uint8_t cmd = inb(pm_acpi_smi_cmd_port()); + + switch (cmd) { + case APM_CNT_ACPI_ENABLE: + acpi_clear_pm_gpe_status(); + acpi_enable_sci(); + break; + case APM_CNT_ACPI_DISABLE: + acpi_disable_sci(); + break; + case APM_CNT_ELOG_GSMI: + if (CONFIG(ELOG_GSMI)) + handle_smi_gsmi(); + break; + case APM_CNT_SMMSTORE: + if (CONFIG(SMMSTORE)) + handle_smi_store(); + break; + case APM_CNT_SMMINFO: + psp_notify_smm(); + break; + } + + mainboard_smi_apmc(cmd); +} diff --git a/src/soc/amd/common/block/include/amdblocks/smm.h b/src/soc/amd/common/block/include/amdblocks/smm.h index 2218385477..fb2e488922 100644 --- a/src/soc/amd/common/block/include/amdblocks/smm.h +++ b/src/soc/amd/common/block/include/amdblocks/smm.h @@ -9,6 +9,7 @@ void *get_smi_source_handler(int source); void handle_smi_gsmi(void); void handle_smi_store(void); +void fch_apmc_smi_handler(void); void clear_tvalid(void); void lock_smm(void); /* See SMITYPE_* for list possible of events. GEVENTS are handled with mainboard_smi_gpi. */ |