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:
parent
6aef5542f8
commit
a7163f1eb9
|
@ -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));
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue