[coreboot-gerrit] Change in coreboot[master]: drv/intel/gma: Use cbfs vbt.bin if present
Patrick Rudolph (Code Review)
gerrit at coreboot.org
Mon Apr 3 18:33:01 CEST 2017
Patrick Rudolph has uploaded a new change for review. ( https://review.coreboot.org/19085 )
Change subject: drv/intel/gma: Use cbfs vbt.bin if present
......................................................................
drv/intel/gma: Use cbfs vbt.bin if present
Prefer VBT from CBFS's vbt.bin if present.
Tested on GM45 (Lenovo T500) using Microsoft's
Windows 7.
Change-Id: Ibb8edc61f3d9db9ed8789151cf10d7f92fe6cfcd
Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
M src/drivers/intel/gma/vbt.c
1 file changed, 62 insertions(+), 19 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/85/19085/1
diff --git a/src/drivers/intel/gma/vbt.c b/src/drivers/intel/gma/vbt.c
index 58d63da..464a8a1 100644
--- a/src/drivers/intel/gma/vbt.c
+++ b/src/drivers/intel/gma/vbt.c
@@ -25,6 +25,7 @@
#include <device/pci_ids.h>
#include <device/pci_rom.h>
#include <cbmem.h>
+#include <cbfs.h>
#include "i915.h"
#include "intel_bios.h"
@@ -136,29 +137,71 @@
return NULL;
}
-static int init_opregion_vbt(struct device *dev, igd_opregion_t *opregion)
+static enum cb_err locate_vbt(struct region_device *rdev)
{
- void *vbios = NULL;
- printk(BIOS_DEBUG, "Init IGD OpRegion.\n");
+ uint32_t vbtsig = 0;
+ struct cbfsf file_desc;
- if (IS_ENABLED(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT))
- vbios = validate_intel_oprom((void *)PCI_VGA_RAM_IMAGE_START);
- if (!vbios)
- vbios = validate_intel_oprom((void *)pci_rom_probe(dev));
-
- printk(BIOS_DEBUG, " ... VBIOS found at %p\n", vbios);
- optionrom_header_t *oprom = (optionrom_header_t *)vbios;
- optionrom_vbt_t *vbt = (optionrom_vbt_t *)(vbios +
- oprom->vbt_offset);
-
- if (read32(vbt->hdr_signature) != VBT_SIGNATURE) {
- printk(BIOS_DEBUG, "VBT not found!\n");
- return 1;
+ if (cbfs_boot_locate(&file_desc, "vbt.bin", NULL) < 0) {
+ printk(BIOS_ERR, "Could not locate a VBT file in in CBFS\n");
+ return CB_ERR;
}
- memcpy(opregion->header.vbios_version, vbt->coreblock_biosbuild, 4);
- memcpy(opregion->vbt.gvd1, vbt, vbt->hdr_vbt_size < 7168 ?
- vbt->hdr_vbt_size : 7168);
+ cbfs_file_data(rdev, &file_desc);
+ rdev_readat(rdev, &vbtsig, 0, sizeof(uint32_t));
+
+ if (vbtsig != VBT_SIGNATURE) {
+ printk(BIOS_ERR, "Missing/invalid signature in VBT data file!\n");
+ return CB_ERR;
+ }
+
+ return CB_SUCCESS;
+}
+
+static int init_opregion_vbt(struct device *dev, igd_opregion_t *opregion)
+{
+ struct region_device vbt_rdev;
+ optionrom_header_t *oprom;
+ optionrom_vbt_t *vbt;
+ void *vbios = NULL;
+ printk(BIOS_DEBUG, "Init IGD OpRegion\n");
+
+ if (locate_vbt(&vbt_rdev) != CB_ERR) {
+ printk(BIOS_DEBUG, "Using vbt.bin\n");
+
+ vbt = (optionrom_vbt_t *)rdev_mmap_full(&vbt_rdev);
+ if (!vbt)
+ return 1;
+
+ memcpy(opregion->header.vbios_version, vbt->coreblock_biosbuild, 4);
+ memcpy(opregion->vbt.gvd1, vbt, vbt->hdr_vbt_size < 7168 ?
+ vbt->hdr_vbt_size : 7168);
+
+ rdev_munmap(&vbt_rdev, vbt);
+ } else {
+ printk(BIOS_DEBUG, "Extracting VBT from VBIOS\n");
+
+ if (IS_ENABLED(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT))
+ vbios = validate_intel_oprom((void *)PCI_VGA_RAM_IMAGE_START);
+ if (!vbios)
+ vbios = validate_intel_oprom((void *)pci_rom_probe(dev));
+ if (!vbios) {
+ printk(BIOS_DEBUG, "VBIOS not found.\n");
+ return 1;
+ }
+ printk(BIOS_DEBUG, "VBIOS found at %p\n", vbios);
+ oprom = (optionrom_header_t *)vbios;
+ vbt = (optionrom_vbt_t *)(vbios + oprom->vbt_offset);
+
+ if (read32(vbt->hdr_signature) != VBT_SIGNATURE) {
+ printk(BIOS_DEBUG, "VBT not found!\n");
+ return 1;
+ }
+
+ memcpy(opregion->header.vbios_version, vbt->coreblock_biosbuild, 4);
+ memcpy(opregion->vbt.gvd1, vbt, vbt->hdr_vbt_size < 7168 ?
+ vbt->hdr_vbt_size : 7168);
+ }
return 0;
}
--
To view, visit https://review.coreboot.org/19085
To unsubscribe, visit https://review.coreboot.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibb8edc61f3d9db9ed8789151cf10d7f92fe6cfcd
Gerrit-PatchSet: 1
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Owner: Patrick Rudolph <siro at das-labor.org>
More information about the coreboot-gerrit
mailing list