diff options
author | Anil Kumar <anil.kumar.k@intel.com> | 2021-11-24 14:31:04 -0800 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-03-25 19:58:41 +0000 |
commit | 0dd03687402458b25a33c8b5b3dff241e13357a5 (patch) | |
tree | d08f34acbc66d955d0e8d9d461f298162ff845d0 /src/drivers | |
parent | d400d497fbcaf976fd9c3e2042b1f67f865681a5 (diff) |
drivers/intel/fsp2_0: Add support for FSP_NON_VOLATILE_STORAGE_HOB2
FSP 2.3 spec introduced new version of NV storage HOB
FSP_NON_VOLATILE_STORAGE_HOB2. This new HOB addresses the limitation of
FSP_NON_VOLATILE_STORAGE_HOB which can support data length
upto 64KB. FSP_NON_VOLATILE_STORAGE_HOB2 allows >64KB of NVS data to be
stored by specifying a pointer to the NVS data.
FSP_NON_VOLATILE_STORAGE_HOB HOB is deprecated
from FSP 2.3 onwards and is maintained for backward compatibility only.
This patch implements the parsing method for
FSP_NON_VOLATILE_STORAGE_HOB2 HOB structure .The HOB list is first
searched for FSP_NON_VOLATILE_STORAGE_HOB2. If not found we continue
to search for FSP_NON_VOLATILE_STORAGE_HOB HOB.
BUG=b:200113959
TEST=Verified on sapphire rapids and meteor lake FSP platform that
introduces FSP_NON_VOLATILE_STORAGE_HOB2 for retrieving MRC cached data.
Signed-off-by: Anil Kumar <anil.kumar.k@intel.com>
Signed-off-by: Subrata Banik <subratabanik@google.com>
Change-Id: I27647e9ac1a4902256b3f1c34b60e1f0b787a06e
Reviewed-on: https://review.coreboot.org/c/coreboot/+/59638
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Wonkyu Kim <wonkyu.kim@intel.com>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Diffstat (limited to 'src/drivers')
-rw-r--r-- | src/drivers/intel/fsp2_0/hand_off_block.c | 15 | ||||
-rw-r--r-- | src/drivers/intel/fsp2_0/include/fsp/util.h | 6 |
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; }; |