[coreboot] Patch set updated for coreboot: 6523bb2 Auto-generate bootblock initialisation

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Mon Mar 19 17:28:35 CET 2012


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/473

-gerrit

commit 6523bb2539710b646b738844edd7b22b26a16599
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Fri Mar 16 18:10:10 2012 +0200

    Auto-generate bootblock initialisation
    
    A new init function called from bootblock is declared as:
      - unsigned long init_mainboard(int bsp_cpu)
    
    For BSP CPU bootblock calls init_mainboard(true). For AP CPUs bootblock
    calls init_mainboard(false). Usually AP CPU has nothing to do here.
    
    By default, build toolchain creates and includes an init_mainboard()
    function in file build/mainboard/x/x/bootblock_autogen.h that executes
    init functions from any bootblock.c files for all chips listed in
    mainboard/devtree.cb.
    
    Alternatively a mainboard/x/x/bootblock.c file is added in the
    bootblock build, if a Kconfig option HAS_MAINBOARD_BOOTBLOCK is set.
    One should copy the auto-generated init_mainboard() to this file,
    and optionally read various bootstrap signals or status bits from
    super-io and southbridge component to gain some control over the
    selection of romstage to boot via the return value.
    
    Samples of such (yet not implemented) controls for boot behaviour:
      - Reset CMOS to defaults on user request (jumper).
      - Use fallback prefix after power-button 4s override.
      - Refuse boot after intruder detection.
      - On remote wakeup, request network boot.
    
    Change-Id: Ib1d101cdd68993530c9c7a653ac000a01de52ac2
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/arch/x86/Kconfig                        |    7 ++-----
 src/arch/x86/Makefile.inc                   |   11 ++++++++---
 src/arch/x86/include/bootblock_common.h     |   17 +----------------
 src/arch/x86/init/bootblock_normal.c        |    8 ++++----
 src/arch/x86/init/bootblock_simple.c        |   10 +++++-----
 src/mainboard/hp/dl165_g6_fam10/Kconfig     |    5 +----
 src/mainboard/hp/dl165_g6_fam10/bootblock.c |   10 +++++++++-
 src/northbridge/amd/amdfam10/Kconfig        |    4 ----
 src/northbridge/amd/amdk8/Kconfig           |    4 ----
 src/southbridge/amd/amd8111/Kconfig         |    4 ----
 src/southbridge/amd/cimx/sb700/Kconfig      |    3 ---
 src/southbridge/amd/cimx/sb800/Kconfig      |    3 ---
 src/southbridge/amd/cimx/sb900/Kconfig      |    3 ---
 src/southbridge/amd/sb600/Kconfig           |    3 ---
 src/southbridge/amd/sb700/Kconfig           |    4 ----
 src/southbridge/amd/sb800/Kconfig           |    5 -----
 src/southbridge/broadcom/bcm5785/Kconfig    |    4 ----
 src/southbridge/intel/i82371eb/Kconfig      |    5 -----
 src/southbridge/intel/i82801gx/Kconfig      |    5 -----
 src/southbridge/nvidia/ck804/Kconfig        |    4 ----
 src/southbridge/nvidia/mcp55/Kconfig        |    4 ----
 src/southbridge/sis/sis966/Kconfig          |    4 ----
 src/southbridge/via/vt8237r/Kconfig         |    4 ----
 23 files changed, 30 insertions(+), 101 deletions(-)

diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index c5a0c0e..c9f2643 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -67,8 +67,8 @@ config PC80_SYSTEM
 	bool
 	default y
 
-config BOOTBLOCK_NORTHBRIDGE_INIT
-	string
+config HAS_MAINBOARD_BOOTBLOCK
+	def_bool n
 
 config HAVE_CMOS_DEFAULT
 	def_bool n
@@ -77,9 +77,6 @@ config CMOS_DEFAULT_FILE
 	string
 	depends on HAVE_CMOS_DEFAULT
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-
 config BIG_ENDIAN
 	bool
 	default n
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc
index d3dac11..ff6d692 100755
--- a/src/arch/x86/Makefile.inc
+++ b/src/arch/x86/Makefile.inc
@@ -324,11 +324,16 @@ $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.s: $(obj)/bootblock/bootblock.S $(obj
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
 	$(CC) -MMD -x assembler-with-cpp -E -I$(src)/include -I$(src)/arch/x86/include -I$(obj) -I$(obj)/bootblock -include $(obj)/build.h -include $(obj)/config.h -I. -I$(src) $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc: $(src)/arch/x86/init/$(subst ",,$(CONFIG_BOOTBLOCK_SOURCE)) $(objutil)/romcc/romcc $(OPTION_TABLE_H)
+$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc: $(src)/arch/x86/init/$(subst ",,$(CONFIG_BOOTBLOCK_SOURCE)) $(obj)/mainboard/$(MAINBOARDDIR)/bootblock_autogen.h $(objutil)/romcc/romcc $(OPTION_TABLE_H)
 	@printf "    ROMCC      $(subst $(obj)/,,$(@))\n"
-	$(CC) $(INCLUDES) -MM -MT$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc \
+	$(CC) $(INCLUDES) -I$(@D) -MM -MT$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc \
 		$< > $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc.d
-	$(ROMCC) -c -S $(bootblock_romccflags) $(ROMCCFLAGS) -I. $(INCLUDES) $< -o $@
+	$(ROMCC) -c -S $(bootblock_romccflags) $(ROMCCFLAGS) -I. $(INCLUDES) -I$(@D) $< -o $@
+
+$(obj)/mainboard/$(MAINBOARDDIR)/bootblock_autogen.h: $(src)/mainboard/$(MAINBOARDDIR)/devicetree.cb $(objutil)/sconfig/sconfig
+	@printf "    SCONFIG    $(subst $(src)/,,$(<)) (bootblock)\n"
+	mkdir -p $(@D)
+	$(objutil)/sconfig/sconfig $(MAINBOARDDIR) $(@D) -b $(@F)
 
 $(obj)/bootblock.elf: $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.o $(obj)/bootblock/ldscript.ld
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
diff --git a/src/arch/x86/include/bootblock_common.h b/src/arch/x86/include/bootblock_common.h
index bd19682..69ab22c 100644
--- a/src/arch/x86/include/bootblock_common.h
+++ b/src/arch/x86/include/bootblock_common.h
@@ -1,22 +1,7 @@
 #include <cpu/x86/lapic/boot_cpu.c>
 
-#ifdef CONFIG_BOOTBLOCK_CPU_INIT
-#include CONFIG_BOOTBLOCK_CPU_INIT
-#else
-static void bootblock_cpu_init(void) { }
-#endif
-#ifdef CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT
-#include CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT
-#else
-static void bootblock_northbridge_init(void) { }
-#endif
-#ifdef CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT
-#include CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT
-#else
-static void bootblock_southbridge_init(void) { }
-#endif
-
 #include <arch/cbfs.h>
+#include "bootblock_autogen.h"
 
 #if CONFIG_USE_OPTION_TABLE
 #include <pc80/mc146818rtc.h>
diff --git a/src/arch/x86/init/bootblock_normal.c b/src/arch/x86/init/bootblock_normal.c
index 19b3d5a..ddfb436 100644
--- a/src/arch/x86/init/bootblock_normal.c
+++ b/src/arch/x86/init/bootblock_normal.c
@@ -9,14 +9,14 @@ static const char *get_fallback(const char *stagelist) {
 static void main(unsigned long bist)
 {
 	unsigned long entry;
+	int bsp_cpu = boot_cpu();
 	int boot_mode;
 	const char *default_filenames = "normal/romstage\0fallback/romstage";
 
-	if (boot_cpu()) {
-		bootblock_northbridge_init();
-		bootblock_southbridge_init();
-		bootblock_cpu_init();
+	/* Mainboard-specific early init. */
+	init_mainboard(bsp_cpu);
 
+	if (bsp_cpu) {
 #if CONFIG_USE_OPTION_TABLE
 		sanitize_cmos();
 #endif
diff --git a/src/arch/x86/init/bootblock_simple.c b/src/arch/x86/init/bootblock_simple.c
index 41f73b4..f4e4bbf 100644
--- a/src/arch/x86/init/bootblock_simple.c
+++ b/src/arch/x86/init/bootblock_simple.c
@@ -2,15 +2,15 @@
 
 static void main(unsigned long bist)
 {
-	if (boot_cpu()) {
-		bootblock_northbridge_init();
-		bootblock_southbridge_init();
-		bootblock_cpu_init();
+	int bsp_cpu = boot_cpu();
+
+	/* Mainboard-specific early init. */
+	init_mainboard(bsp_cpu);
 
 #if CONFIG_USE_OPTION_TABLE
+	if (bsp_cpu)
 		sanitize_cmos();
 #endif
-	}
 
 	const char* target1 = "fallback/romstage";
 	unsigned long entry;
diff --git a/src/mainboard/hp/dl165_g6_fam10/Kconfig b/src/mainboard/hp/dl165_g6_fam10/Kconfig
index cdff24f..547cc21 100644
--- a/src/mainboard/hp/dl165_g6_fam10/Kconfig
+++ b/src/mainboard/hp/dl165_g6_fam10/Kconfig
@@ -15,6 +15,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
 	select HAVE_BUS_CONFIG
 	select HAVE_PIRQ_TABLE
 	select HAVE_MP_TABLE
+	select HAS_MAINBOARD_BOOTBLOCK
 	select LIFT_BSP_APIC_ID
 	select BOARD_ROMSIZE_KB_1024
 	select RAMINIT_SYSINFO
@@ -90,10 +91,6 @@ config HEAP_SIZE
 	hex
 	default 0xc0000
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "mainboard/hp/dl165_g6_fam10/bootblock.c"
-
 config MMCONF_SUPPORT_DEFAULT
 	bool
 	default y
diff --git a/src/mainboard/hp/dl165_g6_fam10/bootblock.c b/src/mainboard/hp/dl165_g6_fam10/bootblock.c
index 2c56c4c..dfece95 100644
--- a/src/mainboard/hp/dl165_g6_fam10/bootblock.c
+++ b/src/mainboard/hp/dl165_g6_fam10/bootblock.c
@@ -18,6 +18,9 @@ static inline void shc4307_exit_ext_func_mode(device_t dev)
 #define DBG_DEV  PNP_DEV(SCH4307_CONFIG_PORT, 0x3)
 #define REGS_DEV PNP_DEV(SCH4307_CONFIG_PORT, 0xa)
 
+/* FIXME: This appears to be a super-io initialisation,
+ *        placed in the mainboard directory.
+ */
 void shc4307_init(void)
 {
 	shc4307_enter_ext_func_mode(CMOS_DEV);
@@ -43,6 +46,11 @@ void shc4307_init(void)
 	shc4307_exit_ext_func_mode(CMOS_DEV);
 }
 
-static void bootblock_southbridge_init(void) {
+static unsigned long init_mainboard(int bsp_cpu)
+{
+	if (!bsp_cpu) return 0;
+	bootblock_northbridge_init();
+	//bootblock_southbridge_init();
 	shc4307_init();
+	return 0;
 }
diff --git a/src/northbridge/amd/amdfam10/Kconfig b/src/northbridge/amd/amdfam10/Kconfig
index a14339e..633d378 100644
--- a/src/northbridge/amd/amdfam10/Kconfig
+++ b/src/northbridge/amd/amdfam10/Kconfig
@@ -59,10 +59,6 @@ config MMCONF_BUS_NUMBER
 	int
 	default 256
 
-config BOOTBLOCK_NORTHBRIDGE_INIT
-        string
-        default "northbridge/amd/amdfam10/bootblock.c"
-
 config SB_HT_CHAIN_UNITID_OFFSET_ONLY
 	bool
 	default n
diff --git a/src/northbridge/amd/amdk8/Kconfig b/src/northbridge/amd/amdk8/Kconfig
index 70e75e9..b94ef42 100644
--- a/src/northbridge/amd/amdk8/Kconfig
+++ b/src/northbridge/amd/amdk8/Kconfig
@@ -51,10 +51,6 @@ config HW_MEM_HOLE_SIZE_AUTO_INC
 	bool
 	default n
 
-config BOOTBLOCK_NORTHBRIDGE_INIT
-        string
-        default "northbridge/amd/amdk8/bootblock.c"
-
 config SB_HT_CHAIN_UNITID_OFFSET_ONLY
 	bool
 	default n
diff --git a/src/southbridge/amd/amd8111/Kconfig b/src/southbridge/amd/amd8111/Kconfig
index fd244c8..03d0f29 100644
--- a/src/southbridge/amd/amd8111/Kconfig
+++ b/src/southbridge/amd/amd8111/Kconfig
@@ -22,7 +22,3 @@ config SOUTHBRIDGE_AMD_AMD8111
 	select IOAPIC
 	select HAVE_HARD_RESET
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/amd/amd8111/bootblock.c"
-	depends on SOUTHBRIDGE_AMD_AMD8111
diff --git a/src/southbridge/amd/cimx/sb700/Kconfig b/src/southbridge/amd/cimx/sb700/Kconfig
index 27338fc..ea5adf3 100644
--- a/src/southbridge/amd/cimx/sb700/Kconfig
+++ b/src/southbridge/amd/cimx/sb700/Kconfig
@@ -47,9 +47,6 @@ config ACPI_SCI_IRQ
 	default 0x9
 	help
 		Set SCI IRQ to 9.
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/amd/cimx/sb700/bootblock.c"
 
 config REDIRECT_SBCIMX_TRACE_TO_SERIAL
 	bool "Redirect AMD Southbridge CIMX Trace to serial console"
diff --git a/src/southbridge/amd/cimx/sb800/Kconfig b/src/southbridge/amd/cimx/sb800/Kconfig
index 79624e0..fc15c42 100644
--- a/src/southbridge/amd/cimx/sb800/Kconfig
+++ b/src/southbridge/amd/cimx/sb800/Kconfig
@@ -24,9 +24,6 @@ config SOUTHBRIDGE_AMD_CIMX_SB800
 	select AMD_SB_CIMX
 
 if SOUTHBRIDGE_AMD_CIMX_SB800
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-        string
-        default "southbridge/amd/cimx/sb800/bootblock.c"
 
 config ENABLE_IDE_COMBINED_MODE
 	bool "Enable SATA IDE combined mode"
diff --git a/src/southbridge/amd/cimx/sb900/Kconfig b/src/southbridge/amd/cimx/sb900/Kconfig
index 253d73f..09edd1b 100755
--- a/src/southbridge/amd/cimx/sb900/Kconfig
+++ b/src/southbridge/amd/cimx/sb900/Kconfig
@@ -49,8 +49,5 @@ config ACPI_SCI_IRQ
 	help
 		Set SCI IRQ to 9.
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-        string
-        default "southbridge/amd/cimx/sb900/bootblock.c"
 endif #SOUTHBRIDGE_AMD_CIMX_SB900
 
diff --git a/src/southbridge/amd/sb600/Kconfig b/src/southbridge/amd/sb600/Kconfig
index 8ec3967..d440212 100644
--- a/src/southbridge/amd/sb600/Kconfig
+++ b/src/southbridge/amd/sb600/Kconfig
@@ -24,9 +24,6 @@ config SOUTHBRIDGE_AMD_SB600
 	select HAVE_HARD_RESET
 
 if SOUTHBRIDGE_AMD_SB600
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/amd/sb600/bootblock.c"
 
 config EHCI_BAR
 	hex
diff --git a/src/southbridge/amd/sb700/Kconfig b/src/southbridge/amd/sb700/Kconfig
index 924e2df..b4c95c9 100644
--- a/src/southbridge/amd/sb700/Kconfig
+++ b/src/southbridge/amd/sb700/Kconfig
@@ -33,10 +33,6 @@ config SOUTHBRIDGE_AMD_SUBTYPE_SP5100
 	bool
 	default n
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/amd/sb700/bootblock.c"
-
 config SOUTHBRIDGE_AMD_SB700_SKIP_ISA_DMA_INIT
 	bool
 	default n
diff --git a/src/southbridge/amd/sb800/Kconfig b/src/southbridge/amd/sb800/Kconfig
index 592f9a7..5490c56 100644
--- a/src/southbridge/amd/sb800/Kconfig
+++ b/src/southbridge/amd/sb800/Kconfig
@@ -23,11 +23,6 @@ config SOUTHBRIDGE_AMD_SB800
 	select HAVE_USBDEBUG
 	select HAVE_HARD_RESET
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/amd/sb800/bootblock.c"
-	depends on SOUTHBRIDGE_AMD_SB800
-
 config SOUTHBRIDGE_AMD_SB800_SKIP_ISA_DMA_INIT
 	bool
 	default n
diff --git a/src/southbridge/broadcom/bcm5785/Kconfig b/src/southbridge/broadcom/bcm5785/Kconfig
index d72afd8..286c19b 100644
--- a/src/southbridge/broadcom/bcm5785/Kconfig
+++ b/src/southbridge/broadcom/bcm5785/Kconfig
@@ -2,7 +2,3 @@ config SOUTHBRIDGE_BROADCOM_BCM5785
 	bool
 	select HAVE_HARD_RESET
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/broadcom/bcm5785/bootblock.c"
-	depends on SOUTHBRIDGE_BROADCOM_BCM5785
diff --git a/src/southbridge/intel/i82371eb/Kconfig b/src/southbridge/intel/i82371eb/Kconfig
index 7e5109a..a5c5eb8 100644
--- a/src/southbridge/intel/i82371eb/Kconfig
+++ b/src/southbridge/intel/i82371eb/Kconfig
@@ -2,8 +2,3 @@ config SOUTHBRIDGE_INTEL_I82371EB
 	bool
 	select HAVE_ACPI_RESUME if HAVE_ACPI_TABLES
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/intel/i82371eb/bootblock.c"
-	depends on SOUTHBRIDGE_INTEL_I82371EB
-
diff --git a/src/southbridge/intel/i82801gx/Kconfig b/src/southbridge/intel/i82801gx/Kconfig
index 3550954..a50e0b1 100644
--- a/src/southbridge/intel/i82801gx/Kconfig
+++ b/src/southbridge/intel/i82801gx/Kconfig
@@ -38,10 +38,5 @@ config USBDEBUG_DEFAULT_PORT
 	int
 	default 1
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-        string
-	default "southbridge/intel/i82801gx/bootblock.c"
-	depends on SOUTHBRIDGE_INTEL_I82801GX
-
 endif
 
diff --git a/src/southbridge/nvidia/ck804/Kconfig b/src/southbridge/nvidia/ck804/Kconfig
index 97927d7..4405ad8 100644
--- a/src/southbridge/nvidia/ck804/Kconfig
+++ b/src/southbridge/nvidia/ck804/Kconfig
@@ -6,10 +6,6 @@ config SOUTHBRIDGE_NVIDIA_CK804
 
 if SOUTHBRIDGE_NVIDIA_CK804
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/nvidia/ck804/bootblock.c"
-
 config EHCI_BAR
 	hex
 	default 0xfef00000
diff --git a/src/southbridge/nvidia/mcp55/Kconfig b/src/southbridge/nvidia/mcp55/Kconfig
index cd6009d..2c29267 100644
--- a/src/southbridge/nvidia/mcp55/Kconfig
+++ b/src/southbridge/nvidia/mcp55/Kconfig
@@ -6,10 +6,6 @@ config SOUTHBRIDGE_NVIDIA_MCP55
 
 if SOUTHBRIDGE_NVIDIA_MCP55
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/nvidia/mcp55/bootblock.c"
-
 config EHCI_BAR
 	hex
 	default 0xfef00000
diff --git a/src/southbridge/sis/sis966/Kconfig b/src/southbridge/sis/sis966/Kconfig
index 03dd6b1..4ae16c6 100644
--- a/src/southbridge/sis/sis966/Kconfig
+++ b/src/southbridge/sis/sis966/Kconfig
@@ -4,10 +4,6 @@ config SOUTHBRIDGE_SIS_SIS966
 	select HAVE_USBDEBUG
 	select HAVE_HARD_RESET
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/sis/sis966/bootblock.c" if SOUTHBRIDGE_SIS_SIS966
-
 config EHCI_BAR
 	hex
 	default 0xfef00000 if SOUTHBRIDGE_SIS_SIS966
diff --git a/src/southbridge/via/vt8237r/Kconfig b/src/southbridge/via/vt8237r/Kconfig
index d0a6deb..9aa1b97 100644
--- a/src/southbridge/via/vt8237r/Kconfig
+++ b/src/southbridge/via/vt8237r/Kconfig
@@ -27,7 +27,3 @@ config EPIA_VT8237R_INIT
 	default n
 	depends on SOUTHBRIDGE_VIA_VT8237R
 
-config BOOTBLOCK_SOUTHBRIDGE_INIT
-	string
-	default "southbridge/via/vt8237r/bootblock.c"
-	depends on SOUTHBRIDGE_VIA_VT8237R




More information about the coreboot mailing list