/** @file The GUID definition for PchConfigHob Copyright (c) 2019 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 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]; 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 describes interrupt settings for PCH HOB. /// 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 UINT8 PxRcConfig[PCH_MAX_PXRC_CONFIG]; ///< PCI interrupt routing for 8259 PIC controller } INTERRUPT_HOB; /// /// The CNVI_HOB block describes CNVi device. /// typedef struct { UINT32 Mode : 1; ///< 0: Disabled, 1: Auto UINT32 RsvdBits0 : 31; } CNVI_HOB; /** The SERIAL_IO block provides the configurations to set the Serial IO controllers **/ typedef struct { /** 0: Disabled; - Device is placed in D3 - Gpio configuration is skipped - Device will be disabled in PSF - !important! If given device is Function 0 and not all other LPSS functions on given device are disabled, then PSF disabling is skipped. PSF default will remain and device PCI CFG Space will still be visible. This is needed to allow PCI enumerator access functions above 0 in a multifunction device. 1: Pci; - Gpio pin configuration in native mode for each assigned pin RX/TX or RX/TX/CTS/RTS in case of UART depending UartHwFlowCtrl - Device will be enabled in PSF - Only Bar 0 will be enabled 2: Acpi; - Gpio pin configuration in native mode for each assigned pin RX/TX or RX/TX/CTS/RTS in case of UART depending UartHwFlowCtrl - Device will be hidden in PSF and not available to PCI enumerator - Both BARs are enabled, BAR1 becomes devices Pci config Space @note Intel does not provide Windows SerialIo drivers for this mode 3: Hidden; Designated for Kernel Debug and Legacy UART configuartion, might also be used for IO Expander on I2C - Device is placed in D0 - Gpio pin configuration in native mode for each assigned pin RX/TX or RX/TX/CTS/RTS in case of UART depending UartHwFlowCtrl - Device will be hidden in PSF and not available to PCI enumerator - Both BARs are enabled, BAR1 becomes devices Pci config Space - !important! In this mode UART will work in 16550 Legacy 8BIT Mode, it's resources will be assigned to mother board through ACPI (PNP0C02) @note Considering the PcdSerialIoUartDebugEnable and PcdSerialIoUartNumber for all SerialIo UARTx, the PCD is more meaningful to represent the board design. It means, if PcdSerialIoUartDebugEnable is not 0, the board is designed to use the SerialIo UART for debug message and the PcdSerialIoUartNumber is dedicated to be Debug UART usage. Therefore, it should grayout the option from setup menu since no other options available for this UART controller on this board, and also override the policy default accordingly. While PcdSerialIoUartDebugEnable is 0, then it's allowed to configure the UART controller by policy. **/ UINT8 DevMode[PCH_MAX_SERIALIO_CONTROLLERS]; UINT32 DebugUartNumber : 2; ///< UART number for debug purpose. 0:UART0, 1: UART1, 2:UART2 UINT32 EnableDebugUartAfterPost : 1; ///< Enable debug UART controller after post. 0: disabled, 1: enabled UINT32 RsvdBits0 : 29; } SERIAL_IO_HOB; /// /// The PCH_PCIE_CONFIG 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]; /** 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; } PCIERP_HOB; typedef struct { UINT32 DspEnable : 1; ///< DSP enablement: 0: Disable; 1: Enable 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 RsvdBits0 : 26; ///< Reserved bits } HDAUDIO_HOB; 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]; /** This member describes the details of implementation of Intel RST for PCIe Storage remapping (Intel RST Driver is required) **/ PCH_RST_PCIE_STORAGE_CONFIG RstPcieStorageRemap[PCH_MAX_RST_PCIE_STORAGE_CR]; } SATA_HOB; /// /// The SCS_HOB block describes Storage and Communication Subsystem (SCS) settings for PCH. /// typedef struct { UINT32 ScsEmmcEnabled : 2; ///< Determine if eMMC is enabled - 0: Disabled, 1: Enabled. UINT32 ScsEmmcHs400Enabled : 1; ///< Determine eMMC HS400 Mode if ScsEmmcEnabled - 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 ScsEmmcHs400TuningRequired : 1; UINT32 ScsEmmcHs400DllDataValid : 1; ///< Set if HS400 Tuning Data Valid UINT32 ScsEmmcHs400DriverStrength : 3; ///< I/O driver strength: 0 - 33 Ohm, 1 - 40 Ohm, 2 - 50 Ohm UINT32 ScsSdPowerEnableActiveHigh : 1; ///< Sd PWREN# active high UINT32 ScsSdCardEnabled : 1; ///< Sd card enabled UINT32 RsvdBits : 22; } SCS_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 RTC lower and upper 128 byte Lock bits to lock Bytes 38h-3Fh in the upper and lower 128-byte bank of RTC RAM. 0: Disable; 1: Enable. **/ UINT32 RtcMemoryLock : 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 : 28; } 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 SlpS0VmRuntimeControl : 1; /// < SLP_S0 Voltage Margining Runtime Control. 0: Disable; 1: Enable. UINT32 SlpS0Vm070VSupport : 1; /// < SLP_S0 0.70V Voltage Margining Support. 0: Disable; 1: Enable. UINT32 SlpS0Vm075VSupport : 1; /// < SLP_S0 0.75V Voltage Margining Support. 0: Disable; 1: Enable. UINT32 PsOnEnable : 1; /// < Indicates if PS_ON support has been enabled, 0: Disable; 1: Enable. UINT32 RsvdBits1 : 28; } PM_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 bytes } PCH_TRACEHUB_HOB; /** PCH eSPI HOB settings. **/ typedef struct { UINT32 BmeMasterSlaveEnabled : 1; // 0 = BME disable; 1 = BME enable UINT32 RsvdBits : 31; } PCH_ESPI_HOB; /// /// Pch Config Hob /// 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 SCS_HOB Scs; ///< Scs HOB definition CNVI_HOB Cnvi; ///< Cnvi 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 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 } PCH_CONFIG_HOB; #pragma pack (pop) #endif