bootblock updates:
authorStefan Reinauer <stefan.reinauer@coreboot.org>
Sat, 16 Apr 2011 00:09:53 +0000 (00:09 +0000)
committerStefan Reinauer <stepan@openbios.org>
Sat, 16 Apr 2011 00:09:53 +0000 (00:09 +0000)
- 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>
Acked-by: Marc Jones <marcj303@gmail.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6507 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

src/arch/x86/include/arch/cbfs.h [new file with mode: 0644]
src/arch/x86/include/bootblock_common.h
src/arch/x86/init/bootblock_normal.c
src/arch/x86/init/bootblock_simple.c

diff --git a/src/arch/x86/include/arch/cbfs.h b/src/arch/x86/include/arch/cbfs.h
new file mode 100644 (file)
index 0000000..635ff10
--- /dev/null
@@ -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 a808cec7a5d2f4ba01884024c7c29d8ec1ede1ac..4c4a092e0c87a7cdf095fe2c0cc1391aca72fbd4 100644 (file)
@@ -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,31 +21,7 @@ static void bootblock_northbridge_init(void) { }
 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;
-}
-
-/* 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));
-}
+#include <arch/cbfs.h>
 
 #if CONFIG_USE_OPTION_TABLE
 #include <pc80/mc146818rtc.h>
index 99551484aaadf0f2d680e349e29b718532313e8a..db9d0f9557f89c355f224afaa01d9e53b030704a 100644 (file)
@@ -6,6 +6,7 @@ static void main(unsigned long bist)
        if (boot_cpu()) {
                bootblock_northbridge_init();
                bootblock_southbridge_init();
+               bootblock_cpu_init();
        }
 
 #if CONFIG_USE_OPTION_TABLE
index 3887b97c58a5cd48d771d890833a8b2179c64adb..5d7c611aa7df6f29c675c5b9a4015199e05a4a9a 100644 (file)
@@ -5,6 +5,7 @@ static void main(unsigned long bist)
        if (boot_cpu()) {
                bootblock_northbridge_init();
                bootblock_southbridge_init();
+               bootblock_cpu_init();
        }
 
 #if CONFIG_USE_OPTION_TABLE