summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/intel/fsp2_0/Kconfig.debug_blob7
-rw-r--r--src/drivers/intel/fsp2_0/hand_off_block.c33
-rw-r--r--src/drivers/intel/fsp2_0/include/fsp/soc_binding.h2
3 files changed, 37 insertions, 5 deletions
diff --git a/src/drivers/intel/fsp2_0/Kconfig.debug_blob b/src/drivers/intel/fsp2_0/Kconfig.debug_blob
index 2b10c2df4f..14f502c4d6 100644
--- a/src/drivers/intel/fsp2_0/Kconfig.debug_blob
+++ b/src/drivers/intel/fsp2_0/Kconfig.debug_blob
@@ -38,4 +38,11 @@ config DISPLAY_FSP_VERSION_INFO
help
Select this option to display Firmware version information.
+config DISPLAY_FSP_VERSION_INFO_2
+ bool
+ default n
+ help
+ Select this option to display Firmware version information
+ using new header 'FirmwareVersionInfo.h'.
+
endif # PLATFORM_USES_FSP2_0
diff --git a/src/drivers/intel/fsp2_0/hand_off_block.c b/src/drivers/intel/fsp2_0/hand_off_block.c
index 60ab7cb3ec..fd8316e01d 100644
--- a/src/drivers/intel/fsp2_0/hand_off_block.c
+++ b/src/drivers/intel/fsp2_0/hand_off_block.c
@@ -209,26 +209,49 @@ const void *fsp_find_extension_hob_by_guid(const uint8_t *guid, size_t *size)
static void display_fsp_version_info_hob(const void *hob)
{
+#if CONFIG(DISPLAY_FSP_VERSION_INFO) || CONFIG(DISPLAY_FSP_VERSION_INFO_2)
+
+ int index, cnt, tcount;
+ char *str_ptr;
+ uint8_t vs;
#if CONFIG(DISPLAY_FSP_VERSION_INFO)
const FIRMWARE_VERSION_INFO *fvi;
const FIRMWARE_VERSION_INFO_HOB *fvih =
(FIRMWARE_VERSION_INFO_HOB *)hob;
- int index, cnt;
- char *str_ptr;
fvi = (void *)&fvih[1];
str_ptr = (char *)((uintptr_t)fvi +
(fvih->Count * sizeof(FIRMWARE_VERSION_INFO)));
+ tcount = fvih->Count;
+#elif CONFIG(DISPLAY_FSP_VERSION_INFO_2)
+
+ uint8_t *hobstart = (uint8_t *) hob;
+ hobstart += sizeof(EFI_HOB_GUID_TYPE);
+
+ const SMBIOS_TABLE_TYPE_OEM_INTEL_FVI *stfvi =
+ (SMBIOS_TABLE_TYPE_OEM_INTEL_FVI *)hobstart;
+ const INTEL_FIRMWARE_VERSION_INFO *fvi;
- for (index = 0; index < fvih->Count; index++) {
+ str_ptr = ((char *) &(stfvi->Fvi[0])) +
+ (stfvi->Count * sizeof(INTEL_FIRMWARE_VERSION_INFO));
+ tcount = stfvi->Count;
+ fvi = &stfvi->Fvi[0];
+#endif
+
+ for (index = 0; index < tcount; index++) {
cnt = strlen(str_ptr);
+#if CONFIG(DISPLAY_FSP_VERSION_INFO)
+ vs = fvi[index].VersionStringIndex;
+#elif CONFIG(DISPLAY_FSP_VERSION_INFO_2)
+ vs = fvi[index].VersionString;
+#endif
/* Don't show ingredient name and version if its all 0xFF */
if (fvi[index].Version.MajorVersion == 0xFF &&
fvi[index].Version.MinorVersion == 0xFF &&
fvi[index].Version.Revision == 0xFF &&
fvi[index].Version.BuildNumber == 0xFF &&
- fvi[index].VersionStringIndex == 0) {
+ vs == 0) {
str_ptr = (char *)((uintptr_t)str_ptr + cnt +
sizeof(uint8_t));
continue;
@@ -241,7 +264,7 @@ static void display_fsp_version_info_hob(const void *hob)
*/
printk(BIOS_DEBUG, "%s = ", str_ptr);
- if (!fvi[index].VersionStringIndex)
+ if (!vs)
printk(BIOS_DEBUG, "%x.%x.%x.%x\n",
fvi[index].Version.MajorVersion,
fvi[index].Version.MinorVersion,
diff --git a/src/drivers/intel/fsp2_0/include/fsp/soc_binding.h b/src/drivers/intel/fsp2_0/include/fsp/soc_binding.h
index 8781bde8d8..8392a03adc 100644
--- a/src/drivers/intel/fsp2_0/include/fsp/soc_binding.h
+++ b/src/drivers/intel/fsp2_0/include/fsp/soc_binding.h
@@ -29,6 +29,8 @@
#include <FspsUpd.h>
#if CONFIG(DISPLAY_FSP_VERSION_INFO)
#include <FirmwareVersionInfoHob.h>
+#elif CONFIG(DISPLAY_FSP_VERSION_INFO_2)
+#include <FirmwareVersionInfo.h>
#endif
#pragma pack(pop)