diff options
author | Raul E Rangel <rrangel@chromium.org> | 2022-03-04 10:28:42 -0700 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-03-16 16:33:32 +0000 |
commit | d59b3dd08540b7cf42dc98d68da42b2a4305f6ee (patch) | |
tree | 8784485cc31a2ce109d46cc9a20f31b93d530423 /src/soc/amd/common/block | |
parent | 589609c8e7d723b190bf694d39eae1e1ae99d822 (diff) |
soc/amd/common/block: Add mainboard_handle_smi
The current SMM framework only allows the mainboard code to handle GPEs.
i.e., Events 0 - 23. This change allows the mainboard code to handle any
SMI events not handled by the SoC code. This will allow the mainboard
code to handle `SMITYPE_ESPI_SMI`.
BUG=b:222694093
TEST=Build guybrush
Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Change-Id: I81943e8cb31e998f29cc60b565d3ca0a8dfe9cb2
Reviewed-on: https://review.coreboot.org/c/coreboot/+/62598
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Karthik Ramasubramanian <kramasub@google.com>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Diffstat (limited to 'src/soc/amd/common/block')
-rw-r--r-- | src/soc/amd/common/block/cpu/smm/smi_handler.c | 7 | ||||
-rw-r--r-- | src/soc/amd/common/block/include/amdblocks/smm.h | 2 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/soc/amd/common/block/cpu/smm/smi_handler.c b/src/soc/amd/common/block/cpu/smm/smi_handler.c index e535cb0f14..ee8423a0f5 100644 --- a/src/soc/amd/common/block/cpu/smm/smi_handler.c +++ b/src/soc/amd/common/block/cpu/smm/smi_handler.c @@ -7,6 +7,11 @@ #include <cpu/x86/smm.h> #include <soc/smi.h> +__weak void mainboard_handle_smi(int event) +{ + printk(BIOS_WARNING, "SMI event %d is missing handler\n", event); +} + static void process_smi_sources(uint32_t reg) { const uint32_t status = smi_read32(reg); @@ -19,6 +24,8 @@ static void process_smi_sources(uint32_t reg) source_handler = get_smi_source_handler(i + bit_zero); if (source_handler) source_handler(); + else if (reg != SMI_REG_SMISTS0 || (status & GEVENT_MASK) == 0) + mainboard_handle_smi(i + bit_zero); } } diff --git a/src/soc/amd/common/block/include/amdblocks/smm.h b/src/soc/amd/common/block/include/amdblocks/smm.h index 187eddf691..46008fae2e 100644 --- a/src/soc/amd/common/block/include/amdblocks/smm.h +++ b/src/soc/amd/common/block/include/amdblocks/smm.h @@ -14,3 +14,5 @@ void *get_smi_source_handler(int source); void handle_smi_gsmi(void); void handle_smi_store(void); void clear_tvalid(void); +/* See SMITYPE_* for list possible of events. GEVENTS are handled with mainboard_smi_gpi. */ +void mainboard_handle_smi(int event); |