summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2019-11-06 19:29:44 -0800
committerJulius Werner <jwerner@chromium.org>2019-11-14 03:30:11 +0000
commitcefe89ee7916b2c1fd6401456313f8a4d110735c (patch)
tree6056fae9fa141ee118d38a51bc17e3aebc0fd452 /src/include
parent6abbd5b0acec1a874160ff5061d4077663649253 (diff)
lib/fmap: Add optional pre-RAM cache
This patch adds an optional pre-RAM cache for the FMAP which most platforms should be able to use, complementing the recently added post-RAM FMAP cache in CBMEM. vboot systems currently read the FMAP about half a dozen times from flash in verstage, which will all be coalesced into a single read with this patch. It will also help future vboot improvements since when FMAP reads become "free" vboot doesn't need to keep track of so much information separately. In order to make sure we have a single, well-defined point where the new cache is first initialized, eliminate the build-time hardcoding of the CBFS section offsets, so that all CBFS accesses explicitly read the FMAP. Add FMAP_CACHEs to all platforms that can afford it (other than the RISC-V things where I have no idea how they work), trying to take the space from things that look like they were oversized anyway (pre-RAM consoles and CBFS caches). Change-Id: I2820436776ef620bdc4481b5cd4b6957764248ea Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/36657 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Joel Kitching <kitching@google.com>
Diffstat (limited to 'src/include')
-rw-r--r--src/include/memlayout.h10
-rw-r--r--src/include/symbols.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/src/include/memlayout.h b/src/include/memlayout.h
index 0100e270c6..56dfb6a785 100644
--- a/src/include/memlayout.h
+++ b/src/include/memlayout.h
@@ -21,6 +21,8 @@
#include <arch/memlayout.h>
#include <vb2_constants.h>
+#include "fmap_config.h"
+
/* Macros that the architecture can override. */
#ifndef ARCH_POINTER_ALIGN_SIZE
#define ARCH_POINTER_ALIGN_SIZE 8
@@ -30,7 +32,8 @@
#define ARCH_CACHELINE_ALIGN_SIZE 64
#endif
-#define STR(x) #x
+#define STR(x) XSTR(x)
+#define XSTR(x) #x
#define ALIGN_COUNTER(align) \
. = ALIGN(align);
@@ -73,6 +76,11 @@
ALIAS_REGION(cbfs_cache, preram_cbfs_cache) \
ALIAS_REGION(cbfs_cache, postram_cbfs_cache)
+#define FMAP_CACHE(addr, sz) \
+ REGION(fmap_cache, addr, sz, 4) \
+ _ = ASSERT(sz == 0 || sz >= FMAP_SIZE, \
+ STR(FMAP does not fit in FMAP_CACHE! (sz < FMAP_SIZE)));
+
#if ENV_ROMSTAGE_OR_BEFORE
#define PRERAM_CBFS_CACHE(addr, size) \
REGION(preram_cbfs_cache, addr, size, 4) \
diff --git a/src/include/symbols.h b/src/include/symbols.h
index 56df8d5734..eec47010e4 100644
--- a/src/include/symbols.h
+++ b/src/include/symbols.h
@@ -34,6 +34,7 @@ DECLARE_REGION(stack)
DECLARE_REGION(preram_cbfs_cache)
DECLARE_REGION(postram_cbfs_cache)
DECLARE_REGION(cbfs_cache)
+DECLARE_REGION(fmap_cache)
DECLARE_REGION(payload)
/* "program" always refers to the current execution unit. */