[coreboot-gerrit] New patch to review for coreboot: drivers/intel/fsp2_0: Add VBT locate helper function
Andrey Petrov (andrey.petrov@intel.com)
gerrit at coreboot.org
Fri May 13 04:59:12 CEST 2016
Andrey Petrov (andrey.petrov at intel.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14805
-gerrit
commit a63559d563c50c1a500f858834583cb1e1cb2f90
Author: Abhay Kumar <abhay.kumar at intel.com>
Date: Fri May 6 17:02:44 2016 -0700
drivers/intel/fsp2_0: Add VBT locate helper function
Add fsp_locate_vbt() helper function that locates VBT file.
Change-Id: Ibda3be48e8ae8b70c6cc1d7ea7248e0c91e955f4
Signed-off-by: Abhay Kumar <abhay.kumar at intel.com>
Signed-off-by: Andrey Petrov <andrey.petrov at intel.com>
---
src/drivers/intel/fsp2_0/graphics.c | 27 +++++++++++++++++++++------
src/drivers/intel/fsp2_0/include/fsp/util.h | 7 +++++--
src/drivers/intel/fsp2_0/silicon_init.c | 16 ++++++++++++++--
3 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/src/drivers/intel/fsp2_0/graphics.c b/src/drivers/intel/fsp2_0/graphics.c
index 1480179..929b186 100644
--- a/src/drivers/intel/fsp2_0/graphics.c
+++ b/src/drivers/intel/fsp2_0/graphics.c
@@ -93,13 +93,28 @@ enum cb_err fsp_fill_lb_framebuffer(struct lb_framebuffer *framebuffer)
return CB_SUCCESS;
}
-uintptr_t fsp_load_vbt(void)
+struct region_device* fsp_locate_vbt(struct cbfsf *file_desc)
{
- void *vbt;
+ uint32_t *vbt_file, vbt_signature;
+ struct region_device *res = NULL;
- vbt = cbfs_boot_map_with_leak("vbt.bin", CBFS_TYPE_RAW, NULL);
- if (!vbt)
- printk(BIOS_NOTICE, "Could not locate a VBT file in CBFS\n");
+ if (cbfs_boot_locate(file_desc, "vbt.bin", NULL)) {
+ printk(BIOS_ERR, "Could not locate a VBT file in in CBFS\n");
+ return res;
+ }
+
+ vbt_file = rdev_mmap(&file_desc->data, 0, sizeof(uint32_t));
+
+ if (!vbt_file)
+ return res;
+
+ vbt_signature = *vbt_file;
+ rdev_munmap(&file_desc->data, vbt_file);
+
+ if (vbt_signature != VBT_SIGNATURE)
+ printk(BIOS_ERR, "Invalid signature in VBT data file!\n");
+ else
+ res = &file_desc->data;
- return (uintptr_t)vbt;
+ return res;
}
diff --git a/src/drivers/intel/fsp2_0/include/fsp/util.h b/src/drivers/intel/fsp2_0/include/fsp/util.h
index d9d9539..f287eb5 100644
--- a/src/drivers/intel/fsp2_0/include/fsp/util.h
+++ b/src/drivers/intel/fsp2_0/include/fsp/util.h
@@ -16,6 +16,9 @@
#include <boot/coreboot_tables.h>
#include <fsp/info_header.h>
#include <memrange.h>
+#include <soc/intel/common/gma.h>
+#include <commonlib/region.h>
+#include <cbfs.h>
/*
* Hand-off-block handling functions that depend on CBMEM, and thus can only
@@ -36,7 +39,7 @@ void fsp_print_memory_resource_hobs(const void *hob_list);
/* Load an FSP binary into CBFS, and fill the associated fsp_header struct */
enum cb_err fsp_load_binary(struct fsp_header *hdr, const char *name,
struct range_entry *r);
-/* Load a vbt.bin file for graphics. Returns 0 if a valid VBT is not found. */
-uintptr_t fsp_load_vbt(void);
+/* Locate vbt.bin file for graphics. Returns NULL if a valid VBT is not found. */
+struct region_device* fsp_locate_vbt(struct cbfsf *file_desc);
#endif /* _FSP2_0_UTIL_H_ */
diff --git a/src/drivers/intel/fsp2_0/silicon_init.c b/src/drivers/intel/fsp2_0/silicon_init.c
index e7d8c54..2a452a7 100644
--- a/src/drivers/intel/fsp2_0/silicon_init.c
+++ b/src/drivers/intel/fsp2_0/silicon_init.c
@@ -28,6 +28,9 @@ static enum fsp_status do_silicon_init(struct fsp_header *hdr)
struct FSPS_UPD upd, *supd;
fsp_silicon_init_fn silicon_init;
enum fsp_status status;
+ optionrom_vbt_t *vbt;
+ struct region_device *vbt_rdev;
+ struct cbfsf file_desc;
supd = (struct FSPS_UPD *) (hdr->cfg_region_offset + hdr->image_base);
@@ -38,15 +41,24 @@ static enum fsp_status do_silicon_init(struct fsp_header *hdr)
memcpy(&upd, supd, sizeof(upd));
+ vbt_rdev = fsp_locate_vbt(&file_desc);
+ if (vbt_rdev != NULL) {
+ vbt = rdev_mmap(vbt_rdev, 0, region_device_sz(vbt_rdev));
+ upd.FspsConfig.GraphicsConfigPtr = (uintptr_t) vbt;
+ } else
+ upd.FspsConfig.GraphicsConfigPtr = (uintptr_t)NULL;
+
/* Give SoC/mainboard a chance to populate entries */
platform_fsp_silicon_init_params_cb(&upd);
timestamp_add_now(TS_FSP_SILICON_INIT_START);
silicon_init = (void *) (hdr->image_base +
- hdr->silicon_init_entry_offset);
- status = silicon_init(&upd);
+ hdr->silicon_init_entry_offset);
timestamp_add_now(TS_FSP_SILICON_INIT_END);
+ status = silicon_init(&upd);
+ if(vbt_rdev != NULL)
+ rdev_munmap(vbt_rdev,vbt);
printk(BIOS_DEBUG, "FspSiliconInit returned 0x%08x\n", status);
return status;
}
More information about the coreboot-gerrit
mailing list