blob: 827c95d980fad6baccbccbdf3f94d7131713a5fc [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef _FSP2_0_UPD_H_
#define _FSP2_0_UPD_H_
#include <stdint.h>
struct FSP_UPD_HEADER {
///
/// UPD Region Signature. This signature will be
/// "XXXXXX_T" for FSP-T
/// "XXXXXX_M" for FSP-M
/// "XXXXXX_S" for FSP-S
/// Where XXXXXX is an unique signature
///
uint64_t Signature;
///
/// Revision of the Data structure. For FSP v2.0 value is 1.
///
uint8_t Revision;
uint8_t Reserved[23];
} __packed;
#if CONFIG(PLATFORM_USES_FSP2_X86_32)
struct FSPM_ARCH_UPD {
///
/// Revision of the structure. For FSP v2.0 value is 1.
///
uint8_t Revision;
uint8_t Reserved[3];
///
/// Pointer to the non-volatile storage (NVS) data buffer.
/// If it is NULL it indicates the NVS data is not available.
///
uint32_t NvsBufferPtr;
///
/// Pointer to the temporary stack base address to be
/// consumed inside FspMemoryInit() API.
///
uint32_t StackBase;
///
/// Temporary stack size to be consumed inside
/// FspMemoryInit() API.
///
uint32_t StackSize;
///
/// Size of memory to be reserved by FSP below "top
/// of low usable memory" for bootloader usage.
///
uint32_t BootLoaderTolumSize;
///
/// Current boot mode.
///
uint32_t BootMode;
uint8_t Reserved1[8];
} __packed;
#else
#error You need to implement this struct for x86_64 FSP
#endif
#endif
struct FSPS_ARCH_UPD {
///
/// Revision of the structure. For FSP v2.2 value is 1.
///
uint8_t Revision;
uint8_t Reserved[3];
///
/// Length of the structure in bytes. The current value for this field is 32
///
uint32_t Length;
uint8_t Reserved1[4];
///
/// To enable multi-phase silicon initialization the bootloader must set non-zero value
///
uint8_t EnableMultiPhaseSiliconInit;
uint8_t Reserved2[19];
} __packed;
#endif /* _FSP2_0_UPD_H_ */