From 483ff8253943b134e5e07ac89d08e49fca1c28d8 Mon Sep 17 00:00:00 2001 From: Patrick Georgi Date: Tue, 18 Jun 2013 11:34:01 +0200 Subject: [PATCH] sandybridge: Store MRC cache in CBFS Location is hard-coded right now, which isn't optimal. It must be chip erase block aligned, which might fail on some flash chips (it's 64k aligned which should work for most cases). Change-Id: I6fe0607948c5fab04b9ed565a93e00b96bf44986 Signed-off-by: Patrick Georgi Reviewed-on: http://review.coreboot.org/3497 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel Reviewed-by: Patrick Georgi --- src/northbridge/intel/sandybridge/Makefile.inc | 10 ++++++++++ src/northbridge/intel/sandybridge/mrccache.c | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/northbridge/intel/sandybridge/Makefile.inc b/src/northbridge/intel/sandybridge/Makefile.inc index 01b328b4bf..1428bdbd9e 100644 --- a/src/northbridge/intel/sandybridge/Makefile.inc +++ b/src/northbridge/intel/sandybridge/Makefile.inc @@ -43,4 +43,14 @@ mrc.bin-position := 0xfffe0000 endif mrc.bin-type := 0xab +$(obj)/mrc.cache: + dd if=/dev/zero count=1 \ + bs=$(shell printf "%d" $(CONFIG_MRC_CACHE_SIZE) ) | \ + tr '\000' '\377' > $@ + +cbfs-files-$(CONFIG_HAVE_MRC) += mrc.cache +mrc.cache-file := $(obj)/mrc.cache +mrc.cache-position := 0xfff80000 +mrc.cache-type := 0xac + $(obj)/northbridge/intel/sandybridge/acpi.ramstage.o : $(obj)/build.h diff --git a/src/northbridge/intel/sandybridge/mrccache.c b/src/northbridge/intel/sandybridge/mrccache.c index 745958abe9..e19d2c5a8d 100644 --- a/src/northbridge/intel/sandybridge/mrccache.c +++ b/src/northbridge/intel/sandybridge/mrccache.c @@ -71,8 +71,8 @@ static u32 get_mrc_cache_region(struct mrc_data_container **mrc_region_ptr) region_size = find_fmap_entry("RW_MRC_CACHE", (void **)mrc_region_ptr); #else region_size = CONFIG_MRC_CACHE_SIZE; - *mrc_region_ptr = (struct mrc_data_container *) - (CONFIG_MRC_CACHE_BASE + CONFIG_MRC_CACHE_LOCATION); + *mrc_region_ptr = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, + "mrc.cache", 0xac); #endif return region_size;