diff options
author | Marshall Dawson <marshalldawson3rd@gmail.com> | 2017-09-27 13:32:38 -0600 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2017-10-02 22:30:02 +0000 |
commit | 66e62da4c7830598c52cd0291bc8d10f4d0ff9c4 (patch) | |
tree | 778c44de3339f837d17110fe1de1620eea1f071b /src/soc/amd | |
parent | eecb794c96f738d20bf4d5890bbad8b3834c9685 (diff) | |
download | coreboot-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.h | 1 | ||||
-rw-r--r-- | src/soc/amd/stoneyridge/smi_util.c | 5 | ||||
-rw-r--r-- | src/soc/amd/stoneyridge/smihandler.c | 3 |
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: |