summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2013-12-12 10:10:52 -0800
committerKyösti Mälkki <kyosti.malkki@gmail.com>2014-05-10 06:31:45 +0200
commitbe2512973d04f3da3cebfd3e7ee10809fbe4ae4a (patch)
tree87e5998608c57917fd4c9c695238d223e0866563 /src
parent7d34c6070b8fc2e8dc2f5274794e2374a883d4ce (diff)
downloadcoreboot-be2512973d04f3da3cebfd3e7ee10809fbe4ae4a.tar.xz
ramstage_cache: allow ramstage usage add valid helper
Allow ramstage cache to be used from ramstage proper. Also add a helper function for checking validity of ramstage cache structure. BUG=chrome-os-partner:22867 BRANCH=None TEST=Built and booted. S3 resumed. Change-Id: If1f2ad1bcf64504b42e315be243a12432b50e3d5 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/179775 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: http://review.coreboot.org/5011 Tested-by: build bot (Jenkins) Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/ramstage_cache.h10
-rw-r--r--src/lib/ramstage_cache.c2
2 files changed, 8 insertions, 4 deletions
diff --git a/src/include/ramstage_cache.h b/src/include/ramstage_cache.h
index 5b0597a828..8d9b095177 100644
--- a/src/include/ramstage_cache.h
+++ b/src/include/ramstage_cache.h
@@ -20,9 +20,8 @@
#ifndef _RAMSTAGE_CACHE_
#define _RAMSTAGE_CACHE_
-#if !defined(__PRE_RAM__)
-#error "ramstage_cache only used in romstage for loading ramstage."
-#endif
+#include <stddef.h>
+#include <stdint.h>
/* This structure is saved along with the relocated ramstage program when
* CONFIG_RELOCATED_RAMSTAGE is employed. For x86, it can used to protect
@@ -46,4 +45,9 @@ struct ramstage_cache *ramstage_cache_location(long *size);
/* Chipset/Board function called when cache is invalid on resume. */
void ramstage_cache_invalid(struct ramstage_cache *cache);
+static inline int ramstage_cache_is_valid(const struct ramstage_cache *c)
+{
+ return (c != NULL && c->magic == RAMSTAGE_CACHE_MAGIC);
+}
+
#endif /* _RAMSTAGE_CACHE_ */
diff --git a/src/lib/ramstage_cache.c b/src/lib/ramstage_cache.c
index a1a4804a16..0f7273a961 100644
--- a/src/lib/ramstage_cache.c
+++ b/src/lib/ramstage_cache.c
@@ -79,7 +79,7 @@ void *load_cached_ramstage(struct romstage_handoff *handoff,
cache = ramstage_cache_location(&size);
- if (cache == NULL || cache->magic != RAMSTAGE_CACHE_MAGIC) {
+ if (!ramstage_cache_is_valid(cache)) {
printk(BIOS_DEBUG, "Invalid ramstage cache found.\n");
ramstage_cache_invalid(cache);
return NULL;