<p>Patrick Georgi has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/21897">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">soc/intel/common: refactor locate_vbt and vbt_get<br><br>Instead of having all callers provide a region_device just for the<br>purpose of reading vbt.bin, let locate_vbt handle its entire life cycle,<br>simplifying the VBT access API.<br><br>Change-Id: Ib85e55164e217050b67674d020d17b2edf5ad14d<br>Signed-off-by: Patrick Georgi <pgeorgi@google.com><br>---<br>M src/drivers/intel/fsp2_0/graphics.c<br>M src/soc/intel/apollolake/chip.c<br>M src/soc/intel/cannonlake/chip.c<br>M src/soc/intel/common/opregion.c<br>M src/soc/intel/common/vbt.c<br>M src/soc/intel/common/vbt.h<br>6 files changed, 24 insertions(+), 30 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/97/21897/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/drivers/intel/fsp2_0/graphics.c b/src/drivers/intel/fsp2_0/graphics.c<br>index e2ff7cf..f2888e8 100644<br>--- a/src/drivers/intel/fsp2_0/graphics.c<br>+++ b/src/drivers/intel/fsp2_0/graphics.c<br>@@ -96,10 +96,7 @@<br> <br> uintptr_t fsp_load_vbt(void)<br> {<br>- struct region_device rdev;<br>- void *vbt_data = NULL;<br>-<br>- vbt_data = locate_vbt(&rdev);<br>+ void *vbt_data = locate_vbt();<br> <br> if (vbt_data == NULL)<br> printk(BIOS_NOTICE, "Could not locate a VBT file in CBFS\n");<br>diff --git a/src/soc/intel/apollolake/chip.c b/src/soc/intel/apollolake/chip.c<br>index 5759fb6..f122876 100644<br>--- a/src/soc/intel/apollolake/chip.c<br>+++ b/src/soc/intel/apollolake/chip.c<br>@@ -49,7 +49,6 @@<br> #include "chip.h"<br> <br> static void *vbt;<br>-static struct region_device vbt_rdev;<br> <br> static const char *soc_acpi_name(const struct device *dev)<br> {<br>@@ -317,7 +316,7 @@<br> struct global_nvs_t *gnvs;<br> <br> /* Save VBT info and mapping */<br>- vbt = vbt_get(&vbt_rdev);<br>+ vbt = vbt_get();<br> <br> /* Snapshot the current GPIO IRQ polarities. FSP is setting a<br> * default policy that doesn't honor boards' requirements. */<br>@@ -354,9 +353,6 @@<br> <br> static void soc_final(void *data)<br> {<br>- if (vbt)<br>- rdev_munmap(&vbt_rdev, vbt);<br>-<br> /* Disable global reset, just in case */<br> pmc_global_reset_enable(0);<br> /* Make sure payload/OS can't trigger global reset */<br>diff --git a/src/soc/intel/cannonlake/chip.c b/src/soc/intel/cannonlake/chip.c<br>index e1cf167..57a3224 100644<br>--- a/src/soc/intel/cannonlake/chip.c<br>+++ b/src/soc/intel/cannonlake/chip.c<br>@@ -26,7 +26,6 @@<br> #include <string.h><br> <br> static void *vbt;<br>-static struct region_device vbt_rdev;<br> <br> #if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)<br> static const char *soc_acpi_name(const struct device *dev)<br>@@ -164,17 +163,10 @@<br> dev->ops = &cpu_bus_ops;<br> }<br> <br>-static void soc_final(void *data)<br>-{<br>- if (vbt)<br>- rdev_munmap(&vbt_rdev, vbt);<br>-}<br>-<br> struct chip_operations soc_intel_cannonlake_ops = {<br> CHIP_NAME("Intel Cannonlake")<br> .enable_dev = &soc_enable,<br> .init = &soc_init_pre_device,<br>- .final = &soc_final<br> };<br> <br> /* UPD parameters to be initialized before SiliconInit */<br>@@ -189,7 +181,7 @@<br> parse_devicetree(params);<br> <br> /* Save VBT info and mapping */<br>- vbt = vbt_get(&vbt_rdev);<br>+ vbt = vbt_get();<br> <br> /* Load VBT before devicetree-specific config. */<br> params->GraphicsConfigPtr = (uintptr_t)vbt;<br>diff --git a/src/soc/intel/common/opregion.c b/src/soc/intel/common/opregion.c<br>index 1eb8609..b8111a0 100644<br>--- a/src/soc/intel/common/opregion.c<br>+++ b/src/soc/intel/common/opregion.c<br>@@ -23,11 +23,10 @@<br> <br> enum cb_err init_igd_opregion(igd_opregion_t *opregion)<br> {<br>- struct region_device vbt_rdev;<br> optionrom_vbt_t *vbt;<br> optionrom_vbt_t *ext_vbt;<br> <br>- vbt = locate_vbt(&vbt_rdev);<br>+ vbt = locate_vbt();<br> <br> if (!vbt) {<br> printk(BIOS_ERR, "VBT couldn't be read\n");<br>@@ -63,8 +62,6 @@<br> <br> /* FIXME We just assume we're mobile for now */<br> opregion->header.mailboxes = MAILBOXES_MOBILE;<br>-<br>- rdev_munmap(&vbt_rdev, vbt);<br> <br> return CB_SUCCESS;<br> }<br>diff --git a/src/soc/intel/common/vbt.c b/src/soc/intel/common/vbt.c<br>index 5b23843..ef4d696 100644<br>--- a/src/soc/intel/common/vbt.c<br>+++ b/src/soc/intel/common/vbt.c<br>@@ -17,6 +17,7 @@<br> #include <console/console.h><br> #include <arch/acpi.h><br> #include <bootmode.h><br>+#include <bootstate.h><br> #include <string.h><br> <br> #include "vbt.h"<br>@@ -31,7 +32,10 @@<br> return vbt_filename;<br> }<br> <br>-void *locate_vbt(struct region_device *rdev)<br>+static struct region_device vbt_rdev;<br>+static void *vbt_data;<br>+<br>+void *locate_vbt(void)<br> {<br> uint32_t vbtsig = 0;<br> struct cbfsf file_desc;<br>@@ -43,18 +47,19 @@<br> return NULL;<br> }<br> <br>- cbfs_file_data(rdev, &file_desc);<br>- rdev_readat(rdev, &vbtsig, 0, sizeof(uint32_t));<br>+ cbfs_file_data(&vbt_rdev, &file_desc);<br>+ rdev_readat(&vbt_rdev, &vbtsig, 0, sizeof(uint32_t));<br> <br> if (vbtsig != VBT_SIGNATURE) {<br> printk(BIOS_ERR, "Missing/invalid signature in VBT data file!\n");<br> return NULL;<br> }<br> <br>- return rdev_mmap_full(rdev);<br>+ vbt_data = rdev_mmap_full(&vbt_rdev);<br>+ return vbt_data;<br> }<br> <br>-void *vbt_get(struct region_device *rdev)<br>+void *vbt_get(void)<br> {<br> if (!IS_ENABLED(CONFIG_RUN_FSP_GOP))<br> return NULL;<br>@@ -65,5 +70,12 @@<br> return NULL;<br> if (!display_init_required())<br> return NULL;<br>- return locate_vbt(rdev);<br>+ return locate_vbt();<br> }<br>+<br>+static void unmap_vbt(void *unused)<br>+{<br>+ if (vbt_data)<br>+ rdev_munmap(&vbt_rdev, vbt_data);<br>+}<br>+BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_LOAD, BS_ON_EXIT, unmap_vbt, NULL);<br>diff --git a/src/soc/intel/common/vbt.h b/src/soc/intel/common/vbt.h<br>index 2d52fea..615af4b 100644<br>--- a/src/soc/intel/common/vbt.h<br>+++ b/src/soc/intel/common/vbt.h<br>@@ -28,10 +28,10 @@<br> const char *mainboard_vbt_filename(void);<br> <br> /* locate vbt.bin file. Returns a pointer to its content. */<br>-void *locate_vbt(struct region_device *rdev);<br>+void *locate_vbt(void);<br> /*<br> * Returns VBT pointer and mapping after checking prerequisites for Pre OS<br> * Graphics initialization<br> */<br>-void *vbt_get(struct region_device *rdev);<br>+void *vbt_get(void);<br> #endif<br></pre><p>To view, visit <a href="https://review.coreboot.org/21897">change 21897</a>. To unsubscribe, 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/21897"/><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: Ib85e55164e217050b67674d020d17b2edf5ad14d </div>
<div style="display:none"> Gerrit-Change-Number: 21897 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Georgi <pgeorgi@google.com> </div>