summaryrefslogtreecommitdiff
path: root/src/soc/amd/common/block
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2022-03-04 10:28:42 -0700
committerFelix Held <felix-coreboot@felixheld.de>2022-03-16 16:33:32 +0000
commitd59b3dd08540b7cf42dc98d68da42b2a4305f6ee (patch)
tree8784485cc31a2ce109d46cc9a20f31b93d530423 /src/soc/amd/common/block
parent589609c8e7d723b190bf694d39eae1e1ae99d822 (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.c7
-rw-r--r--src/soc/amd/common/block/include/amdblocks/smm.h2
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);