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 <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/589 Tested-by: build bot (Jenkins) Reviewed-by: Marc Jones <marcj303@gmail.com>
This commit is contained in:
parent
7a39446ec2
commit
06c04299c1
|
@ -1,10 +1,16 @@
|
||||||
#include <bootblock_common.h>
|
#include <bootblock_common.h>
|
||||||
#include <pc80/mc146818rtc.h>
|
#include <pc80/mc146818rtc.h>
|
||||||
|
|
||||||
|
static const char *get_fallback(const char *stagelist) {
|
||||||
|
while (*stagelist) stagelist++;
|
||||||
|
return ++stagelist;
|
||||||
|
}
|
||||||
|
|
||||||
static void main(unsigned long bist)
|
static void main(unsigned long bist)
|
||||||
{
|
{
|
||||||
unsigned long entry;
|
unsigned long entry;
|
||||||
int boot_mode;
|
int boot_mode;
|
||||||
|
const char *default_filenames = "normal/romstage\0fallback/romstage";
|
||||||
|
|
||||||
if (boot_cpu()) {
|
if (boot_cpu()) {
|
||||||
bootblock_northbridge_init();
|
bootblock_northbridge_init();
|
||||||
|
@ -24,15 +30,21 @@ static void main(unsigned long bist)
|
||||||
boot_mode = last_boot_normal();
|
boot_mode = last_boot_normal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *filenames = (char *)walkcbfs("coreboot-stages");
|
||||||
|
if (!filenames) {
|
||||||
|
filenames = default_filenames;
|
||||||
|
}
|
||||||
|
char *normal_candidate = filenames;
|
||||||
|
|
||||||
if (boot_mode)
|
if (boot_mode)
|
||||||
entry = findstage("normal/romstage");
|
entry = findstage(normal_candidate);
|
||||||
else
|
else
|
||||||
entry = findstage("fallback/romstage");
|
entry = findstage(get_fallback(normal_candidate));
|
||||||
|
|
||||||
if (entry) call(entry, bist);
|
if (entry) call(entry, bist);
|
||||||
|
|
||||||
/* run fallback if normal can't be found */
|
/* run fallback if normal can't be found */
|
||||||
entry = findstage("fallback/romstage");
|
entry = findstage(get_fallback(normal_candidate));
|
||||||
if (entry) call(entry, bist);
|
if (entry) call(entry, bist);
|
||||||
|
|
||||||
/* duh. we're stuck */
|
/* duh. we're stuck */
|
||||||
|
|
Loading…
Reference in New Issue