<p>Matt DeVillier has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/20317">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">nb/intel/common: add ability to load OpRegion VBT from CBFS<br><br>Currently, OpRegion VBT data is read from VBIOS data in<br>memory, but in cases of NGI or payload-initialized display,<br>a VBIOS may not be present. Add the option to load the VBT<br>data directly from CBFS, as is done on newer platforms.<br><br>Change-Id: I7c76ed8362f89179d639629f8059857192c8d8d2<br>Signed-off-by: Matt DeVillier <matt.devillier@gmail.com><br>---<br>M src/northbridge/intel/common/gma_opregion.c<br>1 file changed, 39 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/17/20317/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/src/northbridge/intel/common/gma_opregion.c b/src/northbridge/intel/common/gma_opregion.c<br>index 7d4c3f1..f6fba57 100644<br>--- a/src/northbridge/intel/common/gma_opregion.c<br>+++ b/src/northbridge/intel/common/gma_opregion.c<br>@@ -15,6 +15,7 @@<br> <br> #include <types.h><br> #include <string.h><br>+#include <cbfs.h><br> #include <console/console.h><br> #include <arch/acpi.h><br> #include <device/pci.h><br>@@ -49,7 +50,7 @@<br>         return NULL;<br> }<br> <br>-static enum cb_err init_opregion_vbt(igd_opregion_t *opregion)<br>+static enum cb_err init_opregion_vbt_vbios(igd_opregion_t *opregion)<br> {<br>       void *vbios;<br>  vbios = get_intel_vbios();<br>@@ -71,6 +72,38 @@<br>        memcpy(opregion->header.vbios_version, vbt->coreblock_biosbuild, 4);<br>    memcpy(opregion->vbt.gvd1, vbt, vbt->hdr_vbt_size < 7168 ?<br>                                           vbt->hdr_vbt_size : 7168);<br>+<br>+     return CB_SUCCESS;<br>+}<br>+<br>+/* Reading VBT table from flash */<br>+static enum cb_err init_opregion_vbt_cbfs(igd_opregion_t *opregion)<br>+{<br>+     size_t vbt_size;<br>+     union {<br>+              const optionrom_vbt_t *data;<br>+         uint32_t *signature;<br>+ } vbt;<br>+<br>+    /* Locate the vbt file in cbfs */<br>+    vbt.data = cbfs_boot_map_with_leak("vbt.bin", CBFS_TYPE_RAW, &vbt_size);<br>+       if (!vbt.data) {<br>+             printk(BIOS_ERR, "vbt.bin not found in CBFS!\n");<br>+          return CB_ERR;<br>+       }<br>+    printk(BIOS_DEBUG, "VBT found at %p\n", vbt.data);<br>+<br>+      /* Validate the vbt file */<br>+  if (*vbt.signature != VBT_SIGNATURE) {<br>+               printk(BIOS_ERR, "Invalid signature in VBT data file (vbt.bin)!\n");<br>+               return CB_ERR;<br>+       }<br>+<br>+ memcpy(opregion->header.vbios_version, vbt.data->coreblock_biosbuild,<br>+          ARRAY_SIZE(vbt.data->coreblock_biosbuild));<br>+       memcpy(opregion->vbt.gvd1, vbt.data, vbt.data->hdr_vbt_size <<br>+               sizeof(opregion->vbt.gvd1) ? vbt.data->hdr_vbt_size :<br>+          sizeof(opregion->vbt.gvd1));<br> <br>    return CB_SUCCESS;<br> }<br>@@ -115,7 +148,11 @@<br>  opregion->mailbox3.bclm[9] = IGD_WORD_FIELD_VALID + 0x5ae5;<br>        opregion->mailbox3.bclm[10] = IGD_WORD_FIELD_VALID + 0x64ff;<br> <br>-   ret = init_opregion_vbt(opregion);<br>+   if (IS_ENABLED(CONFIG_ADD_VBT_DATA_FILE))<br>+            ret = init_opregion_vbt_cbfs(opregion);<br>+      else<br>+         ret = init_opregion_vbt_vbios(opregion);<br>+<br>   if (ret != CB_SUCCESS)<br>                return ret;<br> <br></pre><p>To view, visit <a href="https://review.coreboot.org/20317">change 20317</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/20317"/><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: I7c76ed8362f89179d639629f8059857192c8d8d2 </div>
<div style="display:none"> Gerrit-Change-Number: 20317 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Matt DeVillier <matt.devillier@gmail.com> </div>