From 9671faa497f1b2be70e5638c53878c4b9cdd9a25 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Sun, 24 Jul 2016 18:18:52 -0700 Subject: 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 Reviewed-on: https://review.coreboot.org/15853 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/drivers/intel/fsp2_0/silicon_init.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'src/drivers/intel/fsp2_0/silicon_init.c') 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); } -- cgit v1.2.3