soc/intel/xeon_sp: Enable FSP_ERROR_INFO_HOB handling

After calling FSP MemoryInit API, if there is an error, some FSPs
(such as SPR-SP FSP) is capable of generating FSP_ERROR_INFO_HOB.
Check existence of such a HOB and handle it accordingly.

Change-Id: Icb5c31daa223ba6b06ba1b2de4f8808e0b27899e
Signed-off-by: Tim Chu <Tim.Chu@quantatw.com>
Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/72505
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
This commit is contained in:
Tim Chu 2022-12-14 11:37:55 +00:00 committed by Lean Sheng Tan
parent 65b7219bd3
commit d5bd8d54a3
5 changed files with 11 additions and 23 deletions

View File

@ -10,5 +10,6 @@ void mainboard_memory_init_params(FSPM_UPD * mupd);
void mainboard_rtc_failed(void);
void save_dimm_info(void);
void mainboard_ewl_check(void);
void mainboard_fsp_error_handle(void);
#endif /* _SOC_ROMSTAGE_H_ */

View File

@ -17,6 +17,13 @@ void mainboard_romstage_entry(void)
printk(BIOS_DEBUG, "coreboot fsp_memory_init finished...\n");
mainboard_ewl_check();
if (CONFIG(ENABLE_FSP_ERROR_INFO)) {
if (fsp_display_error_info()) {
mainboard_fsp_error_handle();
die("ERROR: FSP reported an error(s) after running!");
}
}
unlock_pam_regions();
save_dimm_info();
@ -33,3 +40,6 @@ __weak void mainboard_rtc_failed(void)
}
__weak void save_dimm_info(void) { }
__weak void mainboard_ewl_check(void) { }
/* mainboard can override this function for their own handling, such as writing a BMC SEL. */
__weak void mainboard_fsp_error_handle(void) { }

View File

@ -29,8 +29,4 @@ const EWL_PRIVATE_DATA *get_ewl_hob(void);
uint32_t get_ubox_busno(uint32_t socket, uint8_t offset);
uint32_t get_socket_ubox_busno(uint32_t socket);
void check_fsp_error(void);
void mainboard_fsp_error_handle(void);
#endif /* _SOC_UTIL_H_ */

View File

@ -312,8 +312,3 @@ void save_dimm_info(void)
mem_info->dimm_cnt = index; /* Number of DIMM slots found */
printk(BIOS_DEBUG, "%d Installed DIMMs found\n", dimm_num);
}
void fsp_check_for_error(void)
{
check_fsp_error();
}

View File

@ -153,20 +153,6 @@ uint32_t get_socket_ubox_busno(uint32_t socket)
return get_ubox_busno(socket, UNCORE_BUS_1);
}
/* mainboard can override this function for their own handling, such as write a BMC SEL. */
void __weak mainboard_fsp_error_handle(void)
{
die("ERROR: FSP reported an error(s) after running!");
}
void check_fsp_error(void)
{
bool fsp_found_error = fsp_find_error_info();
if (fsp_found_error)
mainboard_fsp_error_handle();
}
void bios_done_msr(void *unused)
{
msr_t msr = rdmsr(MSR_BIOS_DONE);