[coreboot-gerrit] Change in coreboot[master]: soc/intel/common: refactor locate_vbt and vbt_get

Patrick Georgi (Code Review) gerrit at coreboot.org
Thu Oct 5 18:20:14 CEST 2017


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


Change subject: soc/intel/common: refactor locate_vbt and vbt_get
......................................................................

soc/intel/common: refactor locate_vbt and vbt_get

Instead of having all callers provide a region_device just for the
purpose of reading vbt.bin, let locate_vbt handle its entire life cycle,
simplifying the VBT access API.

Change-Id: Ib85e55164e217050b67674d020d17b2edf5ad14d
Signed-off-by: Patrick Georgi <pgeorgi at google.com>
---
M src/drivers/intel/fsp2_0/graphics.c
M src/soc/intel/apollolake/chip.c
M src/soc/intel/cannonlake/chip.c
M src/soc/intel/common/opregion.c
M src/soc/intel/common/vbt.c
M src/soc/intel/common/vbt.h
6 files changed, 24 insertions(+), 30 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/97/21897/1

diff --git a/src/drivers/intel/fsp2_0/graphics.c b/src/drivers/intel/fsp2_0/graphics.c
index e2ff7cf..f2888e8 100644
--- a/src/drivers/intel/fsp2_0/graphics.c
+++ b/src/drivers/intel/fsp2_0/graphics.c
@@ -96,10 +96,7 @@
 
 uintptr_t fsp_load_vbt(void)
 {
-	struct region_device rdev;
-	void *vbt_data = NULL;
-
-	vbt_data = locate_vbt(&rdev);
+	void *vbt_data = locate_vbt();
 
 	if (vbt_data == NULL)
 		printk(BIOS_NOTICE, "Could not locate a VBT file in CBFS\n");
diff --git a/src/soc/intel/apollolake/chip.c b/src/soc/intel/apollolake/chip.c
index 5759fb6..f122876 100644
--- a/src/soc/intel/apollolake/chip.c
+++ b/src/soc/intel/apollolake/chip.c
@@ -49,7 +49,6 @@
 #include "chip.h"
 
 static void *vbt;
-static struct region_device vbt_rdev;
 
 static const char *soc_acpi_name(const struct device *dev)
 {
@@ -317,7 +316,7 @@
 	struct global_nvs_t *gnvs;
 
 	/* Save VBT info and mapping */
-	vbt = vbt_get(&vbt_rdev);
+	vbt = vbt_get();
 
 	/* Snapshot the current GPIO IRQ polarities. FSP is setting a
 	 * default policy that doesn't honor boards' requirements. */
@@ -354,9 +353,6 @@
 
 static void soc_final(void *data)
 {
-	if (vbt)
-		rdev_munmap(&vbt_rdev, vbt);
-
 	/* Disable global reset, just in case */
 	pmc_global_reset_enable(0);
 	/* Make sure payload/OS can't trigger global reset */
diff --git a/src/soc/intel/cannonlake/chip.c b/src/soc/intel/cannonlake/chip.c
index e1cf167..57a3224 100644
--- a/src/soc/intel/cannonlake/chip.c
+++ b/src/soc/intel/cannonlake/chip.c
@@ -26,7 +26,6 @@
 #include <string.h>
 
 static void *vbt;
-static struct region_device vbt_rdev;
 
 #if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
 static const char *soc_acpi_name(const struct device *dev)
@@ -164,17 +163,10 @@
 		dev->ops = &cpu_bus_ops;
 }
 
-static void soc_final(void *data)
-{
-	if (vbt)
-		rdev_munmap(&vbt_rdev, vbt);
-}
-
 struct chip_operations soc_intel_cannonlake_ops = {
 	CHIP_NAME("Intel Cannonlake")
 	.enable_dev	= &soc_enable,
 	.init		= &soc_init_pre_device,
-	.final		= &soc_final
 };
 
 /* UPD parameters to be initialized before SiliconInit */
@@ -189,7 +181,7 @@
 	parse_devicetree(params);
 
 	/* Save VBT info and mapping */
-	vbt = vbt_get(&vbt_rdev);
+	vbt = vbt_get();
 
 	/* Load VBT before devicetree-specific config. */
 	params->GraphicsConfigPtr = (uintptr_t)vbt;
diff --git a/src/soc/intel/common/opregion.c b/src/soc/intel/common/opregion.c
index 1eb8609..b8111a0 100644
--- a/src/soc/intel/common/opregion.c
+++ b/src/soc/intel/common/opregion.c
@@ -23,11 +23,10 @@
 
 enum cb_err init_igd_opregion(igd_opregion_t *opregion)
 {
-	struct region_device vbt_rdev;
 	optionrom_vbt_t *vbt;
 	optionrom_vbt_t *ext_vbt;
 
-	vbt = locate_vbt(&vbt_rdev);
+	vbt = locate_vbt();
 
 	if (!vbt) {
 		printk(BIOS_ERR, "VBT couldn't be read\n");
@@ -63,8 +62,6 @@
 
 	/* FIXME We just assume we're mobile for now */
 	opregion->header.mailboxes = MAILBOXES_MOBILE;
-
-	rdev_munmap(&vbt_rdev, vbt);
 
 	return CB_SUCCESS;
 }
diff --git a/src/soc/intel/common/vbt.c b/src/soc/intel/common/vbt.c
index 5b23843..ef4d696 100644
--- a/src/soc/intel/common/vbt.c
+++ b/src/soc/intel/common/vbt.c
@@ -17,6 +17,7 @@
 #include <console/console.h>
 #include <arch/acpi.h>
 #include <bootmode.h>
+#include <bootstate.h>
 #include <string.h>
 
 #include "vbt.h"
@@ -31,7 +32,10 @@
 	return vbt_filename;
 }
 
-void *locate_vbt(struct region_device *rdev)
+static struct region_device vbt_rdev;
+static void *vbt_data;
+
+void *locate_vbt(void)
 {
 	uint32_t vbtsig = 0;
 	struct cbfsf file_desc;
@@ -43,18 +47,19 @@
 		return NULL;
 	}
 
-	cbfs_file_data(rdev, &file_desc);
-	rdev_readat(rdev, &vbtsig, 0, sizeof(uint32_t));
+	cbfs_file_data(&vbt_rdev, &file_desc);
+	rdev_readat(&vbt_rdev, &vbtsig, 0, sizeof(uint32_t));
 
 	if (vbtsig != VBT_SIGNATURE) {
 		printk(BIOS_ERR, "Missing/invalid signature in VBT data file!\n");
 		return NULL;
 	}
 
-	return rdev_mmap_full(rdev);
+	vbt_data = rdev_mmap_full(&vbt_rdev);
+	return vbt_data;
 }
 
-void *vbt_get(struct region_device *rdev)
+void *vbt_get(void)
 {
 	if (!IS_ENABLED(CONFIG_RUN_FSP_GOP))
 		return NULL;
@@ -65,5 +70,12 @@
 		return NULL;
 	if (!display_init_required())
 		return NULL;
-	return locate_vbt(rdev);
+	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);
diff --git a/src/soc/intel/common/vbt.h b/src/soc/intel/common/vbt.h
index 2d52fea..615af4b 100644
--- a/src/soc/intel/common/vbt.h
+++ b/src/soc/intel/common/vbt.h
@@ -28,10 +28,10 @@
 const char *mainboard_vbt_filename(void);
 
 /* locate vbt.bin file. Returns a pointer to its content. */
-void *locate_vbt(struct region_device *rdev);
+void *locate_vbt(void);
 /*
  * Returns VBT pointer and mapping after checking prerequisites for Pre OS
  * Graphics initialization
  */
-void *vbt_get(struct region_device *rdev);
+void *vbt_get(void);
 #endif

-- 
To view, visit https://review.coreboot.org/21897
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib85e55164e217050b67674d020d17b2edf5ad14d
Gerrit-Change-Number: 21897
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/20171005/0f5e14a4/attachment-0001.html>


More information about the coreboot-gerrit mailing list