diff options
author | Stefano Babic <sbabic@denx.de> | 2015-10-23 12:35:42 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2015-10-23 12:35:42 +0200 |
commit | a69fdc7787bfa2f27eed74c2ee58c28ce932d502 (patch) | |
tree | 4731dbe1c7371c0c797641d9e755a93e614ec930 /arch/x86/lib/fsp/fsp_common.c | |
parent | 42e550d44bc2335a18065b155cc408f30f0502ef (diff) | |
parent | 9f13b6d147dc74f2400ce18d9d4005ba53f21fd3 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot
Diffstat (limited to 'arch/x86/lib/fsp/fsp_common.c')
-rw-r--r-- | arch/x86/lib/fsp/fsp_common.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/arch/x86/lib/fsp/fsp_common.c b/arch/x86/lib/fsp/fsp_common.c index 658f32d5832..c78df94b804 100644 --- a/arch/x86/lib/fsp/fsp_common.c +++ b/arch/x86/lib/fsp/fsp_common.c @@ -7,6 +7,7 @@ #include <common.h> #include <errno.h> #include <asm/io.h> +#include <asm/mrccache.h> #include <asm/post.h> #include <asm/processor.h> #include <asm/fsp/fsp_support.h> @@ -54,15 +55,42 @@ void board_final_cleanup(void) return; } +static __maybe_unused void *fsp_prepare_mrc_cache(void) +{ + struct mrc_data_container *cache; + struct mrc_region entry; + int ret; + + ret = mrccache_get_region(NULL, &entry); + if (ret) + return NULL; + + cache = mrccache_find_current(&entry); + if (!cache) + return NULL; + + debug("%s: mrc cache at %p, size %x checksum %04x\n", __func__, + cache->data, cache->data_size, cache->checksum); + + return cache->data; +} + int x86_fsp_init(void) { + void *nvs; + if (!gd->arch.hob_list) { +#ifdef CONFIG_ENABLE_MRC_CACHE + nvs = fsp_prepare_mrc_cache(); +#else + nvs = NULL; +#endif /* * The first time we enter here, call fsp_init(). * Note the execution does not return to this function, * instead it jumps to fsp_continue(). */ - fsp_init(CONFIG_FSP_TEMP_RAM_ADDR, BOOT_FULL_CONFIG, NULL); + fsp_init(CONFIG_FSP_TEMP_RAM_ADDR, BOOT_FULL_CONFIG, nvs); } else { /* * The second time we enter here, adjust the size of malloc() |