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>                                                                                                                                                                                                                                



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6507 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer 2011-04-16 00:09:53 +00:00 committed by Stefan Reinauer
parent 6aef5542f8
commit a7163f1eb9
4 changed files with 34 additions and 26 deletions

View File

@ -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));
}

View 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>

View 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

View 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