drivers/intel/fsp2_0: Add support for FSP_ERROR_INFO_HOB
Add a new Kconfig CONFIG_ENABLE_FSP_ERROR_INFO option to enable retrieval of FSP_ERROR_INFO_HOB from HobList created by FSP. Such a HOB could be generated by Intel SPR-SP FSP. This HOB data is defined in Intel®Firmware Support Package External Architecture Specification v2.1 Doc#611786-2.1. Change-Id: I812d1c22c1bbe5146630948ca6ca12c46ffd5504 Signed-off-by: Ray Han Lim, Ng <ray.han.lim.ng@intel.com> Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/71949 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
This commit is contained in:
parent
3b3012fa7d
commit
65b7219bd3
|
@ -45,6 +45,16 @@ config DISPLAY_FSP_VERSION_INFO_2
|
||||||
Select this option to display Firmware version information
|
Select this option to display Firmware version information
|
||||||
using new header 'FirmwareVersionInfo.h'.
|
using new header 'FirmwareVersionInfo.h'.
|
||||||
|
|
||||||
|
config ENABLE_FSP_ERROR_INFO
|
||||||
|
bool "Enable FSP Error Information"
|
||||||
|
default n
|
||||||
|
depends on PLATFORM_USES_FSP2_1
|
||||||
|
help
|
||||||
|
Select this option to enable FSP Error information. FSP detects certain errors
|
||||||
|
and notifies coreboot of a fatal error occurring during the execution of the FSP.
|
||||||
|
Although it's defined in FSP v2.1 but has only been verified on Intel Xeon-SP
|
||||||
|
Sapphire Rapids.
|
||||||
|
|
||||||
config HAVE_GPIO_SNAPSHOT_VERIFY_SUPPORT
|
config HAVE_GPIO_SNAPSHOT_VERIFY_SUPPORT
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -15,6 +15,7 @@ romstage-y += util.c
|
||||||
romstage-y += memory_init.c
|
romstage-y += memory_init.c
|
||||||
romstage-$(CONFIG_MMA) += mma_core.c
|
romstage-$(CONFIG_MMA) += mma_core.c
|
||||||
romstage-y += cbmem.c
|
romstage-y += cbmem.c
|
||||||
|
romstage-$(CONFIG_ENABLE_FSP_ERROR_INFO) += fsp_error_info_hob.c
|
||||||
|
|
||||||
ramstage-y += debug.c
|
ramstage-y += debug.c
|
||||||
ramstage-$(CONFIG_FSP_USES_CB_DEBUG_EVENT_HANDLER) += fsp_debug_event.c
|
ramstage-$(CONFIG_FSP_USES_CB_DEBUG_EVENT_HANDLER) += fsp_debug_event.c
|
||||||
|
@ -31,6 +32,7 @@ ramstage-$(CONFIG_DISPLAY_UPD_DATA) += upd_display.c
|
||||||
ramstage-y += util.c
|
ramstage-y += util.c
|
||||||
ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += save_mrc_data.c
|
ramstage-$(CONFIG_CACHE_MRC_SETTINGS) += save_mrc_data.c
|
||||||
ramstage-$(CONFIG_MMA) += mma_core.c
|
ramstage-$(CONFIG_MMA) += mma_core.c
|
||||||
|
ramstage-$(CONFIG_ENABLE_FSP_ERROR_INFO) += fsp_error_info_hob.c
|
||||||
|
|
||||||
ifneq ($(CONFIG_NO_FSP_TEMP_RAM_EXIT),y)
|
ifneq ($(CONFIG_NO_FSP_TEMP_RAM_EXIT),y)
|
||||||
postcar-$(CONFIG_FSP_CAR) += temp_ram_exit.c
|
postcar-$(CONFIG_FSP_CAR) += temp_ram_exit.c
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <fsp/util.h>
|
||||||
|
|
||||||
|
void display_fsp_error_info_hob(const void *hob)
|
||||||
|
{
|
||||||
|
const FSP_ERROR_INFO_HOB *fsp_error_info_hob = (FSP_ERROR_INFO_HOB *)hob;
|
||||||
|
printk(BIOS_ERR, "FspErrorInfoHob->CallerId = ");
|
||||||
|
fsp_print_guid(BIOS_CRIT, &fsp_error_info_hob->CallerId);
|
||||||
|
printk(BIOS_ERR, "\nFspErrorInfoHob->ErrorType = ");
|
||||||
|
fsp_print_guid(BIOS_CRIT, &fsp_error_info_hob->ErrorType);
|
||||||
|
printk(BIOS_ERR, "\nFspErrorInfoHob->Status = %x\n", fsp_error_info_hob->Status);
|
||||||
|
}
|
|
@ -32,6 +32,11 @@ const uint8_t fsp_nv_storage_guid[16] = {
|
||||||
0xb3, 0xdc, 0x27, 0x0b, 0x7b, 0xa9, 0xe4, 0xb0
|
0xb3, 0xdc, 0x27, 0x0b, 0x7b, 0xa9, 0xe4, 0xb0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const uint8_t fsp_error_info_guid[16] = {
|
||||||
|
0x88, 0x6a, 0x1e, 0x61, 0xb7, 0xad, 0x01, 0x43,
|
||||||
|
0x93, 0xff, 0xe4, 0x73, 0x04, 0xb4, 0x3d, 0xa6
|
||||||
|
};
|
||||||
|
|
||||||
static const uint8_t uuid_fv_info[16] = {
|
static const uint8_t uuid_fv_info[16] = {
|
||||||
0x2e, 0x72, 0x8e, 0x79, 0xb2, 0x15, 0x13, 0x4e,
|
0x2e, 0x72, 0x8e, 0x79, 0xb2, 0x15, 0x13, 0x4e,
|
||||||
0x8a, 0xe9, 0x6b, 0xa3, 0x0f, 0xf7, 0xf1, 0x67
|
0x8a, 0xe9, 0x6b, 0xa3, 0x0f, 0xf7, 0xf1, 0x67
|
||||||
|
@ -356,3 +361,21 @@ void fsp_find_bootloader_tolum(struct range_entry *re)
|
||||||
if (fsp_find_range_hob(re, fsp_bootloader_tolum_guid))
|
if (fsp_find_range_hob(re, fsp_bootloader_tolum_guid))
|
||||||
die("9.3: FSP_BOOTLOADER_TOLUM_HOB missing!\n");
|
die("9.3: FSP_BOOTLOADER_TOLUM_HOB missing!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fsp_display_error_info(void)
|
||||||
|
{
|
||||||
|
if (!CONFIG(ENABLE_FSP_ERROR_INFO))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const struct hob_header *hob;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
hob = (const struct hob_header *)fsp_find_extension_hob_by_guid(
|
||||||
|
fsp_error_info_guid, &size);
|
||||||
|
if (hob != NULL) {
|
||||||
|
display_fsp_error_info_hob(hob);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -33,6 +33,10 @@
|
||||||
#include <FirmwareVersionInfo.h>
|
#include <FirmwareVersionInfo.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG(ENABLE_FSP_ERROR_INFO)
|
||||||
|
#include <FspErrorInfoHob.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -137,6 +137,8 @@ const struct hob_resource *fsp_hob_header_to_resource(
|
||||||
const struct hob_header *fsp_next_hob(const struct hob_header *parent);
|
const struct hob_header *fsp_next_hob(const struct hob_header *parent);
|
||||||
bool fsp_guid_compare(const uint8_t guid1[16], const uint8_t guid2[16]);
|
bool fsp_guid_compare(const uint8_t guid1[16], const uint8_t guid2[16]);
|
||||||
void fsp_find_bootloader_tolum(struct range_entry *re);
|
void fsp_find_bootloader_tolum(struct range_entry *re);
|
||||||
|
bool fsp_display_error_info(void);
|
||||||
|
void display_fsp_error_info_hob(const void *hob);
|
||||||
void fsp_get_version(char *buf);
|
void fsp_get_version(char *buf);
|
||||||
/* fsp_verify_upd_header_signature calls die() on signature mismatch */
|
/* fsp_verify_upd_header_signature calls die() on signature mismatch */
|
||||||
void fsp_verify_upd_header_signature(uint64_t upd_signature, uint64_t expected_signature);
|
void fsp_verify_upd_header_signature(uint64_t upd_signature, uint64_t expected_signature);
|
||||||
|
|
Loading…
Reference in New Issue