The FSP builds a series of data structures called the Hand-Off-Blocks (HOBs) as it progresses through initializing the silicon.
Please refer to the Platform Initialization (PI) Specification - Volume 3: Shared Architectural Elements specification for PI Architectural HOBs.Please refer Chapter 9 in the FSP External Architecture Specification version 2.0 for details about FSP Architectural HOBs.
Below section describe the HOBs not covered in the above two specifications.
The FSP will report the system SMRAM T-SEG range through a generic resource HOB if T-SEG is enabled. The owner field of the HOB identifies the owner as T-SEG.
The FSP will report the SMBIOS through a HOB with below GUID. This information can be consumed by the bootloader to produce the SMBIOS tables. These structures are included as part of MemInfoHob.h , SmbiosCacheInfoHob.h & SmbiosProcessorInfoHob.h. Note: The Smbios Cache Info Hob & Smbios Processor Info Hob won't be published on S3 boot.
#define SI_MEMORY_INFO_DATA_HOB_GUID \
{ 0x9b2071d4, 0xb054, 0x4e0c, { 0x8d, 0x09, 0x11, 0xcf, 0x8b, 0x9f, 0x03, 0x23 } };
typedef struct {
MrcDimmStatus Status;
UINT8 DimmId;
UINT32 DimmCapacity;
UINT16 MfgId;
UINT8 ModulePartNum[20];
UINT8 RankInDimm;
UINT8 SpdDramDeviceType;
UINT8 SpdModuleType;
UINT8 SpdModuleMemoryBusWidth;
UINT8 SpdSave[MAX_SPD_SAVE_DATA];
typedef struct {
UINT8 Status;
UINT8 ChannelId;
UINT8 DimmCount;
MRC_CH_TIMING Timing[MAX_PROFILE];
} CHANNEL_INFO;
typedef struct {
UINT8 Status;
UINT16 DeviceId;
UINT8 RevisionId;
UINT8 ChannelCount;
CHANNEL_INFO Channel[MAX_CH];
} CONTROLLER_INFO;
typedef struct {
EFI_HOB_GUID_TYPE EfiHobGuidType;
UINT8 Revision;
UINT16 DataWidth;
UINT8 DdrType;
UINT32 Frequency;
UINT8 ErrorCorrectionType;
SiMrcVersion Version;
UINT32 FreqMax;
BOOLEAN EccSupport;
UINT8 MemoryProfile;
UINT32 TotalPhysicalMemorySize;
BOOLEAN XmpProfileEnable;
UINT8 Ratio;
UINT8 RefClk;
UINT32 VddVoltage[MAX_PROFILE];
CONTROLLER_INFO Controller[MAX_NODE];
} MEMORY_INFO_DATA_HOB;
#define SI_MEMORY_PLATFORM_DATA_HOB \
{ 0x6210d62f, 0x418d, 0x4999, { 0xa2, 0x45, 0x22, 0x10, 0x0a, 0x5d, 0xea, 0x44 } }
typedef struct {
UINT8 Revision;
UINT8 Reserved[3];
UINT32 BootMode;
UINT32 TsegSize;
UINT32 TsegBase;
UINT32 PrmrrSize;
UINT32 PrmrrBase;
UINT32 GttBase;
UINT32 MmioSize;
UINT32 PciEBaseAddress;
typedef struct {
EFI_HOB_GUID_TYPE EfiHobGuidType;
UINT8 *Buffer;
} MEMORY_PLATFORM_DATA_HOB;
#define SMBIOS_CACHE_INFO_HOB_GUID \
{ 0xd805b74e, 0x1460, 0x4755, {0xbb, 0x36, 0x1e, 0x8c, 0x8a, 0xd6, 0x78, 0xd7} }
typedef struct {
UINT16 ProcessorSocketNumber;
UINT16 NumberOfCacheLevels;
UINT8 SocketDesignationStrIndex;
UINT16 CacheConfiguration;
UINT16 MaxCacheSize;
UINT16 InstalledSize;
UINT16 SupportedSramType;
UINT16 CurrentSramType;
UINT8 CacheSpeed;
UINT8 ErrorCorrectionType;
UINT8 SystemCacheType;
UINT8 Associativity;
#define SMBIOS_PROCESSOR_INFO_HOB_GUID \
{ 0xe6d73d92, 0xff56, 0x4146, {0xaf, 0xac, 0x1c, 0x18, 0x81, 0x7d, 0x68, 0x71} }
typedef struct {
UINT16 TotalNumberOfSockets;
UINT16 CurrentSocketNumber;
UINT8 ProcessorType;
UINT16 ProcessorFamily;
UINT8 ProcessorManufacturerStrIndex;
UINT64 ProcessorId;
UINT8 ProcessorVersionStrIndex;
UINT8 Voltage;
UINT16 ExternalClockInMHz;
UINT16 CurrentSpeedInMHz;
UINT8 Status;
UINT8 ProcessorUpgrade;
UINT16 CoreCount;
UINT16 EnabledCoreCount;
UINT16 ThreadCount;
UINT16 ProcessorCharacteristics;
The FSP will report the ChipsetInit CRC through a HOB with below GUID. This information can be consumed by the bootloader to check if ChipsetInit CRC is matched between BIOS and ME. These structures are included as part of FspsUpd.h
The FSP will report the CPU S3 Resume Data through a GUIDED HOB with below GUID. This data (not the entire HOB) must be passed during S3 resume passed in UPD CpuS3ResumeData except if UPD SkipMpInit is enabled.