[coreboot-gerrit] New patch to review for coreboot: 210c0e1 x86 SMM: Replace weak prototypes with weak function stub

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Sat Dec 27 12:26:18 CET 2014


Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7961

-gerrit

commit 210c0e1cfad8a74fe33c83980b26f37259df268d
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Fri Dec 26 10:21:26 2014 +0200

    x86 SMM: Replace weak prototypes with weak function stub
    
    Change-Id: I682617cd2f4310d3e2e2ab6ffec51def28a4779c
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/cpu/x86/smm/smihandler.c                   | 21 +++++++++++++++------
 src/include/cpu/x86/smm.h                      | 16 ++++++----------
 src/southbridge/amd/agesa/hudson/smihandler.c  |  6 ++----
 src/southbridge/amd/pi/avalon/smihandler.c     |  6 ++----
 src/southbridge/intel/bd82x6x/smihandler.c     | 16 ++++++----------
 src/southbridge/intel/fsp_bd82x6x/smihandler.c | 16 ++++++----------
 src/southbridge/intel/i82801dx/smihandler.c    | 10 ++++------
 src/southbridge/intel/i82801gx/smihandler.c    | 12 +++++-------
 src/southbridge/intel/i82801ix/smihandler.c    | 12 +++++-------
 src/southbridge/intel/ibexpeak/smihandler.c    | 16 ++++++----------
 10 files changed, 57 insertions(+), 74 deletions(-)

diff --git a/src/cpu/x86/smm/smihandler.c b/src/cpu/x86/smm/smihandler.c
index c864df2..9d21015 100644
--- a/src/cpu/x86/smm/smihandler.c
+++ b/src/cpu/x86/smm/smihandler.c
@@ -185,12 +185,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();
 
@@ -201,3 +198,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 7b529e0..c16a6c5 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 d1b661b..af8c215 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/avalon/smihandler.c b/src/southbridge/amd/pi/avalon/smihandler.c
index e762d0b..6f2504b 100644
--- a/src/southbridge/amd/pi/avalon/smihandler.c
+++ b/src/southbridge/amd/pi/avalon/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 1b8810f..e1773a9 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 493a98e..ae9e9c6 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 9b0c235..e27f623 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 4959c4d..998bacb 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 6d17621..604e85f 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 b6ca523..9f1d35c 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);
 }



More information about the coreboot-gerrit mailing list