[coreboot-gerrit] Change in coreboot[master]: intel/common: compress VBT

Patrick Georgi (Code Review) gerrit at coreboot.org
Mon Apr 30 16:10:58 CEST 2018


Patrick Georgi has uploaded this change for review. ( https://review.coreboot.org/25927


Change subject: intel/common: compress VBT
......................................................................

intel/common: compress VBT

It's pretty well compressible which helps when space is tight.
The code encodes the assumption that the VBT is 8kb or less. Haven't
seen a larger one yet.

BUG=b:77971803,b:78541692
TEST=build, see that vbt.bin is compressed, boot, check log that the
reported VBT size is correct.

Change-Id: Ie25bca21d9edc408f441a292bbe2ab0459948ec4
Signed-off-by: Patrick Georgi <pgeorgi at google.com>
---
M src/drivers/intel/gma/Makefile.inc
M src/soc/intel/common/vbt.c
2 files changed, 14 insertions(+), 21 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/27/25927/1

diff --git a/src/drivers/intel/gma/Makefile.inc b/src/drivers/intel/gma/Makefile.inc
index ab799ef..0bcf590 100644
--- a/src/drivers/intel/gma/Makefile.inc
+++ b/src/drivers/intel/gma/Makefile.inc
@@ -24,6 +24,7 @@
 cbfs-files-$(CONFIG_INTEL_GMA_ADD_VBT_DATA_FILE) += vbt.bin
 vbt.bin-file := $(call strip_quotes,$(CONFIG_INTEL_GMA_VBT_FILE))
 vbt.bin-type := raw
+vbt.bin-compression := lzma
 
 ifeq ($(CONFIG_MAINBOARD_USE_LIBGFXINIT),y)
 
diff --git a/src/soc/intel/common/vbt.c b/src/soc/intel/common/vbt.c
index 3d8f2bf..1e591a0 100644
--- a/src/soc/intel/common/vbt.c
+++ b/src/soc/intel/common/vbt.c
@@ -30,34 +30,34 @@
 	return "vbt.bin";
 }
 
-static struct region_device vbt_rdev;
-static void *vbt_data;
+static char vbt_data[8192];
+static int vbt_data_used = 0;
 
 void *locate_vbt(void)
 {
 	uint32_t vbtsig = 0;
-	struct cbfsf file_desc;
 
-	if (vbt_data != NULL)
-		return vbt_data;
+	if (vbt_data_used == 1)
+		return (void *)vbt_data;
 
 	const char *filename = mainboard_vbt_filename();
 
-	if (cbfs_boot_locate(&file_desc, filename, NULL) < 0) {
-		printk(BIOS_ERR, "Could not locate a VBT file in in CBFS\n");
+	size_t file_size = cbfs_boot_load_file(filename,
+		vbt_data, sizeof(vbt_data), CBFS_TYPE_RAW);
+
+	if (file_size == 0)
 		return NULL;
-	}
 
-	cbfs_file_data(&vbt_rdev, &file_desc);
-	rdev_readat(&vbt_rdev, &vbtsig, 0, sizeof(uint32_t));
-
+	memcpy((void *)&vbtsig, vbt_data, sizeof(vbtsig));
 	if (vbtsig != VBT_SIGNATURE) {
 		printk(BIOS_ERR, "Missing/invalid signature in VBT data file!\n");
 		return NULL;
 	}
 
-	vbt_data = rdev_mmap_full(&vbt_rdev);
-	return vbt_data;
+	printk(BIOS_INFO, "Found a VBT of %zd bytes after decompression\n", file_size);
+	vbt_data_used = 1;
+
+	return (void *)vbt_data;
 }
 
 void *vbt_get(void)
@@ -73,11 +73,3 @@
 		return NULL;
 	return locate_vbt();
 }
-
-static void unmap_vbt(void *unused)
-{
-	if (vbt_data)
-		rdev_munmap(&vbt_rdev, vbt_data);
-}
-BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_LOAD, BS_ON_EXIT, unmap_vbt, NULL);
-BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, unmap_vbt, NULL);

-- 
To view, visit https://review.coreboot.org/25927
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie25bca21d9edc408f441a292bbe2ab0459948ec4
Gerrit-Change-Number: 25927
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Georgi <pgeorgi at google.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180430/bc23dc0c/attachment.html>


More information about the coreboot-gerrit mailing list