<p>Arthur Heymans has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/23150">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">drivers/mrc_cache: Always generate an FMAP region<br><br>This automatically generates an FMAP region for the MRC_CACHE driver<br>which is easier to handle a cbfsfile.<br><br>UNTESTED on hardware.<br><br>Change-Id: Iaaca36b1123b094ec1bbe5df4fb25660919173ca<br>Signed-off-by: Arthur Heymans <arthur@aheymans.xyz><br>---<br>M Makefile.inc<br>M src/drivers/mrc_cache/Kconfig<br>M src/drivers/mrc_cache/Makefile.inc<br>M src/drivers/mrc_cache/mrc_cache.c<br>M util/cbfstool/default-x86.fmd<br>M util/cbfstool/default.fmd<br>6 files changed, 42 insertions(+), 36 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/50/23150/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Makefile.inc b/Makefile.inc</span><br><span>index 413f7ad..fa780d4 100644</span><br><span>--- a/Makefile.inc</span><br><span>+++ b/Makefile.inc</span><br><span>@@ -773,7 +773,8 @@</span><br><span> FMAP_BIOS_SIZE := $(shell echo $(CONFIG_CBFS_SIZE) | tr A-F a-f)</span><br><span> # position and size of flashmap, relative to BIOS_BASE</span><br><span> FMAP_FMAP_BASE := 0</span><br><span style="color: hsl(0, 100%, 40%);">-FMAP_FMAP_SIZE := 0x100</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_FMAP_SIZE := 0x200</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # position, size and entry line of CONSOLE relative to BIOS_BASE, if enabled</span><br><span> ifeq ($(CONFIG_CONSOLE_SPI_FLASH),y)</span><br><span> FMAP_CONSOLE_BASE := $(call int-add, $(FMAP_FMAP_BASE) $(FMAP_FMAP_SIZE))</span><br><span>@@ -784,8 +785,24 @@</span><br><span> FMAP_CONSOLE_SIZE := 0</span><br><span> FMAP_CONSOLE_ENTRY :=</span><br><span> endif # ifeq ($(CONFIG_CONSOLE_SPI_FLASH),y)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# position, size and entry line of MRC_CACHE relative to BIOS_BASE, if enabled</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(CONFIG_CACHE_MRC_SETTINGS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(CONFIG_CONSOLE_SPI_FLASH),y)</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_BASE := $(call int-add, $(FMAP_CONSOLE_BASE) $(FMAP_CONSOLE_SIZE))</span><br><span style="color: hsl(120, 100%, 40%);">+else</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_BASE := $(call int-add, $(FMAP_FMAP_BASE) $(FMAP_FMAP_SIZE))</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_SIZE := $(CONFIG_MRC_SETTINGS_CACHE_SIZE)</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_ENTRY := RW_MRC_CACHE@$(FMAP_MRC_CACHE_BASE) $(FMAP_MRC_CACHE_SIZE)</span><br><span style="color: hsl(120, 100%, 40%);">+else # ifeq ($(CONFIG_CACHE_MRC_SETTINGS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_BASE := 0</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_SIZE := 0</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_ENTRY :=</span><br><span style="color: hsl(120, 100%, 40%);">+endif # ifeq ($(CONFIG_CACHE_MRC_SETTINGS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # position and size of CBFS, relative to BIOS_BASE</span><br><span style="color: hsl(0, 100%, 40%);">-FMAP_CBFS_BASE := $(call int-add, $(FMAP_CONSOLE_SIZE) $(FMAP_FMAP_SIZE))</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_CBFS_BASE := $(call int-add, $(FMAP_MRC_CACHE_SIZE) $(FMAP_CONSOLE_SIZE) $(FMAP_FMAP_SIZE))</span><br><span> FMAP_CBFS_SIZE := $(call int-subtract, $(FMAP_BIOS_SIZE) $(FMAP_CBFS_BASE))</span><br><span> else # ifeq ($(CONFIG_ARCH_X86),y)</span><br><span> DEFAULT_FLASHMAP:=$(top)/util/cbfstool/default.fmd</span><br><span>@@ -799,6 +816,7 @@</span><br><span> # position and size of flashmap, relative to BIOS_BASE</span><br><span> FMAP_FMAP_BASE := 0x20000</span><br><span> FMAP_FMAP_SIZE := 0x100</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # position, size and entry line of CONSOLE relative to BIOS_BASE, if enabled</span><br><span> ifeq ($(CONFIG_CONSOLE_SPI_FLASH),y)</span><br><span> FMAP_CONSOLE_BASE := $(call int-add, $(FMAP_FMAP_BASE) $(FMAP_FMAP_SIZE))</span><br><span>@@ -809,8 +827,26 @@</span><br><span> FMAP_CONSOLE_SIZE := 0</span><br><span> FMAP_CONSOLE_ENTRY :=</span><br><span> endif # ifeq ($(CONFIG_CONSOLE_SPI_FLASH),y)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# position, size and entry line of MRC_CACHE relative to BIOS_BASE, if enabled</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(CONFIG_CACHE_MRC_SETTINGS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+ifeq ($(CONFIG_CONSOLE_SPI_FLASH),y)</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_BASE := $(call int-add, $(FMAP_CONSOLE_BASE) $(FMAP_CONSOLE_SIZE))</span><br><span style="color: hsl(120, 100%, 40%);">+else</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_BASE := $(call int-add, $(FMAP_FMAP_BASE) $(FMAP_FMAP_SIZE))</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_SIZE := $(CONFIG_MRC_SETTINGS_CACHE_SIZE)</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_ENTRY := RW_MRC_CACHE@$(FMAP_MRC_CACHE_BASE) $(FMAP_MRC_CACHE_SIZE)</span><br><span style="color: hsl(120, 100%, 40%);">+else # ifeq ($(CONFIG_CACHE_MRC_SETTINGS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_BASE := 0</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_SIZE := 0</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_MRC_CACHE_ENTRY :=</span><br><span style="color: hsl(120, 100%, 40%);">+endif # ifeq ($(CONFIG_CACHE_MRC_SETTINGS),y)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # position and size of CBFS, relative to BIOS_BASE</span><br><span style="color: hsl(0, 100%, 40%);">-FMAP_CBFS_BASE := $(call int-add,$(FMAP_FMAP_BASE) $(FMAP_FMAP_SIZE) $(FMAP_CONSOLE_SIZE))</span><br><span style="color: hsl(120, 100%, 40%);">+FMAP_CBFS_BASE := $(call int-add,$(FMAP_FMAP_BASE) $(FMAP_FMAP_SIZE) $(FMAP_CONSOLE_SIZE) \</span><br><span style="color: hsl(120, 100%, 40%);">+       $(FMAP_MRC_CACHE_SIZE))</span><br><span> FMAP_CBFS_SIZE := $(call int-subtract,$(FMAP_BIOS_SIZE) $(FMAP_CBFS_BASE))</span><br><span> endif # ifeq ($(CONFIG_ARCH_X86),y)</span><br><span> </span><br><span>@@ -822,6 +858,7 @@</span><br><span>           -e "s,##FMAP_BASE##,$(FMAP_FMAP_BASE)," \</span><br><span>          -e "s,##FMAP_SIZE##,$(FMAP_FMAP_SIZE)," \</span><br><span>          -e "s,##CONSOLE_ENTRY##,$(FMAP_CONSOLE_ENTRY)," \</span><br><span style="color: hsl(120, 100%, 40%);">+           -e "s,##MRC_CACHE_ENTRY##,$(FMAP_MRC_CACHE_ENTRY)," \</span><br><span>      -e "s,##CBFS_BASE##,$(FMAP_CBFS_BASE)," \</span><br><span>          -e "s,##CBFS_SIZE##,$(FMAP_CBFS_SIZE)," \</span><br><span>              $(DEFAULT_FLASHMAP) > $@.tmp</span><br><span>diff --git a/src/drivers/mrc_cache/Kconfig b/src/drivers/mrc_cache/Kconfig</span><br><span>index 93ae6c6..a200464 100644</span><br><span>--- a/src/drivers/mrc_cache/Kconfig</span><br><span>+++ b/src/drivers/mrc_cache/Kconfig</span><br><span>@@ -5,10 +5,6 @@</span><br><span> </span><br><span> if CACHE_MRC_SETTINGS</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-config MRC_SETTINGS_CACHE_BASE</span><br><span style="color: hsl(0, 100%, 40%);">-      hex</span><br><span style="color: hsl(0, 100%, 40%);">-     default 0xfffe0000</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> config MRC_SETTINGS_CACHE_SIZE</span><br><span>         hex</span><br><span>  default 0x10000</span><br><span>diff --git a/src/drivers/mrc_cache/Makefile.inc b/src/drivers/mrc_cache/Makefile.inc</span><br><span>index 819d637..794952e 100644</span><br><span>--- a/src/drivers/mrc_cache/Makefile.inc</span><br><span>+++ b/src/drivers/mrc_cache/Makefile.inc</span><br><span>@@ -2,15 +2,4 @@</span><br><span> romstage-$(CONFIG_CACHE_MRC_SETTINGS) += mrc_cache.c</span><br><span> ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += mrc_cache.c</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# Create and add the MRC cache to the cbfs image</span><br><span style="color: hsl(0, 100%, 40%);">-ifneq ($(CONFIG_CHROMEOS),y)</span><br><span style="color: hsl(0, 100%, 40%);">-$(obj)/mrc.cache: $(obj)/config.h</span><br><span style="color: hsl(0, 100%, 40%);">-        dd if=/dev/zero count=1 \</span><br><span style="color: hsl(0, 100%, 40%);">-       bs=$(shell printf "%d" $(CONFIG_MRC_SETTINGS_CACHE_SIZE) ) | \</span><br><span style="color: hsl(0, 100%, 40%);">-        tr '\000' '\377' > $@</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-cbfs-files-$(CONFIG_CACHE_MRC_SETTINGS) += mrc.cache</span><br><span style="color: hsl(0, 100%, 40%);">-mrc.cache-file := $(obj)/mrc.cache</span><br><span style="color: hsl(0, 100%, 40%);">-mrc.cache-position := $(CONFIG_MRC_SETTINGS_CACHE_BASE)</span><br><span style="color: hsl(0, 100%, 40%);">-mrc.cache-type := mrc_cache</span><br><span> endif</span><br><span>diff --git a/src/drivers/mrc_cache/mrc_cache.c b/src/drivers/mrc_cache/mrc_cache.c</span><br><span>index 3a96896..a12fa1e 100644</span><br><span>--- a/src/drivers/mrc_cache/mrc_cache.c</span><br><span>+++ b/src/drivers/mrc_cache/mrc_cache.c</span><br><span>@@ -98,26 +98,8 @@</span><br><span> </span><br><span> static int lookup_region_by_name(const char *name, struct region *r)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* This assumes memory mapped boot media just under 4GiB. */</span><br><span style="color: hsl(0, 100%, 40%);">-    const uint32_t pointer_base_32bit = -CONFIG_ROM_SIZE;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>        if (fmap_locate_area(name, r) == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-             return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* CHROMEOS builds must get their MRC cache from FMAP. */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (IS_ENABLED(CONFIG_CHROMEOS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              printk(BIOS_ERR, "MRC: Chrome OS lookup failure.\n");</span><br><span>              return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!IS_ENABLED(CONFIG_BOOT_DEVICE_MEMORY_MAPPED))</span><br><span style="color: hsl(0, 100%, 40%);">-              return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Base is in the form of a pointer. Make it an offset. */</span><br><span style="color: hsl(0, 100%, 40%);">-      r->offset = CONFIG_MRC_SETTINGS_CACHE_BASE - pointer_base_32bit;</span><br><span style="color: hsl(0, 100%, 40%);">-     r->size = CONFIG_MRC_SETTINGS_CACHE_SIZE;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return 0;</span><br><span> }</span><br><span> </span><br><span> static const struct cache_region *lookup_region_type(int type)</span><br><span>diff --git a/util/cbfstool/default-x86.fmd b/util/cbfstool/default-x86.fmd</span><br><span>index 1b6cfc8..1f1aa43 100644</span><br><span>--- a/util/cbfstool/default-x86.fmd</span><br><span>+++ b/util/cbfstool/default-x86.fmd</span><br><span>@@ -11,6 +11,7 @@</span><br><span>    BIOS@##BIOS_BASE## ##BIOS_SIZE## {</span><br><span>           FMAP@##FMAP_BASE## ##FMAP_SIZE##</span><br><span>             ##CONSOLE_ENTRY##</span><br><span style="color: hsl(120, 100%, 40%);">+             ##MRC_CACHE_ENTRY##</span><br><span>          COREBOOT(CBFS)@##CBFS_BASE## ##CBFS_SIZE##</span><br><span>   }</span><br><span> }</span><br><span>diff --git a/util/cbfstool/default.fmd b/util/cbfstool/default.fmd</span><br><span>index 50b9bf0..8f4819e 100644</span><br><span>--- a/util/cbfstool/default.fmd</span><br><span>+++ b/util/cbfstool/default.fmd</span><br><span>@@ -14,6 +14,7 @@</span><br><span>          BOOTBLOCK 128K</span><br><span>               FMAP@##FMAP_BASE## ##FMAP_SIZE##</span><br><span>             ##CONSOLE_ENTRY##</span><br><span style="color: hsl(120, 100%, 40%);">+             ##MRC_CACHE_ENTRY##</span><br><span>          COREBOOT(CBFS)@##CBFS_BASE## ##CBFS_SIZE##</span><br><span>   }</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/23150">change 23150</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/23150"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Iaaca36b1123b094ec1bbe5df4fb25660919173ca </div>
<div style="display:none"> Gerrit-Change-Number: 23150 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz> </div>