/** @file
The GUID definition for PchConfigHob
Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _PCH_CONFIG_HOB_H_
#define _PCH_CONFIG_HOB_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
extern EFI_GUID gPchConfigHobGuid;
#pragma pack (push,1)
/**
This structure contains the HOB which are related to PCH general config.
**/
typedef struct {
/**
This member describes whether or not the Compatibility Revision ID (CRID) feature
of PCH should be enabled. 0: Disable; 1: Enable
**/
UINT32 Crid : 1;
UINT32 RsvdBits0 : 31; ///< Reserved bits
} GENERAL_HOB;
/**
The SMBUS_CONFIG block lists the reserved addresses for non-ARP capable devices in the platform.
**/
typedef struct {
UINT8 RsvdBytes[3]; ///< Reserved bytes
UINT8 NumRsvdSmbusAddresses; ///< The number of elements in the RsvdSmbusAddressTable.
/**
Array of addresses reserved for non-ARP-capable SMBus devices.
**/
UINT8 RsvdSmbusAddressTable[PCH_MAX_SMBUS_RESERVED_ADDRESS];
} SMBUS_HOB;
/**
The INTERRUPT_HOB describes interrupt settings for PCH.
**/
typedef struct {
UINT8 NumOfDevIntConfig; ///< Number of entries in DevIntConfig table
UINT8 GpioIrqRoute; ///< Interrupt routing for GPIO. Default is 14.
UINT8 Rsvd0[2]; ///< Reserved bytes, align to multiple 4.
PCH_DEVICE_INTERRUPT_CONFIG DevIntConfig[PCH_MAX_DEVICE_INTERRUPT_CONFIG]; ///< Array which stores PCH devices interrupts settings
} INTERRUPT_HOB;
/**
The SERIAL_IO block provides the configurations to set the Serial IO controllers
**/
typedef struct {
SERIAL_IO_SPI_CONFIG SpiDeviceConfig[PCH_MAX_SERIALIO_SPI_CONTROLLERS]; ///< SPI Configuration
SERIAL_IO_I2C_CONFIG I2cDeviceConfig[PCH_MAX_SERIALIO_I2C_CONTROLLERS]; ///< I2C Configuration
SERIAL_IO_UART_CONFIG UartDeviceConfig[PCH_MAX_SERIALIO_UART_CONTROLLERS]; ///< UART Configuration
} SERIAL_IO_HOB;
/**
The PCIERP_HOB block describes the expected configuration of the PCH PCI Express controllers
**/
typedef struct {
///
/// These members describe the configuration of each PCH PCIe root port.
///
PCH_PCIE_ROOT_PORT_CONFIG RootPort[PCH_MAX_PCIE_ROOT_PORTS];
PCH_PCIE_CLOCK PcieClock[PCH_MAX_PCIE_CLOCKS];
/**
This member allows BIOS to control ICC PLL Shutdown by determining PCIe devices are LTR capable
or leaving untouched.
- 0: Disable, ICC PLL Shutdown is determined by PCIe device LTR capablility.
- To allow ICC PLL shutdown if all present PCIe devices are LTR capable or if no PCIe devices are
presented for maximum power savings where possible.
- To disable ICC PLL shutdown when BIOS detects any non-LTR capable PCIe device for ensuring device
functionality.
- 1: Enable, To allow ICC PLL shutdown even if some devices do not support LTR capability.
**/
UINT32 AllowNoLtrIccPllShutdown : 1;
UINT32 RsvdBits0 : 31; ///< Reserved bits
} PCIERP_HOB;
/**
The HDAUDIO_HOB block describes the configuration of the PCH cAVS controller
**/
typedef struct {
UINT32 DspEnable : 1; ///< DSP enablement: 0: Disable; 1: Enable
UINT32 DspUaaCompliance : 1; ///< UAA-mode Select: 0: Non-Uaa; 1: UAA
UINT32 CodecSxWakeCapability : 1; ///< Capability to detect wake initiated by a codec in Sx, 0: Disable; 1: Enable
UINT32 AudioLinkSndw1 : 1; ///< SoundWire1 link enablement: 0: Disable; 1: Enable. Muxed with HDA
UINT32 AudioLinkSndw2 : 1; ///< SoundWire2 link enablement: 0: Disable; 1: Enable. Muxed with SSP1
UINT32 AudioLinkSndw3 : 1; ///< SoundWire3 link enablement: 0: Disable; 1: Enable. Muxed with DMIC1
UINT32 AudioLinkSndw4 : 1; ///< SoundWire4 link enablement: 0: Disable; 1: Enable. Muxed with DMIC0
UINT32 Pme : 1; ///< Azalia wake-on-ring, 0: Disable; 1: Enable
UINT32 RsvdBits0 : 24; ///< Reserved bits
} HDAUDIO_HOB;
/**
The SATA_HOB block describes the configuration of the PCH SATA controllers
**/
typedef struct {
/**
This member describes whether or not the SATA controllers should be enabled. 0: Disable; 1: Enable.
**/
UINT32 Enable : 1;
UINT32 TestMode : 1; ///< (Test) 0: Disable; 1: Allow entrance to the PCH SATA test modes
UINT32 RsvdBits0 : 30; ///< Reserved bits
/**
This member configures the features, property, and capability for each SATA port.
**/
PCH_SATA_PORT_CONFIG PortSettings[PCH_MAX_SATA_PORTS];
} SATA_HOB;
/**
The RST block describes the configuration of the RST PCIE Cycle Routers
**/
typedef struct {
/**
This member describes the details of implementation of Intel RST for PCIe Storage remapping (Intel RST Driver is required)
**/
RST_HARDWARE_REMAPPED_STORAGE_CONFIG RstHardwareRemappedStorageConfig[PCH_MAX_RST_PCIE_STORAGE_CR];
} RST_HOB;
typedef struct {
UINT32 Enabled : 1; ///< Indicates that SD card has been enabled
UINT32 Reserved : 31;
} SD_CARD_HOB;
/**
The EMMC_HOB block describes integrated eMMC settings for PCH.
**/
typedef struct {
UINT32 Enabled : 1; ///< Determine if eMMC is enabled - 0: Disabled, 1: Enabled.
UINT32 Hs400Enabled : 1; ///< Determine eMMC HS400 Mode if EmmcEnabled - 0: Disabled, 1: Enabled
/**
Determine if HS400 Training is required, set to FALSE if Hs400 Data is valid. 0: Disabled, 1: Enabled.
First Boot or CMOS clear, system boot with Default settings, set tuning required.
Subsequent Boots, Get Variable 'Hs400TuningData'
- if failed to get variable, set tuning required
- if passed, retrieve Hs400DataValid, Hs400RxStrobe1Dll and Hs400TxDataDll from variable. Set tuning not required.
**/
UINT32 Hs400DllDataValid : 1; ///< Set if HS400 Tuning Data Valid
UINT32 RsvdBits : 29;
} EMMC_HOB;
/**
The PCH_LOCK_DOWN_CONFIG block describes the expected configuration of the PCH
for security requirement.
**/
typedef struct {
UINT32 GlobalSmi : 1;
/**
(Test) Enable BIOS Interface Lock Down bit to prevent writes to the Backup Control Register
Top Swap bit and the General Control and Status Registers Boot BIOS Straps. 0: Disable; 1: Enable.
**/
UINT32 BiosInterface : 1;
/**
Enable the BIOS Lock Enable (BLE) feature and set EISS bit (D31:F5:RegDCh[5])
for the BIOS region protection. When it is enabled, the BIOS Region can only be
modified from SMM after EndOfDxe protocol is installed.
Note: When BiosLock is enabled, platform code also needs to update to take care
of BIOS modification (including SetVariable) in DXE or runtime phase after
EndOfDxe protocol is installed.
Enable InSMM.STS (EISS) in SPI
If this EISS bit is set, then WPD must be a '1' and InSMM.STS must be '1' also
in order to write to BIOS regions of SPI Flash. If this EISS bit is clear,
then the InSMM.STS is a don't care.
The BIOS must set the EISS bit while BIOS Guard support is enabled.
In recovery path, platform can temporary disable EISS for SPI programming in
PEI phase or early DXE phase.
0: Disable; 1: Enable.
**/
UINT32 BiosLock : 1;
UINT32 RsvdBits : 29;
} LOCK_DOWN_HOB;
/**
The PM_HOB block describes expected miscellaneous power management settings.
The PowerResetStatusClear field would clear the Power/Reset status bits, please
set the bits if you want PCH Init driver to clear it, if you want to check the
status later then clear the bits.
**/
typedef struct {
UINT32 PsOnEnable : 1; ///< Indicates if PS_ON support has been enabled, 0: Disable; 1: Enable.
UINT32 EnableTimedGpio0 : 1; ///< Enable Bit for Timed GPIO 0 0 = disable; 1 = enable
UINT32 EnableTimedGpio1 : 1; ///< Enable Bit for Timed GPIO 1 0 = disable; 1 = enable
UINT32 RsvdBits1 : 29;
} PM_HOB;
/**
FIVR_HOB block
**/
typedef struct {
/**
Additional External Vnn VR rail configuration dedicated for Sx.
Required only if External Vnn VR needs different settings for Sx than
those specified in ExtVnnRail (refer to PCH_FIVR_CONFIG.ExtVnnRail)
**/
FIVR_EXT_RAIL_CONFIG ExtVnnRailSx;
} FIVR_HOB;
/**
PCH Trace Hub HOB settings.
**/
typedef struct {
UINT32 PchTraceHubMode : 2; ///< 0 = Disable; 1 = Target Debugger mode; 2 = Host Debugger mode
UINT32 Rsvd1 : 30; ///< Reserved bits
/**
Trace hub memory buffer region size policy.
The avaliable memory size options are: 0:0MB (none), 1:1MB, 2:8MB, 3:64MB, 4:128MB, 5:256MB, 6:512MB.
Note : Limitation of total buffer size (CPU + PCH) is 512MB. If iTbt is enabled, the total size limits to 256 MB.
Refer to TRACE_BUFFER_SIZE
**/
UINT32 MemReg0Size;
UINT32 MemReg1Size;
} PCH_TRACEHUB_HOB;
/**
PCH eSPI HOB settings.
**/
typedef struct {
UINT32 BmeMasterSlaveEnabled : 1; ///< 0 = BME disable; 1 = BME enable
UINT32 RsvdBits : 31; ///< Reserved bits
} PCH_ESPI_HOB;
/**
THC HOB settings.
**/
typedef struct {
THC_PORT ThcPort[2]; ///< Port Configuration
} THC_HOB;
/**
This structure contains the HOBs which are related to PCH controllers
**/
typedef struct {
EFI_HOB_GUID_TYPE EfiHobGuidType; ///< GUID HOB type structure for gPchConfigHobGuid
GENERAL_HOB General; ///< Pch general HOB definition
INTERRUPT_HOB Interrupt; ///< Interrupt HOB definition
SERIAL_IO_HOB SerialIo; ///< Serial io HOB definition
PCIERP_HOB PcieRp; ///< PCIE root port HOB definition
SD_CARD_HOB SdCard; ///< SD card HOB definition
EMMC_HOB Emmc; ///< eMMC HOB definition
LOCK_DOWN_HOB LockDown; ///< Lock down HOB definition
PM_HOB Pm; ///< PM HOB definition
HDAUDIO_HOB HdAudio; ///< HD audio definition
SATA_HOB Sata[PCH_MAX_SATA_CONTROLLERS]; ///< SATA definition
RST_HOB Rst; ///< RST definition
PROTECTED_RANGE ProtectRange[PCH_FLASH_PROTECTED_RANGES];
SMBUS_HOB Smbus;
PCH_TRACEHUB_HOB PchTraceHub; ///< PCH Trace Hub definition
PCH_ESPI_HOB Espi; ///< PCH eSPI definition
THC_HOB Thc; ///< PCH Tocuh Host Controller definition
FIVR_HOB Fivr; ///< PCH FIVR HOB definition
} PCH_CONFIG_HOB;
#pragma pack (pop)
#endif