Author: stepan Date: Sat Apr 16 02:09:53 2011 New Revision: 6507 URL: https://tracker.coreboot.org/trac/coreboot/changeset/6507
Log: 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 Acked-by: Marc Jones marcj303@gmail.com
Added: trunk/src/arch/x86/include/arch/cbfs.h Modified: trunk/src/arch/x86/include/bootblock_common.h trunk/src/arch/x86/init/bootblock_normal.c trunk/src/arch/x86/init/bootblock_simple.c
Added: trunk/src/arch/x86/include/arch/cbfs.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/src/arch/x86/include/arch/cbfs.h Sat Apr 16 02:09:53 2011 (r6507) @@ -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)); +} +
Modified: trunk/src/arch/x86/include/bootblock_common.h ============================================================================== --- trunk/src/arch/x86/include/bootblock_common.h Fri Apr 15 11:01:42 2011 (r6506) +++ trunk/src/arch/x86/include/bootblock_common.h Sat Apr 16 02:09:53 2011 (r6507) @@ -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_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>
Modified: trunk/src/arch/x86/init/bootblock_normal.c ============================================================================== --- trunk/src/arch/x86/init/bootblock_normal.c Fri Apr 15 11:01:42 2011 (r6506) +++ trunk/src/arch/x86/init/bootblock_normal.c Sat Apr 16 02:09:53 2011 (r6507) @@ -6,6 +6,7 @@ if (boot_cpu()) { bootblock_northbridge_init(); bootblock_southbridge_init(); + bootblock_cpu_init(); }
#if CONFIG_USE_OPTION_TABLE
Modified: trunk/src/arch/x86/init/bootblock_simple.c ============================================================================== --- trunk/src/arch/x86/init/bootblock_simple.c Fri Apr 15 11:01:42 2011 (r6506) +++ trunk/src/arch/x86/init/bootblock_simple.c Sat Apr 16 02:09:53 2011 (r6507) @@ -5,6 +5,7 @@ if (boot_cpu()) { bootblock_northbridge_init(); bootblock_southbridge_init(); + bootblock_cpu_init(); }
#if CONFIG_USE_OPTION_TABLE