Felix Held submitted this change.

View Change

Approvals: Matt DeVillier: Looks good to me, approved build bot (Jenkins): Verified
drivers/smmstore/ramstage: use call_smm

Use call_smm instead of open-coding the same in inline assembly
functionality in init_store. The local ebx variable is dropped, since
call_smm takes a pointer to the argument instead of an integer, and the
local eax variable is renamed to res to make the code a bit clearer,
since the EAX register is used for both passing the command and
subcommand to the APMC SMI handler and to get the return value from the
handler.

TEST=SMMSTORE V2 still works with the EDK2 payload on Careena

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Ib14de0d120ae5c7db3bb7a529837ababe653e1a2
Reviewed-on: https://review.coreboot.org/c/coreboot/+/79766
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com>
---
M src/drivers/smmstore/ramstage.c
1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/src/drivers/smmstore/ramstage.c b/src/drivers/smmstore/ramstage.c
index ef80e22..e59090da 100644
--- a/src/drivers/smmstore/ramstage.c
+++ b/src/drivers/smmstore/ramstage.c
@@ -5,6 +5,7 @@
#include <commonlib/helpers.h>
#include <commonlib/region.h>
#include <console/console.h>
+#include <smm_call.h>
#include <smmstore.h>
#include <types.h>
#include <cbmem.h>
@@ -37,8 +38,7 @@
static void init_store(void *unused)
{
struct smmstore_params_init args;
- uint32_t eax = ~0;
- uint32_t ebx;
+ uint32_t ret = ~0;

if (smmstore_get_info(&info) < 0) {
printk(BIOS_INFO, "SMMSTORE: Failed to get meta data\n");
@@ -53,20 +53,13 @@

args.com_buffer = (uintptr_t)ptr;
args.com_buffer_size = info.block_size;
- ebx = (uintptr_t)&args;

printk(BIOS_INFO, "SMMSTORE: Setting up SMI handler\n");

/* Issue SMI using APM to update the com buffer and to lock the SMMSTORE */
- __asm__ __volatile__ (
- "outb %%al, %%dx"
- : "=a" (eax)
- : "a" ((SMMSTORE_CMD_INIT << 8) | APM_CNT_SMMSTORE),
- "b" (ebx),
- "d" (APM_CNT)
- : "memory");
+ ret = call_smm(APM_CNT_SMMSTORE, SMMSTORE_CMD_INIT, &args);

- if (eax != SMMSTORE_RET_SUCCESS) {
+ if (ret != SMMSTORE_RET_SUCCESS) {
printk(BIOS_ERR, "SMMSTORE: Failed to install com buffer\n");
return;
}

To view, visit change 79766. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: main
Gerrit-Change-Id: Ib14de0d120ae5c7db3bb7a529837ababe653e1a2
Gerrit-Change-Number: 79766
Gerrit-PatchSet: 7
Gerrit-Owner: Felix Held <felix-coreboot@felixheld.de>
Gerrit-Reviewer: Felix Held <felix-coreboot@felixheld.de>
Gerrit-Reviewer: Matt DeVillier <matt.devillier@amd.corp-partner.google.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-MessageType: merged