X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Farch%2Fx86%2Finit%2Fbootblock_normal.c;h=19b3d5ad5fedce4a2fe1017c4181430b2ca2f4a0;hb=06c04299c1420fa94a1a53cc36c9d91a5e31a22a;hp=f8ae13b9dddad253f0e2a79c79f8a99fe1f42d3d;hpb=7a39446ec236b9eeba7454790fc32fc4240d7e42;p=coreboot.git diff --git a/src/arch/x86/init/bootblock_normal.c b/src/arch/x86/init/bootblock_normal.c index f8ae13b9d..19b3d5ad5 100644 --- a/src/arch/x86/init/bootblock_normal.c +++ b/src/arch/x86/init/bootblock_normal.c @@ -1,10 +1,16 @@ #include #include +static const char *get_fallback(const char *stagelist) { + while (*stagelist) stagelist++; + return ++stagelist; +} + static void main(unsigned long bist) { unsigned long entry; int boot_mode; + const char *default_filenames = "normal/romstage\0fallback/romstage"; if (boot_cpu()) { bootblock_northbridge_init(); @@ -24,15 +30,21 @@ static void main(unsigned long bist) boot_mode = last_boot_normal(); } + char *filenames = (char *)walkcbfs("coreboot-stages"); + if (!filenames) { + filenames = default_filenames; + } + char *normal_candidate = filenames; + if (boot_mode) - entry = findstage("normal/romstage"); + entry = findstage(normal_candidate); else - entry = findstage("fallback/romstage"); + entry = findstage(get_fallback(normal_candidate)); if (entry) call(entry, bist); /* run fallback if normal can't be found */ - entry = findstage("fallback/romstage"); + entry = findstage(get_fallback(normal_candidate)); if (entry) call(entry, bist); /* duh. we're stuck */