From cba7316c2662ee1c916345b034ca08dad43984f7 Mon Sep 17 00:00:00 2001
From: Patrick Georgi <pgeorgi@google.com>
Date: Thu, 5 Oct 2017 17:32:43 +0200
Subject: soc/intel/common: refactor locate_vbt

All callers of locate_vbt just care about the file content and
immediately map the rdev for its content.
Instead of repeating this in all call sites, move that code to
locate_vbt.

Change-Id: I5b518e6c959437bd8f393269db7955358a786719
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-on: https://review.coreboot.org/21896
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
---
 src/drivers/intel/fsp2_0/graphics.c |  3 +--
 src/soc/intel/common/opregion.c     |  7 +------
 src/soc/intel/common/vbt.c          | 17 +++++------------
 src/soc/intel/common/vbt.h          |  4 ++--
 4 files changed, 9 insertions(+), 22 deletions(-)

(limited to 'src')

diff --git a/src/drivers/intel/fsp2_0/graphics.c b/src/drivers/intel/fsp2_0/graphics.c
index 84f2d6dc21..e2ff7cf4f8 100644
--- a/src/drivers/intel/fsp2_0/graphics.c
+++ b/src/drivers/intel/fsp2_0/graphics.c
@@ -99,8 +99,7 @@ uintptr_t fsp_load_vbt(void)
 	struct region_device rdev;
 	void *vbt_data = NULL;
 
-	if (locate_vbt(&rdev) != CB_ERR)
-		vbt_data = rdev_mmap_full(&rdev);
+	vbt_data = locate_vbt(&rdev);
 
 	if (vbt_data == NULL)
 		printk(BIOS_NOTICE, "Could not locate a VBT file in CBFS\n");
diff --git a/src/soc/intel/common/opregion.c b/src/soc/intel/common/opregion.c
index 6cb388ce82..1eb8609ada 100644
--- a/src/soc/intel/common/opregion.c
+++ b/src/soc/intel/common/opregion.c
@@ -27,12 +27,7 @@ enum cb_err init_igd_opregion(igd_opregion_t *opregion)
 	optionrom_vbt_t *vbt;
 	optionrom_vbt_t *ext_vbt;
 
-	if (locate_vbt(&vbt_rdev) == CB_ERR) {
-		printk(BIOS_ERR, "VBT not found\n");
-		return CB_ERR;
-	};
-
-	vbt = rdev_mmap_full(&vbt_rdev);
+	vbt = locate_vbt(&vbt_rdev);
 
 	if (!vbt) {
 		printk(BIOS_ERR, "VBT couldn't be read\n");
diff --git a/src/soc/intel/common/vbt.c b/src/soc/intel/common/vbt.c
index e3360dcf83..c36f797c9b 100644
--- a/src/soc/intel/common/vbt.c
+++ b/src/soc/intel/common/vbt.c
@@ -28,7 +28,7 @@ const char *mainboard_vbt_filename(void)
 	return "vbt.bin";
 }
 
-enum cb_err locate_vbt(struct region_device *rdev)
+void *locate_vbt(struct region_device *rdev)
 {
 	uint32_t vbtsig = 0;
 	struct cbfsf file_desc;
@@ -37,7 +37,7 @@ enum cb_err locate_vbt(struct region_device *rdev)
 
 	if (cbfs_boot_locate(&file_desc, filename, NULL) < 0) {
 		printk(BIOS_ERR, "Could not locate a VBT file in in CBFS\n");
-		return CB_ERR;
+		return NULL;
 	}
 
 	cbfs_file_data(rdev, &file_desc);
@@ -45,16 +45,14 @@ enum cb_err locate_vbt(struct region_device *rdev)
 
 	if (vbtsig != VBT_SIGNATURE) {
 		printk(BIOS_ERR, "Missing/invalid signature in VBT data file!\n");
-		return CB_ERR;
+		return NULL;
 	}
 
-	return CB_SUCCESS;
+	return rdev_mmap_full(rdev);
 }
 
 void *vbt_get(struct region_device *rdev)
 {
-	void *vbt_data;
-
 	if (!IS_ENABLED(CONFIG_RUN_FSP_GOP))
 		return NULL;
 
@@ -64,10 +62,5 @@ void *vbt_get(struct region_device *rdev)
 		return NULL;
 	if (!display_init_required())
 		return NULL;
-	if (locate_vbt(rdev) != CB_ERR) {
-		vbt_data = rdev_mmap_full(rdev);
-		return vbt_data;
-	} else {
-		return NULL;
-	}
+	return locate_vbt(rdev);
 }
diff --git a/src/soc/intel/common/vbt.h b/src/soc/intel/common/vbt.h
index 7b65d74a4d..2d52fea6ed 100644
--- a/src/soc/intel/common/vbt.h
+++ b/src/soc/intel/common/vbt.h
@@ -27,8 +27,8 @@
  */
 const char *mainboard_vbt_filename(void);
 
-/* locate .vbt file */
-enum cb_err locate_vbt(struct region_device *rdev);
+/* locate vbt.bin file. Returns a pointer to its content. */
+void *locate_vbt(struct region_device *rdev);
 /*
  * Returns VBT pointer and mapping after checking prerequisites for Pre OS
  * Graphics initialization
-- 
cgit v1.2.3