summaryrefslogtreecommitdiff
path: root/src/soc/amd
diff options
context:
space:
mode:
authorMarshall Dawson <marshalldawson3rd@gmail.com>2017-09-27 13:32:38 -0600
committerMartin Roth <martinroth@google.com>2017-10-02 22:30:02 +0000
commit66e62da4c7830598c52cd0291bc8d10f4d0ff9c4 (patch)
tree778c44de3339f837d17110fe1de1620eea1f071b /src/soc/amd
parenteecb794c96f738d20bf4d5890bbad8b3834c9685 (diff)
downloadcoreboot-66e62da4c7830598c52cd0291bc8d10f4d0ff9c4.tar.xz
amd/stoneyridge: Check SMI command address before reading
Use the currently programmed address of the SMI command port before checking the passed command. This ensures we're reading the right port in case the port was relocated without our knowledge. Change-Id: I8a3ca285d3a9afd4a107cd471c202abf03f372ac Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-on: https://review.coreboot.org/21744 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/soc/amd')
-rw-r--r--src/soc/amd/stoneyridge/include/soc/smi.h1
-rw-r--r--src/soc/amd/stoneyridge/smi_util.c5
-rw-r--r--src/soc/amd/stoneyridge/smihandler.c3
3 files changed, 7 insertions, 2 deletions
diff --git a/src/soc/amd/stoneyridge/include/soc/smi.h b/src/soc/amd/stoneyridge/include/soc/smi.h
index 87d1a0a03a..5e6f6ff31e 100644
--- a/src/soc/amd/stoneyridge/include/soc/smi.h
+++ b/src/soc/amd/stoneyridge/include/soc/smi.h
@@ -194,6 +194,7 @@ enum smi_lvl {
SMI_LVL_HIGH = 1,
};
+uint16_t pm_acpi_smi_cmd_port(void);
void configure_gevent_smi(uint8_t gevent, uint8_t mode, uint8_t level);
void disable_gevent_smi(uint8_t gevent);
void enable_acpi_cmd_smi(void);
diff --git a/src/soc/amd/stoneyridge/smi_util.c b/src/soc/amd/stoneyridge/smi_util.c
index 42d651a1fd..833e6e37e6 100644
--- a/src/soc/amd/stoneyridge/smi_util.c
+++ b/src/soc/amd/stoneyridge/smi_util.c
@@ -74,3 +74,8 @@ void enable_acpi_cmd_smi(void)
{
configure_smi(SMITYPE_SMI_CMD_PORT, SMI_MODE_SMI);
}
+
+uint16_t pm_acpi_smi_cmd_port(void)
+{
+ return pm_read16(PM_ACPI_SMI_CMD);
+}
diff --git a/src/soc/amd/stoneyridge/smihandler.c b/src/soc/amd/stoneyridge/smihandler.c
index 45dada5227..c3c85e364d 100644
--- a/src/soc/amd/stoneyridge/smihandler.c
+++ b/src/soc/amd/stoneyridge/smihandler.c
@@ -5,7 +5,6 @@
* Subject to the GNU GPL v2, or (at your option) any later version.
*/
-
#include <console/console.h>
#include <cpu/x86/smm.h>
#include <delay.h>
@@ -27,7 +26,7 @@ enum smi_source {
static void sb_apmc_smi_handler(void)
{
u32 reg32;
- const uint8_t cmd = inb(APM_CNT);
+ const uint8_t cmd = inb(pm_acpi_smi_cmd_port());
switch (cmd) {
case APM_CNT_ACPI_ENABLE: