Patrick Georgi ([email protected]) just uploaded a new patch set to 
gerrit, which you can find at http://review.coreboot.org/589

-gerrit

commit f92871b7ea66f9bbce81bbc08734cae2adbf0969
Author: Patrick Georgi <[email protected]>
Date:   Sat Jan 7 19:15:43 2012 +0100

    Another indirection for normal/fallback bootblock
    
    Provide a way to redefine the names of normal and fallback via CBFS.
    This way updates can use some more expressive naming scheme (numbers,
    dates, version numbers) and replace the coreboot-stages file to
    point to the new version (with the current version as new "old").
    
    If coreboot-stages doesn't exist, the default behaviour remains to
    use "normal" and "fallback".
    
    Change-Id: I77c134d79ed95831ad5098b7663c15e95d3b5a2a
    Signed-off-by: Patrick Georgi <[email protected]>
---
 src/arch/x86/init/bootblock_normal.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/arch/x86/init/bootblock_normal.c 
b/src/arch/x86/init/bootblock_normal.c
index f8ae13b..19b3d5a 100644
--- a/src/arch/x86/init/bootblock_normal.c
+++ b/src/arch/x86/init/bootblock_normal.c
@@ -1,10 +1,16 @@
 #include <bootblock_common.h>
 #include <pc80/mc146818rtc.h>
 
+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 */

-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to