Arthur Heymans has uploaded this change for review.

View Change

soc/intel/denverton_ns: Update GNVS using common save state accessors

Change-Id: I53e8b010b9e057b3a6b856ab9bfd7e0ac13f4593
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
---
M src/soc/intel/denverton_ns/smihandler.c
1 file changed, 5 insertions(+), 43 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/19/45819/1
diff --git a/src/soc/intel/denverton_ns/smihandler.c b/src/soc/intel/denverton_ns/smihandler.c
index 5eecba7..92fa133 100644
--- a/src/soc/intel/denverton_ns/smihandler.c
+++ b/src/soc/intel/denverton_ns/smihandler.c
@@ -7,7 +7,7 @@
#include <console/console.h>
#include <cpu/x86/cache.h>
#include <cpu/x86/smm.h>
-#include <cpu/intel/em64t100_save_state.h>
+#include <cpu/x86/save_state.h>
#include <device/pci_def.h>
#include <intelblocks/fast_spi.h>
#include <spi-generic.h>
@@ -146,42 +146,6 @@
}
}

-/*
- * Look for Synchronous IO SMI and use save state from that
- * core in case we are not running on the same core that
- * initiated the IO transaction.
- */
-static em64t100_smm_state_save_area_t *smi_apmc_find_state_save(uint8_t cmd)
-{
- em64t100_smm_state_save_area_t *state;
- int node;
-
- /* Check all nodes looking for the one that issued the IO */
- for (node = 0; node < CONFIG_MAX_CPUS; node++) {
- state = smm_get_save_state(node);
-
- /* Check for Synchronous IO (bit0==1) */
- if (!(state->io_misc_info & (1 << 0)))
- continue;
-
- /* Make sure it was a write (bit4==0) */
- if (state->io_misc_info & (1 << 4))
- continue;
-
- /* Check for APMC IO port */
- if (((state->io_misc_info >> 16) & 0xff) != APM_CNT)
- continue;
-
- /* Check AX against the requested command */
- if ((state->rax & 0xff) != cmd)
- continue;
-
- return state;
- }
-
- return NULL;
-}
-
static void finalize(void)
{
static int finalize_done;
@@ -200,7 +164,6 @@
static void southbridge_smi_apmc(void)
{
uint8_t reg8;
- em64t100_smm_state_save_area_t *state;

/* Emulate B2 register as the FADT / Linux expects it */

@@ -237,11 +200,10 @@
"SMI#: SMM structures already initialized!\n");
return;
}
- state = smi_apmc_find_state_save(reg8);
- if (state) {
- /* EBX in the state save contains the GNVS pointer */
- gnvs = (struct global_nvs *)((uint32_t)state->rbx);
- smm_initialized = 1;
+ int node = get_apmc_node(reg8);
+ if (node >= 0) {
+ if (!get_save_state_reg(RBX, node, &gnvs, sizeof(gnvs)))
+ smm_initialized = 1;
printk(BIOS_DEBUG, "SMI#: Setting GNVS to %p\n", gnvs);
}
break;

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

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I53e8b010b9e057b3a6b856ab9bfd7e0ac13f4593
Gerrit-Change-Number: 45819
Gerrit-PatchSet: 1
Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz>
Gerrit-Reviewer: David Guckian <david.guckian@intel.com>
Gerrit-Reviewer: Patrick Rudolph <siro@das-labor.org>
Gerrit-Reviewer: Vanessa Eusebio <vanessa.f.eusebio@intel.com>
Gerrit-MessageType: newchange