Enable user selectable bootblocks, and provide a bootblock that
selects between "fallback" and "normal", in addition to the already present "fallback"-only bootblock. Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5157 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
d3428b071e
commit
c9fa96d04c
|
@ -49,6 +49,24 @@ config BIG_BOOTBLOCK
|
|||
default n if TINY_BOOTBLOCK
|
||||
default y
|
||||
|
||||
choice
|
||||
prompt "Bootblock behaviour"
|
||||
default BOOTBLOCK_SIMPLE
|
||||
depends on TINY_BOOTBLOCK
|
||||
|
||||
config BOOTBLOCK_SIMPLE
|
||||
bool "Always load fallback"
|
||||
|
||||
config BOOTBLOCK_NORMAL
|
||||
bool "Switch to normal if CMOS says so"
|
||||
|
||||
endchoice
|
||||
|
||||
config BOOTBLOCK_SOURCE
|
||||
string
|
||||
default "bootblock_simple.c" if BOOTBLOCK_SIMPLE
|
||||
default "bootblock_normal.c" if BOOTBLOCK_NORMAL
|
||||
|
||||
config UPDATE_IMAGE
|
||||
bool "Update existing coreboot.rom image"
|
||||
default n
|
||||
|
|
|
@ -63,7 +63,7 @@ $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.o: $(obj)/mainboard/$(MAINBOARDDIR)/b
|
|||
$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.s: $(obj)/bootblock/bootblock.c
|
||||
$(CC) -x assembler-with-cpp -DASSEMBLY -E -I$(src)/include -I$(src)/arch/i386/include -I$(obj) -I$(obj)/bootblock -include $(obj)/config.h -I. -I$(src) $< > $@.new && mv $@.new $@
|
||||
|
||||
$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc: $(src)/arch/i386/init/bootblock.c $(obj)/romcc
|
||||
$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc: $(src)/arch/i386/init/$(subst ",,$(CONFIG_BOOTBLOCK_SOURCE)) $(obj)/romcc
|
||||
$(obj)/romcc $(bootblock_romccflags) -O2 $(ROMCCFLAGS) $(INCLUDES) $< -o $@
|
||||
|
||||
$(obj)/bootblock.elf: $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.o $(obj)/bootblock/ldscript.ld
|
|
@ -95,7 +95,7 @@ endif
|
|||
endif
|
||||
|
||||
ifeq ($(CONFIG_TINY_BOOTBLOCK),y)
|
||||
include $(src)/arch/i386/Makefile.tinybootblock.inc
|
||||
include $(src)/arch/i386/Makefile.bootblock.inc
|
||||
else
|
||||
include $(src)/arch/i386/Makefile.bigbootblock.inc
|
||||
endif
|
||||
|
|
|
@ -31,17 +31,3 @@ static void call(unsigned long addr, unsigned long bist)
|
|||
{
|
||||
asm volatile ("jmp *%0\n\t" : : "r" (addr), "a" (bist));
|
||||
}
|
||||
|
||||
static void main(unsigned long bist)
|
||||
{
|
||||
if (boot_cpu()) {
|
||||
bootblock_northbridge_init();
|
||||
bootblock_southbridge_init();
|
||||
}
|
||||
const char* target1 = "fallback/romstage";
|
||||
unsigned long entry;
|
||||
entry = findstage(target1);
|
||||
if (entry) call(entry, bist);
|
||||
asm volatile ("1:\n\thlt\n\tjmp 1b\n\t");
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
#include <bootblock_common.h>
|
||||
|
||||
#include <arch/io.h>
|
||||
#include "arch/romcc_io.h"
|
||||
#include "pc80/mc146818rtc_early.c"
|
||||
|
||||
static void main(unsigned long bist)
|
||||
{
|
||||
if (boot_cpu()) {
|
||||
bootblock_northbridge_init();
|
||||
bootblock_southbridge_init();
|
||||
}
|
||||
|
||||
unsigned long entry;
|
||||
if (do_normal_boot())
|
||||
entry = findstage("normal/romstage");
|
||||
else
|
||||
entry = findstage("fallback/romstage");
|
||||
|
||||
if (entry) call(entry, bist);
|
||||
|
||||
/* run fallback if normal can't be found */
|
||||
entry = findstage("fallback/romstage");
|
||||
if (entry) call(entry, bist);
|
||||
|
||||
/* duh. we're stuck */
|
||||
asm volatile ("1:\n\thlt\n\tjmp 1b\n\t");
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#include <bootblock_common.h>
|
||||
|
||||
static void main(unsigned long bist)
|
||||
{
|
||||
if (boot_cpu()) {
|
||||
bootblock_northbridge_init();
|
||||
bootblock_southbridge_init();
|
||||
}
|
||||
const char* target1 = "fallback/romstage";
|
||||
unsigned long entry;
|
||||
entry = findstage(target1);
|
||||
if (entry) call(entry, bist);
|
||||
asm volatile ("1:\n\thlt\n\tjmp 1b\n\t");
|
||||
}
|
||||
|
Loading…
Reference in New Issue