[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