Kyösti Mälkki has uploaded this change for review.

View Change

arch/x86: Declare permanent_smi_handler()

Advertising SMI triggers in FADT is only valid if
we exit with SMI installed.

Change-Id: Iad92c4a180524e15199633693446a087787ad3a2
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
---
M src/include/acpi/acpi.h
M src/mainboard/aopen/dxplplusu/fadt.c
M src/mainboard/emulation/qemu-q35/acpi_tables.c
M src/mainboard/lenovo/t400/fadt.c
M src/mainboard/lenovo/x200/fadt.c
M src/mainboard/roda/rk9/fadt.c
M src/soc/amd/picasso/acpi.c
M src/soc/amd/stoneyridge/acpi.c
M src/soc/intel/baytrail/acpi.c
M src/soc/intel/braswell/acpi.c
M src/soc/intel/broadwell/acpi.c
M src/soc/intel/common/block/acpi/acpi.c
M src/soc/intel/skylake/acpi.c
M src/soc/intel/xeon_sp/cpx/acpi.c
M src/soc/intel/xeon_sp/skx/acpi.c
M src/southbridge/amd/agesa/hudson/fadt.c
M src/southbridge/amd/cimx/sb800/fadt.c
M src/southbridge/amd/pi/hudson/fadt.c
M src/southbridge/intel/bd82x6x/lpc.c
M src/southbridge/intel/i82371eb/fadt.c
M src/southbridge/intel/i82801gx/lpc.c
M src/southbridge/intel/i82801ix/i82801ix.c
M src/southbridge/intel/i82801jx/i82801jx.c
M src/southbridge/intel/i82801jx/lpc.c
M src/southbridge/intel/ibexpeak/lpc.c
M src/southbridge/intel/lynxpoint/lpc.c
26 files changed, 36 insertions(+), 31 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/10/41910/1
diff --git a/src/include/acpi/acpi.h b/src/include/acpi/acpi.h
index ea80e3b..544e2c5 100644
--- a/src/include/acpi/acpi.h
+++ b/src/include/acpi/acpi.h
@@ -1011,6 +1011,11 @@
/* Read and clear GPE status */
int acpi_get_gpe(int gpe);

+static inline int permanent_smi_handler(void)
+{
+ return CONFIG(HAVE_SMI_HANDLER);
+}
+
static inline int acpi_s3_resume_allowed(void)
{
return CONFIG(HAVE_ACPI_RESUME);
diff --git a/src/mainboard/aopen/dxplplusu/fadt.c b/src/mainboard/aopen/dxplplusu/fadt.c
index 339c243..ad522c4 100644
--- a/src/mainboard/aopen/dxplplusu/fadt.c
+++ b/src/mainboard/aopen/dxplplusu/fadt.c
@@ -38,7 +38,7 @@

fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = ACPI_ENABLE;
fadt->acpi_disable = ACPI_DISABLE;
diff --git a/src/mainboard/emulation/qemu-q35/acpi_tables.c b/src/mainboard/emulation/qemu-q35/acpi_tables.c
index 4236257..9bf58a6 100644
--- a/src/mainboard/emulation/qemu-q35/acpi_tables.c
+++ b/src/mainboard/emulation/qemu-q35/acpi_tables.c
@@ -43,7 +43,7 @@
fadt->preferred_pm_profile = PM_MOBILE;
fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
/* Do not advertise SMI even if installed. */
fadt->smi_cmd = 0;
fadt->acpi_enable = 0;
diff --git a/src/mainboard/lenovo/t400/fadt.c b/src/mainboard/lenovo/t400/fadt.c
index d15b9b3..257fb41 100644
--- a/src/mainboard/lenovo/t400/fadt.c
+++ b/src/mainboard/lenovo/t400/fadt.c
@@ -26,7 +26,7 @@
fadt->preferred_pm_profile = PM_MOBILE;
fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/mainboard/lenovo/x200/fadt.c b/src/mainboard/lenovo/x200/fadt.c
index d15b9b3..257fb41 100644
--- a/src/mainboard/lenovo/x200/fadt.c
+++ b/src/mainboard/lenovo/x200/fadt.c
@@ -26,7 +26,7 @@
fadt->preferred_pm_profile = PM_MOBILE;
fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/mainboard/roda/rk9/fadt.c b/src/mainboard/roda/rk9/fadt.c
index 102865d..5127545 100644
--- a/src/mainboard/roda/rk9/fadt.c
+++ b/src/mainboard/roda/rk9/fadt.c
@@ -26,7 +26,7 @@
fadt->preferred_pm_profile = PM_MOBILE;
fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/amd/picasso/acpi.c b/src/soc/amd/picasso/acpi.c
index d5a890b..817ec51 100644
--- a/src/soc/amd/picasso/acpi.c
+++ b/src/soc/amd/picasso/acpi.c
@@ -107,7 +107,7 @@
fadt->preferred_pm_profile = FADT_PM_PROFILE;
fadt->sci_int = 9; /* IRQ 09 - ACPI SCI */

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/amd/stoneyridge/acpi.c b/src/soc/amd/stoneyridge/acpi.c
index 47d12bf..a7caa93 100644
--- a/src/soc/amd/stoneyridge/acpi.c
+++ b/src/soc/amd/stoneyridge/acpi.c
@@ -79,7 +79,7 @@
fadt->preferred_pm_profile = FADT_PM_PROFILE;
fadt->sci_int = 9; /* IRQ 09 - ACPI SCI */

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/baytrail/acpi.c b/src/soc/intel/baytrail/acpi.c
index 66263e6..f9eb500 100644
--- a/src/soc/intel/baytrail/acpi.c
+++ b/src/soc/intel/baytrail/acpi.c
@@ -129,7 +129,7 @@

fadt->sci_int = acpi_sci_irq();

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/braswell/acpi.c b/src/soc/intel/braswell/acpi.c
index 4e3795e..e6790a7 100644
--- a/src/soc/intel/braswell/acpi.c
+++ b/src/soc/intel/braswell/acpi.c
@@ -133,7 +133,7 @@

fadt->sci_int = acpi_sci_irq();

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/broadwell/acpi.c b/src/soc/intel/broadwell/acpi.c
index 9df7dee..081b08a 100644
--- a/src/soc/intel/broadwell/acpi.c
+++ b/src/soc/intel/broadwell/acpi.c
@@ -185,7 +185,7 @@

fadt->sci_int = acpi_sci_irq();

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/common/block/acpi/acpi.c b/src/soc/intel/common/block/acpi/acpi.c
index c4a0698..bda2399 100644
--- a/src/soc/intel/common/block/acpi/acpi.c
+++ b/src/soc/intel/common/block/acpi/acpi.c
@@ -101,7 +101,7 @@

fadt->sci_int = acpi_sci_irq();

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/skylake/acpi.c b/src/soc/intel/skylake/acpi.c
index 34aed02..bdfacd3 100644
--- a/src/soc/intel/skylake/acpi.c
+++ b/src/soc/intel/skylake/acpi.c
@@ -226,7 +226,7 @@

fadt->sci_int = acpi_sci_irq();

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/xeon_sp/cpx/acpi.c b/src/soc/intel/xeon_sp/cpx/acpi.c
index d6d847b..b090d12 100644
--- a/src/soc/intel/xeon_sp/cpx/acpi.c
+++ b/src/soc/intel/xeon_sp/cpx/acpi.c
@@ -148,7 +148,7 @@

fadt->x_gpe1_blk.space_id = 1;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/soc/intel/xeon_sp/skx/acpi.c b/src/soc/intel/xeon_sp/skx/acpi.c
index 9818508..374275b 100644
--- a/src/soc/intel/xeon_sp/skx/acpi.c
+++ b/src/soc/intel/xeon_sp/skx/acpi.c
@@ -339,7 +339,7 @@
fadt->sci_int = acpi_sci_irq();

/* TODO: enabled SMM mode switch when SMM handlers are set up. */
- if (0 && CONFIG(HAVE_SMI_HANDLER)) {
+ if (0 && permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/southbridge/amd/agesa/hudson/fadt.c b/src/southbridge/amd/agesa/hudson/fadt.c
index 660598a..a328a88 100644
--- a/src/southbridge/amd/agesa/hudson/fadt.c
+++ b/src/southbridge/amd/agesa/hudson/fadt.c
@@ -57,7 +57,7 @@
fadt->preferred_pm_profile = FADT_PM_PROFILE;
fadt->sci_int = 9; /* HUDSON - IRQ 09 - ACPI SCI */

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = ACPI_SMI_CTL_PORT;
fadt->acpi_enable = ACPI_SMI_CMD_ENABLE;
fadt->acpi_disable = ACPI_SMI_CMD_DISABLE;
diff --git a/src/southbridge/amd/cimx/sb800/fadt.c b/src/southbridge/amd/cimx/sb800/fadt.c
index e836cfb..bd0ec9c 100644
--- a/src/southbridge/amd/cimx/sb800/fadt.c
+++ b/src/southbridge/amd/cimx/sb800/fadt.c
@@ -62,7 +62,7 @@
fadt->preferred_pm_profile = FADT_PM_PROFILE;
fadt->sci_int = 9; /* HUDSON 1 - IRQ 09 - ACPI SCI */

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = ACPI_SMI_CTL_PORT;
fadt->acpi_enable = ACPI_SMI_CMD_ENABLE;
fadt->acpi_disable = ACPI_SMI_CMD_DISABLE;
diff --git a/src/southbridge/amd/pi/hudson/fadt.c b/src/southbridge/amd/pi/hudson/fadt.c
index 100cfb6..686b669 100644
--- a/src/southbridge/amd/pi/hudson/fadt.c
+++ b/src/southbridge/amd/pi/hudson/fadt.c
@@ -49,7 +49,7 @@
fadt->preferred_pm_profile = FADT_PM_PROFILE;
fadt->sci_int = 9; /* HUDSON - IRQ 09 - ACPI SCI */

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = ACPI_SMI_CTL_PORT;
fadt->acpi_enable = ACPI_SMI_CMD_ENABLE;
fadt->acpi_disable = ACPI_SMI_CMD_DISABLE;
diff --git a/src/southbridge/intel/bd82x6x/lpc.c b/src/southbridge/intel/bd82x6x/lpc.c
index 45215f1..d939429 100644
--- a/src/southbridge/intel/bd82x6x/lpc.c
+++ b/src/southbridge/intel/bd82x6x/lpc.c
@@ -698,7 +698,7 @@

fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
@@ -836,7 +836,7 @@
spi_finalize_ops();

/* Call SMM finalize() handlers before resume */
- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
if (CONFIG(INTEL_CHIPSET_LOCKDOWN) ||
acpi_is_wakeup_s3()) {
outb(APM_CNT_FINALIZE, APM_CNT);
diff --git a/src/southbridge/intel/i82371eb/fadt.c b/src/southbridge/intel/i82371eb/fadt.c
index 26a1856..583a9ed 100644
--- a/src/southbridge/intel/i82371eb/fadt.c
+++ b/src/southbridge/intel/i82371eb/fadt.c
@@ -36,7 +36,7 @@
fadt->preferred_pm_profile = 0; /* unspecified */
fadt->sci_int = 9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = ACPI_SMI_CTL_PORT;
fadt->acpi_enable = ACPI_SMI_CMD_ENABLE;
fadt->acpi_disable = ACPI_SMI_CMD_DISABLE;
diff --git a/src/southbridge/intel/i82801gx/lpc.c b/src/southbridge/intel/i82801gx/lpc.c
index 86c3e58..d4aef55 100644
--- a/src/southbridge/intel/i82801gx/lpc.c
+++ b/src/southbridge/intel/i82801gx/lpc.c
@@ -522,7 +522,7 @@
fadt->reserved = 0;
fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/southbridge/intel/i82801ix/i82801ix.c b/src/southbridge/intel/i82801ix/i82801ix.c
index b2b55ce..5e5e667 100644
--- a/src/southbridge/intel/i82801ix/i82801ix.c
+++ b/src/southbridge/intel/i82801ix/i82801ix.c
@@ -204,9 +204,9 @@
i82801ix_hide_functions();

/* Reset watchdog timer. */
-#if !CONFIG(HAVE_SMI_HANDLER)
- outw(0x0008, DEFAULT_TCOBASE + 0x12); /* Set higher timer value. */
-#endif
+ if (!permanent_smi_handler())
+ outw(0x0008, DEFAULT_TCOBASE + 0x12); /* Set higher timer value. */
+
outw(0x0000, DEFAULT_TCOBASE + 0x00); /* Update timer. */
}

diff --git a/src/southbridge/intel/i82801jx/i82801jx.c b/src/southbridge/intel/i82801jx/i82801jx.c
index b4ffcfa..7c6371b 100644
--- a/src/southbridge/intel/i82801jx/i82801jx.c
+++ b/src/southbridge/intel/i82801jx/i82801jx.c
@@ -203,9 +203,9 @@
i82801jx_hide_functions();

/* Reset watchdog timer. */
-#if !CONFIG(HAVE_SMI_HANDLER)
- outw(0x0008, DEFAULT_TCOBASE + 0x12); /* Set higher timer value. */
-#endif
+ if (!permanent_smi_handler())
+ outw(0x0008, DEFAULT_TCOBASE + 0x12); /* Set higher timer value. */
+
outw(0x0000, DEFAULT_TCOBASE + 0x00); /* Update timer. */
}

diff --git a/src/southbridge/intel/i82801jx/lpc.c b/src/southbridge/intel/i82801jx/lpc.c
index b3aeda2..7a1b24b 100644
--- a/src/southbridge/intel/i82801jx/lpc.c
+++ b/src/southbridge/intel/i82801jx/lpc.c
@@ -533,7 +533,7 @@
fadt->reserved = 0;
fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
diff --git a/src/southbridge/intel/ibexpeak/lpc.c b/src/southbridge/intel/ibexpeak/lpc.c
index 1209f9b..c64f6b4 100644
--- a/src/southbridge/intel/ibexpeak/lpc.c
+++ b/src/southbridge/intel/ibexpeak/lpc.c
@@ -592,7 +592,7 @@

fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
@@ -729,7 +729,7 @@
spi_finalize_ops();

/* Call SMM finalize() handlers before resume */
- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
if (CONFIG(INTEL_CHIPSET_LOCKDOWN) ||
acpi_is_wakeup_s3()) {
outb(APM_CNT_FINALIZE, APM_CNT);
diff --git a/src/southbridge/intel/lynxpoint/lpc.c b/src/southbridge/intel/lynxpoint/lpc.c
index da744bf..1d75555 100644
--- a/src/southbridge/intel/lynxpoint/lpc.c
+++ b/src/southbridge/intel/lynxpoint/lpc.c
@@ -741,7 +741,7 @@

fadt->sci_int = 0x9;

- if (CONFIG(HAVE_SMI_HANDLER)) {
+ if (permanent_smi_handler()) {
fadt->smi_cmd = APM_CNT;
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;

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

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Iad92c4a180524e15199633693446a087787ad3a2
Gerrit-Change-Number: 41910
Gerrit-PatchSet: 1
Gerrit-Owner: Kyösti Mälkki <kyosti.malkki@gmail.com>
Gerrit-Reviewer: Alexander Couzens <lynxis@fe80.eu>
Gerrit-Reviewer: Patrick Rudolph <siro@das-labor.org>
Gerrit-MessageType: newchange