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>
This commit is contained in:
parent
d400d497fb
commit
0dd0368740
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue