From 9cc16031730d8bb47971e18e564ba6343bd4b5cb Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Sun, 19 Jan 2020 00:17:29 -0600 Subject: soc/amd/stoneyridge: Add SMMSTORE support Add SMMSTORE support for saving EFI NVRAM variables in conjunction with Tianocore payload. Test: build/boot several google/kahlee variants, test manipulation and persistence of Tianocore bootorder variables. Change-Id: Ida604a44d1fa5288e96dbe05de1f847e597cc95d Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/38468 Tested-by: build bot (Jenkins) Reviewed-by: Marshall Dawson Reviewed-by: Angel Pons --- src/soc/amd/stoneyridge/smihandler.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/soc/amd/stoneyridge/smihandler.c b/src/soc/amd/stoneyridge/smihandler.c index 2b883972c9..aa2a15bf14 100644 --- a/src/soc/amd/stoneyridge/smihandler.c +++ b/src/soc/amd/stoneyridge/smihandler.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,25 @@ static void southbridge_smi_gsmi(void) io_smi->rax = gsmi_exec(sub_command, ®_ebx); } +static void southbridge_smi_store(void) +{ + u8 sub_command; + amd64_smm_state_save_area_t *io_smi; + u32 reg_ebx; + + io_smi = find_save_state(APM_CNT_SMMSTORE); + if (!io_smi) + return; + /* Command and return value in EAX */ + sub_command = (io_smi->rax >> 8) & 0xff; + + /* Parameter buffer in EBX */ + reg_ebx = io_smi->rbx; + + /* drivers/smmstore/smi.c */ + io_smi->rax = smmstore_exec(sub_command, (void *)reg_ebx); +} + static void sb_apmc_smi_handler(void) { const uint8_t cmd = inb(pm_acpi_smi_cmd_port()); @@ -103,6 +123,10 @@ static void sb_apmc_smi_handler(void) if (CONFIG(ELOG_GSMI)) southbridge_smi_gsmi(); break; + case APM_CNT_SMMSTORE: + if (CONFIG(SMMSTORE)) + southbridge_smi_store(); + break; } mainboard_smi_apmc(cmd); -- cgit v1.2.3