Patchwork improve bootblock handling

login
register
about
Submitter Stefan Reinauer
Date 2011-04-15 04:14:27
Message ID <4DA7C623.8050901@coreboot.org>
Download mbox | patch
Permalink /patch/2876/
State Accepted
Commit r6507
Headers show

Comments

Stefan Reinauer - 2011-04-15 04:14:27
See patch
bootblock updates:

- allow CPU to define bootblock code, too.
- drop unneeded __PRE_RAM__ define
- move CBFS specific code out of bootblock_common.h into cbfs.h

Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Marc Jones - 2011-04-15 15:25:00
On Thu, Apr 14, 2011 at 10:14 PM, Stefan Reinauer
<stefan.reinauer@coreboot.org> wrote:
> See patch
>
> --
> coreboot mailing list: coreboot@coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot
>

Acked-by: Marc Jones <marcj303@gmail.com>

Patch

Index: src/arch/x86/include/bootblock_common.h
===================================================================
--- src/arch/x86/include/bootblock_common.h	(revision 6502)
+++ src/arch/x86/include/bootblock_common.h	(working copy)
@@ -1,4 +1,3 @@ 
-#define __PRE_RAM__
 #if CONFIG_LOGICAL_CPUS && \
  (defined(CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT) || defined(CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT))
 #include <cpu/x86/lapic/boot_cpu.c>
@@ -6,6 +5,11 @@ 
 #define boot_cpu(x) 1
 #endif
 
+#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
@@ -17,32 +21,8 @@ 
 static void bootblock_southbridge_init(void) { }
 #endif
 
-static void *walkcbfs(char *target)
-{
-	void *entry;
-	asm volatile (
-		"mov $1f, %%esp\n\t"
-		"jmp walkcbfs_asm\n\t"
-		"1:\n\t" : "=a" (entry) : "S" (target) : "ebx", "ecx", "edi", "esp");
-	return entry;
-}
+#include <arch/cbfs.h>
 
-/* just enough to support findstage. copied because the original version doesn't easily pass through romcc */
-struct cbfs_stage {
-	unsigned long compression;
-	unsigned long entry; // this is really 64bit, but properly endianized
-};
-
-static unsigned long findstage(char* target)
-{
-	return ((struct cbfs_stage*)walkcbfs(target))->entry;
-}
-
-static void call(unsigned long addr, unsigned long bist)
-{
-	asm volatile ("jmp *%0\n\t" : : "r" (addr), "a" (bist));
-}
-
 #if CONFIG_USE_OPTION_TABLE
 #include <pc80/mc146818rtc.h>
 
Index: src/arch/x86/include/arch/cbfs.h
===================================================================
--- src/arch/x86/include/arch/cbfs.h	(revision 0)
+++ src/arch/x86/include/arch/cbfs.h	(revision 0)
@@ -0,0 +1,26 @@ 
+static void *walkcbfs(char *target)
+{
+	void *entry;
+	asm volatile (
+		"mov $1f, %%esp\n\t"
+		"jmp walkcbfs_asm\n\t"
+		"1:\n\t" : "=a" (entry) : "S" (target) : "ebx", "ecx", "edi", "esp");
+	return entry;
+}
+
+/* just enough to support findstage. copied because the original version doesn't easily pass through romcc */
+struct cbfs_stage_restricted {
+	unsigned long compression;
+	unsigned long entry; // this is really 64bit, but properly endianized
+};
+
+static inline unsigned long findstage(char* target)
+{
+	return ((struct cbfs_stage_restricted *)walkcbfs(target))->entry;
+}
+
+static inline void call(unsigned long addr, unsigned long bist)
+{
+	asm volatile ("jmp *%0\n\t" : : "r" (addr), "a" (bist));
+}
+
Index: src/arch/x86/init/bootblock_normal.c
===================================================================
--- src/arch/x86/init/bootblock_normal.c	(revision 6502)
+++ src/arch/x86/init/bootblock_normal.c	(working copy)
@@ -6,6 +6,7 @@ 
 	if (boot_cpu()) {
 		bootblock_northbridge_init();
 		bootblock_southbridge_init();
+		bootblock_cpu_init();
 	}
 
 #if CONFIG_USE_OPTION_TABLE
Index: src/arch/x86/init/bootblock_simple.c
===================================================================
--- src/arch/x86/init/bootblock_simple.c	(revision 6502)
+++ src/arch/x86/init/bootblock_simple.c	(working copy)
@@ -5,6 +5,7 @@ 
 	if (boot_cpu()) {
 		bootblock_northbridge_init();
 		bootblock_southbridge_init();
+		bootblock_cpu_init();
 	}
 
 #if CONFIG_USE_OPTION_TABLE