aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/intel/fsp2_0/silicon_init.c
diff options
context:
space:
mode:
authorLee Leahy <leroy.p.leahy@intel.com>2016-07-24 18:18:52 -0700
committerLee Leahy <leroy.p.leahy@intel.com>2016-08-03 06:17:02 +0200
commit9671faa497f1b2be70e5638c53878c4b9cdd9a25 (patch)
tree13aa658d0f31afceab9a02e18887e4213a2f919e /src/drivers/intel/fsp2_0/silicon_init.c
parent52d0c682bf3bb39584a1edd6e7326a6f4c1267f7 (diff)
drivers/intel/fsp2_0: FSP driver handles all FSP errors
Move all FSP error handling into the FSP 2.0 driver. This removes the need to implement error handling within the SOC code. TEST=Build and run on Galileo Gen2 Change-Id: I4d548b4c90d369d3857c24f50f93e7db7e9d3028 Signed-off-by: Lee Leahy <leroy.p.leahy@intel.com> Reviewed-on: https://review.coreboot.org/15853 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/drivers/intel/fsp2_0/silicon_init.c')
-rw-r--r--src/drivers/intel/fsp2_0/silicon_init.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/drivers/intel/fsp2_0/silicon_init.c b/src/drivers/intel/fsp2_0/silicon_init.c
index af40b6da1c..562fec5844 100644
--- a/src/drivers/intel/fsp2_0/silicon_init.c
+++ b/src/drivers/intel/fsp2_0/silicon_init.c
@@ -23,7 +23,7 @@
struct fsp_header fsps_hdr;
-static enum fsp_status do_silicon_init(struct fsp_header *hdr)
+static void do_silicon_init(struct fsp_header *hdr)
{
struct FSPS_UPD upd, *supd;
fsp_silicon_init_fn silicon_init;
@@ -32,8 +32,7 @@ static enum fsp_status do_silicon_init(struct fsp_header *hdr)
supd = (struct FSPS_UPD *) (hdr->cfg_region_offset + hdr->image_base);
if (supd->FspUpdHeader.Signature != FSPS_UPD_SIGNATURE) {
- printk(BIOS_ERR, "Invalid FSPS signature\n");
- return FSP_INCOMPATIBLE_VERSION;
+ die("Invalid FSPS signature\n");
}
memcpy(&upd, supd, sizeof(upd));
@@ -54,13 +53,15 @@ static enum fsp_status do_silicon_init(struct fsp_header *hdr)
fsp_debug_after_silicon_init(status);
- /* Handle any resets requested by FSPS. */
+ /* Handle any errors returned by FspSiliconInit */
fsp_handle_reset(status);
-
- return status;
+ if (status != FSP_SUCCESS) {
+ printk(BIOS_SPEW, "FspSiliconInit returned 0x%08x\n", status);
+ die("FspSiliconINit returned an error!\n");
+ }
}
-enum fsp_status fsp_silicon_init(void)
+void fsp_silicon_init(void)
{
struct fsp_header *hdr = &fsps_hdr;
struct cbfsf file_desc;
@@ -71,7 +72,7 @@ enum fsp_status fsp_silicon_init(void)
if (cbfs_boot_locate(&file_desc, name, NULL)) {
printk(BIOS_ERR, "Could not locate %s in CBFS\n", name);
- return FSP_NOT_FOUND;
+ die("FSPS not available!\n");
}
cbfs_file_data(&rdev, &file_desc);
@@ -81,26 +82,24 @@ enum fsp_status fsp_silicon_init(void)
dest = cbmem_add(CBMEM_ID_REFCODE, size);
if (dest == NULL) {
- printk(BIOS_ERR, "Could not add FSPS to CBMEM.\n");
- return FSP_NOT_FOUND;
+ die("Could not add FSPS to CBMEM!\n");
}
if (rdev_readat(&rdev, dest, 0, size) < 0)
- return FSP_NOT_FOUND;
+ die("Failed to read FSPS!\n");
if (fsp_component_relocate((uintptr_t)dest, dest, size) < 0) {
- printk(BIOS_ERR, "Unable to relocate FSPS.\n");
- return FSP_NOT_FOUND;
+ die("Unable to relocate FSPS!\n");
}
/* Create new region device in memory after relocation. */
rdev_chain(&rdev, &addrspace_32bit.rdev, (uintptr_t)dest, size);
if (fsp_validate_component(hdr, &rdev) != CB_SUCCESS)
- return FSP_NOT_FOUND;
+ die("Invalid FSPS header!\n");
/* Signal that FSP component has been loaded. */
prog_segment_loaded(hdr->image_base, hdr->image_size, SEG_FINAL);
- return do_silicon_init(hdr);
+ do_silicon_init(hdr);
}