<p>Patrick Georgi has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25927">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">intel/common: compress VBT<br><br>It's pretty well compressible which helps when space is tight.<br>The code encodes the assumption that the VBT is 8kb or less. Haven't<br>seen a larger one yet.<br><br>BUG=b:77971803,b:78541692<br>TEST=build, see that vbt.bin is compressed, boot, check log that the<br>reported VBT size is correct.<br><br>Change-Id: Ie25bca21d9edc408f441a292bbe2ab0459948ec4<br>Signed-off-by: Patrick Georgi <pgeorgi@google.com><br>---<br>M src/drivers/intel/gma/Makefile.inc<br>M src/soc/intel/common/vbt.c<br>2 files changed, 14 insertions(+), 21 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/27/25927/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/drivers/intel/gma/Makefile.inc b/src/drivers/intel/gma/Makefile.inc</span><br><span>index ab799ef..0bcf590 100644</span><br><span>--- a/src/drivers/intel/gma/Makefile.inc</span><br><span>+++ b/src/drivers/intel/gma/Makefile.inc</span><br><span>@@ -24,6 +24,7 @@</span><br><span> cbfs-files-$(CONFIG_INTEL_GMA_ADD_VBT_DATA_FILE) += vbt.bin</span><br><span> vbt.bin-file := $(call strip_quotes,$(CONFIG_INTEL_GMA_VBT_FILE))</span><br><span> vbt.bin-type := raw</span><br><span style="color: hsl(120, 100%, 40%);">+vbt.bin-compression := lzma</span><br><span> </span><br><span> ifeq ($(CONFIG_MAINBOARD_USE_LIBGFXINIT),y)</span><br><span> </span><br><span>diff --git a/src/soc/intel/common/vbt.c b/src/soc/intel/common/vbt.c</span><br><span>index 3d8f2bf..1e591a0 100644</span><br><span>--- a/src/soc/intel/common/vbt.c</span><br><span>+++ b/src/soc/intel/common/vbt.c</span><br><span>@@ -30,34 +30,34 @@</span><br><span>        return "vbt.bin";</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct region_device vbt_rdev;</span><br><span style="color: hsl(0, 100%, 40%);">-static void *vbt_data;</span><br><span style="color: hsl(120, 100%, 40%);">+static char vbt_data[8192];</span><br><span style="color: hsl(120, 100%, 40%);">+static int vbt_data_used = 0;</span><br><span> </span><br><span> void *locate_vbt(void)</span><br><span> {</span><br><span>       uint32_t vbtsig = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-    struct cbfsf file_desc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (vbt_data != NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-           return vbt_data;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (vbt_data_used == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+               return (void *)vbt_data;</span><br><span> </span><br><span>         const char *filename = mainboard_vbt_filename();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (cbfs_boot_locate(&file_desc, filename, NULL) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          printk(BIOS_ERR, "Could not locate a VBT file in in CBFS\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       size_t file_size = cbfs_boot_load_file(filename,</span><br><span style="color: hsl(120, 100%, 40%);">+              vbt_data, sizeof(vbt_data), CBFS_TYPE_RAW);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (file_size == 0)</span><br><span>          return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   cbfs_file_data(&vbt_rdev, &file_desc);</span><br><span style="color: hsl(0, 100%, 40%);">-  rdev_readat(&vbt_rdev, &vbtsig, 0, sizeof(uint32_t));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy((void *)&vbtsig, vbt_data, sizeof(vbtsig));</span><br><span>       if (vbtsig != VBT_SIGNATURE) {</span><br><span>               printk(BIOS_ERR, "Missing/invalid signature in VBT data file!\n");</span><br><span>                 return NULL;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vbt_data = rdev_mmap_full(&vbt_rdev);</span><br><span style="color: hsl(0, 100%, 40%);">-       return vbt_data;</span><br><span style="color: hsl(120, 100%, 40%);">+      printk(BIOS_INFO, "Found a VBT of %zd bytes after decompression\n", file_size);</span><br><span style="color: hsl(120, 100%, 40%);">+     vbt_data_used = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return (void *)vbt_data;</span><br><span> }</span><br><span> </span><br><span> void *vbt_get(void)</span><br><span>@@ -73,11 +73,3 @@</span><br><span>                return NULL;</span><br><span>         return locate_vbt();</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void unmap_vbt(void *unused)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   if (vbt_data)</span><br><span style="color: hsl(0, 100%, 40%);">-           rdev_munmap(&vbt_rdev, vbt_data);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_LOAD, BS_ON_EXIT, unmap_vbt, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, unmap_vbt, NULL);</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25927">change 25927</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/25927"/><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: Ie25bca21d9edc408f441a292bbe2ab0459948ec4 </div>
<div style="display:none"> Gerrit-Change-Number: 25927 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Georgi <pgeorgi@google.com> </div>