diff options
Diffstat (limited to 'src/arch/x86/include')
-rw-r--r-- | src/arch/x86/include/arch/cbfs.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/arch/x86/include/arch/cbfs.h b/src/arch/x86/include/arch/cbfs.h index 8a61d6e22d..964eb4edea 100644 --- a/src/arch/x86/include/arch/cbfs.h +++ b/src/arch/x86/include/arch/cbfs.h @@ -20,7 +20,9 @@ #ifndef __INCLUDE_ARCH_CBFS__ #define __INCLUDE_ARCH_CBFS__ -static void *walkcbfs(char *target) +#include <cbfs_core.h> + +static struct cbfs_file *walkcbfs_head(char *target) { void *entry; asm volatile ( @@ -30,6 +32,16 @@ static void *walkcbfs(char *target) return entry; } +static void *walkcbfs(char *target) +{ + struct cbfs_file *head = walkcbfs_head(target); + if ((u32)head != 0) + return CBFS_SUBHEADER(head); + + /* We should never reach this if 'target' exists */ + return (void *)0; +} + /* just enough to support findstage. copied because the original version doesn't easily pass through romcc */ struct cbfs_stage_restricted { unsigned long compression; @@ -38,7 +50,12 @@ struct cbfs_stage_restricted { static inline unsigned long findstage(char* target) { - return ((struct cbfs_stage_restricted *)walkcbfs(target))->entry; + struct cbfs_stage_restricted *stage = walkcbfs(target); + if ((u32)stage != 0) + return stage->entry; + + /* We should never reach this if 'target' exists */ + return 0; } static inline void call(unsigned long addr, unsigned long bist) |