summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cpu/x86/smm/smihandler.c21
-rw-r--r--src/include/cpu/x86/smm.h16
-rw-r--r--src/southbridge/amd/agesa/hudson/smihandler.c6
-rw-r--r--src/southbridge/amd/pi/hudson/smihandler.c6
-rw-r--r--src/southbridge/intel/bd82x6x/smihandler.c16
-rw-r--r--src/southbridge/intel/fsp_bd82x6x/smihandler.c16
-rw-r--r--src/southbridge/intel/i82801dx/smihandler.c10
-rw-r--r--src/southbridge/intel/i82801gx/smihandler.c12
-rw-r--r--src/southbridge/intel/i82801ix/smihandler.c12
-rw-r--r--src/southbridge/intel/ibexpeak/smihandler.c16
10 files changed, 57 insertions, 74 deletions
diff --git a/src/cpu/x86/smm/smihandler.c b/src/cpu/x86/smm/smihandler.c
index bd03030c4c..cbd6d44bc7 100644
--- a/src/cpu/x86/smm/smihandler.c
+++ b/src/cpu/x86/smm/smihandler.c
@@ -199,12 +199,9 @@ void smi_handler(u32 smm_revision)
}
/* Call chipset specific SMI handlers. */
- if (cpu_smi_handler)
- cpu_smi_handler(node, &state_save);
- if (northbridge_smi_handler)
- northbridge_smi_handler(node, &state_save);
- if (southbridge_smi_handler)
- southbridge_smi_handler(node, &state_save);
+ cpu_smi_handler(node, &state_save);
+ northbridge_smi_handler(node, &state_save);
+ southbridge_smi_handler(node, &state_save);
smi_restore_pci_address();
@@ -215,3 +212,15 @@ void smi_handler(u32 smm_revision)
/* De-assert SMI# signal to allow another SMI */
smi_set_eos();
}
+
+/* Provide a default implementation for all weak handlers so that relocation
+ * entries in the modules make sense. Without default implementations the
+ * weak relocations w/o a symbol have a 0 address which is where the modules
+ * are linked at. */
+int __attribute__((weak)) mainboard_io_trap_handler(int smif) { return 0; }
+void __attribute__((weak)) cpu_smi_handler(unsigned int node, smm_state_save_area_t *state_save) {}
+void __attribute__((weak)) northbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_save) {}
+void __attribute__((weak)) southbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_save) {}
+void __attribute__((weak)) mainboard_smi_gpi(u32 gpi_sts) {}
+int __attribute__((weak)) mainboard_smi_apmc(u8 data) { return 0; }
+void __attribute__((weak)) mainboard_smi_sleep(u8 slp_typ) {}
diff --git a/src/include/cpu/x86/smm.h b/src/include/cpu/x86/smm.h
index 7b529e0773..c16a6c50d2 100644
--- a/src/include/cpu/x86/smm.h
+++ b/src/include/cpu/x86/smm.h
@@ -467,7 +467,7 @@ void smi_handler(u32 smm_revision);
void io_trap_handler(int smif);
int southbridge_io_trap_handler(int smif);
-int __attribute__((weak)) mainboard_io_trap_handler(int smif);
+int mainboard_io_trap_handler(int smif);
void southbridge_smi_set_eos(void);
@@ -475,18 +475,14 @@ void southbridge_smi_set_eos(void);
void cpu_smi_handler(void);
void northbridge_smi_handler(void);
void southbridge_smi_handler(void);
+#else
+void cpu_smi_handler(unsigned int node, smm_state_save_area_t *state_save);
+void northbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_save);
+void southbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_save);
+#endif /* CONFIG_SMM_MODULES */
void mainboard_smi_gpi(u32 gpi_sts);
int mainboard_smi_apmc(u8 data);
void mainboard_smi_sleep(u8 slp_typ);
-#else
-void __attribute__((weak)) cpu_smi_handler(unsigned int node, smm_state_save_area_t *state_save);
-void __attribute__((weak)) northbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_save);
-void __attribute__((weak)) southbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_save);
-
-void __attribute__((weak)) mainboard_smi_gpi(u32 gpi_sts);
-int __attribute__((weak)) mainboard_smi_apmc(u8 data);
-void __attribute__((weak)) mainboard_smi_sleep(u8 slp_typ);
-#endif /* CONFIG_SMM_MODULES */
#if !CONFIG_SMM_TSEG
void smi_release_lock(void);
diff --git a/src/southbridge/amd/agesa/hudson/smihandler.c b/src/southbridge/amd/agesa/hudson/smihandler.c
index d1b661b103..af8c215ea9 100644
--- a/src/southbridge/amd/agesa/hudson/smihandler.c
+++ b/src/southbridge/amd/agesa/hudson/smihandler.c
@@ -41,8 +41,7 @@ static void hudson_apmc_smi_handler(void)
break;
}
- if (mainboard_smi_apmc)
- mainboard_smi_apmc(cmd);
+ mainboard_smi_apmc(cmd);
}
int southbridge_io_trap_handler(int smif)
@@ -66,8 +65,7 @@ static void process_gpe_smi(void)
/* Only Bits [23:0] indicate GEVENT SMIs. */
if (status & gevent_mask) {
/* A GEVENT SMI occurred */
- if (mainboard_smi_gpi)
- mainboard_smi_gpi(status & gevent_mask);
+ mainboard_smi_gpi(status & gevent_mask);
}
/* Clear events to prevent re-entering SMI if event isn't handled */
diff --git a/src/southbridge/amd/pi/hudson/smihandler.c b/src/southbridge/amd/pi/hudson/smihandler.c
index e762d0bb96..6f2504bbcc 100644
--- a/src/southbridge/amd/pi/hudson/smihandler.c
+++ b/src/southbridge/amd/pi/hudson/smihandler.c
@@ -41,8 +41,7 @@ static void hudson_apmc_smi_handler(void)
break;
}
- if (mainboard_smi_apmc)
- mainboard_smi_apmc(cmd);
+ mainboard_smi_apmc(cmd);
}
int southbridge_io_trap_handler(int smif)
@@ -66,8 +65,7 @@ static void process_gpe_smi(void)
/* Only Bits [23:0] indicate GEVENT SMIs. */
if (status & gevent_mask) {
/* A GEVENT SMI occured */
- if (mainboard_smi_gpi)
- mainboard_smi_gpi(status & gevent_mask);
+ mainboard_smi_gpi(status & gevent_mask);
}
/* Clear events to prevent re-entering SMI if event isn't handled */
diff --git a/src/southbridge/intel/bd82x6x/smihandler.c b/src/southbridge/intel/bd82x6x/smihandler.c
index 45612d0d10..f69c1f4dd8 100644
--- a/src/southbridge/intel/bd82x6x/smihandler.c
+++ b/src/southbridge/intel/bd82x6x/smihandler.c
@@ -419,8 +419,7 @@ static void southbridge_smi_sleep(unsigned int node, smm_state_save_area_t *stat
/* Do any mainboard sleep handling */
tseg_relocate((void **)&mainboard_sleep);
- if (mainboard_sleep)
- mainboard_sleep(slp_typ-2);
+ mainboard_sleep(slp_typ-2);
#if CONFIG_ELOG_GSMI
/* Log S3, S4, and S5 entry */
@@ -607,8 +606,7 @@ static void southbridge_smi_apmc(unsigned int node, smm_state_save_area_t *state
}
tseg_relocate((void **)&mainboard_apmc);
- if (mainboard_apmc)
- mainboard_apmc(reg8);
+ mainboard_apmc(reg8);
}
static void southbridge_smi_pm1(unsigned int node, smm_state_save_area_t *state_save)
@@ -650,12 +648,10 @@ static void southbridge_smi_gpi(unsigned int node, smm_state_save_area_t *state_
reg16 &= inw(pmbase + ALT_GP_SMI_EN);
tseg_relocate((void **)&mainboard_gpi);
- if (mainboard_gpi) {
- mainboard_gpi(reg16);
- } else {
- if (reg16)
- printk(BIOS_DEBUG, "GPI (mask %04x)\n", reg16);
- }
+ mainboard_gpi(reg16);
+
+ if (reg16)
+ printk(BIOS_DEBUG, "GPI (mask %04x)\n", reg16);
outw(reg16, pmbase + ALT_GP_SMI_STS);
}
diff --git a/src/southbridge/intel/fsp_bd82x6x/smihandler.c b/src/southbridge/intel/fsp_bd82x6x/smihandler.c
index c98e267943..8164e7e46c 100644
--- a/src/southbridge/intel/fsp_bd82x6x/smihandler.c
+++ b/src/southbridge/intel/fsp_bd82x6x/smihandler.c
@@ -353,8 +353,7 @@ static void southbridge_smi_sleep(unsigned int node, smm_state_save_area_t *stat
/* Do any mainboard sleep handling */
tseg_relocate((void **)&mainboard_sleep);
- if (mainboard_sleep)
- mainboard_sleep(slp_typ-2);
+ mainboard_sleep(slp_typ-2);
#if CONFIG_ELOG_GSMI
/* Log S3, S4, and S5 entry */
@@ -541,8 +540,7 @@ static void southbridge_smi_apmc(unsigned int node, smm_state_save_area_t *state
}
tseg_relocate((void **)&mainboard_apmc);
- if (mainboard_apmc)
- mainboard_apmc(reg8);
+ mainboard_apmc(reg8);
}
static void southbridge_smi_pm1(unsigned int node, smm_state_save_area_t *state_save)
@@ -584,12 +582,10 @@ static void southbridge_smi_gpi(unsigned int node, smm_state_save_area_t *state_
reg16 &= inw(pmbase + ALT_GP_SMI_EN);
tseg_relocate((void **)&mainboard_gpi);
- if (mainboard_gpi) {
- mainboard_gpi(reg16);
- } else {
- if (reg16)
- printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
- }
+ mainboard_gpi(reg16);
+
+ if (reg16)
+ printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
outw(reg16, pmbase + ALT_GP_SMI_STS);
}
diff --git a/src/southbridge/intel/i82801dx/smihandler.c b/src/southbridge/intel/i82801dx/smihandler.c
index e5a32820f0..63758761f2 100644
--- a/src/southbridge/intel/i82801dx/smihandler.c
+++ b/src/southbridge/intel/i82801dx/smihandler.c
@@ -441,12 +441,10 @@ static void southbridge_smi_gpi(unsigned int node, smm_state_save_area_t *state_
reg16 &= inw(pmbase + ALT_GP_SMI_EN);
- if (mainboard_smi_gpi) {
- mainboard_smi_gpi(reg16);
- } else {
- if (reg16)
- printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
- }
+ mainboard_smi_gpi(reg16);
+
+ if (reg16)
+ printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
}
static void southbridge_smi_mc(unsigned int node, smm_state_save_area_t *state_save)
diff --git a/src/southbridge/intel/i82801gx/smihandler.c b/src/southbridge/intel/i82801gx/smihandler.c
index e2505ce16c..e83c722f0b 100644
--- a/src/southbridge/intel/i82801gx/smihandler.c
+++ b/src/southbridge/intel/i82801gx/smihandler.c
@@ -369,7 +369,7 @@ static void southbridge_smi_apmc(unsigned int node, smm_state_save_area_t *state
/* Emulate B2 register as the FADT / Linux expects it */
reg8 = inb(APM_CNT);
- if (mainboard_smi_apmc && mainboard_smi_apmc(reg8))
+ if (mainboard_smi_apmc(reg8))
return;
switch (reg8) {
@@ -454,12 +454,10 @@ static void southbridge_smi_gpi(unsigned int node, smm_state_save_area_t *state_
reg16 &= inw(pmbase + ALT_GP_SMI_EN);
- if (mainboard_smi_gpi) {
- mainboard_smi_gpi(reg16);
- } else {
- if (reg16)
- printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
- }
+ mainboard_smi_gpi(reg16);
+
+ if (reg16)
+ printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
}
static void southbridge_smi_mc(unsigned int node, smm_state_save_area_t *state_save)
diff --git a/src/southbridge/intel/i82801ix/smihandler.c b/src/southbridge/intel/i82801ix/smihandler.c
index 45a09df04e..611429fceb 100644
--- a/src/southbridge/intel/i82801ix/smihandler.c
+++ b/src/southbridge/intel/i82801ix/smihandler.c
@@ -235,7 +235,7 @@ static void southbridge_smi_apmc(unsigned int node, smm_state_save_area_t *state
/* Emulate B2 register as the FADT / Linux expects it */
reg8 = inb(APM_CNT);
- if (mainboard_smi_apmc && mainboard_smi_apmc(reg8))
+ if (mainboard_smi_apmc(reg8))
return;
switch (reg8) {
@@ -322,12 +322,10 @@ static void southbridge_smi_gpi(unsigned int node, smm_state_save_area_t *state_
reg16 &= inw(pmbase + ALT_GP_SMI_EN);
- if (mainboard_smi_gpi) {
- mainboard_smi_gpi(reg16);
- } else {
- if (reg16)
- printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
- }
+ mainboard_smi_gpi(reg16);
+
+ if (reg16)
+ printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
}
diff --git a/src/southbridge/intel/ibexpeak/smihandler.c b/src/southbridge/intel/ibexpeak/smihandler.c
index e2032ad947..019e6db276 100644
--- a/src/southbridge/intel/ibexpeak/smihandler.c
+++ b/src/southbridge/intel/ibexpeak/smihandler.c
@@ -419,8 +419,7 @@ static void southbridge_smi_sleep(unsigned int node, smm_state_save_area_t *stat
/* Do any mainboard sleep handling */
tseg_relocate((void **)&mainboard_sleep);
- if (mainboard_sleep)
- mainboard_sleep(slp_typ-2);
+ mainboard_sleep(slp_typ-2);
#if CONFIG_ELOG_GSMI
/* Log S3, S4, and S5 entry */
@@ -607,8 +606,7 @@ static void southbridge_smi_apmc(unsigned int node, smm_state_save_area_t *state
}
tseg_relocate((void **)&mainboard_apmc);
- if (mainboard_apmc)
- mainboard_apmc(reg8);
+ mainboard_apmc(reg8);
}
static void southbridge_smi_pm1(unsigned int node, smm_state_save_area_t *state_save)
@@ -650,12 +648,10 @@ static void southbridge_smi_gpi(unsigned int node, smm_state_save_area_t *state_
reg16 &= inw(pmbase + ALT_GP_SMI_EN);
tseg_relocate((void **)&mainboard_gpi);
- if (mainboard_gpi) {
- mainboard_gpi(reg16);
- } else {
- if (reg16)
- printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
- }
+ mainboard_gpi(reg16);
+
+ if (reg16)
+ printk(BIOS_DEBUG, "GPI (mask %04x)\n",reg16);
outw(reg16, pmbase + ALT_GP_SMI_STS);
}