summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/intel/fsp2_0/hand_off_block.c15
-rw-r--r--src/drivers/intel/fsp2_0/include/fsp/util.h6
2 files changed, 21 insertions, 0 deletions
diff --git a/src/drivers/intel/fsp2_0/hand_off_block.c b/src/drivers/intel/fsp2_0/hand_off_block.c
index c9c99f9bc1..9144eaa8ac 100644
--- a/src/drivers/intel/fsp2_0/hand_off_block.c
+++ b/src/drivers/intel/fsp2_0/hand_off_block.c
@@ -22,6 +22,11 @@ const uint8_t fsp_reserved_memory_guid[16] = {
0xa6, 0xc4, 0xc7, 0xf5, 0x9e, 0xfd, 0x98, 0x6e,
};
+const uint8_t fsp_nv_storage_guid_2[16] = {
+ 0x8f, 0x78, 0x66, 0x48, 0xa8, 0x6b, 0xd8, 0x47,
+ 0x83, 0x6, 0xac, 0xf7, 0x7f, 0x55, 0x10, 0x46
+};
+
const uint8_t fsp_nv_storage_guid[16] = {
0x02, 0xcf, 0x1a, 0x72, 0x77, 0x4d, 0x2a, 0x4c,
0xb3, 0xdc, 0x27, 0x0b, 0x7b, 0xa9, 0xe4, 0xb0
@@ -306,6 +311,16 @@ void fsp_display_fvi_version_hob(void)
const void *fsp_find_nv_storage_data(size_t *size)
{
+ if (CONFIG(PLATFORM_USES_FSP2_3)) {
+ const struct fsp_nvs_hob2_data_region_header *hob;
+
+ hob = (const struct fsp_nvs_hob2_data_region_header *)
+ fsp_find_extension_hob_by_guid(fsp_nv_storage_guid_2, size);
+ if (hob != NULL) {
+ *size = hob->nvs_data_length;
+ return (void *)(uintptr_t)hob->nvs_data_ptr;
+ }
+ }
return fsp_find_extension_hob_by_guid(fsp_nv_storage_guid, size);
}
diff --git a/src/drivers/intel/fsp2_0/include/fsp/util.h b/src/drivers/intel/fsp2_0/include/fsp/util.h
index 7347034550..2687d0dc98 100644
--- a/src/drivers/intel/fsp2_0/include/fsp/util.h
+++ b/src/drivers/intel/fsp2_0/include/fsp/util.h
@@ -8,6 +8,7 @@
#include <commonlib/region.h>
#include <arch/cpu.h>
#include <fsp/api.h>
+#include <efi/efi_datatype.h>
#include <fsp/info_header.h>
#include <memrange.h>
#include <program_loading.h>
@@ -27,6 +28,11 @@ struct hob_header {
uint16_t length;
} __packed;
+struct fsp_nvs_hob2_data_region_header {
+ efi_physical_address nvs_data_ptr;
+ uint64_t nvs_data_length;
+};
+
struct fsp_notify_params {
enum fsp_notify_phase phase;
};