summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2019-11-18 13:01:06 -0800
committerPatrick Georgi <pgeorgi@google.com>2019-11-19 11:26:21 +0000
commit7fc928656e791064c46a4748f86466930bdf2de6 (patch)
treea201d9efaf2a33e9a71709698ac7db0d47b92fc5
parentceb7e68c48eafbfa9b735842159e01e8d2123a93 (diff)
lib/fmap: Disable pre-RAM cache for FSP 1.0
Due to the way CAR teardown is handled in FSP 1.0, the results of car_get_var_ptr() aren't always reliable, which can break things when running with FMAP cache. It might be possible to fix this but would make the code rather complicated, so let's just disable the feature on these platforms and hope they die out soon. Also allow this option to be used by platforms that don't have space for the cache and want to save a little more code. Change-Id: I7ffb1b8b08a7ca3fe8d53dc827e2c8521da064c7 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/36937 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Werner Zeh <werner.zeh@siemens.com> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r--src/arch/x86/car.ld3
-rw-r--r--src/drivers/intel/fsp1_0/Kconfig1
-rw-r--r--src/lib/Kconfig7
-rw-r--r--src/lib/fmap.c11
-rw-r--r--src/soc/rockchip/rk3288/Kconfig1
5 files changed, 19 insertions, 4 deletions
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld
index 972cb5234b..3680250993 100644
--- a/src/arch/x86/car.ld
+++ b/src/arch/x86/car.ld
@@ -58,7 +58,10 @@
#endif
TIMESTAMP(., 0x200)
+
+#if !CONFIG(NO_FMAP_CACHE)
FMAP_CACHE(., FMAP_SIZE)
+#endif
_car_ehci_dbg_info = .;
/* Reserve sizeof(struct ehci_dbg_info). */
diff --git a/src/drivers/intel/fsp1_0/Kconfig b/src/drivers/intel/fsp1_0/Kconfig
index 32a07771ee..1a1d4f7072 100644
--- a/src/drivers/intel/fsp1_0/Kconfig
+++ b/src/drivers/intel/fsp1_0/Kconfig
@@ -15,6 +15,7 @@ config PLATFORM_USES_FSP1_0
bool
default n
select CAR_GLOBAL_MIGRATION
+ select NO_FMAP_CACHE # doesn't work with CAR_GLOBAL restrictions
help
Selected for Intel processors/platform combinations that use the
Intel Firmware Support Package (FSP) 1.0 for initialization.
diff --git a/src/lib/Kconfig b/src/lib/Kconfig
index cb1e4a5cc8..dd9974a817 100644
--- a/src/lib/Kconfig
+++ b/src/lib/Kconfig
@@ -68,3 +68,10 @@ config HWBASE_DIRECT_PCIDEV
def_bool y
endif
+
+config NO_FMAP_CACHE
+ bool
+ help
+ If your platform really doesn't want to use an FMAP cache (e.g. due to
+ space constraints), you can select this to disable warnings and save
+ a bit more code.
diff --git a/src/lib/fmap.c b/src/lib/fmap.c
index 4b4179c769..48aab8f3d5 100644
--- a/src/lib/fmap.c
+++ b/src/lib/fmap.c
@@ -60,6 +60,9 @@ static void report(const struct fmap *fmap)
static void setup_preram_cache(struct mem_region_device *cache_mrdev)
{
+ if (CONFIG(NO_FMAP_CACHE))
+ return;
+
if (!ENV_ROMSTAGE_OR_BEFORE) {
/* We get here if ramstage makes an FMAP access before calling
cbmem_initialize(). We should avoid letting it come to that,
@@ -70,10 +73,10 @@ static void setup_preram_cache(struct mem_region_device *cache_mrdev)
}
if (REGION_SIZE(fmap_cache) == 0) {
- /* If you see this you really want to add an FMAP_CACHE to your
- memlayout, unless you absolutely can't affort the 2K. */
- print_once(BIOS_NOTICE,
- "NOTE: Running without FMAP_CACHE, should add it!\n");
+ /* If you see this you should add FMAP_CACHE() to your memlayout
+ (or select NO_FMAP_CACHE if you can't afford the 2K). */
+ print_once(BIOS_ERR,
+ "ERROR: FMAP_CACHE enabled but no region provided!\n");
return;
}
diff --git a/src/soc/rockchip/rk3288/Kconfig b/src/soc/rockchip/rk3288/Kconfig
index 3aebab9754..6a44ccd2e0 100644
--- a/src/soc/rockchip/rk3288/Kconfig
+++ b/src/soc/rockchip/rk3288/Kconfig
@@ -29,6 +29,7 @@ config SOC_ROCKCHIP_RK3288
select MAINBOARD_FORCE_NATIVE_VGA_INIT
select HAVE_LINEAR_FRAMEBUFFER
select NO_BOOTBLOCK_CONSOLE
+ select NO_FMAP_CACHE
if SOC_ROCKCHIP_RK3288