* [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform
@ 2021-07-13 0:41 Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 01/17] WhitleySiliconPkg: Add DEC and DSC files Nate DeSimone
` (18 more replies)
0 siblings, 19 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
This patch series adds WhitleyOpenBoardPkg and WhitleySiliconPkg
to edk2-platforms. These platforms along with the corresponding
FSP and microcode binaries support the 3rd Generation Xeon
Scalable processors formerly known as IceLake-SP and CooperLake.
There are still some issues to be worked out. WhitleySiliconPkg
has multiple DEC files that need to be mered together. And the
WhitleyOpenBoardPkg DSC files need to be adjusted to conform to
the MinPlatform *OpenBoardPkg guidelines. Additionally, there
are non-standard build flags that replicate functionality
provided by already existing FixedAtBuild PCDs. For example,
FSP_MODE instead of PcdFspModeSelection. These issues will
be addressed in future patch series.
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
Nate DeSimone (17):
WhitleySiliconPkg: Add DEC and DSC files
WhitleySiliconPkg: Add Includes and Libraries
WhitleySiliconPkg: Add Cpu Includes
WhitleySiliconPkg: Add Me Includes
WhitleySiliconPkg: Add PCH Register Includes
WhitleySiliconPkg: Add PCH Includes
WhitleySiliconPkg: Add PCH Libraries
WhitleySiliconPkg: Add Security Includes
WhitleySiliconPkg: Add SiliconPolicyInit
WhitleyOpenBoardPkg: Add Includes and Libraries
WhitleyOpenBoardPkg: Add Platform Modules
WhitleyOpenBoardPkg: Add Feature Modules
WhitleyOpenBoardPkg: Add UBA Modules
WhitleyOpenBoardPkg: Add build scripts and package metadata
Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py
Readme.md: Add WhitleyOpenBoardPkg
Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg
Maintainers.txt | 12 +
Platform/Intel/Readme.md | 14 +
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c | 104 +
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h | 67 +
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf | 70 +
.../CooperCityRvp/build_board.py | 111 +
.../CooperCityRvp/build_config.cfg | 36 +
.../Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c | 704 ++
.../PlatformCpuPolicy/PlatformCpuPolicy.inf | 81 +
.../WhitleyOpenBoardPkg/DynamicExPcd.dsc | 19 +
.../Pci/Dxe/PciHostBridge/PciHostBridge.c | 1634 ++++
.../Pci/Dxe/PciHostBridge/PciHostBridge.h | 300 +
.../Pci/Dxe/PciHostBridge/PciHostBridge.inf | 69 +
.../Dxe/PciHostBridge/PciHostBridgeSupport.c | 127 +
.../Pci/Dxe/PciHostBridge/PciHostResource.h | 62 +
.../Pci/Dxe/PciHostBridge/PciRebalance.c | 1356 +++
.../Pci/Dxe/PciHostBridge/PciRebalance.h | 158 +
.../Pci/Dxe/PciHostBridge/PciRebalanceIo.c | 218 +
.../Dxe/PciHostBridge/PciRebalanceMmio32.c | 163 +
.../Dxe/PciHostBridge/PciRebalanceMmio64.c | 204 +
.../Pci/Dxe/PciHostBridge/PciRootBridge.h | 573 ++
.../Pci/Dxe/PciHostBridge/PciRootBridgeIo.c | 1664 ++++
.../Dxe/PciPlatform/PciIovPlatformPolicy.c | 99 +
.../Dxe/PciPlatform/PciIovPlatformPolicy.h | 53 +
.../Pci/Dxe/PciPlatform/PciPlatform.c | 541 ++
.../Pci/Dxe/PciPlatform/PciPlatform.h | 209 +
.../Pci/Dxe/PciPlatform/PciPlatform.inf | 87 +
.../Pci/Dxe/PciPlatform/PciPlatformHooks.c | 939 ++
.../Pci/Dxe/PciPlatform/PciPlatformHooks.h | 31 +
.../Pci/Dxe/PciPlatform/PciSupportLib.c | 108 +
.../Pci/Dxe/PciPlatform/PciSupportLib.h | 46 +
.../Pei/PlatformVariableInitPei.c | 274 +
.../Pei/PlatformVariableInitPei.h | 41 +
.../Pei/PlatformVariableInitPei.inf | 58 +
.../WhitleyOpenBoardPkg/FspFlashOffsets.fdf | 21 +
.../Include/Dsc/CoreDxeInclude.dsc | 135 +
...blePerformanceMonitoringInfrastructure.dsc | 40 +
.../Include/Dsc/EnableRichDebugMessages.dsc | 50 +
.../Include/Fdf/CommonNvStorageFtwWorking.fdf | 20 +
.../Include/Fdf/CommonSpiFvHeaderInfo.fdf | 24 +
...anceMonitoringInfrastructurePostMemory.fdf | 14 +
...manceMonitoringInfrastructurePreMemory.fdf | 11 +
.../Include/Fdf/NvStorage512K.fdf | 46 +
.../Include/GpioInitData.h | 26 +
.../Include/Guid/PlatformVariableCommon.h | 33 +
.../Include/Guid/SetupVariable.h | 720 ++
.../Include/Guid/UbaCfgHob.h | 74 +
.../WhitleyOpenBoardPkg/Include/IoApic.h | 23 +
.../Include/Library/MultiPlatSupportLib.h | 67 +
.../Include/Library/PeiPlatformHooklib.h | 17 +
.../Include/Library/PlatformClocksLib.h | 87 +
.../Include/Library/PlatformOpromPolicyLib.h | 83 +
.../Library/PlatformSetupVariableSyncLib.h | 60 +
.../Include/Library/PlatformVariableHookLib.h | 47 +
.../Include/Library/ReadFfsLib.h | 58 +
.../Include/Library/SetupLib.h | 134 +
.../Include/Library/UbaAcpiUpdateLib.h | 38 +
.../Include/Library/UbaBoardSioInfoLib.h | 47 +
.../Include/Library/UbaClkGenUpdateLib.h | 49 +
.../Include/Library/UbaClocksConfigLib.h | 51 +
.../Include/Library/UbaGpioInitLib.h | 26 +
.../Include/Library/UbaGpioPlatformConfig.h | 259 +
.../Include/Library/UbaGpioUpdateLib.h | 51 +
.../Library/UbaHsioPtssTableConfigLib.h | 52 +
.../Include/Library/UbaIioConfigLib.h | 227 +
.../Library/UbaIioPortBifurcationInitLib.h | 47 +
.../Include/Library/UbaOpromUpdateLib.h | 115 +
.../Include/Library/UbaPcdUpdateLib.h | 44 +
.../Include/Library/UbaPchEarlyUpdateLib.h | 63 +
.../Library/UbaPcieBifurcationUpdateLib.h | 130 +
.../Include/Library/UbaPlatLib.h | 25 +
.../Include/Library/UbaSlotUpdateLib.h | 124 +
.../Include/Library/UbaSoftStrapUpdateLib.h | 57 +
.../Include/Library/UbaSystemBoardInfoLib.h | 36 +
.../Library/UbaSystemConfigUpdateLib.h | 42 +
.../Include/Library/UbaUsbOcUpdateLib.h | 51 +
.../Include/OnboardNicStructs.h | 98 +
.../Include/PchSetupVariable.h | 10 +
.../Include/PchSetupVariableLbg.h | 372 +
.../WhitleyOpenBoardPkg/Include/PlatDevData.h | 183 +
.../Include/PlatPirqData.h | 36 +
.../Include/Ppi/ExReportStatusCodeHandler.h | 38 +
.../Include/Ppi/SmbusPolicy.h | 29 +
.../Include/Ppi/UbaCfgDb.h | 144 +
.../Include/Protocol/LegacyBios.h | 1550 +++
.../Include/Protocol/LegacyBiosPlatform.h | 752 ++
.../Include/Protocol/PciIovPlatform.h | 72 +
.../Include/Protocol/PlatformType.h | 48 +
.../Include/Protocol/UbaCfgDb.h | 114 +
.../Include/Protocol/UbaDevsUpdateProtocol.h | 86 +
.../Include/Protocol/UbaMakerProtocol.h | 22 +
.../WhitleyOpenBoardPkg/Include/SetupTable.h | 25 +
.../WhitleyOpenBoardPkg/Include/SioRegs.h | 251 +
.../WhitleyOpenBoardPkg/Include/SystemBoard.h | 75 +
.../WhitleyOpenBoardPkg/Include/UbaKti.h | 29 +
.../BoardAcpiLib/DxeBoardAcpiTableLib.c | 37 +
.../BoardAcpiLib/DxeBoardAcpiTableLib.inf | 44 +
.../BoardAcpiLib/DxeMtOlympusAcpiTableLib.c | 54 +
.../BoardAcpiLib/SmmBoardAcpiEnableLib.c | 51 +
.../BoardAcpiLib/SmmBoardAcpiEnableLib.inf | 48 +
.../BoardAcpiLib/SmmSiliconAcpiEnableLib.c | 138 +
.../Library/BoardInitLib/BoardInitDxeLib.c | 299 +
.../Library/BoardInitLib/BoardInitDxeLib.inf | 72 +
.../Library/BoardInitLib/BoardInitDxeLib.uni | 29 +
.../Library/BoardInitLib/BoardInitPreMemLib.c | 450 +
.../BoardInitLib/BoardInitPreMemLib.inf | 66 +
.../MultiPlatSupportLib/MultiPlatSupport.h | 48 +
.../MultiPlatSupportLib/MultiPlatSupportLib.c | 255 +
.../MultiPlatSupportLib.inf | 49 +
.../FspWrapperHobProcessLib.c | 722 ++
.../PeiFspWrapperHobProcessLib.inf | 99 +
.../PeiPlatformHookLib/PeiPlatformHooklib.c | 43 +
.../PeiPlatformHookLib/PeiPlatformHooklib.inf | 34 +
.../Library/PeiReportFvLib/PeiReportFvLib.c | 270 +
.../Library/PeiReportFvLib/PeiReportFvLib.inf | 65 +
.../PeiUbaGpioPlatformConfigLib.c | 518 +
.../Library/PeiUbaPlatLib/PeiUbaPlatLib.inf | 60 +
.../PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c | 61 +
.../PeiUbaPlatLib/UbaBoardSioInfoLib.c | 54 +
.../PeiUbaPlatLib/UbaClkGenUpdateLib.c | 134 +
.../PeiUbaPlatLib/UbaClocksConfigLib.c | 59 +
.../Library/PeiUbaPlatLib/UbaGpioUpdateLib.c | 68 +
.../PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c | 58 +
.../PeiUbaPlatLib/UbaIioConfigLibPei.c | 219 +
.../UbaIioPortBifurcationInitLib.c | 55 +
.../Library/PeiUbaPlatLib/UbaPcdUpdateLib.c | 69 +
.../PeiUbaPlatLib/UbaPchEarlyUpdateLib.c | 108 +
.../PeiUbaPlatLib/UbaPchPcieBifurcationLib.c | 57 +
.../PeiUbaPlatLib/UbaSlotUpdateLibPei.c | 156 +
.../PeiUbaPlatLib/UbaSoftStrapUpdateLib.c | 95 +
.../PlatformClocksLib/Pei/PlatformClocksLib.c | 347 +
.../Pei/PlatformClocksLib.inf | 40 +
.../PlatformCmosAccessLib.c | 73 +
.../PlatformCmosAccessLib.inf | 45 +
.../Library/PlatformHooksLib/PlatformHooks.c | 203 +
.../PlatformHooksLib/PlatformHooksLib.inf | 28 +
.../PlatformOpromPolicyLibNull.c | 88 +
.../PlatformOpromPolicyLibNull.inf | 29 +
.../PlatformSetupVariableSyncLibNull.c | 81 +
.../PlatformSetupVariableSyncLibNull.inf | 28 +
.../PlatformVariableHookLibNull.c | 55 +
.../PlatformVariableHookLibNull.inf | 24 +
.../Library/ReadFfsLib/ReadFfsLib.c | 446 +
.../Library/ReadFfsLib/ReadFfsLib.inf | 34 +
.../Library/SerialPortLib/Ns16550.h | 46 +
.../Library/SerialPortLib/SerialPortLib.c | 1023 ++
.../Library/SerialPortLib/SerialPortLib.inf | 55 +
.../Library/SetCacheMtrrLib/SetCacheMtrrLib.c | 867 ++
.../SetCacheMtrrLib/SetCacheMtrrLib.inf | 55 +
.../PchPolicyUpdateUsb.c | 152 +
.../SiliconPolicyUpdateLib.c | 778 ++
.../SiliconPolicyUpdateLib.inf | 64 +
.../SiliconPolicyUpdateLibFsp.c | 770 ++
.../SiliconPolicyUpdateLibFsp.inf | 68 +
.../SmmSpiFlashCommonLib.inf | 57 +
.../SmmSpiFlashCommonLib/SpiFlashCommon.c | 237 +
.../SpiFlashCommonSmmLib.c | 55 +
.../DxeTcg2PhysicalPresenceLib.c | 41 +
.../DxeTcg2PhysicalPresenceLib.inf | 29 +
.../Library/UbaGpioInitLib/UbaGpioInitLib.c | 145 +
.../Library/UbaGpioInitLib/UbaGpioInitLib.inf | 46 +
.../Dxe/PlatformType/PlatformType.inf | 58 +
.../Platform/Dxe/PlatformType/PlatformTypes.c | 364 +
.../Platform/Dxe/PlatformType/PlatformTypes.h | 58 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.c | 157 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.h | 40 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.inf | 52 +
.../Platform/Pei/DummyPchSpi/DummyPchSpi.inf | 43 +
.../Platform/Pei/DummyPchSpi/PchSpi.c | 383 +
.../EmulationPlatformInit.c | 124 +
.../EmulationPlatformInit.inf | 46 +
.../Platform/Pei/PlatformInfo/PlatformInfo.c | 761 ++
.../Platform/Pei/PlatformInfo/PlatformInfo.h | 89 +
.../Pei/PlatformInfo/PlatformInfo.inf | 63 +
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.dec | 781 ++
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc | 931 ++
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf | 827 ++
.../WhitleyOpenBoardPkg/PlatformPkgConfig.dsc | 45 +
.../WhitleyOpenBoardPkg/StructurePcd.dsc | 8553 +++++++++++++++++
.../WhitleyOpenBoardPkg/StructurePcdCpx.dsc | 3796 ++++++++
.../Uba/BoardInit/Dxe/BoardInitDxe.c | 87 +
.../Uba/BoardInit/Dxe/BoardInitDxe.h | 30 +
.../Uba/BoardInit/Dxe/BoardInitDxe.inf | 70 +
.../Uba/BoardInit/Pei/BoardInitPei.c | 48 +
.../Uba/BoardInit/Pei/BoardInitPei.h | 20 +
.../Uba/BoardInit/Pei/BoardInitPei.inf | 55 +
.../Uba/CfgDb/Dxe/CfgDbDxe.c | 518 +
.../Uba/CfgDb/Dxe/CfgDbDxe.h | 32 +
.../Uba/CfgDb/Dxe/CfgDbDxe.inf | 54 +
.../Uba/CfgDb/Pei/CfgDbPei.c | 803 ++
.../Uba/CfgDb/Pei/CfgDbPei.h | 33 +
.../Uba/CfgDb/Pei/CfgDbPei.inf | 54 +
.../WhitleyOpenBoardPkg/Uba/UbaCommon.dsc | 29 +
.../WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf | 16 +
.../Uba/UbaDxeRpBoards.fdf | 22 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.c | 206 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.h | 33 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.inf | 45 +
.../SystemConfigUpdateDxe.c | 94 +
.../SystemConfigUpdateDxe.h | 30 +
.../SystemConfigUpdateDxe.inf | 48 +
.../Uba/UbaMain/Common/Pei/BoardInfo.c | 69 +
.../Uba/UbaMain/Common/Pei/Clockgen.c | 27 +
.../Uba/UbaMain/Common/Pei/ClocksConfig.c | 177 +
.../UbaMain/Common/Pei/GpioPlatformConfig.c | 166 +
.../UbaMain/Common/Pei/HsioPtssTableConfig.c | 460 +
.../Common/Pei/IioBifurcationSlotTable.h | 156 +
.../UbaMain/Common/Pei/IioPortBifurcation.c | 913 ++
.../Common/Pei/IioPortBifurcationVer1.c | 1356 +++
.../UbaMain/Common/Pei/PchHsioPtssTables.h | 51 +
.../Common/Pei/PchLbgHsioPtssTablesBx.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesBx.h | 18 +
.../Common/Pei/PchLbgHsioPtssTablesBx_Ext.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesBx_Ext.h | 20 +
.../Common/Pei/PchLbgHsioPtssTablesSx.c | 27 +
.../Common/Pei/PchLbgHsioPtssTablesSx.h | 21 +
.../Common/Pei/PchLbgHsioPtssTablesSx_Ext.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesSx_Ext.h | 21 +
.../Common/Pei/PeiCommonBoardInitLib.c | 75 +
.../Common/Pei/PeiCommonBoardInitLib.h | 55 +
.../Common/Pei/PeiCommonBoardInitLib.inf | 76 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 107 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 161 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 48 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 108 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
.../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 48 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 124 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
.../TypeCooperCityRP/Pei/AcpiTablePcds.c | 51 +
.../UbaMain/TypeCooperCityRP/Pei/GpioTable.c | 297 +
.../TypeCooperCityRP/Pei/IioBifurInit.c | 393 +
.../UbaMain/TypeCooperCityRP/Pei/KtiEparam.c | 241 +
.../UbaMain/TypeCooperCityRP/Pei/PcdData.c | 259 +
.../TypeCooperCityRP/Pei/PchEarlyUpdate.c | 81 +
.../TypeCooperCityRP/Pei/PeiBoardInit.h | 96 +
.../TypeCooperCityRP/Pei/PeiBoardInitLib.c | 224 +
.../TypeCooperCityRP/Pei/PeiBoardInitLib.inf | 163 +
.../UbaMain/TypeCooperCityRP/Pei/SlotTable.c | 164 +
.../TypeCooperCityRP/Pei/SoftStrapFixup.c | 110 +
.../Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c | 123 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 99 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 118 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 47 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 115 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
.../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 47 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 127 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
.../TypeWilsonCityRP/Pei/AcpiTablePcds.c | 53 +
.../UbaMain/TypeWilsonCityRP/Pei/GpioTable.c | 287 +
.../TypeWilsonCityRP/Pei/IioBifurInit.c | 387 +
.../UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c | 107 +
.../UbaMain/TypeWilsonCityRP/Pei/PcdData.c | 274 +
.../TypeWilsonCityRP/Pei/PchEarlyUpdate.c | 92 +
.../TypeWilsonCityRP/Pei/PeiBoardInit.h | 77 +
.../TypeWilsonCityRP/Pei/PeiBoardInitLib.c | 156 +
.../TypeWilsonCityRP/Pei/PeiBoardInitLib.inf | 166 +
.../UbaMain/TypeWilsonCityRP/Pei/SlotTable.c | 171 +
.../TypeWilsonCityRP/Pei/SoftStrapFixup.c | 120 +
.../Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c | 126 +
.../Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf | 24 +
.../WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc | 44 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c | 43 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h | 20 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf | 50 +
.../ExSerialStatusCodeWorker.c | 194 +
.../ExStatusCodeHandlerPei.c | 111 +
.../ExStatusCodeHandlerPei.h | 85 +
.../ExStatusCodeHandlerPei.inf | 61 +
.../ExReportStatusCodeRouterPei.c | 301 +
.../ExReportStatusCodeRouterPei.h | 104 +
.../ExReportStatusCodeRouterPei.inf | 51 +
.../PeiInterposerToSvidMap.c | 136 +
.../PeiInterposerToSvidMap.inf | 53 +
.../WilsonCityRvp/build_board.py | 111 +
.../WilsonCityRvp/build_config.cfg | 36 +
Platform/Intel/build.cfg | 2 +
Platform/Intel/build_bios.py | 28 +-
Readme.md | 2 +
Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec | 541 ++
.../Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec | 101 +
.../Cpu/Include/CpuDataStruct.h | 27 +
.../Cpu/Include/CpuPolicyPeiDxeCommon.h | 58 +
.../Cpu/Include/Guid/CpuNvramData.h | 34 +
.../Cpu/Include/Library/CpuConfigLib.h | 30 +
.../Cpu/Include/Library/CpuEarlyDataLib.h | 41 +
.../Cpu/Include/Library/CpuPpmLib.h | 16 +
.../Cpu/Include/PpmPolicyPeiDxeCommon.h | 320 +
.../Cpu/Include/ProcessorPpmSetup.h | 14 +
.../Cpu/Include/Protocol/CpuPolicyProtocol.h | 31 +
.../Cpu/Include/Protocol/PpmPolicyProtocol.h | 16 +
.../Include/BackCompatible.h | 19 +
.../Include/ConfigBlock/TraceHubConfig.h | 65 +
.../Include/ConfigBlock/Usb2PhyConfig.h | 63 +
.../Include/ConfigBlock/UsbConfig.h | 85 +
.../WhitleySiliconPkg/Include/Cpu/CpuIds.h | 18 +
.../Include/CpuAndRevisionDefines.h | 283 +
.../Include/EmulationConfiguration.h | 22 +
.../Intel/WhitleySiliconPkg/Include/Fpga.h | 17 +
.../WhitleySiliconPkg/Include/GpioConfig.h | 288 +
.../Include/Guid/EmulationDfxVariable.h | 25 +
.../Include/Guid/FpgaSocketVariable.h | 39 +
.../Include/Guid/MemBootHealthGuid.h | 71 +
.../Include/Guid/MemoryMapData.h | 197 +
.../Include/Guid/PartialMirrorGuid.h | 61 +
.../Include/Guid/PlatformInfo.h | 150 +
.../Guid/SiliconPolicyInitLibInterface.h | 78 +
.../Include/Guid/SocketCommonRcVariable.h | 57 +
.../Include/Guid/SocketIioVariable.h | 444 +
.../Include/Guid/SocketMemoryVariable.h | 477 +
.../Include/Guid/SocketMpLinkVariable.h | 320 +
.../Include/Guid/SocketPciResourceData.h | 60 +
.../Guid/SocketPowermanagementVariable.h | 300 +
.../Guid/SocketProcessorCoreVariable.h | 143 +
.../Include/Guid/SocketVariable.h | 36 +
.../Include/Guid/StatusCodeDataTypeExDebug.h | 50 +
.../WhitleySiliconPkg/Include/IioConfig.h | 398 +
.../Include/IioPlatformData.h | 204 +
.../Intel/WhitleySiliconPkg/Include/IioRegs.h | 179 +
.../Include/IioSetupDefinitions.h | 60 +
.../Include/IioUniversalData.h | 166 +
.../WhitleySiliconPkg/Include/ImonVrSvid.h | 26 +
.../Include/KtiSetupDefinitions.h | 22 +
.../Include/Library/CompressedVariableLib.h | 35 +
.../Library/EmulationConfigurationLib.h | 34 +
.../Include/Library/MemTypeLib.h | 32 +
.../Include/Library/MemVrSvidMapLib.h | 66 +
.../Include/Library/PchInfoLib.h | 22 +
.../Include/Library/PlatformHooksLib.h | 17 +
.../Include/Library/SemaphoreLib.h | 326 +
.../Intel/WhitleySiliconPkg/Include/MaxCore.h | 20 +
.../WhitleySiliconPkg/Include/MaxSocket.h | 20 +
.../WhitleySiliconPkg/Include/MaxThread.h | 20 +
.../WhitleySiliconPkg/Include/MemCommon.h | 41 +
.../Include/Memory/Ddr4SpdRegisters.h | 38 +
.../Include/Memory/ProcSmbChipCommon.h | 28 +
.../WhitleySiliconPkg/Include/Platform.h | 266 +
.../Include/PlatformInfoTypes.h | 106 +
.../Include/Ppi/DynamicSiLibraryPpi.h | 474 +
.../Include/Ppi/MemoryPolicyPpi.h | 2112 ++++
.../Include/Ppi/RasImcS3Data.h | 53 +
.../Include/Ppi/UpiPolicyPpi.h | 39 +
.../Protocol/DynamicSiLibraryProtocol.h | 252 +
.../Protocol/DynamicSiLibrarySmmProtocol.h | 60 +
.../Include/Protocol/GlobalNvsArea.h | 212 +
.../Include/Protocol/IioUds.h | 47 +
.../Include/Protocol/PciCallback.h | 85 +
.../WhitleySiliconPkg/Include/RcVersion.h | 23 +
.../Include/ScratchpadList.h | 49 +
.../Include/SiliconUpdUpdate.h | 53 +
.../WhitleySiliconPkg/Include/SystemInfoVar.h | 93 +
.../Include/UncoreCommonIncludes.h | 111 +
.../WhitleySiliconPkg/Include/Upi/KtiDisc.h | 36 +
.../WhitleySiliconPkg/Include/Upi/KtiHost.h | 304 +
.../WhitleySiliconPkg/Include/Upi/KtiSi.h | 32 +
.../Include/UsraAccessType.h | 291 +
.../Core/Include/DataTypes.h | 36 +
.../BaseMemoryCoreLib/Core/Include/MemHost.h | 1051 ++
.../Core/Include/MemHostChipCommon.h | 190 +
.../BaseMemoryCoreLib/Core/Include/MemRegs.h | 25 +
.../Core/Include/MrcCommonTypes.h | 28 +
.../Core/Include/NGNDimmPlatformCfgData.h | 22 +
.../BaseMemoryCoreLib/Core/Include/SysHost.h | 193 +
.../Core/Include/SysHostChipCommon.h | 101 +
.../BaseMemoryCoreLib/Platform/MemDefaults.h | 28 +
.../BaseMemoryCoreLib/Platform/PlatformHost.h | 35 +
.../FspWrapperPlatformLib.c | 243 +
.../FspWrapperPlatformLib.inf | 71 +
.../Library/SetupLib/PeiSetupLib.c | 259 +
.../Library/SetupLib/PeiSetupLib.inf | 55 +
.../Library/SetupLib/SetupLib.c | 253 +
.../Library/SetupLib/SetupLib.inf | 59 +
.../Library/SetupLib/SetupLibNull.c | 159 +
.../Library/SetupLib/SetupLibNull.inf | 46 +
.../SiliconPolicyInitLibShim.c | 104 +
.../SiliconPolicyInitLibShim.inf | 38 +
.../SiliconWorkaroundLibNull.c | 38 +
.../SiliconWorkaroundLibNull.inf | 50 +
.../Me/MeSps.4/Include/Library/SpsPeiLib.h | 22 +
.../WhitleySiliconPkg/MrcCommonConfig.dsc | 71 +
.../SouthClusterLbg/Include/GpioPinsSklH.h | 300 +
.../SouthClusterLbg/Include/Library/GpioLib.h | 1016 ++
.../Include/Library/PchMultiPchBase.h | 37 +
.../Include/Library/PchPcieRpLib.h | 145 +
.../Pch/SouthClusterLbg/Include/PchAccess.h | 629 ++
.../Pch/SouthClusterLbg/Include/PchLimits.h | 108 +
.../SouthClusterLbg/Include/PchPolicyCommon.h | 2161 +++++
.../Include/PchReservedResources.h | 82 +
.../Pch/SouthClusterLbg/Include/PcieRegs.h | 288 +
.../Include/Ppi/PchHsioPtssTable.h | 31 +
.../Include/Ppi/PchPcieDeviceTable.h | 126 +
.../SouthClusterLbg/Include/Ppi/PchPolicy.h | 23 +
.../SouthClusterLbg/Include/Ppi/PchReset.h | 95 +
.../Pch/SouthClusterLbg/Include/Ppi/Spi.h | 28 +
.../Include/Private/Library/PchSpiCommonLib.h | 458 +
.../Include/Protocol/PchReset.h | 114 +
.../SouthClusterLbg/Include/Protocol/Spi.h | 305 +
.../Include/Register/PchRegsDci.h | 44 +
.../Include/Register/PchRegsDmi.h | 302 +
.../Include/Register/PchRegsEva.h | 124 +
.../Include/Register/PchRegsFia.h | 106 +
.../Include/Register/PchRegsGpio.h | 531 +
.../Include/Register/PchRegsHda.h | 271 +
.../Include/Register/PchRegsHsio.h | 190 +
.../Include/Register/PchRegsItss.h | 90 +
.../Include/Register/PchRegsLan.h | 156 +
.../Include/Register/PchRegsLpc.h | 490 +
.../Include/Register/PchRegsP2sb.h | 132 +
.../Include/Register/PchRegsPcie.h | 620 ++
.../Include/Register/PchRegsPcr.h | 177 +
.../Include/Register/PchRegsPmc.h | 731 ++
.../Include/Register/PchRegsPsf.h | 304 +
.../Include/Register/PchRegsPsth.h | 66 +
.../Include/Register/PchRegsSata.h | 713 ++
.../Include/Register/PchRegsSmbus.h | 157 +
.../Include/Register/PchRegsSpi.h | 354 +
.../Include/Register/PchRegsThermal.h | 113 +
.../Include/Register/PchRegsTraceHub.h | 147 +
.../Include/Register/PchRegsUsb.h | 529 +
.../Library/PeiDxeSmmGpioLib/GpioLibrary.h | 224 +
.../Product/Whitley/SiliconPkg10nmPcds.dsc | 99 +
.../SecurityIp/SecurityIpMkTme1v0_Inputs.h | 25 +
.../SecurityIp/SecurityIpMkTme1v0_Outputs.h | 18 +
.../SecurityIp/SecurityIpSgxTem1v0_Inputs.h | 39 +
.../SecurityIp/SecurityIpSgxTem1v0_Outputs.h | 22 +
.../Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h | 13 +
.../SecurityIp/SecurityIpTdx1v0_Outputs.h | 11 +
.../Include/Guid/SecurityPolicy_Flat.h | 22 +
.../Intel/WhitleySiliconPkg/SiliconPkg.dec | 1004 ++
.../SiliconPolicyInit/SiliconPolicyInitLate.c | 52 +
.../SiliconPolicyInitLate.inf | 49 +
.../SiliconPolicyInitPreAndPostMem.c | 63 +
.../SiliconPolicyInitPreAndPostMem.inf | 48 +
.../WhitleySiliconPkg/WhitleySiliconPkg.dec | 65 +
437 files changed, 86801 insertions(+), 12 deletions(-)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
create mode 100644 Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Platform.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec
--
2.27.0.windows.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 01/17] WhitleySiliconPkg: Add DEC and DSC files
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 02/17] WhitleySiliconPkg: Add Includes and Libraries Nate DeSimone
` (17 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec | 541 +++++++++
.../WhitleySiliconPkg/MrcCommonConfig.dsc | 71 ++
.../Product/Whitley/SiliconPkg10nmPcds.dsc | 99 ++
.../Intel/WhitleySiliconPkg/SiliconPkg.dec | 1004 +++++++++++++++++
.../WhitleySiliconPkg/WhitleySiliconPkg.dec | 65 ++
5 files changed, 1780 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec
diff --git a/Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec b/Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec
new file mode 100644
index 0000000000..91eace9aa0
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec
@@ -0,0 +1,541 @@
+## @file
+#
+# @copyright
+# Copyright 2015 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ DEC_SPECIFICATION = 0x00010005
+ PACKAGE_NAME = CpRcPkg
+ PACKAGE_GUID = 7DE2B07E-0E4A-4eba-B7B6-CE1E8D2B8408
+ PACKAGE_VERSION = 0.1
+
+[Includes]
+ Include
+ #
+ # Over time these will be removed as definitions are moved
+ # out of BaseMemoryCoreLib and into the standard Include directory
+ #
+
+ Library/BaseMemoryCoreLib/Core
+ Library/BaseMemoryCoreLib/Core/Include
+ Library/BaseMemoryCoreLib/Platform
+
+[Guids]
+
+ ## Include/Guid/MemBootHealthGuid.h
+ gMemBootHealthGuid = { 0xACD56900, 0xDEFC, 0x4127, { 0xDE, 0x12, 0x32, 0xA0, 0xD2, 0x69, 0x46, 0x2F }}
+
+ ## Include/Guid/CpRcPkgTokenSpace.h
+ gEfiCpRcPkgTokenSpaceGuid = { 0xfcdd2efc, 0x6ca8, 0x4d0b, { 0x9d, 0x0, 0x6f, 0x9c, 0xfa, 0x57, 0x8f, 0x98 }}
+ gSystemInfoVarHobGuid = { 0x7650A0F2, 0x0D91, 0x4B0C, { 0x92, 0x3B, 0xBD, 0xCF, 0x22, 0xD1, 0x64, 0x35 }}
+ gReferenceCodePolicyHobGuid = { 0x5AC718A1, 0xFBA0, 0x4F5F, { 0xAF, 0x9F, 0x20, 0x4A, 0x1A, 0xF6, 0x15, 0x32 }}
+
+ ## Include/SystemInfoVar.h
+ gEfiSysInfoVarNvramDataGuid = { 0x0E5AD476, 0xE47D, 0x4E50, { 0xAE, 0x9D, 0x38, 0xDF, 0xE2, 0x71, 0x67, 0x96 }}
+ gStatusCodeDataTypeExDebugGuid = { 0x7859daa2, 0x926e, 0x4b01, { 0x85, 0x86, 0xc6, 0x2d, 0x45, 0x64, 0x21, 0xd2 }}
+ gDebugDataGuid = { 0xED585D92, 0x8F3D, 0x43E3, { 0xB7, 0x8D, 0xD1, 0xB8, 0xF9, 0x05, 0x7F, 0xCE }}
+ gPerfStatsGuid = { 0x83f6e752, 0xd9ae, 0x48eb, { 0xab, 0xd4, 0xb5, 0xe9, 0x84, 0x63, 0x60, 0x68 }}
+
+ ## Include/Guid/RcSimGlobalDataHob.h
+ gEfiRcSimGlobalDataHobGuid = { 0x25a4a61a, 0x5a6d, 0x429e, { 0x99, 0x2b, 0xbe, 0xeb, 0x8a, 0xbd, 0xd8, 0x40 }}
+
+ # OnBoardSPD library
+ gOnBoardSpdTableGuid = { 0xe15c5c55, 0x09ec, 0x4a95, { 0xa3, 0x5a, 0x1e, 0x72, 0xa3, 0x2c, 0x4f, 0x0f }}
+ gSpdTableHobGuid = { 0x429E8B23, 0xB8B1, 0x4208, { 0x96, 0xAA, 0x51, 0x5A, 0x11, 0x62, 0x80, 0x40 }}
+
+ ## Include/Guid/FspInfo.h
+ gFspInfoHobGuid = { 0x4a7bd124, 0xcbea, 0x4b3b, { 0x95, 0x86, 0x11, 0xe6, 0x68, 0xe9, 0xbc, 0xdd }}
+
+ gEfiMemoryConfigDataGuid = { 0x80dbd530, 0xb74c, 0x4f11, { 0x8c, 0x03, 0x41, 0x86, 0x65, 0x53, 0x28, 0x31 }}
+
+ gMemRasS3DataVariableGuid = { 0xe626f9ca, 0xfd71, 0x458c, { 0xb9, 0x26, 0xbf, 0x40, 0x80, 0x62, 0x42, 0xa9 }}
+
+ gStaticPointerSmmSizeGuid = { 0xd0ee5959, 0xbae6, 0x4709, { 0xaa, 0x2b, 0x55, 0xbe, 0x90, 0x57, 0x65, 0x6d }}
+
+ # Enhanced Warning Log (EWL) BDAT schema Guid
+ gEwlBdatSchemaGuid = { 0xbffe532f, 0xca3b, 0x416c, { 0xa0, 0xf6, 0xff, 0xe4, 0xe7, 0x1e, 0x3a, 0xd }}
+
+ # Memory SPD Raw data BDAT schema Guid
+ gSpdBdatSchemaGuid = { 0x1b19f809, 0x1d91, 0x4f00, { 0xa3, 0xf3, 0x7a, 0x67, 0x66, 0x6, 0xd3, 0xb1 }}
+
+ # Memory SPD Raw data version ID Guid
+ gSpdVersion1Guid = { 0x46f60b90, 0x9c94, 0x43ca, { 0xa7, 0x7c, 0x9, 0xb8, 0x48, 0x99, 0x93, 0x48 }}
+
+ # Memory SPD data variable
+ gSpdVariableGuid = { 0x1f5d405b, 0x9b66, 0x4336, { 0x85, 0xe9, 0x52, 0xb4, 0xee, 0x6a, 0xca, 0x51 }}
+
+ # Memory training data BDAT schema Guid
+ gMemTrainingDataBdatSchemaGuid = { 0x27aab341, 0x5ef9, 0x4383, { 0xae, 0x4d, 0x9, 0x12, 0x41, 0xb2, 0xfa, 0xc }}
+
+ # Memory training data version ID Guid
+ gMemTrainingDataVersion1Guid = { 0x37e839b5, 0x4357, 0x47d9, { 0xa1, 0x3f, 0x6f, 0x9a, 0x43, 0x33, 0xfb, 0xc4 }}
+
+ # Memory training data HOB Guid
+ gMemTrainingDataHobGuid = { 0x7e8b89e2, 0x8b84, 0x4cb3, { 0x86, 0x8f, 0x10, 0xb6, 0x78, 0x71, 0xa2, 0xc0 }}
+
+ #
+ # Guid for the BiosId file, used only for RcSim
+ #
+ gRcSimBiosIdFileGuid = { 0xf0c51ad5, 0x44f0, 0x4622, { 0x95, 0x15, 0xe2, 0x7, 0x71, 0xf0, 0xe0, 0xf2 }}
+ gSystemTopologyGuid = { 0x743e5992, 0xf2a0, 0x4c9f, { 0xa5, 0xf5, 0x3b, 0x24, 0xad, 0xe8, 0x7f, 0x4d }}
+
+[PPIs]
+ ## Include/Ppi/MemorySetupPolicyPpi.h
+ gMemoryPolicyPpiGuid = { 0x731b6dbc, 0x18ac, 0x4cc3, { 0x9e, 0xe2, 0x9e, 0x5f, 0x33, 0x39, 0x68, 0x81 }}
+
+[PcdsFeatureFlag]
+ ## Indicate whether USRA can support S3
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraSupportS3|TRUE|BOOLEAN|0x00000012
+
+ ## Use this feature PCD to support Single PCIe segment with static MMCFG Base
+ gEfiCpRcPkgTokenSpaceGuid.PcdSingleSegFixMmcfg|FALSE|BOOLEAN|0x00000014
+
+ ## enable/disable USRA trace.
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraTraceEnable|FALSE|BOOLEAN|0x00000016
+
+ ## enable/disable Quiesce feature.
+ gEfiCpRcPkgTokenSpaceGuid.PcdQuiesceSupport|TRUE|BOOLEAN|0x00000017
+
+ ## Enable / disable CTE build feature.
+ gEfiCpRcPkgTokenSpaceGuid.PcdCteBuild|FALSE|BOOLEAN|0x0000001C
+
+ ## Enable / disable COSIM build feature.
+ gEfiCpRcPkgTokenSpaceGuid.PcdCosimBuild|FALSE|BOOLEAN|0x0000001D
+
+ ## Enable / disable DDRT2 buffer build
+ gEfiCpRcPkgTokenSpaceGuid.PcdDdrt2BufferlessBuild|FALSE|BOOLEAN|0x0000004F
+
+ # Backside Rank Margin Tool
+ gEfiCpRcPkgTokenSpaceGuid.EnableBacksideRmt|FALSE|BOOLEAN|0x0000001F
+ # Backside Command Rank Margin Tool
+ gEfiCpRcPkgTokenSpaceGuid.EnableBacksideCmdRmt|FALSE|BOOLEAN|0x00000030
+ # RMT Pattern Length
+ gEfiCpRcPkgTokenSpaceGuid.RmtPatternLengthCmd|32767|UINT32|0x00000031
+ gEfiCpRcPkgTokenSpaceGuid.RmtPatternLengthExtCmdCtlVref|32767|UINT32|0x00000032
+ gEfiCpRcPkgTokenSpaceGuid.PcdEnableNgnBcomMargining|FALSE|BOOLEAN|0x00000033
+ #Enable per bit margining
+ gEfiCpRcPkgTokenSpaceGuid.PerBitMargin|TRUE|BOOLEAN|0x00000034
+ ## Enable / disable MRS STACKING in the CPGC
+ gEfiCpRcPkgTokenSpaceGuid.MrsStackingDdr|FALSE|BOOLEAN|0x00000037
+ gEfiCpRcPkgTokenSpaceGuid.MrsStackingDdrt|FALSE|BOOLEAN|0x00000038
+ gEfiCpRcPkgTokenSpaceGuid.MrsStackingNvdimm|FALSE|BOOLEAN|0x00000039
+ # Use this PCD to control if separate CWL_adj calculation for 14nm and 10nm
+ gEfiCpRcPkgTokenSpaceGuid.PcdSeparateCwlAdj|FALSE|BOOLEAN|0x0000003B
+
+ ## Enable / disable USRA register filter. For Sim and SMM.
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraRegisterFilterEnable|TRUE|BOOLEAN|0x0000002D
+ ## Enable / disable USRA register log.
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraRegisterLogEnable|TRUE|BOOLEAN|0x0000002E
+
+ ## Enable / disable override of debug levels during MRC call table execution
+ gEfiCpRcPkgTokenSpaceGuid.PcdDebugLevelsOverride|TRUE|BOOLEAN|0x00000050
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved1|TRUE|BOOLEAN|0x00000051
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved2|FALSE|BOOLEAN|0x0000011c
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved3|FALSE|BOOLEAN|0x0000011d
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved4|FALSE|BOOLEAN|0x0000011e
+
+ gEfiCpRcPkgTokenSpaceGuid.Reserved15|FALSE|BOOLEAN|0x00000052
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved5|TRUE|BOOLEAN|0x00000053
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved6|FALSE|BOOLEAN|0x00000054
+
+ #Enable\Disable Mem Boot Health Feature
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemBootHealthFeatureSupported|TRUE|BOOLEAN|0x00000055
+ #Control Opportunistic Self Refresh(OSR) feature.
+ #PCD hides\shows the OSR Setup knob based on setting
+ #default disabled
+ gEfiCpRcPkgTokenSpaceGuid.PcdOpportunisticSelfRefreshSupported|FALSE|BOOLEAN|0x00000115
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdDprSizeFeatureSupport|FALSE|BOOLEAN|0x00000056
+
+ #SecurityPolicy
+ gSecurityPolicyDataGuid.PcdCoSignEnable|FALSE|BOOLEAN|0xE000002F
+
+[PcdsFixedAtBuild]
+ #
+ # MRC build time configuration PCD's
+ #
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugTurnarounds|FALSE|BOOLEAN|0x00000100
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugPerformanceStats|FALSE|BOOLEAN|0x00000101
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugSenseAmp|FALSE|BOOLEAN|0x00000102
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDisplayPerformanceValues|FALSE|BOOLEAN|0x00000103
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugLateCmdClk|FALSE|BOOLEAN|0x00000104
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugPowerTraining|FALSE|BOOLEAN|0x00000105
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugLrdimmExtraMessages|FALSE|BOOLEAN|0x00000106
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcBeginEndDebugHooks|TRUE|BOOLEAN|0x00000107
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugSwizzleInspection|FALSE|BOOLEAN|0x00000113
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugSpdDecodeLibTrace|FALSE|BOOLEAN|0x00000114
+
+ #PCD controls Setup default for OSR
+ #Default disabled
+ gEfiCpRcPkgTokenSpaceGuid.PcdOpportunisticSelfRefreshDefault|0|UINT8|0x00000116
+ #PCD controls Setup default for DDRT Self Refresh
+ #Default disabled
+ gEfiCpRcPkgTokenSpaceGuid.PcdDdrtSrefDefault|0|UINT8|0x00000117
+
+ #
+ # Dimm support
+ #
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQrDimmSupport|TRUE|BOOLEAN|0x00000108
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcSoDimmSupport|TRUE|BOOLEAN|0x00000109
+
+ #
+ # SVID support
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemSrvidSupported|TRUE|BOOLEAN|0x8000010A
+
+ #
+ # Miscellaneous MRC options
+ #
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcPurleyBiosHeaderOverride|TRUE|BOOLEAN|0x00000110
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcXmpSupport|TRUE|BOOLEAN|0x00000112
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved7|FALSE|BOOLEAN|0x00000111
+
+ ## Indicates the size of each PCIE segment
+ gEfiCpRcPkgTokenSpaceGuid.PcdPcieSegmentSize|0x10000000|UINT64|0x00000010
+ gEfiCpRcPkgTokenSpaceGuid.PcdNumOfPcieSeg|0x00000008|UINT32|0x00000013
+ ## Indicates the max nested level
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxNestedLevel|0x00000008|UINT32|0x00000018
+ ## Maximum number of sockets supported for this firmware build.
+ # This PCD should be used sparingly. Dynamic allocation of data and
+ # dynamic control flows are preferred over using this PCD for static
+ # data allocation and control.
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount|0x04|UINT32|0x00000019
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount|0x22|UINT32|0x0000001A
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuThreadCount|0x2|UINT32|0x0000001B
+ gEfiCpRcPkgTokenSpaceGuid.PcdReadPendingQueueTimeoutBaseClock|0x0000001C|UINT32|0x00000022
+ gEfiCpRcPkgTokenSpaceGuid.PcdReadPendingQueueTimeoutThreshold|0x0000000C|UINT32|0x00000023
+ gEfiCpRcPkgTokenSpaceGuid.PcdReadPendingQueueTimeoutCreditLimit|0x00000020|UINT32|0x00000024
+ ## Enable / Disable USRA trace configuration by IO port
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraTraceConfigurationPortEnable|FALSE|BOOLEAN|0x00000025
+ ## Set the specific IO port for trace configuration low byte
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraTraceConfigurationPortLow|0x81|UINT8|0x00000026
+ ## Set the specific IO port for trace configuration high byte
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraTraceConfigurationPortHigh|0x82|UINT8|0x00000027
+
+ ## PcdUsraTraceConfigurationValue is used to control the USRA trace behavior, and the defination shown as below.
+ # When PcdUsraTraceConfigurationPortEnable is TRUE, this configuration value can be overridden by configuration IO port.
+ # When PcdUsraTraceConfigurationPortEnable is FALSE, the value can be overridden via the interface SetUsraTraceConfiguration().
+ # Bit 0 - Bit 3 : USRA trace Signature,it should always be 0101B.
+ # Bit 4: Set indicates USRA trace message's format is long mode.
+ # Bit 5: Set indicates get address operation is traced.
+ # Bit 6: Set indicates modify operation is traced.
+ # Bit 7: Set indicates write operation is traced.
+ # Bit 8: Set indicates read operation is traced.
+ # Bit 9: Set indicates PCIE access is traced.
+ # Bit 10: Set indicates CSR access is traced.
+ # Bit 11 - Bit14: Reserved for future uses.
+ # Bit 15: Set indicates dumps the content of CpuCsrAccessVar before dumping the register access trace information.
+ # @Prompt USRA trace configuration settings.
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraTraceConfigurationValue|0x07F5|UINT16|0x00000028
+ ## Default value to USRA trace start at earlier stage, this value can be overridden by the interface UsraTraceStart()
+ ## and UsraTraceEnd().
+ gEfiCpRcPkgTokenSpaceGuid.PcdUsraTraceStartAtEarlierStage|FALSE|BOOLEAN|0x00000029
+ ## Indicates whether it needs to clear temp bus assignment in PCIE common init library
+ gEfiCpRcPkgTokenSpaceGuid.PcdCleanTempBusAssignment|TRUE|BOOLEAN|0x0000002A
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcVersion|{0, 0, 0, 0}|RC_VERSION|0x00000015 {
+ <HeaderFiles>
+ RcVersion.h
+ <Packages>
+ WhitleySiliconPkg/CpRcPkg.dec
+ }
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcVersion.Major|0
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcVersion.Minor|2
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcVersion.Revision|2
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcVersion.BuildNumber|0x0033
+
+ #
+ # MRC DEFAULT SETTINGS
+ #
+
+ # PCD NAME | VALUE| TYPE| PCD NUM.
+ ## Default Enable / Disable Legacy RMT Feature
+ gEfiCpRcPkgTokenSpaceGuid.PcdLegacyRmtEnable | 1| UINT8|0x0000001E
+
+
+ #
+ # Enforce memory POR configurations
+ # 0 (ENFORCE_POR_EN) - Enforce memory POR
+ # 1 (ENFORCE_STRETCH_EN) - Enforce memory frequency stretch goal
+ # 2 (ENFORCE_POR_DIS) - Do not enforce POR configurations
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdEnforcePorDefault | 0| UINT8|0x00000040
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved8 | FALSE|BOOLEAN|0x0000003A
+
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcMultiThreadedDefault | FALSE|BOOLEAN|0x00000060
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcFastColdBootDefault | TRUE|BOOLEAN|0x00000061
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcBdatDefault | TRUE|BOOLEAN|0x00000062
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcWritePreambleTclkDefault | 0xFF| UINT8|0x00000063
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcReadPreambleTclkDefault | 0xFF| UINT8|0x00000064
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcRxDfeDefault | 0x0| UINT8|0x00000065
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTxRfSlewRateDefault | 0x2| UINT8|0x00000066
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcPmemMemHoleDefault | FALSE|BOOLEAN|0x00000067
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcCrQosConfigDefault | 0x6| UINT8|0x00000068
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved9 | TRUE|BOOLEAN|0x00000069
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcFastBootDefault | TRUE| UINT8|0x0000006A
+
+
+ #Setup string for Mem boot health check
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemBootHealthConfigString |L"MemBootHealthConfig"| VOID*|0x00000070
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcSpdPrintDefault | FALSE|BOOLEAN|0x00000071
+ gEfiCpRcPkgTokenSpaceGuid.PcdDdrtSchedulerDebugDefault | FALSE|BOOLEAN|0x00000072
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved10 | 1| UINT8|0x00000073
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved11 | 1| UINT8|0x00000074
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved12 | 2| UINT8|0x0000011F
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved13 | TRUE|BOOLEAN|0x00000120
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcCmiInitUseResetDefault | FALSE|BOOLEAN|0x00000075
+ #option to choose Mem Boot Health configuration type. 00=>Auto (Use defaults), 01=>Manual (Override defaults with setup option), 02=>Disable (Disable feature)
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemBootHealthCheck | 00| UINT8|0x00000076
+
+ # The below values are setup\standard\build defaults. Can be overridden in platform specific dsc
+ ###################MEM BOOT HEALTH CONFIG WARNING OFFSETS STARTS#####################################
+ #Left edge offset for TxDqDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningTxDqDelayLeftEdge | 5| UINT8|0x00000077
+ #Right edge offset for TxDqDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningTxDqDelayRightEdge | 5| UINT8|0x00000078
+ #Left edge offset for TxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningTxVrefLeftEdge | 5| UINT8|0x00000079
+ #Right edge offset for TxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningTxVrefRightEdge | 5| UINT8|0x0000007A
+ #Left edge offset for RxDqsDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningRxDqsDelayLeftEdge | 5| UINT8|0x0000007B
+ #Right edge offset for RxDqsDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningRxDqsDelayRightEdge | 5| UINT8|0x0000007C
+ #Left edge offset for RxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningRxVrefLeftEdge | 5| UINT8|0x0000007D
+ #Right edge offset for RxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdWarningRxVrefRightEdge | 5| UINT8|0x0000007E
+ ###################MEM BOOT HEALTH CONFIG WARNING OFFSETS ENDS#######################################
+
+ ###################MEM BOOT HEALTH CONFIG CRITICAL OFFSETS STARTS####################################
+ #Left edge offset for TxDqDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalTxDqDelayLeftEdge | 2| UINT8|0x0000007F
+ #Right edge offset for TxDqDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalTxDqDelayRightEdge | 2| UINT8|0x00000080
+ #Left edge offset for TxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalTxVrefLeftEdge | 2| UINT8|0x00000081
+ #Right edge offset for TxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalTxVrefRightEdge | 2| UINT8|0x00000082
+ #Left edge offset for RxDqsDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalRxDqsDelayLeftEdge | 2| UINT8|0x00000083
+ #Right edge offset for RxDqsDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalRxDqsDelayRightEdge | 2| UINT8|0x00000084
+ #Left edge offset for RxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalRxVrefLeftEdge | 2| UINT8|0x00000085
+ #Right edge offset for RxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdCriticalRxVrefRightEdge | 2| UINT8|0x00000086
+ ###################MEM BOOT HEALTH CONFIG CRITICAL OFFSETS ENDS######################################
+
+ # Option to enable/disable RMT minimum margin test
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumMarginCheckDefault | 1| UINT8|0x00000124
+
+ # Define the default minimum margin thresholds for RMT margin check
+ # The minimum margin thresholds are applied to both margin directions.
+ # Rx timing: RxDqsDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumRxTimingMargin | 3| UINT8|0x00000125
+ # Rx voltage: RxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumRxVoltageMargin | 3| UINT8|0x00000126
+ # Tx timing: TxDqDelay
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumTxTimingMargin | 3| UINT8|0x00000127
+ # Tx voltage: TxVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumTxVoltageMargin | 3| UINT8|0x00000128
+ # Cmd timing: CmdAll
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumCmdTimingMargin | 5| UINT8|0x00000129
+ # Cmd voltage: CmdVref
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumCmdVoltageMargin | 5| UINT8|0x00000130
+ # Ctl timing: CtlAll
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMinimumCtlTimingMargin | 5| UINT8|0x00000131
+
+ #Reset on Critical Margin failure to perform Memory Training from scratch
+ gEfiCpRcPkgTokenSpaceGuid.PcdResetOnCriticalError | 1| UINT8|0x00000087
+
+ #Enable Debug message inside MarginTest
+ #BIT0 for API Debug messages
+ #BIT1 for Log messages
+ #BIT2 for Error messages
+ #BIT3 for Function trace messages
+ gEfiCpRcPkgTokenSpaceGuid.PcdEvDebugMsg | 0| UINT8|0x00000088
+
+ #Non-Configurable...Number of Signals to test.
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemBootSignalsToTest | 4| UINT8|0x00000089
+
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved14| FALSE|BOOLEAN|0x0000008B
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTurnaroundOptimizations | FALSE|BOOLEAN|0x0000008C
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTurnaroundOptimizationsDdrt| FALSE|BOOLEAN|0x0000008D
+ #
+ # Default SMBUS Speed - see SMB_CLOCK_FREQUENCY
+ # 0 - SMB_CLK_100K - 100 Khz
+ # 1 - SMB_CLK_400K - 400 Khz
+ # 2 - SMB_CLK_700K - 700 Khz
+ # 3 - SMB_CLK_1M - 1 Mhz
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcSmbusSpeedDefault | 0x1| UINT8|0x0000008E
+
+ #
+ # Throttling mid on temp lo
+ # 0 - Disabled
+ # 1 - Enabled
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcThrottlingMidOnTempLo | 0| UINT8|0x0000008F
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcMcOdtDefault | 0x1| UINT8|0x00000090
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcCtleTrainingEnable | TRUE|BOOLEAN|0x00000091
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcImodeTrainingEnable | TRUE|BOOLEAN|0x00000092
+
+
+ #CLTT settings
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempLoSingleRefreshDefault | 82| UINT8|0x00000093
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempMidSingleRefreshDefault | 83| UINT8|0x00000094
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempHiSingleRefreshDefault | 85| UINT8|0x00000095
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempMidSingleRefreshAepDefault | 83| UINT8|0x00000096
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempLoDoubleRefreshDefault | 83| UINT8|0x00000097
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempMidDoubleRefreshDefault | 93| UINT8|0x00000098
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempHiDoubleRefreshDefault | 95| UINT8|0x00000099
+
+ #
+ # Allowed debug level at build time configuration
+ # See RcDebugLib.h for mapping details
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcDebugAllowedLevelsMask | 0xC7F0190B| UINT32|0x0000009A
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTcoCompTrainingEnable | FALSE|BOOLEAN|0x0000009B
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcMcRonDefault | 0x1| UINT8|0x0000009C
+ gEfiCpRcPkgTokenSpaceGuid.PcdDimmIsolationDefault | 1| UINT8|0x0000009D
+
+ #
+ # Enforce memory population POR configurations.
+ # 0 (ENFORCE_POPULATION_POR_DIS) - Do not enforce memory population POR.
+ # 1 (ENFORCE_POPULATION_POR_ENFORCE_SUPPORTED) - Enforce supported memory populations.
+ # 2 (ENFORCE_POPULATION_POR_ENFORCE_VALIDATED) - Enforce validated memory populations.
+ gEfiCpRcPkgTokenSpaceGuid.PcdEnforcePopulationPorDefault | 1| UINT8|0x0000009E
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcCmdVrefCenteringTrainingEnable | TRUE|BOOLEAN|0x0000009F
+
+ #
+ # Legacy ADR flow
+ # 0 (LEGACY_ADR_MODE_DISABLE) - Pcode driven ADR flow
+ # 1 (LEGACY_ADR_MODE_ENABLE) - Legacy ADR flow
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdLegacyAdrDefault | 0| UINT8|0x000000A0
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDramRonDefault | 0x1| UINT8|0x000000A1
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcPxcDefault | 0x1| UINT8|0x000000A2
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDdjcDefault | 0x1| UINT8|0x000000A3
+
+ #
+ # Default debug level at build time configuration
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdRcDebugBuildTimeDefault | 0x8000190B| UINT32|0x000000A9
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdRmtMarginInCaCsTm | TRUE|BOOLEAN|0x000000AC
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcLrdimmDbDfeDefault | 0| UINT8|0x000000AE
+
+ #Only enable for 14nm, not a feature for 10nm and above
+ # 0 = Disable
+ # 1 = TA Floor
+ # 2 = Receive Enable Average
+ # 3 = Receive Enable Average part 1 only
+ gEfiCpRcPkgTokenSpaceGuid.PcdRankSwitchFixOption | 0|UINT8|0x000000A4
+
+ #
+ # Timers detinitions for priority promotions
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQosLowTimerLim | 0x100| UINT16|0x000000A5
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQosMedTimerLim | 0x100| UINT16|0x000000A6
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQosHighTimerLim | 0x100| UINT16|0x000000A7
+
+ #Mrc memory default frequency
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDdrFrequencyDefault | 0x0| UINT8|0x000000A8
+
+ #MRC Panic Watermark default
+ # 0 = Auto, 1 = High, 2 = Low
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcPanicWatermarkDefault | 0x0| UINT8|0x000000AA
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved15 | 0x2| UINT8|0x000000AB
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved16 | 0x0| UINT8|0x000000AD
+
+ # Additional Buffer Delay for Roundtrip
+ gEfiCpRcPkgTokenSpaceGuid.PcdRoundTripBufferDelayDclk | 4| UINT8|0x000000AF
+
+ # Option to enable / disable MCR Support
+ gEfiCpRcPkgTokenSpaceGuid.PcdMcrSupport | FALSE|BOOLEAN|0x000000B0
+
+ # Option to store SPD raw data to BDAT
+ gEfiCpRcPkgTokenSpaceGuid.SaveSpdToBdat | TRUE|BOOLEAN|0x00000121
+ # Option to store training data to BDAT
+ gEfiCpRcPkgTokenSpaceGuid.SaveMrcTrainingDataToBdat | TRUE|BOOLEAN|0x00000122
+
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdVendorMemtestEnable | TRUE|BOOLEAN|0x00000123
+
+[PcdsDynamicEx]
+ ## | MMCFG Table Header | Segment 0 | Segment 1 | Segment 2 | Segment 3 | Segment 4 | Segment 5 | Segment 6 | Segment 7 |
+ gEfiCpRcPkgTokenSpaceGuid.PcdPcieMmcfgTablePtr|{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}|VOID*|0x00000011
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdSimStaticPointerTableMapPtr|{0x0}|VOID*|0x80000012
+
+############### SVID Mapping ##################################
+ #The mailbox command can support up to 4 DDR VR ID's, 0x10, 0x12, 0x14, and 0x16.
+ #Whitley PHAS indicates that Whitley (like Purley) only connects 2 VRs (VR ID's 0x10 and 0x12).
+ #Those are typically shared such that MC0/MC2 share the same DDR VR (as they are on the same side of the CPU)
+ #and MC1/MC3 share the other. Depending on motherboard layout and other design constraints, this could change
+ #This information is per platform basis and can be obtained from platform schematics.
+ #Need to map this token for MC to SVID based on platform.
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemSrvidMap|{0}|MEM_SVID_MAP|0x80000014 {
+ <HeaderFiles>
+ Library/MemVrSvidMapLib.h
+ <Packages>
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ }
+############### SVID Mapping ##################################
+
+ # IMON SVID VR address
+ # Fill with IMON SVID Address
+ # End the list with 0xFF (IMON_ADDR_LIST_END)
+ # Assumption, all socket repeat same address
+ #BIT 4 => 0 or 1, SVID BUS\Interface 0 or 1 respectively
+ #BIT 0:3 => SVID ADDRESS
+ gEfiCpRcPkgTokenSpaceGuid.PcdImonAddr|{0xFF}|VCC_IMON|0x0000008A {
+ <HeaderFiles>
+ ImonVrSvid.h
+ <Packages>
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ }
+
+[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
+ gEfiCpRcPkgTokenSpaceGuid.PcdPeiTemporaryRamRcHeapBase|0xFE800000|UINT32|0x00000020
+ gEfiCpRcPkgTokenSpaceGuid.PcdPeiTemporaryRamRcHeapSize|0|UINT32|0x00000021
+ gEfiCpRcPkgTokenSpaceGuid.PcdNvDimmEn|FALSE|BOOLEAN|0x00000035
+ gEfiCpRcPkgTokenSpaceGuid.PcdDisableSimSlaveThread|FALSE|BOOLEAN|0x00000036
+ gEfiCpRcPkgTokenSpaceGuid.PcdNvDimmJedecDumpStatusRegs|FALSE|BOOLEAN|0x00000118
+## This PCD specifies the OEM MTS of the Memory Module Thermal Sensor
+ gEfiCpRcPkgTokenSpaceGuid.PcdOemMtsConfigValue|0xD|UINT16|0x0000003C
+ gEfiCpRcPkgTokenSpaceGuid.PcdSerialPortEnable|TRUE|BOOLEAN|0x0000003D
+
+[PcdsDynamic, PcdsDynamicEx]
+ gEfiCpRcPkgTokenSpaceGuid.PcdSyshostMemoryAddress|0x00000000|UINT64|0x00000048
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemMapHostMemoryAddress|0x00000000|UINT64|0x00000049
+ gEfiCpRcPkgTokenSpaceGuid.PcdDprMemSize|0x00300000|UINT32|0x0000004A
+ gEfiCpRcPkgTokenSpaceGuid.PcdLtMemSize|0x00500000|UINT32|0x0000004B
+ gEfiCpRcPkgTokenSpaceGuid.PcdImr2Enable|FALSE|BOOLEAN|0x0000004C
+ gEfiCpRcPkgTokenSpaceGuid.PcdImr2Size|0x0|UINT64|0x0000004D
+
+ #
+ # PCD for storing sizeof (SysHost) in PEI for later comparision in DXE
+ #
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdPeiSyshostMemorySize|0x00000000|UINT32|0x0000004E
diff --git a/Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc b/Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc
new file mode 100644
index 0000000000..be22c51e44
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc
@@ -0,0 +1,71 @@
+## @file
+# Memory Reference Code configuration file.
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#
+# This file is for common defintions for all MRC build targets.
+# This is not for platform specific defintions
+#
+
+[PcdsFixedAtBuild]
+
+#
+# MRC Debug configuration options
+#
+
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugTurnarounds|FALSE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugPerformanceStats|TRUE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugSenseAmp|FALSE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDisplayPerformanceValues|FALSE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugLateCmdClk|FALSE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugPowerTraining|FALSE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugLrdimmExtraMessages|FALSE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcBeginEndDebugHooks|TRUE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcDebugSwizzleInspection|FALSE
+
+#
+# Dimm support
+#
+
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcQrDimmSupport|TRUE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcSoDimmSupport|TRUE
+
+#
+# Miscellaneous MRC options
+#
+
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcPurleyBiosHeaderOverride|TRUE
+gEfiCpRcPkgTokenSpaceGuid.PcdMrcXmpSupport|TRUE
+
+[PcdsFixedAtBuild.IA32]
+
+gEfiCpRcPkgTokenSpaceGuid.PcdReserved7|TRUE
+
+[BuildOptions]
+
+#
+# Size of NvramData structure, per socket
+#
+ DEFINE NUMBER_OF_SUB_CHANNELS = -D SUB_CH=1
+
+ DEFINE NUMBER_OF_MAX_RANK_DIMM = -D MAX_RANK_DIMM=4
+ DEFINE NUMBER_OF_MAX_RANK_CH = -D MAX_RANK_CH=8
+
+*_*_*_CC_FLAGS = $(NUMBER_OF_SUB_CHANNELS) $(NUMBER_OF_MAX_RANK_DIMM) $(NUMBER_OF_MAX_RANK_CH)
+
+#
+# Always define IA32 for PEI, undefine for DXE and SMM
+#
+
+*_*_IA32_CC_FLAGS = -D IA32
+*_*_X64_CC_FLAGS = -U IA32
+
+
+
+
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc b/Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc
new file mode 100644
index 0000000000..4402540f91
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc
@@ -0,0 +1,99 @@
+## @file
+# Pcd definitions for 14nm & 10nm wave1 & 10nm wave2 CPU.
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+################################################################################
+#
+# PCD definitions section - list of all PCD definitions needed by this Platform.
+#
+################################################################################
+[PcdsFixedAtBuild]
+
+ # Indicates the max nested level
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxNestedLevel|0x00000010
+
+ ## Socket count used to indicate maximum number of CPU sockets supported by the platform.
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount|$(MAX_SOCKET)
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount|$(MAX_CORE)
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuThreadCount|$(MAX_THREAD)
+
+ ## Indicates whether it needs to clear temp bus assignment in PCIE common init library
+ gEfiCpRcPkgTokenSpaceGuid.PcdCleanTempBusAssignment|TRUE
+
+ # Default SMBUS speed for Whitley is 700Khz - see SMB_CLOCK_FREQUENCY definition
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcSmbusSpeedDefault|0x2
+
+!if (($(CPUTARGET) == "ICX"))
+ # Overrides specific to ICX-SP
+ gEfiCpRcPkgTokenSpaceGuid.PcdDimmIsolationDefault |0
+
+ # Enable LRDIMM DB DFE for ICX + PMem
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcLrdimmDbDfeDefault |1
+
+ # Additional Buffer Delay for Roundtrip
+ gEfiCpRcPkgTokenSpaceGuid.PcdRoundTripBufferDelayDclk |8
+!endif
+
+ # Memory health check default
+ # 00=>Auto (Use defaults), 01=>Manual (Override defaults with setup option), 02=>Disable (Disable feature)
+!if (($(CPUTARGET) == "ICX"))
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemBootHealthCheck|2
+!endif
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcMultiThreadedDefault|TRUE
+
+ #
+ # Override MRC default values for SKX, defaults are all set
+ # for 10nm
+ #
+
+!if $(CPU_SKX_ONLY_SUPPORT) == TRUE
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcBdatDefault|FALSE
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcWritePreambleTclkDefault|0x0
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcReadPreambleTclkDefault|0x0
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcRxDfeDefault|0x0
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcMcOdtDefault|0x0
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTxRfSlewRateDefault|0x0
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcPmemMemHoleDefault|TRUE
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcCrQosConfigDefault|0x0
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempLoSingleRefreshDefault|82
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempMidSingleRefreshDefault|82
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempHiSingleRefreshDefault|100
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempMidSingleRefreshAepDefault|83
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempLoDoubleRefreshDefault|84
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempMidDoubleRefreshDefault|93
+ gEfiCpRcPkgTokenSpaceGuid.PcdClttTempHiDoubleRefreshDefault|100
+
+!else
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcMcRonDefault|0x0
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcDramRonDefault|0x0
+!if ($(CPUTARGET) == "ICX")
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQosLowTimerLim| 0x290
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQosMedTimerLim|0x290
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcQosHighTimerLim|0x290
+!endif
+!endif
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved12|1
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved13|FALSE
+
+#
+# Enable DDR4 and DDRT turnaround timing optimization for all Whitley
+# platforms
+#
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTurnaroundOptimizations|TRUE
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcTurnaroundOptimizationsDdrt|TRUE
+
+ #
+ # enable NVDIMM support
+ #
+ gEfiCpRcPkgTokenSpaceGuid.PcdNvDimmEn|TRUE
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec b/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
new file mode 100644
index 0000000000..d7039f65c4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
@@ -0,0 +1,1004 @@
+## @file
+# Platform Package
+# Cross Platform Modules for Tiano
+#
+# @copyright
+# Copyright 2008 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ DEC_SPECIFICATION = 0x00010005
+ PACKAGE_NAME = ServerSiliconPkg
+ PACKAGE_GUID = DD44D851-9A3E-46E8-A2Ef-D794D014ECC1
+ PACKAGE_VERSION = 0.91
+
+[Includes]
+ Include
+ Security/Include
+ Pch/SouthClusterLbg
+ Pch/SouthClusterLbg/Include
+
+ Cpu/Include
+
+[Guids]
+ gMrcThermalHobGuid = { 0xca8d15fb, 0x8776, 0x4eab, { 0xa8, 0xb8, 0xec, 0x2c, 0x32, 0xcf, 0x2a, 0x9b } }
+ gEfiPlatformInfoGuid = { 0x1e2acc41, 0xe26a, 0x483d, { 0xaf, 0xc7, 0xa0, 0x56, 0xc3, 0x4e, 0x08, 0x7b } }
+ gCpuUncoreTokenSpaceGuid = { 0x9044434c, 0x40e8, 0x47a1, { 0xa3, 0xba, 0x85, 0x07, 0xf3, 0xc0, 0xe2, 0x56 } }
+ gProcessorProducerGuid = { 0x1bf06aea, 0x5bec, 0x4a8d, { 0x95, 0x76, 0x74, 0x9b, 0x09, 0x56, 0x2d, 0x30 } }
+ gEfiCpuHtCapableGuid = { 0x0d1b9c8e, 0xf77b, 0x4632, { 0x83, 0x43, 0x91, 0xf4, 0x3d, 0x9a, 0x85, 0x60 } }
+ gEfiMemoryConfigDataHobGuid = { 0x1de25879, 0x6e2a, 0x4d72, { 0xa7, 0x68, 0x28, 0x8c, 0xcb, 0x9f, 0xa7, 0x19 } }
+ gEfiMemorySetupGuid = { 0x3eeff35f, 0x147c, 0x4cd1, { 0xa2, 0x34, 0x92, 0xa0, 0x69, 0x70, 0x0d, 0xb6 } }
+ gEfiMemoryMapGuid = { 0xf8870015, 0x6994, 0x4b98, { 0x95, 0xa2, 0xbd, 0x56, 0xda, 0x91, 0xc0, 0x7f } }
+ gEfiMemoryMapDataHobBdatGuid = { 0x3417b225, 0x916a, 0x49f5, { 0x9a, 0xf5, 0xc9, 0xc7, 0xbf, 0x93, 0x7e, 0xa2 } }
+ gEfiMpstNodeDataGuid = { 0x418bc604, 0xf15e, 0x4843, { 0x85, 0xd0, 0x2d, 0x24, 0x80, 0xb7, 0xe4, 0x88 } }
+ gReadyForLockProtocolGuid = { 0x8d6f1add, 0x45a5, 0x45a8, { 0x8b, 0xb8, 0x0c, 0x3a, 0x95, 0x31, 0x48, 0xfa } }
+ gPlatformTokenSpaceGuid = { 0x07dfa0d2, 0x2ac5, 0x4cab, { 0xac, 0x14, 0x30, 0x5c, 0x62, 0x48, 0x87, 0xe4 } }
+ gEfiSocketIioVariableGuid = { 0xdd84017e, 0x7f52, 0x48f9, { 0xb1, 0x6e, 0x50, 0xed, 0x9e, 0x0d, 0xbe, 0x27 } }
+ gEfiSocketCommonRcVariableGuid = { 0x4402ca38, 0x808f, 0x4279, { 0xbc, 0xec, 0x5b, 0xaf, 0x8d, 0x59, 0x09, 0x2f } }
+ gEfiSocketMpLinkVariableGuid = { 0x2b9b22de, 0x2ad4, 0x4abc, { 0x95, 0x7d, 0x5f, 0x18, 0xc5, 0x04, 0xa0, 0x5c } }
+ gEfiSocketPciResourceDataGuid = { 0xca3ff937, 0xd646, 0x4936, { 0x90, 0xe8, 0x1b, 0x95, 0x06, 0x49, 0xb3, 0x89 } }
+ gEfiSocketMemoryVariableGuid = { 0x98cf19ed, 0x4109, 0x4681, { 0xb7, 0x9d, 0x91, 0x96, 0x75, 0x7c, 0x78, 0x24 } }
+ gEfiSocketPowermanagementVarGuid = { 0xA1047342, 0xBDBA, 0x4DAE, { 0xA6, 0x7A, 0x40, 0x97, 0x9B, 0x65, 0xC7, 0xF8 } }
+ gEfiSocketProcessorCoreVarGuid = { 0x07013588, 0xC789, 0x4E12, { 0xA7, 0xC3, 0x88, 0xFA, 0xFA, 0xE7, 0x9F, 0x7C } }
+ gPrevBootErrSrcHobGuid = { 0x5138b5c5, 0x9369, 0x48ec, { 0x5b, 0x97, 0x38, 0xa2, 0xf7, 0x09, 0x66, 0x75 } }
+ gSocketPkgListGuid = { 0x5c0083db, 0x3f7d, 0x4b20, { 0xac, 0x9b, 0x73, 0xfc, 0x65, 0x1b, 0x25, 0x03 } }
+ gEfiReservedMemoryDataGuid = { 0xb5535bba, 0xc858, 0x4302, { 0x8B, 0xcd, 0xd9, 0x3a, 0x70, 0x72, 0x2f, 0x8c } }
+ gEfiVolatileMemModeVariableGuid = { 0x0633a0f1, 0x78fe, 0x4139, { 0xb8, 0x78, 0x00, 0x45, 0xe8, 0x1c, 0xb8, 0xab } }
+ gSignalBeforeEnterSetupGuid = { 0xd9f1669a, 0xf505, 0x48bd, { 0xa8, 0x92, 0x94, 0xb7, 0xca, 0x90, 0x30, 0x31 } }
+ gEfiQpiRcParmGuid = { 0x8149fbb8, 0xa2cf, 0x4234, { 0xb5, 0x06, 0xb7, 0x62, 0x55, 0xf7, 0xa3, 0x6d } }
+ gAddressBasedMirrorGuid = { 0x7b9be2e0, 0xe28a, 0x4197, { 0xad, 0x3e, 0x32, 0xf0, 0x62, 0xf9, 0x46, 0x2c } }
+ gEfiPprVariableGuid = { 0x6a159d4f, 0x6e6b, 0x4523, { 0xae, 0xb5, 0xf7, 0xaf, 0x1c, 0x44, 0x4b, 0x0f } }
+ gRasStateVariableGuid = { 0x9189541f, 0xac0c, 0x4368, { 0x90, 0x62, 0x70, 0xe1, 0x95, 0x7c, 0x34, 0x45 } }
+ gClvBootTimeTestExecution = { 0x3ff7d152, 0xef86, 0x47c3, { 0x97, 0xb0, 0xce, 0xd9, 0xbb, 0x80, 0x9a, 0x67 } }
+ gEfiCpuPolicyDataHobGuid = { 0x8d1faf2d, 0x08d6, 0x4c05, { 0x8b, 0xd3, 0x3b, 0x6c, 0x0f, 0x0f, 0xff, 0x1a } }
+ gEfiPsmiPolicyDataHobGuid = { 0x42ed3781, 0x019a, 0x28ae, { 0x16, 0x3b, 0x9a, 0x50, 0x07, 0x0f, 0x93, 0x6b } }
+ gPsmiInitDataGuid = { 0x63f37a26, 0x9764, 0x86aa, { 0x91, 0x85, 0xe1, 0x90, 0xab, 0x56, 0x63, 0x49 } }
+ gEfiKtiHostInDataHobGuid = { 0x3c1526ff, 0xd33e, 0x4ba8, { 0x97, 0x0d, 0x4b, 0x9f, 0x28, 0x92, 0x50, 0xa5 } }
+ gEfiKtiHostOutDataHobGuid = { 0x7080648f, 0x430e, 0x430c, { 0xbc, 0x7a, 0x66, 0x25, 0xd4, 0x58, 0x3b, 0x74 } }
+ gEfiKtiHostNvramDataHobGuid = { 0xac45d3d6, 0xa36e, 0x43a6, { 0xad, 0x17, 0x0a, 0x45, 0xbb, 0x47, 0xbe, 0xd6 } }
+ gReferenceCodePolicyTokenSpaceGuid = { 0x3268c52f, 0xd3b3, 0x405d, { 0xb6, 0x91, 0x14, 0x4f, 0xca, 0x42, 0xe4, 0x37 } } # {3268c52f-d3b3-405d-b691-144fca42e437}
+ gEfiMktmekeyGuid = { 0xca3ff937, 0xd649, 0x4936, { 0x90, 0xe8, 0x2b, 0x95, 0x06, 0x49, 0xb3, 0x82 } }
+ gSecurityMemMapHobGuid = { 0xeec2c166, 0xfc41, 0x4506, { 0xbc, 0xd6, 0xf0, 0x19, 0x9e, 0x22, 0x9f, 0xa3 } }
+ gCxlNodeHobGuid = { 0xdd8ae009, 0xda5a, 0x44a3, { 0xbe, 0x18, 0xda, 0x0c, 0x16, 0xc5, 0xaf, 0x5c } }
+ gSgxUefiFwKeyBlobsVariableGuid = { 0x60F76511, 0xDD87, 0x466D, { 0x91, 0xA6, 0x3C, 0x18, 0x00, 0xFA, 0xDC, 0x6F } }
+ gSgxUefiFwKeyBlobsWithIntegrityVariableGuid = { 0x582cc492, 0x51ee, 0x46db, { 0x8d, 0x34, 0xd8, 0x7c, 0x8e, 0x9a, 0x10, 0x83 } }
+ gSgxUefiFwRegistrationStateVariableGuid = { 0x2C65F1A3, 0x5DD5, 0x4A41, { 0xA5, 0xC1, 0xF6, 0x93, 0x7F, 0x77, 0x85, 0xE5 } }
+ gSgxUefiFwPlatformManifestVariableGuid = { 0x06141EE2, 0x7CDD, 0x4FDF, { 0xA4, 0x52, 0xAE, 0x7D, 0x20, 0x42, 0x6E, 0x2D } }
+ gSgxRegistrationConfigVariableGuid = { 0x18b3bc81, 0xe210, 0x42b9, { 0x9e, 0xc8, 0x2c, 0x5a, 0x7d, 0x4d, 0x89, 0xb6 } }
+ gSgxRegistrationServerRequestVariableGuid = { 0x304E0796, 0xD515, 0x4698, { 0xAC, 0x6E, 0xE7, 0x6C, 0xB1, 0xA7, 0x1C, 0x28 } }
+ gSgxRegistrationPackageInfoVariableGuid = { 0xAC406DEB, 0xAB92, 0x42D6, { 0xAF, 0xF7, 0x0D, 0x78, 0xE0, 0x82, 0x6C, 0x68 } }
+ gSgxRegistrationPackageInfoWithIntegrityVariableGuid = { 0x4d5e9417, 0x46f4, 0x4704, { 0xb2, 0x1f, 0xc7, 0xc6, 0x72, 0x13, 0xa0, 0xda } }
+ gSgxRegistrationServerResponseVariableGuid = { 0x89589C7B, 0xB2D9, 0x4FC9, { 0xBC, 0xDA, 0x46, 0x3b, 0x98, 0x3B, 0x2F, 0xB7 } }
+ gSgxRegistrationStatusVariableGuid = { 0xF236C5DC, 0xA491, 0x4BBE, { 0xBC, 0xDD, 0x88, 0x88, 0x57, 0x70, 0xDF, 0x45 } }
+ gSgxRegistrationServerInfoGuid = { 0x83E12F21, 0x1A6B, 0xA142, { 0xA7, 0xA9, 0xDA, 0x3A, 0xB6, 0xB7, 0xBD, 0x02 } }
+ gSgxUefiRegistrationConfigVariableGuid = { 0x8d4ca9e8, 0x44c3, 0x43e5, { 0x93, 0x5e, 0xb6, 0xcc, 0x8f, 0xc5, 0x56, 0x65 } }
+ gSgxUefiRegistrationServerRequestVariableGuid = { 0xcd24952f, 0x8175, 0x4797, { 0x8e, 0x7d, 0xd8, 0x4b, 0x15, 0x6a, 0x82, 0x77 } }
+ gSgxUefiRegistrationServerResponseVariableGuid = { 0x35d93155, 0x79dc, 0x4b5e, { 0xb6, 0xdf, 0x8e, 0xfe, 0x17, 0x93, 0xa1, 0x5e } }
+ gSgxUefiRegistrationStatusVariableGuid = { 0xcf24d5e9, 0x51e3, 0x45b4, { 0x8f, 0xe2, 0x2f, 0x34, 0x5c, 0x5f, 0x76, 0x6b } }
+ gSgxLegacyRegistrationSoftwareGuardStatusVariableGuid = { 0x9cb2e73f, 0x7325, 0x40f4, { 0xa4, 0x84, 0x65, 0x9b, 0xb3, 0x44, 0xc3, 0xcd } }
+ gSgxLegacyRegistrationEpcBiosVariableGuid = { 0xc60aa7f6, 0xe8d6, 0x4956, { 0x8b, 0xa1, 0xfe, 0x26, 0x29, 0x8f, 0x5e, 0x87 } }
+ gSgxLegacyRegistrationEpcSwVariableGuid = { 0xd69a279b, 0x58eb, 0x45d1, { 0xa1, 0x48, 0x77, 0x1b, 0xb9, 0xeb, 0x52, 0x51 } }
+ gVtdConfigGuid = { 0x03e5cf63, 0xbebb, 0x4041, { 0xb7, 0xe7, 0xbf, 0x54, 0x61, 0x20, 0xf1, 0xc5 } }
+ gPpmBeforeBiosInitDoneGuid = { 0x0fce4563, 0xbebb, 0x4041, { 0xa7, 0xd7, 0xbe, 0xf4, 0x61, 0x20, 0xf1, 0xc5 } }
+ gPbspTearDownNemAddressHobGuid = { 0x2e45be97, 0xddc2, 0x4d47, { 0x8f, 0x3b, 0x74, 0x1d, 0x50, 0xdf, 0x20, 0x98 } }
+ gKtiAdaptationTableGuid = { 0x204012d3, 0x584d, 0x4325, { 0xae, 0x9e, 0xd7, 0x4d, 0xd8, 0x18, 0x6a, 0xd1 } }
+
+#
+#
+#
+# RAS
+#
+ gEfiRasHostGuid = { 0x8149fbb8, 0xa2cf, 0x4234, { 0xb5, 0x06, 0xb7, 0x62, 0x55, 0xf7, 0xa3, 0x6d } }
+ gEfiRasClvTesterGuid = { 0x9bd36f4f, 0x08dc, 0x4eab, { 0x86, 0x37, 0x2b, 0xc1, 0xbd, 0x5e, 0x0d, 0x95 } }
+ gRasRcPolicyHobGuid = { 0x279ED988, 0xBFEA, 0x43B4, { 0xB3, 0x79, 0xCE, 0x61, 0xAB, 0xDA, 0xC0, 0xB7 } }
+ gRasRcConfigHobGuid = { 0x437872EF, 0x2792, 0x47E6, { 0x97, 0xCA, 0xD3, 0xD8, 0xFF, 0xC7, 0x39, 0xA4 } }
+ gRasGlobalDataVariableGuid = { 0xcb4afa36, 0x42bf, 0x400b, { 0x8b, 0x8f, 0x57, 0x39, 0x41, 0xa2, 0x9f, 0x4e } }
+
+##
+## Common
+##
+ gSiConfigHobGuid = {0xb3903068, 0x7482, 0x4424, {0xba, 0x4b, 0x40, 0x5f, 0x8f, 0xd7, 0x65, 0x4e}}
+
+#
+# Security
+#
+ gSecurityPolicyDataGuid = { 0x1781F59B, 0x71FA, 0x4FB1, { 0xB0, 0x7A, 0x5C, 0x5E, 0xE2, 0xDF, 0x98, 0x14 }}
+ gSgxInitDataHobGuid = { 0x4EF0BEDC, 0xC5C1, 0x4E69, { 0x82, 0x18, 0x7D, 0xBE, 0x8A, 0x60, 0x68, 0x8C }}
+ gSgxPreMemInitHobGuid = { 0x9A9E2225, 0xE026, 0x4BFF, { 0x99, 0x17, 0xF1, 0x23, 0xE1, 0xD4, 0x3A, 0xD5 }}
+ gTmePreMemInitHobGuid = { 0x84495ab7, 0xf97f, 0x4502, { 0x93, 0x12, 0xf7, 0xf4, 0xab, 0x91, 0x09, 0x6e }}
+ gMktmeInitDataGuid = { 0x52eff441, 0x3a19, 0x4d59, { 0x8c, 0x05, 0x6f, 0x2d, 0x5b, 0x2f, 0xa6, 0xed }}
+ gTdxDataHobGuid = { 0x05885d44, 0x9588, 0x428e, { 0x9e, 0xb0, 0x1c, 0xa7, 0xe5, 0x4c, 0xa9, 0x6b }}
+ gSecurityIpInterdependenceGuid = { 0x9abadd78, 0xf5b5, 0x4c8e, { 0xa9, 0x52, 0x3a, 0x83, 0xbe, 0x90, 0x7a, 0x1a }}
+
+#
+# SouthCluster
+#
+ gPchInfoHobGuid = { 0x99FD5E18, 0xE262, 0x4E6A, {0x82, 0x66, 0x77, 0xD0, 0x36, 0x5F, 0xD6, 0x3E }}
+ gSiConfigGuid = {0x4ed6d282, 0x22f3, 0x4fe1, {0xa6, 0x61, 0x6, 0x1a, 0x97, 0x38, 0x59, 0xd8 }}
+ gSiPreMemConfigGuid = {0xb94c004c, 0xa0ab, 0x40f0, {0x9b, 0x61, 0x0b, 0x25, 0x88, 0xbe, 0xfd, 0xc6}}
+ gSiPolicyHobGuid = {0x4ee8c3b9, 0x47a7, 0x4c8a, {0xbb, 0x60, 0x6d, 0x90, 0xbf, 0x62, 0x10, 0x3c}}
+ gSiPreMemPolicyHobGuid = {0x9142b7e1, 0x411d, 0x475a, {0xab, 0xfc, 0xf7, 0x89, 0xb8, 0x2c, 0x24, 0xc8}}
+ gSiPkgTokenSpaceGuid = {0x977c97c1, 0x47e1, 0x4b6b, {0x96, 0x69, 0x43, 0x66, 0x99, 0xcb, 0xe4, 0x5b}}
+ gPchIpInfoHobGuid = { 0x69247df8, 0x1ecf, 0x4b11, { 0xba, 0xb4, 0x28, 0x5a, 0x77, 0xaf, 0x61, 0x11 }}
+
+ gSetupVariableGuid = { 0xEC87D643, 0xEBA4, 0x4BB5, { 0xA1, 0xE5, 0x3F, 0x3E, 0x36, 0xB2, 0x0D, 0xA9 }}
+
+ gChipsetInitHobGuid = {0xc1392859, 0x1f75, 0x446e, {0xb3, 0xf5, 0x83, 0x35, 0xfc, 0xc8, 0xd1, 0xc4}}
+
+ gPchGeneralPreMemConfigGuid = {0xC65F62FA, 0x52B9, 0x4837, {0x86, 0xEB, 0x1A, 0xFB, 0xD4, 0xAD, 0xBB, 0x3E}}
+ gDciPreMemConfigGuid = {0xAB4AF366, 0x2250, 0x40C3, {0x92, 0xDB, 0x36, 0x61, 0xC6, 0x71, 0x3C, 0x5A}}
+ gWatchDogPreMemConfigGuid = {0xFBCE08CC, 0x60F2, 0x4BDF, {0xB7, 0x88, 0x09, 0xBB, 0x81, 0x65, 0x52, 0x2B}}
+ gPchTraceHubPreMemConfigGuid = {0x8456c11, 0xdb85, 0x4914, {0x8d, 0x1a, 0xe5, 0xac, 0x64, 0x37, 0xe8, 0x96}}
+ gPcieRpPreMemConfigGuid = {0x8377AB38, 0xF8B0, 0x476A, { 0x9C, 0xA1, 0x68, 0xEA, 0x78, 0x57, 0xD8, 0x2A}}
+ gHpetPreMemConfigGuid = {0x7C75C0F1, 0xA20F, 0x42EB, {0x83, 0xDE, 0xE8, 0x58, 0xAB, 0x81, 0xC5, 0xDC}}
+ gSmbusPreMemConfigGuid = {0x77A6E62C, 0x716B, 0x4386, {0x9E, 0x9C, 0x23, 0xA0, 0x2E, 0x13, 0x7B, 0x3A}}
+ gLpcPreMemConfigGuid = {0xA6E6032F, 0x1E58, 0x407E, {0x9A, 0xB8, 0xC6, 0x30, 0xC6, 0xC4, 0x11, 0x8E}}
+ gHsioPciePreMemConfigGuid = {0xE8FB0C12, 0x0DA1, 0x4A20, {0xB3, 0x36, 0xFB, 0x75, 0x93, 0x8C, 0xE0, 0x14}}
+ gHsioSataPreMemConfigGuid = {0x732260D0, 0xA5C1, 0x4119, {0xAA, 0x0C, 0x93, 0xDC, 0xAC, 0x67, 0x0A, 0x31}}
+ gHsioPreMemConfigGuid = {0xbc9e5787, 0x3ddb, 0x4916, {0x8c, 0xcc, 0x82, 0xb8, 0x9, 0x43, 0xe2, 0xf0}}
+ gDmiPreMemConfigGuid = {0x4DA4AA22, 0xB54A, 0x43D7, {0x87, 0xC8, 0xA3, 0xCF, 0x53, 0xE6, 0xC1, 0x8A}}
+ gFiaMuxPreMemConfigGuid = {0x65667495, 0xA0DF, 0x4481, {0x8D, 0x36, 0x01, 0x01, 0x06, 0x98, 0xFD, 0x81}}
+ gFiaOverrideStatusHobGuid = {0x618D94C1, 0x0EDE, 0x4EE3, {0x98, 0x4F, 0xB2, 0x07, 0x6B, 0x05, 0x50, 0xFB}}
+ gPchGeneralConfigGuid = {0x6ED94C8C, 0x25F7, 0x4686, {0xB2, 0x46, 0xCA, 0x4D, 0xE2, 0x95, 0x4B, 0x5D}}
+ gPchPcieConfigGuid = {0x0A53B507, 0x988B, 0x475C, {0xBF, 0x76, 0x33, 0xDE, 0x10, 0x6D, 0x94, 0x84}}
+ gPcieRpDxeConfigGuid = {0x475530EA, 0xBD72, 0x416F, {0x98, 0x9F,0x48, 0x70, 0x5F, 0x14, 0x4E, 0xD9}}
+ gSataConfigGuid = {0xF5F87B4F, 0xCC3C, 0x408D, {0x89, 0xE3, 0x61, 0xC5, 0x9C, 0x54, 0x07, 0xC4}}
+ gsSataConfigGuid = {0xe447c420, 0x3a8e, 0x4d9b, {0x84, 0xe5, 0x4d, 0x73, 0x77, 0x69, 0xb8, 0xc6}}
+ gHsiosSataPreMemConfigGuid = {0xc4877b20, 0x3098, 0x4952, {0xb8, 0x01, 0x21,0x8a, 0x27, 0xca, 0x75, 0x91}}
+ gIoApicConfigGuid = {0x2873D0F1, 0x00F6, 0x40AB, {0xAC, 0x36, 0x9A, 0x68, 0xBA, 0x87, 0x3E, 0x6C}}
+ gCio2ConfigGuid = {0xFBC4C192, 0x789D, 0x4038, {0x90, 0xE1, 0x5E, 0x6D, 0xFD, 0x52, 0xAF, 0x8A}}
+ gDmiConfigGuid = {0xB3A61210, 0x1CD3, 0x4797, {0x8E, 0xE6, 0xD3, 0x42, 0x9C, 0x4F, 0x17, 0xBD}}
+ gFlashProtectionConfigGuid = {0xD0F71512, 0x9E32, 0x4CC9, {0xA5, 0xA3, 0xAD, 0x67, 0x9A, 0x06, 0x67, 0xB8}}
+ gHdAudioConfigGuid = {0x7EB3CE7E, 0x82E0, 0x4CD7, {0xBD, 0xE5, 0xB2, 0xBF, 0x4E, 0x91, 0xC3, 0x4C}}
+ gHdAudioDxeConfigGuid = {0x22EFC2DE, 0x66EB, 0x412D, {0x97, 0x17, 0xE7, 0x7A, 0xA1, 0x4E, 0x87, 0x76}}
+ gInterruptConfigGuid = {0x09A2B815, 0xBE29, 0x45EF, {0xBF, 0xBF, 0x58, 0xEA, 0xAC, 0x5E, 0x29, 0x78}}
+ gIshConfigGuid = {0x433AE2AA, 0xC5A6, 0x46ED, {0x94, 0x19, 0x1E, 0x5D, 0xB8, 0x1C, 0x57, 0x40}}
+ gLanConfigGuid = {0x4B2DE99E, 0x7517, 0x4D04, {0x8C, 0x02, 0xF1, 0x1A, 0x59, 0x2B, 0x14, 0x2F}}
+ gLockDownConfigGuid = {0x8A838E0A, 0xA639, 0x46F0, {0xA9, 0xCE, 0x70, 0xC4, 0x85, 0xFB, 0xA8, 0x0D}}
+ gP2sbConfigGuid = {0x2474DCB8, 0x4BB4, 0x49DA, {0x87, 0x83, 0x7C, 0xD3, 0xD3, 0x85, 0xFF, 0x07}}
+ gPmConfigGuid = {0x93826157, 0xDC85, 0x4E34, {0xAE, 0xD9, 0x6E, 0xA1, 0x0D, 0xF9, 0xE3, 0xA7}}
+ gSdCardConfigGuid = {0xD6A3038E, 0x50AE, 0x44B0, {0x93, 0xE2, 0xF7, 0x93, 0xF5, 0x90, 0x50, 0x27}}
+ gEmmcConfigGuid = {0xE0C6FB5D, 0x5696, 0x47F3, {0x84, 0xE8, 0xCC, 0x6C, 0x68, 0xA4, 0xB2, 0x1D}}
+ gUfsConfigGuid = {0x3AF25C55, 0x76B4, 0x4367, {0x85, 0xEF, 0x9D, 0x51, 0x2F, 0x2F, 0x8F, 0xA7}}
+ gEmmcDxeConfigGuid = {0x59440AA6, 0xEB45, 0x4E36, {0xBC, 0x90, 0xBE, 0xF9, 0x0C, 0xB0, 0xC8, 0x18}}
+ gPort61ConfigGuid = {0x59913475, 0x1960, 0x4099, {0x80, 0xEC, 0xAF, 0xC7, 0xCF, 0x5F, 0x9F, 0xAC}}
+ gScsConfigGuid = {0xF4DE6D52, 0xB5C9, 0x48C0, {0xA0, 0x4A, 0x68, 0x54, 0x20, 0x94, 0x05, 0xD0}}
+ gSerialIoConfigGuid = {0x6CC06EBF, 0x0D34, 0x4340, {0xBC, 0x16, 0xDA, 0x09, 0xE5, 0x78, 0x3A, 0xDB}}
+ gSerialIrqConfigGuid = {0x251701E7, 0xE266, 0x4623, {0x99, 0x68, 0x73, 0x8C, 0xD2, 0x23, 0x10, 0x96}}
+ gSpiConfigGuid = {0x150360EF, 0x99BE, 0x4E43, {0x94, 0xBB, 0xBD, 0x40, 0x26, 0xCA, 0x34, 0x57}}
+ gThermalConfigGuid = {0x4416506D, 0x1197, 0x4722, {0xA5, 0xB4, 0x46, 0x11, 0xF9, 0x23, 0x9E, 0xAE}}
+ gUsbConfigGuid = {0xB2DA9CCD, 0x6A8C, 0x4BB6, {0xB3, 0xE6, 0xCD, 0xFB, 0xB7, 0x66, 0x8B, 0xDE}}
+ gPchPcieStorageDetectHobGuid = {0xC682F3F4, 0x2F46, 0x495E, {0x98, 0xAA, 0x43, 0x14, 0x4B, 0xA5, 0xA4, 0x85}}
+ gCnviConfigGuid = {0xE53EBEF7, 0x103D, 0x4A70, {0x9B, 0x6A, 0x73, 0xEE, 0x5F, 0x4C, 0x8D, 0xF5}}
+ gWatchDogConfigGuid = {0x940EC076, 0x04AF, 0x45DA, {0xAF, 0xFA, 0x6A, 0xEF, 0xDB, 0x2B, 0x86, 0x55}}
+ gEspiConfigGuid = {0x60FBF3B8, 0x96D4, 0x4187, {0x84, 0x9E, 0xAA, 0xF7, 0x5C, 0x4B, 0xE1, 0xE3}}
+ gHsuartConfigGuid = {0xEA329E4E, 0x1725, 0x43E0, {0xBA, 0x69, 0x67, 0xA3, 0x76, 0x73, 0x45, 0x16}}
+ gHsioPcieConfigFIAWM20Guid = {0x92cd256c, 0xdd71, 0x4707, {0xad, 0x7a, 0x87, 0xb3, 0xfd, 0x70, 0x08, 0x94}}
+ gAdrConfigGuid = {0x5B36A07C, 0x3BBF, 0x4D53, {0x8A, 0x2D, 0xE1, 0xCF, 0x97, 0x39, 0x0C, 0x65}}
+ gPchRstHobGuid = {0x4ECA680C, 0x660D, 0x48F8, {0xAA, 0xD8, 0x94, 0xD6, 0x56, 0x10, 0xF9, 0x86}}
+ gGpioDxeConfigGuid = {0x06985984, 0xAFA3, 0x429C, {0x80, 0xCD, 0x69, 0x43, 0xF3, 0x38, 0x31, 0x4D}}
+ gScsInfoHobGuid = {0x94C5E85B, 0xAA6D, 0x481D, {0x8B, 0xBD, 0x54, 0xAA, 0xE2, 0x99, 0x78, 0xB2}}
+ gUsb2PhyConfigGuid = {0x576C1134, 0x2E0C, 0xCB7D, {0xCD, 0x3F, 0xAC, 0x68, 0x2D, 0xAE, 0xD3, 0xF2}}
+ gUsb3HsioConfigGuid = {0xF8AFC238, 0xF176, 0x12CE, {0xBE, 0xF4, 0x69, 0xF9, 0xB1, 0xAC, 0x40, 0xD5}}
+ gHsioConfigGuid = {0xE53EBEE7, 0x103D, 0x4A71, {0x9B, 0x6A, 0x74, 0xEE, 0x5F, 0x4C, 0x8D, 0xF5}}
+ gSiScheduleResetHobGuid = { 0xEA0597FF, 0x8858, 0x41CA, { 0xBB, 0xC1, 0xFE, 0x18, 0xFC, 0xD2, 0x8E, 0x22 }}
+ gRcPkgTokenSpaceGuid = { 0x86cf2b1a, 0xb3da, 0x4642, { 0x95, 0xf5, 0xd0, 0x1c, 0x6c, 0x1c, 0x60, 0xb8 }}
+ gSataControllerDriverGuid = { 0xbb929da9, 0x68f7, 0x4035, { 0xb2, 0x2c, 0xa3, 0xbb, 0x3f, 0x23, 0xda, 0x55 }}
+ gPchInitVariableGuid = { 0xe6c2f70a, 0xb604, 0x4877, { 0x85, 0xba, 0xde, 0xec, 0x89, 0xe1, 0x17, 0xeb }}
+ gPchS3ImageGuid = { 0x271dd6f2, 0x54cb, 0x45e6, { 0x85, 0x85, 0x8c, 0x92, 0x3c, 0x1a, 0xc7, 0x6 }}
+ gEfiSmbusArpMapGuid = { 0x707be83e, 0x0bf6, 0x40a5, { 0xbe, 0x64, 0x34, 0xc0, 0x3a, 0xa0, 0xb8, 0xe2 }}
+ mPchSataRsteProtocolGuid = { 0x3ea94650, 0xfc5b, 0x11e1, {0xa2, 0x1f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66}}
+ mPchSataRstProtocolGuid = { 0xfc5f2e00, 0xfc68, 0x11e1, {0xa2, 0x1f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66}}
+ gPchInitPeiVariableGuid = { 0xa31b27a4, 0xcae6, 0x48ff, {0x8c, 0x5a, 0x29, 0x42, 0x21, 0xe6, 0xf3, 0x89 }}
+ gChipsetInitInfoHobGuid = { 0xc1392859, 0x1f65, 0x446e, {0xb3, 0xf5, 0x84, 0x35, 0xfc, 0xc7, 0xd1, 0xc4}}
+ gPchOemSmmGuid = { 0xc0cfaf36, 0x4296, 0x40ba, {0xa9, 0xf1, 0x77, 0x10, 0x9b, 0x91, 0xce, 0x19}}
+ gPchPowerCycleResetGuid = { 0x8d8ee25b, 0x66dd, 0x4ed8, { 0x8a, 0xbd, 0x14, 0x16, 0xe8, 0x8e, 0x1d, 0x24 }}
+ gPchGlobalResetGuid = { 0x9db31b4c, 0xf5ef, 0x48bb, { 0x94, 0x2b, 0x18, 0x1f, 0x7e, 0x3a, 0x3e, 0x40 }}
+ gPchGlobalResetWithEcGuid = { 0xd22e6b72, 0x53cd, 0x4158, { 0x83, 0x3f, 0x6f, 0xd8, 0x7e, 0xbe, 0xa9, 0x93 }}
+#S3 add
+ gPchS3CodeInLockBoxGuid = { 0x1f18c5b3, 0x29ed, 0x4d9e, {0xa5, 0x4, 0x6d, 0x97, 0x8e, 0x7e, 0xd5, 0x69}}
+ gPchS3ContextInLockBoxGuid = { 0xe5769ea9, 0xe706, 0x454b, {0x95, 0x7f, 0xaf, 0xc6, 0xdb, 0x4b, 0x8a, 0xd}}
+#S3 add
+# gMeBiosExtensionSetupGuid = { 0x1bad711c, 0xd451, 0x4241, { 0xb1, 0xf3, 0x85, 0x37, 0x81, 0x2e, 0xc, 0x70 } } // SERVER_BIOS_FLAG
+# gAmtForcePushPetPolicyGuid = { 0xacc8e1e4, 0x9f9f, 0x4e40, { 0xa5, 0x7e, 0xf9, 0x9e, 0x52, 0xf3, 0x4c, 0xa5 } } // SERVER_BIOS_FLAG
+ gEfiAcpiVariableGuid = { 0xaf9ffd67, 0xec10, 0x488a, { 0x9d, 0xfc, 0x6c, 0xbf, 0x5e, 0xe2, 0x2c, 0x2e }}
+ gEfiCommonPkgTokenSpaceGuid = { 0x86cf2b1a, 0xb3da, 0x4642, { 0x95, 0xf5, 0xd0, 0x1c, 0x6c, 0x1c, 0x60, 0xb8 }}
+ gPchPolicyHobGuid = { 0x524ed3ca, 0xb250, 0x49f5, { 0x94, 0xd9, 0xa2, 0xba, 0xff, 0xc7, 0x0e, 0x14 }}
+ gPchDeviceTableHobGuid = { 0xb3e123d0, 0x7a1e, 0x4db4, { 0xaf, 0x66, 0xbe, 0xd4, 0x1e, 0x9c, 0x66, 0x38 }}
+ gPchChipsetInitHobGuid = { 0xc1392859, 0x1f65, 0x446e, { 0xb3, 0xf5, 0x84, 0x35, 0xfc, 0xc7, 0xd1, 0xc4 }}
+ gWdtHobGuid = { 0x65675786, 0xacca, 0x4b11, { 0x8a, 0xb7, 0xf8, 0x43, 0xaa, 0x2a, 0x8b, 0xea }}
+ gPchConfigHobGuid = { 0x524ed3ca, 0xb250, 0x49f5, { 0x94, 0xd9, 0xa2, 0xba, 0xff, 0xc7, 0x0e, 0x14 }}
+ gPchPsfErrorHobGuid = { 0x9ee875f4, 0xa463, 0x4b29, { 0x88, 0x79, 0x11, 0x2a, 0x4d, 0x05, 0x47, 0x7f }}
+ gHdAudioPreMemConfigGuid = { 0xD38F1E2B, 0x21B3, 0x43D1, { 0x9F, 0xA8, 0xA5, 0xE1, 0x78, 0x73, 0x1E, 0x88 }}
+ gIshPreMemConfigGuid = { 0x7C24E649, 0xC1F0, 0x4CF9, { 0x87, 0x96, 0xE7, 0xA0, 0xEE, 0x34, 0x43, 0xF8 }}
+
+ gGpioLibUnlockHobGuid = { 0xA7892E49, 0x0F9F, 0x4166, { 0xB8, 0xD6, 0x8A, 0x9B, 0xD9, 0x8B, 0x17, 0x38 }}
+
+##
+## PreMem Performance
+##
+ gPerfPchPrePolicyGuid = {0x3112356F, 0xCC77, 0x4E82, {0x86, 0xD5, 0x3E, 0x25, 0xEE, 0x81, 0x92, 0xA4}}
+ gPerfPchValidateGuid = {0xD0FF37D6, 0xA569, 0x4058, {0xB3, 0xDA, 0x29, 0x0B, 0x38, 0xC5, 0x32, 0x25}}
+ gPerfPchPreMemGuid = {0xBB73E2B1, 0xB9FD, 0x4A80, {0xB8, 0x1A, 0x52, 0x39, 0xE9, 0x4D, 0x06, 0x2E}}
+ gPlatformGpioConfigGuid = {0xd66acbe3, 0x3293, 0x4ba1, {0xb0, 0x0b, 0xb3, 0x8f, 0x64, 0x8d, 0x8d, 0x5e}}
+# SouthCluster End
+#
+
+ gSocketPkgFpgaGuid = { 0x624b948f, 0x6eba, 0x4dfd, { 0x9d, 0xda, 0x10, 0xb0, 0x07, 0x3a, 0x37, 0x35 } } # {624B948F-6EBA-4DFD-9DDA-10B0073A3735}
+ gFpgaSocketVariableGuid = { 0x75839b0b, 0x0a99, 0x4233, { 0x8a, 0xa4, 0x38, 0x66, 0xf6, 0xce, 0xf4, 0xb3 } } # {75839B0B-0A99-4233-8AA4-3866F6CEF4B3}
+ gFpgaSocketPkgListGuid = { 0xa3922b1a, 0x35e4, 0x4132, { 0x9c, 0xed, 0x91, 0xd3, 0x8d, 0x71, 0x71, 0xd8 } } # {A3922B1A-35E4-4132-9CED-91D38D7171D8}
+ gFpgaFormSetGuid = { 0x22819110, 0x7F6F, 0x4852, { 0xB4, 0xBB, 0x13, 0xA7, 0x70, 0x14, 0x9B, 0x0C } } # {22819110-7F6F-4852-B4BB-13A770149B0C}
+ gFpgaSocketHobGuid = { 0xd759c710, 0x49ea, 0x4d26, { 0x9f, 0x7c, 0xde, 0x10, 0x64, 0x87, 0x6e, 0x2f } } # {D759C710-49EA-4D26-9F7C-DE1064876E2F}
+ gFpgaSocketBbsGbeGuid = { 0x28b225ef, 0xe6b1, 0x4dc0, { 0x8d, 0x4d, 0x49, 0xef, 0xc8, 0x57, 0xcc, 0xdf } } # {28B225EF-E6B1-4dc0-8D4D-49EFC857CCDF}
+ gFpgaSocketBbsPcieGuid = { 0xe4d662cd, 0x7ccb, 0x4cb5, { 0xae, 0xce, 0x4e, 0xea, 0x39, 0x8f, 0xf8, 0xe4 } } # {E4D662CD-7CCB-4cb5-AECE-4EEA398FF8E4}
+ gFpgaSocketN4PeGuid = { 0x78d87f9a, 0x321e, 0x4a07, { 0x87, 0x5f, 0x8d, 0x83, 0xa3, 0xd0, 0x6e, 0x59 } } # {78D87F9A-321E-4a07-875F-8D83A3D06E59}
+ gFpgaErrorRecordGuid = { 0x09fdcb1e, 0xe08b, 0x4b64, { 0x89, 0x0c, 0x70, 0xe3, 0x17, 0x4b, 0xe0, 0x7a } }
+ gEfiSmmPeiSmramMemoryReserveGuid = { 0x6dadf1d1, 0xd4cc, 0x4910, { 0xbb, 0x6e, 0x82, 0xb1, 0xfd, 0x80, 0xff, 0x3d } }
+ gEfiAfterPlatformLocksEventGuid = { 0x1c5fdaf2, 0x9fb3, 0x431b, { 0x8e, 0xcd, 0xb7, 0xd3, 0x5c, 0xbe, 0xfa, 0xe9 } }
+ gEfiPlatformTxtDeviceMemoryGuid = { 0x73d1d476, 0xa7c9, 0x4efd, { 0x8f, 0x8b, 0xd5, 0x32, 0xef, 0x38, 0x17, 0x08 } }
+ gEmulationHobGuid = { 0xbea8d1f4, 0xc2fd, 0x4d74, { 0xbd, 0xf2, 0xb7, 0xb5, 0x40, 0x34, 0xd7, 0xc0 } } # {BEA8D1F4-C2FD-4d74-BDF2-B7B54034D7C0}
+ gEmulationDfxVariableGuid = { 0x41266ead, 0x701c, 0x461f, { 0xa6, 0xb1, 0x42, 0xcd, 0x38, 0x7d, 0x1a, 0x6e } } # {41266EAD-701C-461f-A6B1-42CD387D1A6E}
+ gEmulationFormSetGuid = { 0x52b3b56e, 0xe716, 0x455f, { 0xa5, 0xe3, 0xb3, 0x14, 0xf1, 0x8e, 0x6c, 0x5d } } # {52B3B56E-E716-455f-A5E3-B314F18E6C5D}
+ gCsrPseudoOffsetTableGuid = { 0x5921E6F4, 0xD672, 0x45CA, { 0xBF, 0xF1, 0x34, 0x47, 0xA4, 0x1E, 0x21, 0x4A } }
+ gEfiKtiEparamInfoGuid = { 0xaac08905, 0x6700, 0x48aa, { 0xb8, 0x8c, 0xca, 0x1e, 0x53, 0xc5, 0x5d, 0xa0 } } # {AAC08905-6700-48aa-B88C-CA1E53C55DA0}
+ gIioSiPolicyHobGuid = { 0x353bb17b, 0x74ac, 0x4895, { 0xb4, 0x61, 0x2c, 0x8c, 0x97, 0x68, 0x30, 0xe6 } }
+ gIioPcieConfigGuid = { 0x5cd68841, 0x16c0, 0x4f8e, { 0xba, 0xb, 0x94, 0x7c, 0xa3, 0x47, 0xb7, 0xa0 } }
+ gPeiPciMmioResMapHobGuid = { 0xd8c98608, 0x40c4, 0x4ba6, { 0x85, 0x04, 0x1d, 0x23, 0xf2, 0xa5, 0x4b, 0x4e } } # {d8c98608-40c4-4ba6-8504-1d23f2a54b4e}
+ gImr2BaseAddressHobGuid = { 0xea9184fe, 0x3bec, 0x436d, { 0x92, 0x14, 0x3f, 0x8c, 0xb5, 0x64, 0xdf, 0xfe } } # {EA9184FE-3BEC-436d-9214-3F8CB564DFFE}
+
+##
+## DMA Protection Event GUID
+##
+ gEfiDmaProtectionDisablingEventGroupGuid = { 0x05e32339, 0x92d4, 0x440e, { 0xb3, 0xb3, 0x9c, 0x9c, 0xbe, 0x79, 0xd3, 0x7f } } # {05E32339-92D4-440e-B3B3-9C9CBE79D37F}
+
+
+##
+## Me
+##
+ gAmtForcePushPetPolicyGuid = { 0xacc8e1e4, 0x9f9f, 0x4e40, { 0xa5, 0x7e, 0xf9, 0x9e, 0x52, 0xf3, 0x4c, 0xa5 } }
+ gAmtForcePushPetVariableGuid = { 0xd7ac94af, 0xa498, 0x45ec, { 0xbf, 0xa2, 0xa5, 0x6e, 0x95, 0x34, 0x61, 0x8b } }
+ gMeBiosExtensionSetupGuid = { 0xaf013532, 0xc828, 0x4fbd, { 0x20, 0xae, 0xfe, 0xe6, 0xaf, 0xbe, 0xdd, 0x4e } }
+ gMePlatformReadyToBootGuid = { 0x03fdf171, 0x1d67, 0x4ace, { 0xa9, 0x04, 0x3e, 0x36, 0xd3, 0x38, 0xfa, 0x74 } }
+ gMeSsdtAcpiTableStorageGuid = { 0x9a8f82d5, 0x39b1, 0x48da, { 0x92, 0xdc, 0xa2, 0x2d, 0xa8, 0x83, 0x4d, 0xf6 } }
+ gAmtPetQueueHobGuid = { 0xca0801d3, 0xafb1, 0x4dec, { 0x9b, 0x65, 0x93, 0x65, 0xec, 0xc7, 0x93, 0x6b } }
+ gAmtForcePushPetHobGuid = { 0x4efa0db6, 0x26dc, 0x4bb1, { 0xa7, 0x6f, 0x14, 0xbc, 0x63, 0x0c, 0x7b, 0x3c } }
+ gMeDataHobGuid = { 0x1e94f097, 0x5acd, 0x4089, { 0xb2, 0xe3, 0xb9, 0xa5, 0xc8, 0x79, 0xa7, 0x0c } }
+ gPciImrHobGuid = { 0x49b1eac3, 0x0cd6, 0x451e, { 0x96, 0x30, 0x92, 0x4b, 0xc2, 0x69, 0x35, 0x86 } }
+ gTpm2AcpiTableStorageGuid = { 0x7d279373, 0xeecc, 0x4d4f, { 0xae, 0x2f, 0xce, 0xc4, 0xb7, 0x06, 0xb0, 0x6a } }
+ gMeBiosPayloadHobGuid = { 0x992c52c8, 0xbc01, 0x4ecd, { 0x20, 0xbf, 0xf9, 0x57, 0x16, 0x0e, 0x9e, 0xf7 } }
+ gEfiTouchPanelGuid = { 0x91b1d27b, 0xe126, 0x48d1, { 0x82, 0x34, 0xd2, 0x8b, 0x81, 0xc8, 0x83, 0x62 } }
+ gMeFwHobGuid = { 0x52885e62, 0x4c4d, 0x9546, { 0x2d, 0xba, 0x2a, 0x84, 0x89, 0xee, 0xa8, 0xa3 } }
+ gMePeiPreMemConfigGuid = { 0x67ed113b, 0xd4ab, 0x43f5, { 0x9c, 0x3c, 0x35, 0x44, 0x15, 0xaa, 0x47, 0x5c } }
+ gMePeiConfigGuid = { 0x9bad5628, 0x657b, 0x48e3, { 0xb1, 0x11, 0xc3, 0xb9, 0xeb, 0xea, 0xee, 0x17 } }
+ gMeDxeConfigGuid = { 0xad08bacc, 0x4906, 0x4d9b, { 0xbe, 0xd1, 0x81, 0xa5, 0x2c, 0x13, 0xdb, 0xf8 } }
+ gAmtPeiConfigGuid = { 0x7254546a, 0xace3, 0x4a32, { 0x9a, 0xc2, 0xf0, 0xcc, 0x28, 0x4e, 0x1e, 0x4d } }
+ gAmtDxeConfigGuid = { 0x3f12ab6b, 0xb04d, 0x4824, { 0xbf, 0xb6, 0x3e, 0xe7, 0x5d, 0x02, 0x0b, 0x84 } }
+ gIvmProtocolGuid = { 0x3C4852D6, 0xD47B, 0x4F46, { 0xB0, 0x5E, 0xB5, 0xED, 0xC1, 0xAA, 0x44, 0x0E } }
+ gSdmProtocolGuid = { 0xDBA4D603, 0xD7ED, 0x4931, { 0x88, 0x23, 0x17, 0xAD, 0x58, 0x57, 0x05, 0xD5 } }
+ gRtmProtocolGuid = { 0x5565A099, 0x7FE2, 0x45C1, { 0xA2, 0x2B, 0xD7, 0xE9, 0xDF, 0xEA, 0x9A, 0x2E } }
+ gSvmProtocolGuid = { 0xF47ACC04, 0xD94B, 0x49CA, { 0x87, 0xA6, 0x7F, 0x7D, 0xC0, 0x3F, 0xBA, 0xF3 } }
+ gMeEopDoneHobGuid = { 0x247323af, 0xc8f1, 0x4b8c, { 0x90, 0x87, 0xaa, 0x4b, 0xa7, 0xb7, 0x6d, 0x6a } }
+ gMePreMemPolicyHobGuid = { 0xe6de74a5, 0x021b, 0x4f78, { 0xa3, 0xcd, 0x34, 0xd6, 0x7e, 0xe4, 0x82, 0xbf } }
+ gMePolicyHobGuid = { 0x0341cf17, 0xbc8f, 0x4a20, { 0xac, 0x28, 0x6c, 0x3c, 0x32, 0x4c, 0xd4, 0x17 } }
+ gAmtPolicyHobGuid = { 0x703eb2cd, 0x5ca8, 0x4233, { 0x9d, 0xa3, 0x0d, 0x2d, 0x57, 0xe6, 0x73, 0x34 } }
+ gAmtMebxDataGuid = { 0x912e1538, 0x371d, 0x4ea6, { 0xa8, 0x41, 0xd7, 0x6a, 0x08, 0x93, 0x3a, 0x70 } }
+
+ gEfiMeRcVariableGuid = { 0x2b26358d, 0xf899, 0x41c4, { 0x9b, 0xc2, 0x82, 0xa3, 0x38, 0xb9, 0x93, 0xd8 }}
+ gSpsInfoHobGuid = { 0x489d2a71, 0xba4a, 0x444c, { 0x9f, 0xe2, 0xa6, 0xb7, 0xe5, 0xcd, 0x78, 0x47 }}
+ gEfiSpsAcpiTableLocatorGuid = { 0x4896840D, 0x46BB, 0x412B, { 0xA3, 0x0A, 0xA6, 0x2A, 0xBF, 0xB3, 0x68, 0x2F }}
+ gIccGuid = { 0x64192dca, 0xd034, 0x49d2, { 0xa6, 0xde, 0x65, 0xa8, 0x29, 0xeb, 0x4c, 0x74 }}
+ gEfiMePkgTokenSpaceGuid = { 0x731d14ec, 0x7f7c, 0x4403, { 0x8c, 0x02, 0x96, 0xac, 0x8c, 0x33, 0x5c, 0x2b }}
+ gConsoleLockGuid = { 0x368cda0d, 0xcf31, 0x4b9b, { 0x8c, 0xf6, 0xe7, 0xd1, 0xbf, 0xff, 0x15, 0x7e }}
+ gMeInfoSetupGuid = { 0x78259433, 0x7b6d, 0x4db3, { 0x9a, 0xe8, 0x36, 0xc4, 0xc2, 0xc3, 0xa1, 0x7d }}
+ gMeSetupVariableGuid = { 0x5432122d, 0xd034, 0x49d2, { 0xa6, 0xde, 0x65, 0xa8, 0x29, 0xeb, 0x4c, 0x74 }}
+ gMeTypeHobGuid = { 0xc0bc8ed5, 0x078c, 0x49c7, { 0x9c, 0xf9, 0xf8, 0x73, 0xff, 0xe5, 0x50, 0x81 }}
+ gAmtConsoleVariableGuid = { 0xd9aaf1e5, 0xcd14, 0x4312, { 0x9c, 0xa4, 0x85, 0xc3, 0x0a, 0xde, 0x43, 0xe8 }}
+ gMeUefiFwHealthStatusHobGuid = { 0xa9bac5d8, 0x27a9, 0x4a32, { 0x9c, 0xda, 0xd3, 0xfb, 0x9d, 0x93, 0xac, 0x65 }}
+ gMeUmaInfoHobGuid = { 0xf70269e6, 0xc201, 0x4d18, { 0xb7, 0x4d, 0xb8, 0x32, 0x1e, 0x3a, 0xff, 0xdc }}
+
+ gSpsPeiConfigGuid = { 0x027be940, 0xbd58, 0x48f4, { 0x80, 0x19, 0x34, 0xc5, 0xee, 0x79, 0xb8, 0xda }}
+ gSpsDxeConfigGuid = { 0xf9373326, 0xda54, 0x4e31, { 0x9a, 0x08, 0x06, 0x7d, 0xcb, 0x06, 0x16, 0xbd }}
+ gSpsPolicyHobGuid = { 0xc87d4e27, 0x8023, 0x4a7e, { 0x8e, 0xc3, 0xa6, 0x3e, 0x3e, 0xb2, 0x94, 0xdc }}
+ gSpsSmmWatchdogGuid = { 0xf7ec1c4b, 0x1683, 0x403b, { 0xa8, 0x76, 0xfd, 0x3b, 0x13, 0x0f, 0x1b, 0x55 }}
+
+##
+## IE
+##
+ gEfiIeRcVariableGuid = { 0xd8b85944, 0x13b2, 0x41f9, { 0x85, 0xc6, 0xa0, 0xb1, 0x33, 0x78, 0x3e, 0x40 }}
+ gIeHobGuid = { 0x081077fa, 0x577d, 0x43b8, { 0xa8, 0xac, 0x9e, 0x0d, 0x31, 0x65, 0xf4, 0xee }}
+
+ gUboxIpInterfaceCpuGuid = { 0xfedb4f83, 0x3be3, 0x44b2, { 0x8d, 0x29, 0x72, 0xad, 0xd0, 0xb6, 0x3c, 0x18 }}
+ gUboxIpInterfacePcieGen4Guid = { 0x32c49b21, 0xd303, 0x4cfe, { 0xb7, 0xf5, 0xa1, 0x5f, 0x8f, 0x65, 0xff, 0x6e }}
+
+ gKtiIpInterfaceCpuGuid = { 0xCC75DACB, 0xA115, 0x4FAD, { 0xA7, 0xC6, 0x63, 0x0D, 0xC9, 0xA3, 0x62, 0xB7 }}
+ gKtiIpInterfacePcieGen4Guid = { 0xe899d31e, 0xaff8, 0x49cb, { 0x8c, 0x1d, 0x58, 0x94, 0x3b, 0x3a, 0x59, 0x72 }}
+
+ gPcuIpInterfaceCpuGuid = { 0x86b9e6bc, 0xacb0, 0x44cd, { 0xa4, 0xb0, 0xda, 0x8d, 0x7d, 0xba, 0xb9, 0xcc }}
+ gPcuIpInterfacePcieGen4Guid = { 0x82682b43, 0xeedb, 0x49e8, { 0xa2, 0x30, 0xfa, 0x15, 0x36, 0x52, 0x6a, 0x2a }}
+
+ gIioIpInterfaceCpuGuid = { 0x96e629a1, 0x4f87, 0x434c, { 0xac, 0xa3, 0xef, 0x27, 0xca, 0x1a, 0x5f, 0x5a }}
+ gIioIpInterfacePcieGen4Guid = { 0x0c343cae, 0x84f7, 0x4062, { 0xa5, 0x17, 0x1d, 0x5f, 0xdb, 0xc8, 0x5c, 0xa5 }}
+
+ gChaIpInterfaceCpuGuid = { 0xaa83b114, 0xb7c9, 0x4cfa, { 0xb9, 0x8e, 0x8d, 0x7a, 0x26, 0xbb, 0x8c, 0x69 }}
+ gChaIpInterfacePcieGen4Guid = { 0xe2e90cf1, 0x214c, 0x469d, { 0xb5, 0xcf, 0xc7, 0xb4, 0x86, 0x7f, 0xf1, 0xf8 }}
+
+ gM2UPcieIpInterfaceCpuGuid = { 0x793a789f, 0x9764, 0x48fd, { 0xb8, 0xc9, 0xac, 0xdd, 0xfa, 0x5b, 0x4e, 0x26 }}
+ gM2UPcieIpInterfacePcieGen4Guid = { 0x5032faf9, 0x6c56, 0x4941, { 0x94, 0x4d, 0x1f, 0xe7, 0x63, 0xe6, 0xab, 0x5f }}
+
+ gKtiSimHelpInterfaceCpuGuid = { 0xf2231017, 0xdad7, 0x4697, { 0xaa, 0xb7, 0xd8, 0x2c, 0x48, 0x4f, 0xe5, 0x7f }}
+ gKtiSimHelpInterfacePcieGen4Guid = { 0x429d26f3, 0x8a2d, 0x4fba, { 0xbf, 0x12, 0x8d, 0x9d, 0xe4, 0xef, 0xf9, 0x6d }}
+
+ gPcuMailBoxIpInterfaceCpuGuid = { 0x52ee6a0d, 0x2c64, 0x4865, { 0xa8, 0xf5, 0x2c, 0x75, 0x81, 0xf7, 0xf9, 0x2a }}
+ gPcuMailBoxIpInterfacePcieGen4Guid = { 0xb096b416, 0x520a, 0x42f0, { 0xa4, 0xb3, 0x53, 0x1d, 0x7d, 0xd5, 0x06, 0xc5 }}
+ gChipsetLockDoneGuid = { 0x76FAEB39, 0x0DDA, 0x4979, { 0xBE, 0x7B, 0x47, 0x41, 0x05, 0x05, 0x17, 0x81 }}
+
+ gFpgaIpInterfaceGuid = { 0x69FC448A, 0x28FC, 0x40E3, { 0xAB, 0x2A, 0x70, 0x22, 0xC4, 0x36, 0xCF, 0xED }}
+ gMsmIpInterfaceCpuGuid = { 0x6ebabfae, 0xcfd2, 0x4fac, { 0x96, 0xa6, 0x8b, 0x2c, 0x0f, 0xc3, 0x08, 0xbd }}
+ gSpkIpInterfaceCpuGuid = { 0x3edf7f6d, 0x2061, 0x4941, { 0xb6, 0x31, 0xdd, 0x40, 0xa0, 0xba, 0xcb, 0xad }}
+ gBiosDoneGuid = { 0xaf4c5733, 0xf4c3, 0x48ba, { 0xa7, 0x48, 0x87, 0x3e, 0x8c, 0xee, 0xd2, 0xf4 }}
+
+#
+# VTD HOB GUIDs Begin
+#
+ ## HOB GUID to get memory information after MRC is done. The hob data will be used to set the PMR ranges
+ gVtdPmrInfoDataHobGuid = {0x6fb61645, 0xf168, 0x46be, { 0x80, 0xec, 0xb5, 0x02, 0x38, 0x5e, 0xe7, 0xe7 } }
+#
+# VTD HOB GUIDs End
+#
+
+[Ppis]
+
+##
+## MdeModulePkg
+##
+gPeiCapsulePpiGuid = {0x3acf33ee, 0xd892, 0x40f4, {0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d}}
+gPeiSmmAccessPpiGuid = {0x268f33a9, 0xcccd, 0x48be, {0x88, 0x17, 0x86, 0x05, 0x3a, 0xc3, 0x2e, 0xd6}}
+gPeiSmmControlPpiGuid = {0x61c68702, 0x4d7e, 0x4f43, {0x8d, 0xef, 0xa7, 0x43, 0x05, 0xce, 0x74, 0xc5}}
+
+ gPeiBaseMemoryTestPpiGuid = { 0xb6ec423c, 0x21d2, 0x490d, { 0x85, 0xc6, 0xdd, 0x58, 0x64, 0xea, 0xa6, 0x74 }}
+ gPeiPlatformMemorySizePpiGuid = { 0x9a7ef41e, 0xc140, 0x4bd1, { 0xb8, 0x84, 0x1e, 0x11, 0x24, 0x0b, 0x4c, 0xe6 }}
+ gEfiPeiMpServicesPpiGuid = { 0xee16160a, 0xe8be, 0x47a6, { 0x82, 0x0a, 0xc6, 0x90, 0x0d, 0xb0, 0x25, 0x0a }}
+ gSgxInitPpiGuid = { 0xD8163BA4, 0xEFA8, 0x411E, { 0xA0, 0x32, 0x05, 0x0D, 0x56, 0xE9, 0xAF, 0x74 }}
+
+ gEndOfSiInitPpiGuid = { 0xE2E3D5D1, 0x8356, 0x4F96, { 0x9C, 0x9E, 0x2E, 0xC3, 0x48, 0x1D, 0xEA, 0x88 }}
+ gMeBeforeDidSentPpiGuid = {0xd497b143, 0xf3ef, 0x4192, {0xa8, 0xc5, 0x5e, 0xf6, 0xcd, 0x6e, 0x4c, 0x87}}
+
+##
+## Common
+##
+ gSiPolicyPpiGuid = {0xaebffa01, 0x7edc, 0x49ff, {0x8d, 0x88, 0xcb, 0x84, 0x8c, 0x5e, 0x86, 0x70}}
+ gSiPreMemPolicyPpiGuid = {0xc133fe57, 0x17c7, 0x4b09, {0x8b, 0x3c, 0x97, 0xc1, 0x89, 0xd0, 0xab, 0x8d}}
+ gPeiOemIioHooksPpiGuid = { 0x5265657a, 0xbfac, 0x468e, { 0xae, 0x81, 0xc, 0x40, 0x7a, 0x1, 0xec, 0x37 }}
+
+#
+# KTI RC
+#
+ gEfiAfterKtiRcGuid = { 0x6f079b18, 0x0591, 0x4554, { 0xbb, 0x8a, 0xfb, 0x95, 0xb1, 0xa5, 0x3f, 0x6b }}
+
+#
+# Security
+#
+ gSecurityAppSgx3v0PpiGuid = { 0x4358eeb8, 0xbebf, 0x4f33, { 0xb5, 0xe7, 0x3b, 0xcb, 0x75, 0xb7, 0xc2, 0x1c }}
+ gSecurityFruCpuFeatureSgx3v0PpiGuid = { 0xa56c1a20, 0x9011, 0x4e1c, { 0x8d, 0x8a, 0x31, 0xff, 0x0b, 0xdf, 0x6c, 0x7d }}
+
+#
+# SouthCluster
+#
+ gPchPmcXramOffsetDataPpiGuid = { 0xc1392859, 0x1f65, 0x446e, { 0xa3, 0xf6, 0x85, 0x36, 0xfc, 0xc7, 0xd1, 0xc4 }}
+ gPchPlatformPolicyPpiGuid = { 0xdfe2b897, 0xe8e, 0x4926, { 0xbc, 0x69, 0xe5, 0xed, 0xd3, 0xf9, 0x38, 0xe1 }}
+ gPchIpInfoPpiGuid = { 0xf4a29776, 0x0ff9, 0x4b5c, { 0xb6, 0x9d, 0x88, 0x45, 0x09, 0x9b, 0x8d, 0xa5 }}
+ gPeiUsbControllerPpiGuid = { 0x3BC1F6DE, 0x693E, 0x4547, { 0xA3, 0x00, 0x21, 0x82, 0x3C, 0xA4, 0x20, 0xB2 }}
+ gPchUsbPolicyPpiGuid = { 0xc02b0573, 0x2b4e, 0x4a31, { 0xa3, 0x1a, 0x94, 0x56, 0x7b, 0x50, 0x44, 0x2c }}
+ gPchInitPpiGuid = { 0x511e0280, 0x83ae, 0x4a21, { 0xbd, 0x57, 0x57, 0xe3, 0xa4, 0x93, 0x12, 0x17 }}
+ gWdtPpiGuid = { 0xF38D1338, 0xAF7A, 0x4FB6, { 0x91, 0xDB, 0x1A, 0x9C, 0x21, 0x83, 0x57, 0x0D }}
+ gPchDmiTcVcMapPpiGuid = { 0xed097352, 0x9041, 0x445a, { 0x80, 0xb6, 0xb2, 0x9d, 0x50, 0x9e, 0x88, 0x45 }}
+ gPeiSmbusPolicyPpiGuid = { 0x63b6e435, 0x32bc, 0x49c6, { 0x81, 0xbd, 0xb7, 0xa1, 0xa0, 0xfe, 0x1a, 0x6c }}
+ gPchResetCallbackPpiGuid = { 0x17865dc0, 0xb8b, 0x4da8, { 0x8b, 0x42, 0x7c, 0x46, 0xb8, 0x5c, 0xca, 0x4d }}
+ gPchResetEndOfPeiTypeGuid = { 0x330d4002, 0xe366, 0x4272, { 0xb5, 0xdd, 0x41, 0x61, 0x56, 0xb0, 0x5d, 0x20 }}
+ gPchPeiInitDonePpiGuid = { 0x1edcbdf9, 0xffc6, 0x4bd4, { 0x94, 0xf6, 0x19, 0x5d, 0x1d, 0xe1, 0x70, 0x56 }}
+ gPchResetPpiGuid = { 0x433e0f9f, 0x5ae, 0x410a, { 0xa0, 0xc3, 0xbf, 0x29, 0x8e, 0xcb, 0x25, 0xac }}
+ gPchHdaVerbTablePpiGuid = { 0x220307a4, 0x3670, 0x42a5, { 0xaa, 0x1, 0x32, 0x9d, 0xcd, 0x3e, 0x91, 0x6b }}
+ gPchPcieDeviceTablePpiGuid = { 0xaf4a1998, 0x4949, 0x4545, { 0x9c, 0x4c, 0xc1, 0xe7, 0xc0, 0x42, 0xe0, 0x56 }}
+ gPchSmmIoTrapControlGuid = { 0x514D2AFD, 0x2096, 0x4283, { 0x9D, 0xA6, 0x70, 0x0C, 0xD2, 0x7D, 0xC7, 0xA5 }}
+ gSaPlatformPolicyPpiGuid = { 0x573eaf99, 0xf445, 0x46b5, { 0xa5, 0xd5, 0xbc, 0x4a, 0x93, 0x35, 0x98, 0xf3 }}
+ gPeiSmmControlPpiGuid = { 0x61c68702, 0x4d7e, 0x4f43, { 0x8d, 0xef, 0xa7, 0x43, 0x5, 0xce, 0x74, 0xc5 }}
+ gPchHsioPtssTablePpiGuid = { 0x220307a4, 0x3671, 0x42b5, { 0xaa, 0x02, 0x32, 0x9d, 0xcd, 0x3e, 0x91, 0x6b }}
+ gDirtyWarmResetSignalGuid = { 0x24b9a592, 0x4cfc, 0x4c8f, { 0x86, 0xf4, 0x87, 0x28, 0x2d, 0x7f, 0x9e, 0x9c }}
+ gDirtyWarmResetGuid = { 0xe60fe263, 0xac2b, 0x43d6, { 0xb3, 0xc7, 0x0d, 0x9d, 0xdc, 0x5a, 0x99, 0x1c }}
+ gPmcDwrPreMemConfigGuid = { 0x1fb7cf2c, 0xfe7c, 0x40f7, { 0x90, 0xf9, 0x28, 0xdd, 0x63, 0x28, 0xae, 0x1a }}
+ gPchSpiPpiGuid = { 0xdade7ce3, 0x6971, 0x4b75, { 0x82, 0x5e, 0xe, 0xe0, 0xeb, 0x17, 0x72, 0x2d }}
+ gPchHsioChipsetInitSusTblDataPpiGuid = { 0x97ed4e5d, 0x01a5, 0x4a3c, { 0xb7, 0xe9, 0x1a, 0x4e, 0xa3, 0xdd, 0x23, 0xce }}
+ gPchPostMemoryConfigurationDonePpi = { 0x68607f46, 0xad96, 0x4364, { 0xb1, 0x83, 0x4e, 0x6d, 0x98, 0xed, 0x79, 0x7b }}
+#
+# SouthCluster End
+#
+ gFpgaInitPpiGuid = { 0x325e1442, 0x9be1, 0x498b, { 0xb0, 0x07, 0xbf, 0x4c, 0x38, 0xbd, 0xb0, 0xec }} # {325E1442-9BE1-498b-B007-BF4C38BDB0EC}
+ gPeiTxtScleanPpiGuid = { 0x4d5640e5, 0x2702, 0x4df8, { 0x88, 0xf4, 0x56, 0x48, 0x86, 0xfc, 0x43, 0xdc }}
+ gIioSiPolicyPpiGuid = { 0xa6231b31, 0xd78c, 0x4a32, { 0x96, 0x15, 0x56, 0x6c, 0xb6, 0xd1, 0xb1, 0xd7 }}
+ gIioPolicyPpiGuid = { 0x7960448a, 0x39ab, 0x4808, { 0xb0, 0xf6, 0x5f, 0xe0, 0x9f, 0x81, 0x6d, 0xe0 }}
+ gIioEarlyInitSignalPpiGuid = { 0x0f6539bb, 0x236d, 0x4f80, { 0x8c, 0x1e, 0x5a, 0x7e, 0x8f, 0x00, 0xd1, 0x30 }} # {0F6539BB-236D-4f80-8C1E-5A7E8F00D130}
+ gUpiSiPolicyPpiGuid = { 0x87cce352, 0xf86e, 0x4ee8, { 0x89, 0xee, 0x31, 0xc9, 0x85, 0x7d, 0x61, 0x99 }}
+ gReferenceCodePolicyPpiGuid = { 0x6f39dbf1, 0x853f, 0x4545, { 0xad, 0xb1, 0x30, 0x15, 0xd9, 0x69, 0x4a, 0xf9 }} # {6f39dbf1-853f-4545-adb1-3015d9694af9}
+ gRasRcPolicyPpiGuid = { 0xfbceb643, 0xe18b, 0x4ade, { 0x9d, 0x14, 0x9f, 0xf0, 0x5c, 0x14, 0xff, 0x5c }}
+
+#
+# Me
+#
+ gAmtStatusCodePpiGuid = { 0xca18955b, 0x4ee9, 0xd113, { 0xde, 0x06, 0x62, 0xad, 0xc2, 0x7f, 0x23, 0x7e } }
+ gHeciPpiGuid = { 0xd14319e2, 0x407a, 0x9580, { 0x8d, 0xe5, 0x51, 0xa8, 0xff, 0xc6, 0xd7, 0xd7 } }
+ gMbpSensitivePpiGuid = { 0xed7c9ce9, 0x5912, 0x4807, { 0xec, 0x90, 0x22, 0x18, 0xbc, 0x7b, 0xfc, 0x6c } }
+ gHeci3IntegratedTouchControllerGuid = { 0x3e8d0870, 0x271a, 0x4208, { 0x8e, 0xb5, 0x9a, 0xcb, 0x94, 0x02, 0xae, 0x04 } }
+ gMeDidSentPpiGuid = { 0x45dc3106, 0xef67, 0x4c71, { 0xb0, 0xf0, 0x97, 0x15, 0x9c, 0x7d, 0xbb, 0x7c } }
+
+ gPeiHeci2PpiGuid = { 0xEE0EA811, 0xFBD9, 0x4777, { 0xB9, 0x5A, 0xBA, 0x4F, 0x71, 0x10, 0x1F, 0x74 }}
+ gPlatformMeHookPpiGuid = { 0xe806424f, 0xd425, 0x4b1a, { 0xbc, 0x26, 0x5f, 0x69, 0x03, 0x89, 0xa1, 0x5a }}
+ gMeUmaPpiGuid = { 0x0100c1c8, 0x61d9, 0x498d, { 0xa9, 0xe2, 0x27, 0xe4, 0x92, 0xbe, 0x0e, 0xac }}
+ gSpsPolicyPpiGuid = { 0xcefb6938, 0x7fae, 0x4d54, { 0xbb, 0xe3, 0xe6, 0xf2, 0xf8, 0x43, 0x32, 0x72 }}
+ gMePolicyPpiGuid = { 0x1c46d34a, 0x4163, 0x02dd, { 0x56, 0x69, 0x2d, 0xa7, 0xca, 0x93, 0xeb, 0xf3 }}
+ gAmtPolicyPpiGuid = { 0x2549016d, 0x2b17, 0x4d00, { 0xb5, 0xa4, 0x1d, 0x44, 0x3a, 0x01, 0x38, 0xf8 }}
+ gSpsHwChangePpiGuid = { 0x6b30ce48, 0xc7c7, 0x4aab, { 0x89, 0x47, 0xd9, 0xcb, 0xbe, 0xac, 0x28, 0x38 }}
+#
+# IE
+#
+ gPeiIeHeciPpiGuid = { 0xaa40440f, 0xd572, 0x48f9, { 0xb8, 0x24, 0x35, 0xb7, 0x7d, 0xf2, 0x63, 0x32 }}
+ gPeiIePlatformPolicyPpiGuid = { 0x8f685891, 0x4e6f, 0x445c, { 0xbb, 0x9e, 0xe5, 0x7a, 0x28, 0xfa, 0x53, 0xa0 }}
+
+#
+# VTD PPIs Begin
+#
+ gEdkiiVTdInfoPpiGuid = { 0x8a59fcb3, 0xf191, 0x400c, { 0x97, 0x67, 0x67, 0xaf, 0x2b, 0x25, 0x68, 0x4a } }
+#
+# VTD PPIs End
+#
+
+[Protocols]
+ gEfiIioUdsProtocolGuid = { 0xa7ced760, 0xc71c, 0x4e1a, { 0xac, 0xb1, 0x89, 0x60, 0x4d, 0x52, 0x16, 0xcb } }
+ gEfiIioSystemProtocolGuid = { 0xddc3080a, 0x2740, 0x4ec2, { 0x9a, 0xa5, 0xa0, 0xad, 0xef, 0xd6, 0xff, 0x9c } }
+ gEfiCrystalRidgeGuid = { 0x22b5fc7e, 0x4ea8, 0x480a, { 0x91, 0xb0, 0xe6, 0xe9, 0xa8, 0x49, 0x3d, 0x7f } }
+ gEfiCrystalRidgeSmmGuid = { 0x558d5f05, 0xcd51, 0x48ee, { 0xa3, 0xd2, 0x76, 0xba, 0xa0, 0x7c, 0x8e, 0xa0 } }
+ gJedecNvdimmSmmProtocolGuid = { 0xf47ef644, 0x01f5, 0x4ee3, { 0xb0, 0x79, 0x4d, 0x90, 0xf4, 0x7f, 0x35, 0x95 } }
+ gEfiDcpmmProtocolGuid = { 0x25E78B4B, 0xEEF6, 0x4FDD, { 0x9D, 0xFA, 0x07, 0x88, 0x33, 0x7F, 0x77, 0xC2 } }
+ gDxeEnhancedSpeedstepProtocolGuid = { 0x00e98021, 0xf4fe, 0x46cc, { 0xab, 0x2d, 0x89, 0x4c, 0x37, 0x3a, 0xfa, 0x01 } }
+ gNgnRasProtocolGuid = { 0x1a2614a0, 0x89e7, 0x11e3, { 0x29, 0x90, 0x31, 0xd2, 0x81, 0xfe, 0xb1, 0xdc } }
+ gEfiRasMpLinkProtocolGuid = { 0x8fdc888d, 0x2162, 0x4971, { 0x81, 0xc2, 0x35, 0xd3, 0xa1, 0xaa, 0x50, 0x47 } }
+ gEfiMemRasProtocolGuid = { 0xa9685ab6, 0x97f1, 0x437e, { 0xb9, 0x0d, 0x45, 0x96, 0xac, 0xe5, 0x02, 0xf9 } }
+ gEfiNfitTableUpdateProtocolGuid = { 0x618c4d8f, 0xb60c, 0x4da6, { 0xba, 0x3c, 0x80, 0xbe, 0x38, 0xcc, 0xd7, 0xae } }
+ gAcpiPcatProtocolGuid = { 0xb12dc6a0, 0x1022, 0x46b6, { 0xb9, 0x95, 0x86, 0x46, 0xad, 0x5e, 0x5e, 0xeb } }
+ gNfitBindingProtocolGuid = { 0x97B4FA0C, 0x4D7E, 0xC2D0, { 0x67, 0x8E, 0xFB, 0x92, 0xE9, 0x6D, 0x2C, 0xC2 } }
+ gCrFwActivateProtocolGuid = { 0x67efc0b3, 0x3806, 0x42cd, { 0xbd, 0x4a, 0x6a, 0x2c, 0x02, 0xac, 0x63, 0x05 } }
+ gEfiQuiesceProtocolGuid = { 0x20d6e759, 0x4c4a, 0x40c0, { 0x95, 0x33, 0x2b, 0xf0, 0x06, 0x68, 0x50, 0xfd } }
+ gEfiErrorHandlingProtocolGuid = { 0x3ba7e14b, 0x176d, 0x4b2a, { 0x94, 0x8a, 0xc8, 0x6f, 0xb0, 0x01, 0x94, 0x3c } }
+ gEfiGlobalNvsAreaProtocolGuid = { 0x074e1e48, 0x8132, 0x47a1, { 0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc } }
+ gEfiHpIoxAccessGuid = { 0x62652b53, 0x79d9, 0x4cf2, { 0xb5, 0xaa, 0xad, 0x99, 0x81, 0x0a, 0x7f, 0x17 } }
+ gEfiCpuHotAddDataProtocolGuid = { 0x330be755, 0xfbed, 0x4f18, { 0xb9, 0xa8, 0x49, 0x58, 0x56, 0xd3, 0xd7, 0xa1 } }
+ gEfiCpuRasProtocolGuid = { 0xf084ff45, 0xf9fa, 0x4e9e, { 0x8d, 0xff, 0xe2, 0xd7, 0x80, 0xd2, 0x2c, 0xc2 } }
+ gEfiIioRasProtocolGuid = { 0x4c7e45bc, 0x8a23, 0x26cd, { 0x94, 0xad, 0x5d, 0x2c, 0x26, 0x3f, 0x25, 0xfe } }
+ gRasClvAdddcProtocol = { 0x20576248, 0xc01a, 0x439d, { 0x8c, 0xd6, 0x41, 0x8e, 0xaa, 0xbe, 0x0a, 0x29 } }
+ gRasClvSddcProtocol = { 0x5dba82cc, 0xe80d, 0x4478, { 0xa0, 0x7d, 0x39, 0x4f, 0x36, 0x2d, 0x35, 0x24 } }
+ gRasClvRankSparingProtocol = { 0xe425cf37, 0xe55b, 0x43d7, { 0xb2, 0xc6, 0xcd, 0xb9, 0xee, 0x8d, 0x25, 0xa5 } }
+ gRasClvPcieErrHandProtocol = { 0xb2bf51e0, 0x6543, 0x4acb, { 0xb0, 0x9e, 0xfd, 0x82, 0x6e, 0x1a, 0xf4, 0xc0 } }
+ gRasClvPatrolScrubProtocol = { 0x17bf72a7, 0xba65, 0x4837, { 0x86, 0x6d, 0x97, 0x9b, 0x2f, 0x2c, 0x07, 0x5e } }
+ gEfiCrystalRidgeFlushNearMemoryProtocolGuid = { 0xb43cced6, 0x4c4a, 0x4588, { 0x90, 0x48, 0xb0, 0xbb, 0x2b, 0x04, 0x01, 0xec } }
+ gAcpiPlatformProtocolGuid = { 0x6dd2a163, 0x5247, 0x4a5f, { 0xa3, 0xf2, 0xc1, 0xd8, 0x67, 0x0a, 0x05, 0x8a } }
+ gSmbiosMemInfoProtocolGuid = { 0xAE64455C, 0x09D7, 0x4C3B, { 0xA8, 0x58, 0x99, 0x07, 0x3D, 0xFF, 0x6E, 0x01 } }
+ gDxeKtiProtocolGuid = { 0x76c8dfce, 0x9908, 0x4fc2, { 0x98, 0x2f, 0x6c, 0x3, 0x2, 0xdc, 0x2f, 0x6c } }
+ gSmmKtiProtocolGuid = { 0x7bc172e, 0x2a5c, 0x47b0, { 0xaa, 0xaa, 0xaa, 0xd5, 0x30, 0xb9, 0x5b, 0x4b } }
+ gSmmEmulationSettingProtocol = { 0x93e49ce5, 0x789e, 0x4ffe, { 0xb9, 0x3a, 0xa8, 0x09, 0xbb, 0xdd, 0x89, 0xf4 } }
+ gEfiNvdimmAcpiConfigProtocolGuid = { 0x01d1d731, 0x7a00, 0x48e4, { 0xb9, 0x38, 0x1a, 0xce, 0x66, 0x5d, 0xed, 0xfb } }
+ gEfiNvdimmSmbusSmmInterfaceProtocolGuid = { 0xf8f2e702, 0x6f42, 0x4674, { 0xbe, 0x76, 0x9a, 0xe6, 0x73, 0x4f, 0xc3, 0x3b } } # {f8f2e702-6f42-4674-be76-9ae6734fc33b}
+ gEadrProtocolGuid = { 0xb03adf09, 0x3f07, 0x4d5b, { 0x80, 0x22, 0x6a, 0x21, 0x69, 0x82, 0x2a, 0xf0 } }
+ gEfiPciMapProtocolGuid = { 0xEA63B154, 0xC1DC, 0x485F, { 0x9D, 0x9A, 0xDC, 0x8B, 0xC0, 0xD1, 0x2A, 0x2B } }
+
+#
+# SouthCluster
+#
+ gPchSpiProtocolGuid = { 0xc7d289, 0x1347, 0x4de0, { 0xbf, 0x42, 0xe, 0x26, 0x9d, 0xe, 0xf3, 0x4a }}
+ gEfiActiveBiosProtocolGuid = { 0xebbe2d1b, 0x1647, 0x4bda, { 0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4, 0x1a }}
+ gEfiSerialGpioProtocolGuid = { 0xf52c3858, 0x5ef8, 0x4d41, { 0x83, 0x4e, 0xc3, 0x9e, 0xef, 0x8a, 0x45, 0xa3 }}
+ gWdtProtocolGuid = { 0xB42B8D12, 0x2ACB, 0x499a, { 0xA9, 0x20, 0xDD, 0x5B, 0xE6, 0xCF, 0x09, 0xB1 }}
+ gPchPlatformPolicyProtocolGuid = { 0x782ee5ae, 0x586b, 0x47c1, { 0xa4, 0x1d, 0xce, 0x7f, 0xa0, 0x9c, 0x25, 0x9a }}
+ gEfiPchS3SupportProtocolGuid = { 0x2224aee3, 0x8d0b, 0x480a, { 0xb2, 0x72, 0x2a, 0xbe, 0x92, 0xcd, 0x4e, 0x78 }}
+ gEfiPchInfoProtocolGuid = { 0x984eb4e9, 0x5a95, 0x41de, { 0xaa, 0xd0, 0x53, 0x66, 0x8c, 0xa5, 0x13, 0xc0 }}
+ gEfiSmmSmbusProtocolGuid = { 0x72e40094, 0x2ee1, 0x497a, { 0x8f, 0x33, 0x4c, 0x93, 0x4a, 0x9e, 0x9c, 0xc }}
+ gEfiSmmIchnDispatchExProtocolGuid = { 0x3920405b, 0xc897, 0x44da, { 0x88, 0xf3, 0x4c, 0x49, 0x8a, 0x6f, 0xf7, 0x36 }}
+ gEfiSmmIoTrapDispatchProtocolGuid = { 0xdb7f536b, 0xede4, 0x4714, { 0xa5, 0xc8, 0xe3, 0x46, 0xeb, 0xaa, 0x20, 0x1d }}
+ gPchResetCallbackProtocolGuid = { 0x3a3300ab, 0xc929, 0x487d, { 0xab, 0x34, 0x15, 0x9b, 0xc1, 0x35, 0x62, 0xc0 }}
+ gPchResetProtocolGuid = { 0xdb63592c, 0xb8cc, 0x44c8, { 0x91, 0x8c, 0x51, 0xf5, 0x34, 0x59, 0x8a, 0x5a }}
+ gEfiGlobalNvsAreaProtocolGuid = { 0x74e1e48, 0x8132, 0x47a1, { 0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc }}
+ gPchSmmIoTrapControlGuid = { 0x514D2AFD, 0x2096, 0x4283, { 0x9D, 0xA6, 0x70, 0x0C, 0xD2, 0x7D, 0xC7, 0xA5 }}
+ gEfiPchSetTmcSrcClkProtocolGuid = { 0xfbaa2549, 0x53d, 0x4012, { 0x86, 0x6c, 0x7a, 0x86, 0xcc, 0x21, 0xae, 0x21 }}
+ gPchPlatformPolicyProtocolGuid = { 0x782ee5ae, 0x586b, 0x47c1, { 0xa4, 0x1d, 0xce, 0x7f, 0xa0, 0x9c, 0x25, 0x9a }}
+ gPchInfoProtocolGuid = { 0x984eb4e9, 0x5a95, 0x41de, { 0xaa, 0xd0, 0x53, 0x66, 0x8c, 0xa5, 0x13, 0xc0 }}
+ gPchNvsAreaProtocolGuid = { 0x2E058B2B, 0xEDC1, 0x4431, { 0x87, 0xD9, 0xC6, 0xC4, 0xEA, 0x10, 0x2B, 0xE3 }}
+ gPchSerialIoUartDebugInfoProtocolGuid = { 0x2fd2b1bd, 0x0387, 0x4ec6, { 0x94, 0x1f, 0xf1, 0x4b, 0x7f, 0x1c, 0x94, 0xb6 }}
+ gExitPmAuthProtocolGuid = { 0xd088a413, 0xa70, 0x4217, { 0xba, 0x55, 0x9a, 0x3c, 0xb6, 0x5c, 0x41, 0xb3 }}
+ gPchSerialGpioProtocolGuid = { 0xf52c3858, 0x5ef8, 0x4d41, { 0x83, 0x4e, 0xc3, 0x9e, 0xef, 0x8a, 0x45, 0xa3 }}
+ gEfiLoadPeImageProtocolGuid = { 0x5CB5C776, 0x60D5, 0x45EE, { 0x88, 0x3C, 0x45, 0x27, 0x08, 0xCD, 0x74, 0x3F }}
+ gEfiSmmVariableProtocolGuid = { 0xed32d533, 0x99e6, 0x4209, { 0x9c, 0xc0, 0x2d, 0x72, 0xcd, 0xd9, 0x98, 0xa7 }}
+ gDxePchPlatformResetPolicyProtocolGuid = { 0x45ada968, 0xa8c5, 0x4f30, { 0xac, 0xd4, 0xf5, 0x13, 0xbc, 0xe5, 0xb0, 0xb3 }}
+ gDxePchPlatformPolicyProtocolGuid = { 0x4b0165a9, 0x61d6, 0x4e23, { 0xa0, 0xb5, 0x3e, 0xc7, 0x9c, 0x2e, 0x30, 0xd5 }}
+ gEfiLegacyInterruptProtocolGuid = { 0x31ce593d, 0x108a, 0x485d, { 0xad, 0xb2, 0x78, 0xf2, 0x1f, 0x29, 0x66, 0xbe }}
+ gEfiSmmIchnDispatchProtocolGuid = { 0xc50b323e, 0x9075, 0x4f2a, { 0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10, 0x85, 0xcc }}
+ gEfiLegacy8259ProtocolGuid = { 0x38321dba, 0x4fe0, 0x4e17, { 0x8a, 0xec, 0x41, 0x30, 0x55, 0xea, 0xed, 0xc1 }}
+ gPlatformEmmcInfoProtocolGuid = { 0xf103dd83, 0x3b17, 0x4e1e, { 0x9b, 0x80, 0x5d, 0xcc, 0x9c, 0x59, 0x0b, 0x2f }}
+ gPchEmmcTuningProtocolGuid = { 0x10fe7e3b, 0xdbe5, 0x4cfa, { 0x90, 0x25, 0x40, 0x02, 0xcf, 0xdd, 0xbb, 0x89 }}
+ gScsEmmcSoftwareTuningProtocolGuid = { 0x972215b2, 0x9616, 0x4de4, { 0xa9, 0x75, 0xb0, 0x74, 0x3e, 0xe1, 0x78, 0x54 }}
+ gPchTcoSmiDispatchProtocolGuid = { 0x9E71D609, 0x6D24, 0x47FD, { 0xB5, 0x72, 0x61, 0x40, 0xF8, 0xD9, 0xC2, 0xA4 }}
+ gPchPcieSmiDispatchProtocolGuid = { 0x3E7D2B56, 0x3F47, 0x42AA, { 0x8F, 0x6B, 0x22, 0xF5, 0x19, 0x81, 0x8D, 0xAB }}
+ gPchAcpiSmiDispatchProtocolGuid = { 0xD52BB262, 0xF022, 0x49EC, { 0x86, 0xD2, 0x7A, 0x29, 0x3A, 0x7A, 0x05, 0x4B }}
+ gPchGpioUnlockSmiDispatchProtocolGuid = { 0x83339EF7, 0x9392, 0x4716, { 0x8D, 0x3A, 0xD1, 0xFC, 0x67, 0xCD, 0x55, 0xDB }}
+ gPchSmiDispatchProtocolGuid = { 0xE6A81BBF, 0x873D, 0x47FD, { 0xB6, 0xBE, 0x61, 0xB3, 0xE5, 0x72, 0x09, 0x93 }}
+ gEfiSmmIchnDispatch2ProtocolGuid = { 0xe0f0cc19, 0x8912, 0x4077, { 0xbf, 0x8a, 0x6a, 0x5c, 0x27, 0xa, 0x3e, 0x65 }}
+ gEfiSmmIchnDispatch2ExProtocolGuid = { 0x8497455b, 0xb489, 0x4ac7, { 0xbd, 0x51, 0x78, 0xdf, 0x4e, 0x1f, 0x1a, 0xcd }}
+ gPchEspiSmiDispatchProtocolGuid = { 0xB3C14FF3, 0xBAE8, 0x456C, { 0x86, 0x31, 0x27, 0xFE, 0x0C, 0xEB, 0x34, 0x0C }}
+ gPchPcieIoTrapProtocolGuid = { 0xd66a1cf, 0x79ad, 0x494b, { 0x97, 0x8b, 0xb2, 0x59, 0x81, 0x68, 0x93, 0x34 }}
+ gPchSataEfiLoadProtocolGuid = { 0xaee24780, 0x4511, 0x4f23, { 0xa0, 0x28, 0xeb, 0x82, 0x4, 0xd4, 0x82, 0x9c }}
+ gPchsSataEfiLoadProtocolGuid = { 0x8580afee, 0x40ad, 0x4f63, { 0xa5, 0x48, 0x3d, 0x7f, 0x4a, 0x9, 0x86, 0x7d }}
+ gPchSmmPeriodicTimerControlGuid = { 0x6906E93B, 0x603B, 0x4A0F, { 0x86, 0x92, 0x83, 0x20, 0x04, 0xAA, 0xF2, 0xDB }}
+ gIoTrapExDispatchProtocolGuid = { 0x5B48E913, 0x707B, 0x4F9D, { 0xAF, 0x2E, 0xEE, 0x03, 0x5B, 0xCE, 0x39, 0x5D }}
+ gPchSmmSpiProtocolGuid = { 0x56521f06, 0xa62, 0x4822, { 0x99, 0x63, 0xdf, 0x1, 0x9d, 0x72, 0xc7, 0xe1 }}
+ gPchThermalLevelsProtocolGuid = { 0x813C7793, 0xD430, 0x4114, { 0x82, 0x6C, 0x8D, 0x19, 0xEF, 0x86, 0x97, 0xF1 }}
+ gPchPolicyProtocolGuid = { 0x543d5c93, 0x6a28, 0x4513, { 0x85, 0x9a, 0x82, 0xa7, 0xb9, 0x12, 0xcb, 0xbe }}
+ gPchSmmEadrSxDispatchProtocolGuid = { 0x0A97A42A, 0x6929, 0x4DE2, { 0x91, 0xC1, 0xF2, 0xC0, 0x37, 0xBA, 0xCA, 0xA5 }}
+ gPchSmmEadrResetDispatchProtocolGuid = { 0x5D49C8BA, 0xF3D2, 0x4A3C, { 0x99, 0x64, 0x64, 0x80, 0x43, 0x12, 0x5A, 0xD8 }}
+#
+# SouthCluster End
+#
+ gRasClvMirrorFailoverProtocol = { 0x66bc00dc, 0x8557, 0x4fc1, { 0x9b, 0xec, 0x13, 0x77, 0x60, 0xe2, 0x7e, 0x96 } }
+ gEfiSmmCpuServiceProtocolGuid = { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94, 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 } }
+ gEfiPciCallbackProtocolGuid = { 0x1ca0e202, 0xfe9e, 0x4776, { 0x9f, 0xaa, 0x57, 0x0c, 0x19, 0x61, 0x7a, 0x06 } }
+ gSmmPseudoOffestInfoProtocol = { 0xB5ABF7DC, 0xFD44, 0x45C5, { 0xAB, 0x5A, 0x0F, 0xE5, 0x0F, 0xB4, 0x84, 0xF9 } }
+ gDxePseudoOffestInfoProtocol = { 0x07E53E7B, 0xE480, 0x480D, { 0xB7, 0x4D, 0x21, 0xAE, 0x17, 0x9B, 0x71, 0x78 } }
+#
+# Me
+#
+ gAlertStandardFormatProtocolGuid = { 0x45de9920, 0xcd54, 0x446a, { 0xa0, 0x3c, 0x22, 0xe6, 0xfb, 0xb4, 0x51, 0xe4 } }
+ gDxeAmtPolicyGuid = { 0x6725e645, 0x4a7f, 0x9969, { 0x82, 0xec, 0xd1, 0x87, 0x21, 0xde, 0x5a, 0x57 } }
+ gAmtReadyToBootProtocolGuid = { 0xcc9d5c0b, 0x9010, 0x45f1, { 0x99, 0x3c, 0x83, 0x27, 0x67, 0xf1, 0x67, 0x77 } }
+ gHeciProtocolGuid = { 0x3c7bc880, 0x41f8, 0x4869, { 0xae, 0xfc, 0x87, 0x0a, 0x3e, 0xd2, 0x82, 0x99 } }
+ gHeciFlowProtocolGuid = { 0x1498d127, 0x123c, 0x4e52, { 0x84, 0x00, 0xcc, 0x3c, 0x9f, 0x79, 0xc4, 0x0e } }
+ gMebxProtocolGuid = { 0x01ab1829, 0xcecd, 0x4cfa, { 0xa1, 0x8c, 0xea, 0x75, 0xd6, 0x6f, 0x3e, 0x74 } }
+ gDxeMePolicyGuid = { 0xa0b5dc52, 0x4f34, 0x3990, { 0xd4, 0x91, 0x10, 0x8b, 0xe8, 0xba, 0x75, 0x42 } }
+ gDxeSpsPolicyProtocolGuid = { 0x1f549fc8, 0x14c7, 0x4fd1, { 0xa2, 0xad, 0x42, 0x71, 0xc8, 0x8b, 0x58, 0x12 }}
+ gMeInfoProtocolGuid = { 0x7523c8e4, 0x4fbe, 0x9661, { 0x29, 0x96, 0x14, 0x97, 0xff, 0x36, 0x2f, 0x3b } }
+ gPlatformMeHookProtocolGuid = { 0xbc52476e, 0xf67e, 0x4301, { 0xb2, 0x62, 0x36, 0x9c, 0x48, 0x78, 0xaa, 0xc2 } }
+ gMeNvsAreaProtocolGuid = { 0x3bffecfd, 0xd75f, 0x4975, { 0xb8, 0x88, 0x39, 0x02, 0xbd, 0x69, 0x00, 0x2b } }
+ gMePlatformGetResetTypeGuid = { 0xf46dd670, 0x36c2, 0x4437, { 0x93, 0xc5, 0x8e, 0x04, 0x65, 0x82, 0xe6, 0xc3 } }
+ gJhiProtocolGuid = { 0xccba3051, 0xa574, 0x4f9d, { 0x96, 0xf4, 0xec, 0x0d, 0x4a, 0x87, 0xbc, 0x5a } }
+ gIntegratedTouchHidProtocolGuid = { 0x3d0479c1, 0x6b19, 0x4191, { 0xb8, 0x09, 0x60, 0x08, 0xdd, 0x07, 0x97, 0x55 } }
+ gIntegratedTouchProtocolGuid = { 0x2b12e46f, 0x3c24, 0x47ff, { 0x8b, 0x89, 0xc0, 0x60, 0x2c, 0x1c, 0x61, 0x42 } }
+ gMeEopDoneProtocolGuid = { 0x8d9b3387, 0x73db, 0x456f, { 0x88, 0x9d, 0x6f, 0xfe, 0x90, 0x82, 0x64, 0x09 } }
+ gAmtSaveMebxProtocolGuid = { 0x86682c04, 0xea42, 0x49e5, { 0x96, 0x81, 0xe3, 0x32, 0xaa, 0xb0, 0x9e, 0xd7 } }
+
+ gSmmHeciProtocolGuid = { 0x7a305c6c, 0x61ae, 0x4bec, { 0xa7, 0xad, 0xec, 0xe3, 0xfb, 0x8f, 0xef, 0xd1 }}
+ gSmmMeHeci3ProtocolGuid = { 0x69735520, 0xDA83, 0x444A, { 0x93, 0xDC, 0xBD, 0xDD, 0x59, 0xE5, 0x91, 0x82 }}
+ gActiveManagementProtocolGuid = { 0xd25dc167, 0xeb6a, 0x432d, { 0x65, 0x91, 0xbf, 0x80, 0x29, 0xb0, 0x05, 0xbb }}
+ gMdesStatusCodeProtocolGuid = { 0xe5d0875a, 0xf647, 0x4e16, { 0xbe, 0x4d, 0x95, 0x02, 0x40, 0x29, 0xcc, 0x44 }}
+ gEfiMeInfoProtocolGuid = { 0x11fbfdfb, 0x10d2, 0x43e6, { 0xb5, 0xb1, 0xb4, 0x38, 0x6e, 0xdc, 0xcb, 0x9a }}
+ gEfiAmtWrapperProtocolGuid = { 0x919383de, 0xebac, 0x4924, { 0x01, 0x94, 0x52, 0x59, 0xe0, 0x0d, 0x65, 0x7a }}
+ gSpsPolicyProtocolGuid = { 0x7316b2ac, 0xc003, 0x42c8, { 0xb0, 0xf0, 0x88, 0x97, 0x4b, 0x1f, 0x4b, 0xbe }}
+ gSpsSmmHmrfpoProtocolGuid = { 0xeb48a372, 0xda75, 0x4c5d, { 0xba, 0x00, 0xa7, 0x1e, 0x32, 0xe8, 0xa0, 0x8f }}
+ gSpsSmmHmrfpoExtProtocolGuid = { 0xd34faeb7, 0x5d40, 0x4ee1, { 0x8d, 0x04, 0xb6, 0x2a, 0xf9, 0xf0, 0xf7, 0xdf }}
+ gSpsRasNotifyProtocolGuid = { 0xb0aab2cf, 0xd7ec, 0x4d4c, { 0xa6, 0xce, 0x39, 0x73, 0x8d, 0x0a, 0x29, 0xb4 }}
+ gIccOverClockingProtocolGuid = { 0xe1fc8377, 0x25a0, 0x46b9, { 0x82, 0xae, 0x07, 0x6c, 0x73, 0xc0, 0x71, 0xa9 }}
+ gIccDataProtocolGuid = { 0x346b6db3, 0x39a3, 0x400e, { 0x81, 0xbd, 0x21, 0x6d, 0xb5, 0x79, 0x74, 0x46 }}
+ gSpsSmmBiosUpdateProtocolGuid = { 0x0141540B, 0x6BC3, 0x4B38, { 0xA7, 0xAE, 0xCC, 0x71, 0x84, 0x48, 0xFE, 0x42 }}
+ gSpsSmmMeStorageProtocolGuid = { 0x1b45e3a2, 0xe498, 0x40f3, { 0x93, 0xb9, 0xb9, 0x5b, 0x7f, 0x2b, 0xf4, 0x2e }}
+#
+# IE
+#
+ gIeHeciProtocolGuid = { 0x03911e52, 0xb39b, 0x4e91, { 0xa5, 0x53, 0x95, 0x80, 0x3d, 0xc8, 0xac, 0x6a }}
+#
+# VTD Protocols Begin
+#
+ gEdkiiPlatformVTdPolicyProtocolGuid = { 0x3d17e448, 0x466, 0x4e20, { 0x99, 0x9f, 0xb2, 0xe1, 0x34, 0x88, 0xee, 0x22 }}
+#
+# VTD Protocols End
+#
+
+[PcdsFeatureFlag]
+ gPlatformTokenSpaceGuid.PcdLockCsrSsidSvidRegister|TRUE|BOOLEAN|0x10000001
+ gPlatformTokenSpaceGuid.PcdMultiPchEnabled |FALSE|BOOLEAN|0x10000003
+ gSiPkgTokenSpaceGuid.PcdSleEnable |FALSE|BOOLEAN|0xF0000007
+#gSiPkgTokenSpaceGuid.PcdIntegratedTouchEnable |FALSE|BOOLEAN|0xF000000F
+#gSiPkgTokenSpaceGuid.PcdAmtEnable |FALSE|BOOLEAN|0xF0000010
+#gSiPkgTokenSpaceGuid.PcdPttEnable |FALSE|BOOLEAN|0xF0000011
+#gSiPkgTokenSpaceGuid.PcdSiliconInitTempMemBaseAddr |0xFE600000|UINT32|0x00010055
+##
+## gSiPkgTokenSpaceGuid.PcdFwStsSmbiosType determines the SMBIOS OEM type (0x80 to 0xFF) defined
+## in SMBIOS, values 0-0x7F will be treated as disable FWSTS SMBIOS reporting.
+## FWSTS structure uses it as SMBIOS OEM type to provide FWSTS information.
+##
+#gSiPkgTokenSpaceGuid.PcdFwStsSmbiosType|0xDB|UINT8|0x00010047
+
+ gPlatformTokenSpaceGuid.PcdUseRxTxMultiCastRegisters|FALSE|BOOLEAN|0x10000002
+
+ # PMC Strap Set VDM Feature switch (soft straps update for warm-reset elimination feature)
+ gSiPkgTokenSpaceGuid.PcdPmcStrapSetVdmSupported|FALSE|BOOLEAN|0x0001000B
+
+ # Change to TRUE to enable check for sample parts
+ # If check is enabled, BIOS will not boot on a sample part
+ gSiPkgTokenSpaceGuid.PcdEnableSamplePartCheck|FALSE|BOOLEAN|0x0001000C
+
+ gSiPkgTokenSpaceGuid.PcdHardwareLocalSemaphores|FALSE|BOOLEAN|0xF0000012
+
+### [PcdsFixedAtBuild, PcdsPatchableInModule]
+[PcdsFixedAtBuild,PcdsPatchableInModule,PcdsDynamic, PcdsDynamicEx]
+#
+# SouthCluster
+#
+ ## From MdeModulePkg.dec
+ ## Default OEM ID for ACPI table creation, its length must be 0x6 bytes to follow ACPI specification.
+ gSiPkgTokenSpaceGuid.PcdAcpiDefaultOemId|"INTEL "|VOID*|0x30001034
+ ## Default OEM Table ID for ACPI table creation, it is "EDK2 ".
+ gSiPkgTokenSpaceGuid.PcdAcpiDefaultOemTableId|0x20202020324B4445|UINT64|0x30001035
+ ## Default OEM Revision for ACPI table creation.
+ gSiPkgTokenSpaceGuid.PcdAcpiDefaultOemRevision|0x00000002|UINT32|0x30001036
+ ## Default Creator ID for ACPI table creation.
+ gSiPkgTokenSpaceGuid.PcdAcpiDefaultCreatorId|0x20202020|UINT32|0x30001037
+ ## Default Creator Revision for ACPI table creation.
+ gSiPkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision|0x01000013|UINT32|0x30001038
+ gSiPkgTokenSpaceGuid.PcdSmbusBaseAddress|0x0780|UINT16|0x00010031
+ gSiPkgTokenSpaceGuid.PcdTcoBaseAddress|0x0400|UINT16|0x00010034
+
+ ##
+ ## This PCD specifies the base address of the HPET timer.
+ ## The acceptable values are 0xFED00000, 0xFED01000, 0xFED02000, and 0xFED03000
+ ##
+ gSiPkgTokenSpaceGuid.PcdSiHpetBaseAddress |0xFED00000|UINT32|0x00010057
+ ##
+ ## This PCD specifies the base address of the IO APIC.
+ ## The acceptable values are 0xFECxx000.
+ ##
+ gSiPkgTokenSpaceGuid.PcdPchIoApicBaseAddress |0xFEC00000|UINT32|0x00010058
+
+ # HSIO
+#
+# SouthCluster End
+#
+
+#
+# VTD PCDs Begin
+#
+ ## Error code for VTd error.<BR><BR>
+ # EDKII_ERROR_CODE_VTD_ERROR = (EFI_IO_BUS_UNSPECIFIED | (EFI_OEM_SPECIFIC | 0x00000000)) = 0x02008000<BR>
+ # @Prompt Error code for VTd error.
+ gSiPkgTokenSpaceGuid.PcdErrorCodeVTdError|0x02008000|UINT32|0x00000005
+#
+# VTD PCDs End
+#
+
+[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
+#
+# SouthCluster
+#
+ gSiPkgTokenSpaceGuid.PcdWakeOnRTCS5|FALSE|BOOLEAN|0x30000018
+ gSiPkgTokenSpaceGuid.PcdRtcWakeupTimeHour|0|UINT8|0x30000019
+ gSiPkgTokenSpaceGuid.PcdRtcWakeupTimeMinute|0|UINT8|0x30000020
+ gSiPkgTokenSpaceGuid.PcdRtcWakeupTimeSecond|0|UINT8|0x30000021
+ gSiPkgTokenSpaceGuid.PcdPchSataInitReg78Data|0x88880000|UINT32|0x30000007
+ gSiPkgTokenSpaceGuid.PcdPchSataInitReg88Data|0x88338822|UINT32|0x30000009
+
+
+ ##
+ ## PCI Express MMIO temporary region length in SEC phase.
+ ## Valid settings: 0x20000000/512MB, 0x10000000/256MB, 0x8000000/128MB, 0x4000000/64MB
+ ##
+ gSiPkgTokenSpaceGuid.PcdTemporaryPciExpressRegionLength|0x10000000|UINT32|0x00200005
+ #
+ # PcdFviSmbiosType determines the SMBIOS OEM type (0x80 to 0xFF) defined in SMBIOS,
+ # values 0-0x7F will be treated as disable FVI reporting.
+ # FVI structure uses it as SMBIOS OEM type to provide version information.
+ #
+ gSiPkgTokenSpaceGuid.PcdFviSmbiosType|0xDD|UINT8|0x00010037
+
+
+ ## CSM Setup value
+ gClientCommonModuleTokenSpaceGuid.PcdCsmEnable|TRUE|BOOLEAN|0x30000036
+#
+# SouthCluster End
+#
+
+ # PcdUseNvdimmFwInterface determines whether memory map code uses Intel NVDIMM firmware mailbox interface
+ # to communicate with Intel NVDIMM
+ gSiPkgTokenSpaceGuid.PcdUseNvdimmFwInterface|TRUE|BOOLEAN|0x30000040
+
+#
+# VTD PCDs Begin
+#
+ ## The mask is used to control VTd behavior.<BR><BR>
+ # BIT0: Enable IOMMU during boot (If DMAR table is installed in DXE. If VTD_INFO_PPI is installed in PEI.)
+ # BIT1: Enable IOMMU when transfer control to OS (ExitBootService in normal boot. EndOfPEI in S3)
+ # BIT2: Force no IOMMU access attribute request recording before DMAR table is installed.
+ # BIT3: Enable GENPROTRANGEs as PMRs replacement for IOMMU based DMA Protection
+ # @Prompt The policy for VTd driver behavior.
+ gSiPkgTokenSpaceGuid.PcdVTdPolicyPropertyMask|0x00|UINT8|0x00000002
+
+ ## Declares VTd PEI DMA buffer size.<BR><BR>
+ # When this PCD value is referred by platform to calculate the required
+ # memory size for PEI (InstallPeiMemory), the PMR alignment requirement
+ # needs be considered to be added with this PCD value for alignment
+ # adjustment need by AllocateAlignedPages.
+ # @Prompt The VTd PEI DMA buffer size.
+ gSiPkgTokenSpaceGuid.PcdVTdPeiDmaBufferSize|0x00400000|UINT32|0x00000003
+
+ ## Declares VTd PEI DMA buffer size for S3.<BR><BR>
+ # When this PCD value is referred by platform to calculate the required
+ # memory size for PEI S3 (InstallPeiMemory), the PMR alignment requirement
+ # needs be considered to be added with this PCD value for alignment
+ # adjustment need by AllocateAlignedPages.
+ # @Prompt The VTd PEI DMA buffer size for S3.
+ gSiPkgTokenSpaceGuid.PcdVTdPeiDmaBufferSizeS3|0x00200000|UINT32|0x00000004
+#
+# VTD PCDs End
+#
+
+[PcdsFixedAtBuild]
+ gPlatformTokenSpaceGuid.PcdUboDev|0x08|UINT8|0x3000000D
+ gPlatformTokenSpaceGuid.PcdUboFunc|0x02|UINT8|0x3000000E
+ gPlatformTokenSpaceGuid.PcdUboCpuBusNo0|0xCC|UINT8|0x3000000F
+ gPlatformTokenSpaceGuid.PcdSecInFsp|0x0|UINT32|0x30000010
+ gCpuUncoreTokenSpaceGuid.PcdFlashSecCacheRegionBase|0x00FFD00000|UINT32|0x2000000D
+ gCpuUncoreTokenSpaceGuid.PcdFlashSecCacheRegionSize|0x0000300000|UINT32|0x2000000E
+ gCpuUncoreTokenSpaceGuid.PcdFlashIcxFlashRegionBase|0x0000000000|UINT32|0x20000030
+ gCpuUncoreTokenSpaceGuid.PcdFlashIcxFlashRegionSize|0x0000000000|UINT32|0x20000031
+ gCpuUncoreTokenSpaceGuid.PcdFlashCpxFlashRegionBase|0x0000000000|UINT32|0x20000032
+ gCpuUncoreTokenSpaceGuid.PcdFlashCpxFlashRegionSize|0x0000000000|UINT32|0x20000033
+ gCpuUncoreTokenSpaceGuid.PcdFlashOemSecPeiRegionBase|0x0000000000|UINT32|0x20000040
+ gCpuUncoreTokenSpaceGuid.PcdFlashOemSecPeiRegionSize|0x0000000000|UINT32|0x20000041
+ gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamBase|0x00FE800000|UINT32|0x2000000F
+ gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamSize|0x0000200000|UINT32|0x20000010
+ gCpuUncoreTokenSpaceGuid.PcdSecDataCacheRegionPattern|0x5AA55AA5|UINT32|0x20000011
+ gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocodeBase|0xFFFB0000|UINT32|0x30000004
+ gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocodeSize|0x00010000|UINT32|0x30000005
+ ##
+ ## PCD PcdFlashNvStorageMicrocode2Base and PcdFlashNvStorageMicrocode2Size are
+ ## added for supporting the second microcode flash region as recovery backup.
+ ## Default value 0x0 which means there is no 2nd microcode region.
+ ##
+ gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocode2Base|0x0|UINT32|0x3000000A
+ gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocode2Size|0x0|UINT32|0x3000000B
+ gCpuUncoreTokenSpaceGuid.PcdWaSerializationEn|TRUE|BOOLEAN|0x40000001
+ gCpuUncoreTokenSpaceGuid.PcdMmioRule19BaseAddress|0xFC000000|UINT32|0x4000000F
+ gSiPkgTokenSpaceGuid.PcdMaxDdrioIpChannels|0x03|UINT8|0x30000006
+ gSiPkgTokenSpaceGuid.PcdMaxMcIpChannels|0x03|UINT8|0x30000008
+#
+# SouthCluster
+#
+ gSiPkgTokenSpaceGuid.PcdAcpiBaseAddress|0x500|UINT16|0x30000003
+ gSiPkgTokenSpaceGuid.PcdSmmActivationData|0x55|UINT8|0x30000005
+ gSiPkgTokenSpaceGuid.PcdSmmActivationPort|0xb2|UINT16|0x30000001
+ gSiPkgTokenSpaceGuid.PcdSmmDataPort|0xb3|UINT16|0x30000002
+ gEfiCommonPkgTokenSpaceGuid.PcdProgressCodeS3SuspendEnd|0x03078001|UINT32|0x30001033
+ gSiPkgTokenSpaceGuid.PcdFspBinaryEnable |FALSE|BOOLEAN|0x30000010
+ gSiPkgTokenSpaceGuid.PcdEmbeddedEnable|0x0|UINT8|0x30000012
+ gSiPkgTokenSpaceGuid.PcdSermEnable|TRUE|BOOLEAN|0x30000014
+ gSiPkgTokenSpaceGuid.PcdSdpsEnable|FALSE|BOOLEAN|0x30000016
+ # Added to make ADP specific changes in ServerSiliconPkg
+ gSiPkgTokenSpaceGuid.PcdAdpPchSupport|FALSE|BOOLEAN|0xF0000050
+
+ ##
+ ## Typically this should be the same with gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress.
+ ## This PCD is added for supporting different PCD type in different phases.
+ ##
+ gSiPkgTokenSpaceGuid.PcdSiPciExpressBaseAddress |0x80000000|UINT64|0x00200002
+
+ ## From MdeModulePkg.dec
+ ## Progress Code for S3 Suspend end.
+ # PROGRESS_CODE_S3_SUSPEND_END = (EFI_SOFTWARE_SMM_DRIVER | (EFI_OEM_SPECIFIC | 0x00000001)) = 0x03078001
+ gSiPkgTokenSpaceGuid.PcdProgressCodeS3SuspendEnd|0x03078001|UINT32|0x30001033
+
+ ## TraceHub Configuration
+ ## PcdTraceHubEnMode: 0 for Disabled, 1 for Internal Debugger, 2 for Host Debugger
+
+ ## TraceHub temporary disabled, until TraceHubInitialize is not working correctly. Sighting 4929727.
+ gSiPkgTokenSpaceGuid.PcdTraceHubEnMode|0x00|UINT8|0x30003001
+
+ ## PcdTraceHubEnFWTrace: 0 for Disabled, 1 for Enabled
+ gSiPkgTokenSpaceGuid.PcdTraceHubEnFwTrace|0x01|UINT8|0x30003002
+ ## PcdTraceHubDest: 0 for Mem, 1 for PTI, 2 for USB3, 3 for BSSB
+ gSiPkgTokenSpaceGuid.PcdTraceHubDest|0x02|UINT8|0x30003003
+ ## PcdTraceHubTempCsrMtbBar: Temporary CSR MTB BAR
+ gSiPkgTokenSpaceGuid.PcdTraceHubTempCsrMtbBar|0xFE100000|UINT32|0x30003004
+
+ ##
+ ## PcdEfiGcdAllocateType is using for EFI_GCD_ALLOCATE_TYPE selection
+ ## value of the struct
+ ## 0x00 EfiGcdAllocateAnySearchBottomUp
+ ## 0x01 EfiGcdAllocateMaxAddressSearchBottomUp
+ ## 0x03 EfiGcdAllocateAnySearchTopDown
+ ## 0x04 EfiGcdAllocateMaxAddressSearchTopDown
+ ##
+ ## below value should not using in this situation
+ ## 0x05 EfiGcdMaxAllocateType : design for max value of struct
+ ## 0x02 EfiGcdAllocateAddress : design for specification address allocate
+ ##
+ gSiPkgTokenSpaceGuid.PcdEfiGcdAllocateType|0x01|UINT8|0x40000000
+
+ ##
+ ## Temp MEM IO resource
+ ##
+ gSiPkgTokenSpaceGuid.PcdSiliconInitTempPciBusMin |2 |UINT8 |0x00010053
+ gSiPkgTokenSpaceGuid.PcdSiliconInitTempPciBusMax |10 |UINT8 |0x00010054
+ gSiPkgTokenSpaceGuid.PcdSiliconInitTempMemBaseAddr |0xFE600000|UINT32|0x00010055
+ gSiPkgTokenSpaceGuid.PcdSiliconInitTempMemSize |0x00200000|UINT32|0x00010056
+
+ ##
+ ## 8259 PIC
+ ##
+ gSiPkgTokenSpaceGuid.PcdDisable8259Interrupts|TRUE|BOOLEAN|0x30000017
+#
+# SouthCluster End
+#
+
+#
+# Reference Code Policy default settings
+#
+ gReferenceCodePolicyTokenSpaceGuid.PcdNumaEn |0x01|UINT8|0x00000001
+ gReferenceCodePolicyTokenSpaceGuid.PcdUmaBasedClustering |0x00|UINT8|0x0001005
+ ##
+ ## PcdUseEmulationInjection indicates if the injection values from emulation team
+ ## should take precedence to be applied in the CSR programming.
+ ## FALSE: The injection values should not be applied.
+ ## TRUE : The injection values take precedence to be applied.
+ ##
+ gReferenceCodePolicyTokenSpaceGuid.PcdUseEmulationInjection |TRUE|BOOLEAN|0x0001007
+
+ # Temperature refresh value select Auto=>0/Manula=>1
+ gSiPkgTokenSpaceGuid.PcdTempRefreshOption |0|UINT8|0x7000000A
+
+ # Temperature refresh value default, Values are in Celcius
+ gSiPkgTokenSpaceGuid.PcdHalfxRefreshValue |0x19|UINT8|0x70000001
+ gSiPkgTokenSpaceGuid.PcdTwoxRefreshValue |0x53|UINT8|0x70000002
+ gSiPkgTokenSpaceGuid.PcdFourxRefreshValue |0x5F|UINT8|0x70000003
+
+ # Temperature refresh Min Value, Values in Celcius
+ gSiPkgTokenSpaceGuid.PcdHalfxRefreshMinValue |0|UINT8|0x70000004
+ gSiPkgTokenSpaceGuid.PcdTwoxRefreshMinValue |0|UINT8|0x70000005
+ gSiPkgTokenSpaceGuid.PcdFourxRefreshMinValue |0|UINT8|0x70000006
+
+ #Temperature refresh Max Value, Calues in Celcius
+ gSiPkgTokenSpaceGuid.PcdHalfxRefreshMaxValue |0xFF|UINT8|0x70000007
+ gSiPkgTokenSpaceGuid.PcdTwoxRefreshMaxValue |0xFF|UINT8|0x70000008
+ gSiPkgTokenSpaceGuid.PcdFourxRefreshMaxValue |0xFF|UINT8|0x70000009
+
+ gSiPkgTokenSpaceGuid.PcdDdrInternalClocksOn |0|UINT8|0x7000000B
+ gSiPkgTokenSpaceGuid.PcdDdrForceBiasOn |0|UINT8|0x7000000C
+
+ #Temperature Critical temperature value in celcius
+ gSiPkgTokenSpaceGuid.PcdMaxTCriticalValue |100|UINT8|0x7000000F
+
+ #MemTrip default value
+ gSiPkgTokenSpaceGuid.PcdTempMemTripDefault |101|UINT8|0x70000010
+
+ #Temperature High Value when MemTrip Enabled
+ gEfiCpRcPkgTokenSpaceGuid.PcdTempHiMemTripEnabled |105|UINT8|0x70000011
+ #Temperature High Value when MemTrip Disabled
+ gEfiCpRcPkgTokenSpaceGuid.PcdTempHiMemTripDisabled |100|UINT8|0x70000012
+#
+# IIO CPU Trace Hub
+#
+ #
+ # This Pcd for MTB BAR of CPU Trace Hub is set with the same value as for PCH Trace Hub 0xfe100000
+ #
+ gSiPkgTokenSpaceGuid.PcdCpuTraceHubMtbBarBase|0xfe100000|UINT32|0x7000000D
+
+ #
+ # Posted CSR accesses are dynamically enabled in the code where the posted method is appropriate.
+ #
+ # PcdPostedCsrAccessSupported, if TRUE, exposes the SW mechanisms that support the posted CSR access feature.
+ # PcdPostedCsrAccessAllowedDefault defines the default setting of the option/knob that allows
+ # use of the posted CSR access feature. This PCD is only used if the platform supports
+ # the posted CSR access feature (that is, if PcdPostedCsrAccessSupported is TRUE).
+ #
+ gSiPkgTokenSpaceGuid.PcdPostedCsrAccessSupported |TRUE|BOOLEAN|0xF0000027
+ gSiPkgTokenSpaceGuid.PcdPostedCsrAccessAllowedDefault |TRUE|BOOLEAN|0xF0000029
+
+ #
+ # CPGC global sync control will synchronize CPGC test start across all selected memory controllers
+ #
+ # PcdCpgcGlobalSyncCtrlSupported, if TRUE, exposes the SW mechanisms that support the feature
+ # PcdCpgcGlobalSyncCtrlEnableDefault, if TRUE, sets the value of the BIOS knob to Enable
+ #
+ gSiPkgTokenSpaceGuid.PcdCpgcGlobalSyncCtrlSupported |FALSE|BOOLEAN|0xF0000030
+ gSiPkgTokenSpaceGuid.PcdCpgcGlobalSyncCtrlEnableDefault |FALSE|BOOLEAN|0xF0000031
+
+ gSiPkgTokenSpaceGuid.PcdPeiCoreFv |0x00000000|UINT32|0xF0000032
+
+ gSiPkgTokenSpaceGuid.ReservedN|TRUE|BOOLEAN|0xF0000033
+
+ #
+ # Sense Amp Calibration can be trained using HW FSM or SW based algorithms
+ # PcdSenseAmpCalibHwFsmSupported determines if the HW FSM is supported by the platform
+ #
+ gSiPkgTokenSpaceGuid.PcdSenseAmpCalibHwFsmSupported |FALSE|BOOLEAN|0xF0000034
+
+ gSiPkgTokenSpaceGuid.ReservedO |0|UINT8|0xF0000035
+
+ # PcdCpgcRegCacheAccessSupported, if TRUE, exposes the SW mechanisms that support CPGC register cache access feature.
+ # PcdCpgcRegCacheAccessAllowedDefault defines the default setting of the option/knob that allows
+ # use of CPGC register cache access feature. This PCD is only used if the platform supports
+ # CPGC register cache access feature (that is, if PcdCpgcRegCacheAccessSupported is TRUE).
+ #
+ gSiPkgTokenSpaceGuid.PcdCpgcRegCacheAccessSupported |TRUE|BOOLEAN|0xF0000040
+ gSiPkgTokenSpaceGuid.PcdCpgcRegCacheAccessAllowedDefault |TRUE|BOOLEAN|0xF0000041
+
+ gSiPkgTokenSpaceGuid.ReservedA |FALSE|BOOLEAN|0xF0000036
+
+ gSiPkgTokenSpaceGuid.ReservedP |FALSE|BOOLEAN|0xF0000037
+
+ #
+ #Set the PcdPeiMemoryBaseAddressDefault control whether to limit the memory used by UEFI to below 1GB
+ #PcdPeiMemoryBaseAddressDefault, if FALSE, the memory used by UEFI will be limited to below 1GB
+ #
+ gSiPkgTokenSpaceGuid.PcdPeiMemoryBaseAddressDefault |TRUE|BOOLEAN|0x30000022
+
+#
+# VTD PCDs Begin
+#
+
+ gSiPkgTokenSpaceGuid.PcdVtdSupport|FALSE|BOOLEAN|0x00000006
+
+#
+# VTD PCDs End
+#
+
+[PcdsDynamicEx]
+ gReferenceCodePolicyTokenSpaceGuid.PcdEvMode |0x00|UINT8|0x00010001
+ # ReservedC: The Mailbox Command which it gona to assert.
+ # 0x00: it will not assert
+ # 0xFF: it will assert on any error
+ # Other values: it will assert on the specified command failure
+ #
+ gReferenceCodePolicyTokenSpaceGuid.ReservedC|0x0|UINT8|0x00010003
+ #
+ # PcdWarmResetEliminationEn - if TRUE, it indicates SoC supports warm-reset elimination feature.
+ # This feature requires Silicon (hardware) support for warm-reset elimination flow to be
+ # fully functioning.
+ #
+ gSiPkgTokenSpaceGuid.PcdWarmResetEliminationEn|FALSE|BOOLEAN|0x0001000A
+ #
+ # PcdEmuBiosSkipS3MAccess - TRUE: S3M Flow is skipped; FALSE: S3M Flow is not skipped.
+ #
+ gSiPkgTokenSpaceGuid.PcdEmuBiosSkipS3MAccess|FALSE|BOOLEAN|0x0001000D
+
+ gSiPkgTokenSpaceGuid.PcdHvmModeEnabled|FALSE|BOOLEAN|0x5000000D
+ #
+ # PcdNumaAcpiDataStaticPointer: Saves the static pointer of the NumaAcpiData buffer.
+ #
+ gSiPkgTokenSpaceGuid.PcdNumaAcpiDataStaticPointer|0|UINT64|0x5000000E
+
+[PcdsDynamic, PcdsDynamicEx]
+ gPlatformTokenSpaceGuid.PcdFpgaSwSmiInputValue|0|UINT8|0x30000007
+ gPlatformTokenSpaceGuid.PcdPlatformType|0x00000000|UINT8|0x3000004A
+ gPlatformTokenSpaceGuid.ReservedB|FALSE|BOOLEAN|0x6000001D
+ gPlatformTokenSpaceGuid.PcdFlashSecOverridden|FALSE|BOOLEAN|0x6000001B
+
+##
+## ME
+##
+ gEfiMePkgTokenSpaceGuid.PcdMePlatformResetType|0x00|UINT32|0x50000008
+##
+## gSiPkgTokenSpaceGuid.PcdFwStsSmbiosType determines the SMBIOS OEM type (0x80 to 0xFF) defined
+## in SMBIOS, values 0-0x7F will be treated as disable FWSTS SMBIOS reporting.
+## FWSTS structure uses it as SMBIOS OEM type to provide FWSTS information.
+##
+ gEfiMePkgTokenSpaceGuid.PcdFwStsSmbiosType|0xDB|UINT8|0x50000009
+
+##
+## RAS
+##
+ gSiPkgTokenSpaceGuid.PcdRasGlobaldataTableAddress|0x0|UINT64|0x20000001
+ gSiPkgTokenSpaceGuid.PcdRasIerrPresent|FALSE|BOOLEAN|0x20000002
+
+[PcdsFeatureFlag]
+ ## This PCD used by FPGA drivers to decide to install FPGA features.
+ gSocketPkgFpgaGuid.PcdSktFpgaActive|FALSE|BOOLEAN|0x1000000E
+
+ gSiPkgTokenSpaceGuid.PcdSimicsEnable |FALSE|BOOLEAN|0xF0000022
+ gSiPkgTokenSpaceGuid.PcdSiCsmEnable |FALSE|BOOLEAN|0xF0000005
+ gSiPkgTokenSpaceGuid.PcdCnlPchEnable |TRUE |BOOLEAN|0xF0000026
+ gEfiMePkgTokenSpaceGuid.PcdHeciEndOfDxeNotify |FALSE|BOOLEAN|0x5000000A
+ gEfiMePkgTokenSpaceGuid.PcdNodeManagerEnable |TRUE |BOOLEAN|0x5000000C
diff --git a/Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec b/Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec
new file mode 100644
index 0000000000..ae951e0b14
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec
@@ -0,0 +1,65 @@
+## @file
+# Component description file for the Silicon Reference Code.
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+
+[Defines]
+DEC_SPECIFICATION = 0x00010017
+PACKAGE_NAME = WhitleySiliconPkg
+PACKAGE_VERSION = 0.1
+PACKAGE_GUID = 6f1ec317-5d04-456a-8908-6290453d57ac
+
+[Includes]
+ Include
+ Cpu/Include
+ Library/BaseMemoryCoreLib/Core/Include
+ Library/BaseMemoryCoreLib/Platform
+ Pch/SouthClusterLbg
+ Pch/SouthClusterLbg/Include
+ Me/MeSps.4/Include
+ Security/Include
+ Security/Include/Guid
+
+[Guids]
+ gStatusCodeDataTypeExDebugGuid = { 0x7859daa2, 0x926e, 0x4b01, { 0x85, 0x86, 0xc6, 0x2d, 0x45, 0x64, 0x21, 0xd2 }}
+ gEfiCpRcPkgTokenSpaceGuid = { 0xfcdd2efc, 0x6ca8, 0x4d0b, { 0x9d, 0x0, 0x6f, 0x9c, 0xfa, 0x57, 0x8f, 0x98 }}
+ gReferenceCodePolicyTokenSpaceGuid = { 0x3268c52f, 0xd3b3, 0x405d, { 0xb6, 0x91, 0x14, 0x4f, 0xca, 0x42, 0xe4, 0x37 }} # {3268c52f-d3b3-405d-b691-144fca42e437}
+ gSiPkgTokenSpaceGuid = {0x977c97c1, 0x47e1, 0x4b6b, {0x96, 0x69, 0x43, 0x66, 0x99, 0xcb, 0xe4, 0x5b}}
+ gSiliconPolicyInitLibInterfaceGuid = { 0x058715d2, 0x371f, 0x486e, { 0x86, 0xf9, 0xbc, 0x7f, 0x89, 0xbc, 0x90, 0x26 }} # {058715d2-371f-486e-86f9-bc7f89bc9026}
+ gSaveHostToMemoryGuid = { 0x9da19038, 0x2085, 0x486a, { 0xad, 0x53, 0xc4, 0x97, 0xda, 0xaa, 0x20, 0x48 } }
+
+[Ppis]
+ gDynamicSiLibraryPpiGuid = { 0x4e18e22b, 0x5034, 0x4512, { 0xb7, 0xe5, 0x0b, 0xf1, 0x9d, 0xe3, 0x59, 0x8c }}
+
+[Protocols]
+ gDynamicSiLibraryProtocolGuid = { 0xb235fbed, 0x3b25, 0x4cb3, { 0x98, 0x9c, 0x8c, 0xe7, 0xec, 0x49, 0x8b, 0x7e }}
+ gDynamicSiLibrarySmmProtocolGuid = { 0x82faf3a3, 0x6226, 0x48be, {0xb0, 0x4e, 0xc2, 0xfb, 0x0f, 0x72, 0xcf, 0x2f }}
+
+[PcdsDynamicEx]
+ gEfiCpRcPkgTokenSpaceGuid.PcdPcieMmcfgTablePtr|{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}|VOID*|0x00000011
+
+ gSiPkgTokenSpaceGuid.PcdHvmModeEnabled|FALSE|BOOLEAN|0x5000000D
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdSyshostMemoryAddress|0x00000000|UINT64|0x00000048
+
+ gReferenceCodePolicyTokenSpaceGuid.ReservedD|0x0F|UINT8|0x00010002
+
+ #
+ # ReservedC: The Mailbox Command which it gona to assert.
+ # 0x00: it will not assert
+ # 0xFF: it will assert on any error
+ # Other values: it will assert on the specified command failure
+ #
+ gReferenceCodePolicyTokenSpaceGuid.ReservedC|0x0|UINT8|0x00010003
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmMsrSaveStateEnable|FALSE|BOOLEAN|0x60000014
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmUseDelayIndication|TRUE|BOOLEAN|0x60000018
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmUseBlockIndication|TRUE|BOOLEAN|0x60000019
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmProtectedModeEnable|FALSE|BOOLEAN|0x6000001C
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmRuntimeCtlHooks|FALSE|BOOLEAN|0x60000021
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 02/17] WhitleySiliconPkg: Add Includes and Libraries
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 01/17] WhitleySiliconPkg: Add DEC and DSC files Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 03/17] WhitleySiliconPkg: Add Cpu Includes Nate DeSimone
` (16 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Include/BackCompatible.h | 19 +
.../Include/ConfigBlock/TraceHubConfig.h | 65 +
.../Include/ConfigBlock/Usb2PhyConfig.h | 63 +
.../Include/ConfigBlock/UsbConfig.h | 85 +
.../WhitleySiliconPkg/Include/Cpu/CpuIds.h | 18 +
.../Include/CpuAndRevisionDefines.h | 283 +++
.../Include/EmulationConfiguration.h | 22 +
.../Intel/WhitleySiliconPkg/Include/Fpga.h | 17 +
.../WhitleySiliconPkg/Include/GpioConfig.h | 288 +++
.../Include/Guid/EmulationDfxVariable.h | 25 +
.../Include/Guid/FpgaSocketVariable.h | 39 +
.../Include/Guid/MemBootHealthGuid.h | 71 +
.../Include/Guid/MemoryMapData.h | 197 ++
.../Include/Guid/PartialMirrorGuid.h | 61 +
.../Include/Guid/PlatformInfo.h | 150 ++
.../Guid/SiliconPolicyInitLibInterface.h | 78 +
.../Include/Guid/SocketCommonRcVariable.h | 57 +
.../Include/Guid/SocketIioVariable.h | 444 ++++
.../Include/Guid/SocketMemoryVariable.h | 477 ++++
.../Include/Guid/SocketMpLinkVariable.h | 320 +++
.../Include/Guid/SocketPciResourceData.h | 60 +
.../Guid/SocketPowermanagementVariable.h | 300 +++
.../Guid/SocketProcessorCoreVariable.h | 143 ++
.../Include/Guid/SocketVariable.h | 36 +
.../Include/Guid/StatusCodeDataTypeExDebug.h | 50 +
.../WhitleySiliconPkg/Include/IioConfig.h | 398 ++++
.../Include/IioPlatformData.h | 204 ++
.../Intel/WhitleySiliconPkg/Include/IioRegs.h | 179 ++
.../Include/IioSetupDefinitions.h | 60 +
.../Include/IioUniversalData.h | 166 ++
.../WhitleySiliconPkg/Include/ImonVrSvid.h | 26 +
.../Include/KtiSetupDefinitions.h | 22 +
.../Include/Library/CompressedVariableLib.h | 35 +
.../Library/EmulationConfigurationLib.h | 34 +
.../Include/Library/MemTypeLib.h | 32 +
.../Include/Library/MemVrSvidMapLib.h | 66 +
.../Include/Library/PchInfoLib.h | 22 +
.../Include/Library/PlatformHooksLib.h | 17 +
.../Include/Library/SemaphoreLib.h | 326 +++
.../Intel/WhitleySiliconPkg/Include/MaxCore.h | 20 +
.../WhitleySiliconPkg/Include/MaxSocket.h | 20 +
.../WhitleySiliconPkg/Include/MaxThread.h | 20 +
.../WhitleySiliconPkg/Include/MemCommon.h | 41 +
.../Include/Memory/Ddr4SpdRegisters.h | 38 +
.../Include/Memory/ProcSmbChipCommon.h | 28 +
.../WhitleySiliconPkg/Include/Platform.h | 266 +++
.../Include/PlatformInfoTypes.h | 106 +
.../Include/Ppi/DynamicSiLibraryPpi.h | 474 ++++
.../Include/Ppi/MemoryPolicyPpi.h | 2112 +++++++++++++++++
.../Include/Ppi/RasImcS3Data.h | 53 +
.../Include/Ppi/UpiPolicyPpi.h | 39 +
.../Protocol/DynamicSiLibraryProtocol.h | 252 ++
.../Protocol/DynamicSiLibrarySmmProtocol.h | 60 +
.../Include/Protocol/GlobalNvsArea.h | 212 ++
.../Include/Protocol/IioUds.h | 47 +
.../Include/Protocol/PciCallback.h | 85 +
.../WhitleySiliconPkg/Include/RcVersion.h | 23 +
.../Include/ScratchpadList.h | 49 +
.../Include/SiliconUpdUpdate.h | 53 +
.../WhitleySiliconPkg/Include/SystemInfoVar.h | 93 +
.../Include/UncoreCommonIncludes.h | 111 +
.../WhitleySiliconPkg/Include/Upi/KtiDisc.h | 36 +
.../WhitleySiliconPkg/Include/Upi/KtiHost.h | 304 +++
.../WhitleySiliconPkg/Include/Upi/KtiSi.h | 32 +
.../Include/UsraAccessType.h | 291 +++
.../Core/Include/DataTypes.h | 36 +
.../BaseMemoryCoreLib/Core/Include/MemHost.h | 1051 ++++++++
.../Core/Include/MemHostChipCommon.h | 190 ++
.../BaseMemoryCoreLib/Core/Include/MemRegs.h | 25 +
.../Core/Include/MrcCommonTypes.h | 28 +
.../Core/Include/NGNDimmPlatformCfgData.h | 22 +
.../BaseMemoryCoreLib/Core/Include/SysHost.h | 193 ++
.../Core/Include/SysHostChipCommon.h | 101 +
.../BaseMemoryCoreLib/Platform/MemDefaults.h | 28 +
.../BaseMemoryCoreLib/Platform/PlatformHost.h | 35 +
.../FspWrapperPlatformLib.c | 243 ++
.../FspWrapperPlatformLib.inf | 71 +
.../Library/SetupLib/PeiSetupLib.c | 259 ++
.../Library/SetupLib/PeiSetupLib.inf | 55 +
.../Library/SetupLib/SetupLib.c | 253 ++
.../Library/SetupLib/SetupLib.inf | 59 +
.../Library/SetupLib/SetupLibNull.c | 159 ++
.../Library/SetupLib/SetupLibNull.inf | 46 +
.../SiliconPolicyInitLibShim.c | 104 +
.../SiliconPolicyInitLibShim.inf | 38 +
.../SiliconWorkaroundLibNull.c | 38 +
.../SiliconWorkaroundLibNull.inf | 50 +
87 files changed, 12904 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Platform.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h b/Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h
new file mode 100644
index 0000000000..0e9fbde11f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h
@@ -0,0 +1,19 @@
+/** @file
+ Back Compatiable temp header file
+
+ @copyright
+ Copyright 2007 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __BACK_COMPATIABLE_H__
+#define __BACK_COMPATIABLE_H__
+
+#define R_ACPI_LV2 0x14
+
+#define R_IOPORT_CMOS_UPPER_INDEX 0x72
+#define R_IOPORT_CMOS_UPPER_DATA 0x73
+
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h b/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h
new file mode 100644
index 0000000000..11b9367e9a
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h
@@ -0,0 +1,65 @@
+/** @file
+ PCH Trace Hub policy
+
+@copyright
+ Copyright 2015 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#ifndef _TRACEHUB_CONFIG_H_
+#define _TRACEHUB_CONFIG_H_
+
+#define CPU_TRACEHUB_PREMEM_CONFIG_REVISION 1
+#define PCH_TRACEHUB_PREMEM_CONFIG_REVISION 1
+
+extern EFI_GUID gPchTraceHubPreMemConfigGuid;
+
+///
+/// The TRACE_HUB_ENABLE_MODE describes TraceHub mode of operation
+///
+typedef enum {
+ TraceHubModeDisabled = 0,
+ TraceHubModeTargetDebugger = 1,
+ TraceHubModeHostDebugger = 2,
+ TraceHubModeMax
+} TRACE_HUB_ENABLE_MODE;
+
+///
+/// The TRACE_BUFFER_SIZE describes the desired TraceHub buffer size
+///
+typedef enum {
+ TraceBufferNone = 0,
+ TraceBuffer1M = SIZE_1MB,
+ TraceBuffer8M = SIZE_8MB,
+ TraceBuffer64M = SIZE_64MB,
+ TraceBuffer128M = SIZE_128MB,
+ TraceBuffer256M = SIZE_256MB,
+ TraceBuffer512M = SIZE_512MB
+} TRACE_BUFFER_SIZE;
+
+#pragma pack (push,1)
+
+///
+/// TRACE_HUB_CONFIG block describes TraceHub settings.
+///
+typedef struct {
+ /**
+ Trace hub mode. Default is disabled.
+ Target Debugger mode refers to debug tool running on target device itself and it works as a conventional PCI device;
+ Host Debugger mode refers to SUT debugged via probe on host, configured as ACPI device with PCI configuration sapce hidden.
+ <b>0 = Disable</b>; 1 = Target Debugger mode; 2 = Host Debugger mode
+ Refer to TRACE_HUB_ENABLE_MODE
+ **/
+ UINT32 EnableMode;
+ /**
+ Trace hub memory buffer region size policy.
+ The avaliable memory size options are: <b>0:0MB (none)</b>, 1:1MB, 2:8MB, 3:64MB, 4:128MB, 5:256MB, 6:512MB.
+ Refer to TRACE_BUFFER_SIZE.
+ **/
+ UINT32 MemReg0Size;
+ UINT32 MemReg1Size;
+} TRACE_HUB_CONFIG;
+
+#pragma pack (pop)
+
+#endif // _TRACEHUB_CONFIG_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h b/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h
new file mode 100644
index 0000000000..1db4d54a39
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h
@@ -0,0 +1,63 @@
+/** @file
+ USB2 PHY configuration policy
+
+@copyright
+ Copyright 2018 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#ifndef _USB2_PHY_CONFIG_H_
+#define _USB2_PHY_CONFIG_H_
+
+#define USB2_PHY_CONFIG_REVISION 1
+extern EFI_GUID gUsb2PhyConfigGuid;
+
+#pragma pack (push,1)
+
+/**
+ This structure configures per USB2 AFE settings.
+ It allows to setup the port electrical parameters.
+**/
+typedef struct {
+/** Per Port HS Preemphasis Bias (PERPORTPETXISET)
+ 000b - 0mV
+ 001b - 11.25mV
+ 010b - 16.9mV
+ 011b - 28.15mV
+ 100b - 28.15mV
+ 101b - 39.35mV
+ 110b - 45mV
+ 111b - 56.3mV
+**/
+ UINT8 Petxiset;
+/** Per Port HS Transmitter Bias (PERPORTTXISET)
+ 000b - 0mV
+ 001b - 11.25mV
+ 010b - 16.9mV
+ 011b - 28.15mV
+ 100b - 28.15mV
+ 101b - 39.35mV
+ 110b - 45mV
+ 111b - 56.3mV
+**/
+ UINT8 Txiset;
+/**
+ Per Port HS Transmitter Emphasis (IUSBTXEMPHASISEN)
+ 00b - Emphasis OFF
+ 01b - De-emphasis ON
+ 10b - Pre-emphasis ON
+ 11b - Pre-emphasis & De-emphasis ON
+**/
+ UINT8 Predeemp;
+/**
+ Per Port Half Bit Pre-emphasis (PERPORTTXPEHALF)
+ 1b - half-bit pre-emphasis
+ 0b - full-bit pre-emphasis
+**/
+ UINT8 Pehalfbit;
+} USB2_PHY_PARAMETERS;
+
+#pragma pack (pop)
+
+#endif // _USB2_PHY_CONFIG_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h b/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h
new file mode 100644
index 0000000000..8bb60137df
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h
@@ -0,0 +1,85 @@
+/** @file
+ Common USB policy shared between PCH and CPU
+ Contains general features settings for xHCI and xDCI
+
+@copyright
+ Copyright 2017 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#ifndef _USB_CONFIG_H_
+#define _USB_CONFIG_H_
+
+#define USB_CONFIG_REVISION 1
+extern EFI_GUID gUsbConfigGuid;
+
+#define MAX_USB2_PORTS 16
+#define MAX_USB3_PORTS 10
+
+#pragma pack (push,1)
+
+#define PCH_USB_OC_PINS_MAX 8 ///< Maximal possible number of USB Over Current pins
+
+///
+/// Overcurrent pins, the values match the setting of EDS, please refer to EDS for more details
+///
+typedef enum {
+ UsbOverCurrentPin0 = 0,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin2,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPin4,
+ UsbOverCurrentPin5,
+ UsbOverCurrentPin6,
+ UsbOverCurrentPin7,
+ UsbOverCurrentPinMax,
+ UsbOverCurrentPinSkip = 0xFF
+} USB_OVERCURRENT_PIN;
+
+/**
+ This structure configures per USB2.0 port settings like enabling and overcurrent protection
+**/
+typedef struct {
+ /**
+ These members describe the specific over current pin number of USB 2.0 Port N.
+ It is SW's responsibility to ensure that a given port's bit map is set only for
+ one OC pin Description. USB2 and USB3 on the same combo Port must use the same
+ OC pin (see: USB_OVERCURRENT_PIN).
+ **/
+ UINT32 OverCurrentPin : 8;
+ UINT32 Enable : 1; ///< 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 23; ///< Reserved bits
+} USB2_PORT_CONFIG;
+
+/**
+ This structure configures per USB3.x port settings like enabling and overcurrent protection
+**/
+typedef struct {
+ /**
+ These members describe the specific over current pin number of USB 2.0 Port N.
+ It is SW's responsibility to ensure that a given port's bit map is set only for
+ one OC pin Description. USB2 and USB3 on the same combo Port must use the same
+ OC pin (see: USB_OVERCURRENT_PIN).
+ **/
+ UINT32 OverCurrentPin : 8;
+ UINT32 Enable : 1; ///< 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 23; ///< Reserved bits
+} USB3_PORT_CONFIG;
+
+
+/**
+ The XDCI_CONFIG block describes the configurations
+ of the xDCI Usb Device controller.
+**/
+typedef struct {
+ /**
+ This member describes whether or not the xDCI controller should be enabled.
+ 0: Disable; <b>1: Enable</b>.
+ **/
+ UINT32 Enable : 1;
+ UINT32 RsvdBits0 : 31; ///< Reserved bits
+} XDCI_CONFIG;
+
+#pragma pack (pop)
+
+#endif // _USB_CONFIG_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h b/Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h
new file mode 100644
index 0000000000..0cb9cb6df5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h
@@ -0,0 +1,18 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPUID_REGS_H_
+#define _CPUID_REGS_H_
+
+#define CPU_FAMILY_SKX 0x5065 // Skylake/CascadeLake CPU
+#define CPU_FAMILY_ICX 0x606A // IceLake CPU
+#define EFI_CACHE_UNCACHEABLE 0
+#define EFI_CACHE_WRITEBACK 6
+
+#define APICID_MASK_BIT14_8 0x7F //current Si support programmable APICID up to 15bits
+#endif //_CPUID_REGS_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h b/Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h
new file mode 100644
index 0000000000..f94a5b3d68
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h
@@ -0,0 +1,283 @@
+/** @file
+ Defines for CPU and Revision library.
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPU_AND_REVISION_DEFINES_H_// #ifndef _CPU_AND_REVISION_LIB_H_
+#define _CPU_AND_REVISION_DEFINES_H_
+
+// CPU types
+#define CPU_SKX 0 // Skylake: Mainstream Xeon – 14nm
+#define CPU_CLX 1 // CascadeLake: Mainstream Xeon – 14nm
+#define CPU_CPX 2 // CooperLake: Mainstream Xeon – 14nm
+#define CPU_ICXSP 4 // Icelake-SP: Mainstream Xeon – 10nm Wave 1
+#define CPU_MAX 0xFF // MAX CPU limit
+
+
+// CPU Physical chop types
+#define CPU_CHOP_TYPE_LCC 0
+#define CPU_CHOP_TYPE_MCC 1
+#define CPU_CHOP_TYPE_HCC 2
+#define CPU_CHOP_TYPE_XCC 3
+
+#define MINOR_REV_MASK 0x000F
+#define MINOR_REV_BIT_WIDTH 4
+#define MAJOR_REV_MASK 0xFFF0
+
+#define MAJOR_REV_A (0x01 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_B (0x02 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_C (0x03 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_D (0x04 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_E (0x05 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_F (0x06 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_G (0x07 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_H (0x08 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_I (0x09 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_J (0x0A << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_K (0x0B << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_L (0x0C << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_M (0x0D << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_N (0x0E << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_O (0x0F << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_P (0x10 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_Q (0x11 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_R (0x12 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_S (0x13 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_T (0x14 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_U (0x15 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_V (0x16 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_W (0x17 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_X (0x18 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_Y (0x19 << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_Z (0x1A << (MINOR_REV_BIT_WIDTH))
+#define MAJOR_REV_ALL (0x1F << (MINOR_REV_BIT_WIDTH))
+
+#define MINOR_REV_0 0
+#define MINOR_REV_1 1
+#define MINOR_REV_2 2
+#define MINOR_REV_3 3
+#define MINOR_REV_4 4
+#define MINOR_REV_5 5
+#define MINOR_REV_6 6
+#define MINOR_REV_7 7
+#define MINOR_REV_8 8
+#define MINOR_REV_ALL 0xF
+
+//
+// Revision defines - Generic for all Cpu Types
+// If new revisions are needed, follow same pattern
+//
+#define REV_A0 (MAJOR_REV_A | MINOR_REV_0)
+#define REV_A1 (MAJOR_REV_A | MINOR_REV_1)
+#define REV_A2 (MAJOR_REV_A | MINOR_REV_2)
+#define REV_A3 (MAJOR_REV_A | MINOR_REV_3)
+#define REV_A4 (MAJOR_REV_A | MINOR_REV_4)
+#define REV_A5 (MAJOR_REV_A | MINOR_REV_5)
+#define REV_AX (MAJOR_REV_A | MINOR_REV_ALL)
+
+#define REV_B0 (MAJOR_REV_B | MINOR_REV_0)
+#define REV_B1 (MAJOR_REV_B | MINOR_REV_1)
+#define REV_B2 (MAJOR_REV_B | MINOR_REV_2)
+#define REV_B3 (MAJOR_REV_B | MINOR_REV_3)
+#define REV_B4 (MAJOR_REV_B | MINOR_REV_4)
+#define REV_B5 (MAJOR_REV_B | MINOR_REV_5)
+#define REV_BX (MAJOR_REV_B | MINOR_REV_ALL)
+
+#define REV_C0 (MAJOR_REV_C | MINOR_REV_0)
+#define REV_C1 (MAJOR_REV_C | MINOR_REV_1)
+#define REV_C2 (MAJOR_REV_C | MINOR_REV_2)
+#define REV_C3 (MAJOR_REV_C | MINOR_REV_3)
+#define REV_C4 (MAJOR_REV_C | MINOR_REV_4)
+#define REV_C5 (MAJOR_REV_C | MINOR_REV_5)
+#define REV_CX (MAJOR_REV_C | MINOR_REV_ALL)
+
+#define REV_D0 (MAJOR_REV_D | MINOR_REV_0)
+#define REV_D1 (MAJOR_REV_D | MINOR_REV_1)
+#define REV_D2 (MAJOR_REV_D | MINOR_REV_2)
+#define REV_D3 (MAJOR_REV_D | MINOR_REV_3)
+#define REV_D4 (MAJOR_REV_D | MINOR_REV_4)
+#define REV_D5 (MAJOR_REV_D | MINOR_REV_5)
+#define REV_DX (MAJOR_REV_D | MINOR_REV_ALL)
+
+#define REV_E0 (MAJOR_REV_E | MINOR_REV_0)
+#define REV_E1 (MAJOR_REV_E | MINOR_REV_1)
+#define REV_E2 (MAJOR_REV_E | MINOR_REV_2)
+#define REV_E3 (MAJOR_REV_E | MINOR_REV_3)
+#define REV_E4 (MAJOR_REV_E | MINOR_REV_4)
+#define REV_E5 (MAJOR_REV_E | MINOR_REV_5)
+#define REV_EX (MAJOR_REV_E | MINOR_REV_ALL)
+
+#define REV_F0 (MAJOR_REV_F | MINOR_REV_0)
+#define REV_F1 (MAJOR_REV_F | MINOR_REV_1)
+#define REV_F2 (MAJOR_REV_F | MINOR_REV_2)
+#define REV_F3 (MAJOR_REV_F | MINOR_REV_3)
+#define REV_F4 (MAJOR_REV_F | MINOR_REV_4)
+#define REV_F5 (MAJOR_REV_F | MINOR_REV_5)
+#define REV_FX (MAJOR_REV_F | MINOR_REV_ALL)
+
+#define REV_G0 (MAJOR_REV_G | MINOR_REV_0)
+#define REV_G1 (MAJOR_REV_G | MINOR_REV_1)
+#define REV_G2 (MAJOR_REV_G | MINOR_REV_2)
+#define REV_G3 (MAJOR_REV_G | MINOR_REV_3)
+#define REV_G4 (MAJOR_REV_G | MINOR_REV_4)
+#define REV_G5 (MAJOR_REV_G | MINOR_REV_5)
+#define REV_GX (MAJOR_REV_G | MINOR_REV_ALL)
+
+#define REV_H0 (MAJOR_REV_H | MINOR_REV_0)
+#define REV_H1 (MAJOR_REV_H | MINOR_REV_1)
+#define REV_H2 (MAJOR_REV_H | MINOR_REV_2)
+#define REV_H3 (MAJOR_REV_H | MINOR_REV_3)
+#define REV_H4 (MAJOR_REV_H | MINOR_REV_4)
+#define REV_H5 (MAJOR_REV_H | MINOR_REV_5)
+#define REV_HX (MAJOR_REV_H | MINOR_REV_ALL)
+
+#define REV_I0 (MAJOR_REV_I | MINOR_REV_0)
+#define REV_I1 (MAJOR_REV_I | MINOR_REV_1)
+#define REV_I2 (MAJOR_REV_I | MINOR_REV_2)
+#define REV_I3 (MAJOR_REV_I | MINOR_REV_3)
+#define REV_I4 (MAJOR_REV_I | MINOR_REV_4)
+#define REV_I5 (MAJOR_REV_I | MINOR_REV_5)
+#define REV_IX (MAJOR_REV_I | MINOR_REV_ALL)
+
+#define REV_J0 (MAJOR_REV_J | MINOR_REV_0)
+#define REV_J1 (MAJOR_REV_J | MINOR_REV_1)
+#define REV_J2 (MAJOR_REV_J | MINOR_REV_2)
+#define REV_J3 (MAJOR_REV_J | MINOR_REV_3)
+#define REV_J4 (MAJOR_REV_J | MINOR_REV_4)
+#define REV_J5 (MAJOR_REV_J | MINOR_REV_5)
+#define REV_JX (MAJOR_REV_J | MINOR_REV_ALL)
+
+#define REV_K0 (MAJOR_REV_K | MINOR_REV_0)
+#define REV_K1 (MAJOR_REV_K | MINOR_REV_1)
+#define REV_K2 (MAJOR_REV_K | MINOR_REV_2)
+#define REV_K3 (MAJOR_REV_K | MINOR_REV_3)
+#define REV_K4 (MAJOR_REV_K | MINOR_REV_4)
+#define REV_K5 (MAJOR_REV_K | MINOR_REV_5)
+#define REV_KX (MAJOR_REV_K | MINOR_REV_ALL)
+
+#define REV_L0 (MAJOR_REV_L | MINOR_REV_0)
+#define REV_L1 (MAJOR_REV_L | MINOR_REV_1)
+#define REV_L2 (MAJOR_REV_L | MINOR_REV_2)
+#define REV_L3 (MAJOR_REV_L | MINOR_REV_3)
+#define REV_L4 (MAJOR_REV_L | MINOR_REV_4)
+#define REV_L5 (MAJOR_REV_L | MINOR_REV_5)
+#define REV_LX (MAJOR_REV_L | MINOR_REV_ALL)
+
+#define REV_M0 (MAJOR_REV_M | MINOR_REV_0)
+#define REV_M1 (MAJOR_REV_M | MINOR_REV_1)
+#define REV_M2 (MAJOR_REV_M | MINOR_REV_2)
+#define REV_M3 (MAJOR_REV_M | MINOR_REV_3)
+#define REV_M4 (MAJOR_REV_M | MINOR_REV_4)
+#define REV_M5 (MAJOR_REV_M | MINOR_REV_5)
+#define REV_MX (MAJOR_REV_M | MINOR_REV_ALL)
+
+#define REV_N0 (MAJOR_REV_N | MINOR_REV_0)
+#define REV_N1 (MAJOR_REV_N | MINOR_REV_1)
+#define REV_N2 (MAJOR_REV_N | MINOR_REV_2)
+#define REV_N3 (MAJOR_REV_N | MINOR_REV_3)
+#define REV_N4 (MAJOR_REV_N | MINOR_REV_4)
+#define REV_N5 (MAJOR_REV_N | MINOR_REV_5)
+#define REV_NX (MAJOR_REV_N | MINOR_REV_ALL)
+
+#define REV_O0 (MAJOR_REV_O | MINOR_REV_0)
+#define REV_O1 (MAJOR_REV_O | MINOR_REV_1)
+#define REV_O2 (MAJOR_REV_O | MINOR_REV_2)
+#define REV_O3 (MAJOR_REV_O | MINOR_REV_3)
+#define REV_O4 (MAJOR_REV_O | MINOR_REV_4)
+#define REV_O5 (MAJOR_REV_O | MINOR_REV_5)
+#define REV_OX (MAJOR_REV_O | MINOR_REV_ALL)
+
+#define REV_P0 (MAJOR_REV_P | MINOR_REV_0)
+#define REV_P1 (MAJOR_REV_P | MINOR_REV_1)
+#define REV_P2 (MAJOR_REV_P | MINOR_REV_2)
+#define REV_P3 (MAJOR_REV_P | MINOR_REV_3)
+#define REV_P4 (MAJOR_REV_P | MINOR_REV_4)
+#define REV_P5 (MAJOR_REV_P | MINOR_REV_5)
+#define REV_PX (MAJOR_REV_P | MINOR_REV_ALL)
+
+#define REV_Q0 (MAJOR_REV_Q | MINOR_REV_0)
+#define REV_Q1 (MAJOR_REV_Q | MINOR_REV_1)
+#define REV_Q2 (MAJOR_REV_Q | MINOR_REV_2)
+#define REV_Q3 (MAJOR_REV_Q | MINOR_REV_3)
+#define REV_Q4 (MAJOR_REV_Q | MINOR_REV_4)
+#define REV_Q5 (MAJOR_REV_Q | MINOR_REV_5)
+#define REV_QX (MAJOR_REV_Q | MINOR_REV_ALL)
+
+#define REV_R0 (MAJOR_REV_R | MINOR_REV_0)
+#define REV_R1 (MAJOR_REV_R | MINOR_REV_1)
+#define REV_R2 (MAJOR_REV_R | MINOR_REV_2)
+#define REV_R3 (MAJOR_REV_R | MINOR_REV_3)
+#define REV_R4 (MAJOR_REV_R | MINOR_REV_4)
+#define REV_R5 (MAJOR_REV_R | MINOR_REV_5)
+#define REV_RX (MAJOR_REV_R | MINOR_REV_ALL)
+
+#define REV_S0 (MAJOR_REV_S | MINOR_REV_0)
+#define REV_S1 (MAJOR_REV_S | MINOR_REV_1)
+#define REV_S2 (MAJOR_REV_S | MINOR_REV_2)
+#define REV_S3 (MAJOR_REV_S | MINOR_REV_3)
+#define REV_S4 (MAJOR_REV_S | MINOR_REV_4)
+#define REV_S5 (MAJOR_REV_S | MINOR_REV_5)
+#define REV_SX (MAJOR_REV_S | MINOR_REV_ALL)
+
+#define REV_T0 (MAJOR_REV_T | MINOR_REV_0)
+#define REV_T1 (MAJOR_REV_T | MINOR_REV_1)
+#define REV_T2 (MAJOR_REV_T | MINOR_REV_2)
+#define REV_T3 (MAJOR_REV_T | MINOR_REV_3)
+#define REV_T4 (MAJOR_REV_T | MINOR_REV_4)
+#define REV_T5 (MAJOR_REV_T | MINOR_REV_5)
+#define REV_TX (MAJOR_REV_T | MINOR_REV_ALL)
+
+#define REV_U0 (MAJOR_REV_U | MINOR_REV_0)
+#define REV_U1 (MAJOR_REV_U | MINOR_REV_1)
+#define REV_U2 (MAJOR_REV_U | MINOR_REV_2)
+#define REV_U3 (MAJOR_REV_U | MINOR_REV_3)
+#define REV_U4 (MAJOR_REV_U | MINOR_REV_4)
+#define REV_U5 (MAJOR_REV_U | MINOR_REV_5)
+#define REV_UX (MAJOR_REV_U | MINOR_REV_ALL)
+
+#define REV_V0 (MAJOR_REV_V | MINOR_REV_0)
+#define REV_V1 (MAJOR_REV_V | MINOR_REV_1)
+#define REV_V2 (MAJOR_REV_V | MINOR_REV_2)
+#define REV_V3 (MAJOR_REV_V | MINOR_REV_3)
+#define REV_V4 (MAJOR_REV_V | MINOR_REV_4)
+#define REV_V5 (MAJOR_REV_V | MINOR_REV_5)
+#define REV_VX (MAJOR_REV_V | MINOR_REV_ALL)
+
+#define REV_W0 (MAJOR_REV_W | MINOR_REV_0)
+#define REV_W1 (MAJOR_REV_W | MINOR_REV_1)
+#define REV_W2 (MAJOR_REV_W | MINOR_REV_2)
+#define REV_W3 (MAJOR_REV_W | MINOR_REV_3)
+#define REV_W4 (MAJOR_REV_W | MINOR_REV_4)
+#define REV_W5 (MAJOR_REV_W | MINOR_REV_5)
+#define REV_WX (MAJOR_REV_W | MINOR_REV_ALL)
+
+#define REV_X0 (MAJOR_REV_X | MINOR_REV_0)
+#define REV_X1 (MAJOR_REV_X | MINOR_REV_1)
+#define REV_X2 (MAJOR_REV_X | MINOR_REV_2)
+#define REV_X3 (MAJOR_REV_X | MINOR_REV_3)
+#define REV_X4 (MAJOR_REV_X | MINOR_REV_4)
+#define REV_X5 (MAJOR_REV_X | MINOR_REV_5)
+#define REV_XX (MAJOR_REV_X | MINOR_REV_ALL)
+
+#define REV_Y0 (MAJOR_REV_Y | MINOR_REV_0)
+#define REV_Y1 (MAJOR_REV_Y | MINOR_REV_1)
+#define REV_Y2 (MAJOR_REV_Y | MINOR_REV_2)
+#define REV_Y3 (MAJOR_REV_Y | MINOR_REV_3)
+#define REV_Y4 (MAJOR_REV_Y | MINOR_REV_4)
+#define REV_Y5 (MAJOR_REV_Y | MINOR_REV_5)
+#define REV_YX (MAJOR_REV_Y | MINOR_REV_ALL)
+
+#define REV_Z0 (MAJOR_REV_Z | MINOR_REV_0)
+#define REV_Z1 (MAJOR_REV_Z | MINOR_REV_1)
+#define REV_Z2 (MAJOR_REV_Z | MINOR_REV_2)
+#define REV_Z3 (MAJOR_REV_Z | MINOR_REV_3)
+#define REV_Z4 (MAJOR_REV_Z | MINOR_REV_4)
+#define REV_Z5 (MAJOR_REV_Z | MINOR_REV_5)
+#define REV_ZX (MAJOR_REV_Z | MINOR_REV_ALL)
+
+#define REV_ALL (MAJOR_REV_ALL | MINOR_REV_ALL)
+#endif
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h b/Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h
new file mode 100644
index 0000000000..c15ec034ec
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h
@@ -0,0 +1,22 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EMULATION_CONFIGURATION_H_
+#define _EMULATION_CONFIGURATION_H_
+
+//
+// Emulation Setting Values
+//
+#define EMULATION_AUTO 0
+#define EMULATION_DISABLE 1
+#define EMULATION_ENABLE 2
+
+#endif // _EMULATION_CONFIGURATION_H_
+
+
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h b/Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h
new file mode 100644
index 0000000000..758b6f845d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h
@@ -0,0 +1,17 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _FPGA_DATA_H_
+#define _FPGA_DATA_H_
+
+// Max Sockets for FPGA's, for all arrays, index loops,...
+// Note: all bit mask arrays are defined as "UINT8", so if this increases
+// Those will have to be refactored to hold the new data.
+#define FPGA_MAX_SOCKET MAX_SOCKET
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h b/Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h
new file mode 100644
index 0000000000..700e629d3c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h
@@ -0,0 +1,288 @@
+/** @file
+ Header file for GpioConfig structure used by GPIO library.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _GPIO_CONFIG_H_
+#define _GPIO_CONFIG_H_
+
+#pragma pack(push, 1)
+
+///
+/// For any GpioPad usage in code use GPIO_PAD type
+///
+typedef UINT32 GPIO_PAD;
+
+
+///
+/// For any GpioGroup usage in code use GPIO_GROUP type
+///
+typedef UINT32 GPIO_GROUP;
+
+/**
+ GPIO configuration structure used for pin programming.
+ Structure contains fields that can be used to configure pad.
+**/
+typedef struct {
+ /**
+ Pad Mode
+ Pad can be set as GPIO or one of its native functions.
+ When in native mode setting Direction (except Inversion), OutputState,
+ InterruptConfig and Host Software Pad Ownership are unnecessary.
+ Refer to definition of GPIO_PAD_MODE.
+ Refer to EDS for each native mode according to the pad.
+ **/
+ UINT32 PadMode : 4;
+ /**
+ Host Software Pad Ownership
+ Set pad to ACPI mode or GPIO Driver Mode.
+ Refer to definition of GPIO_HOSTSW_OWN.
+ **/
+ UINT32 HostSoftPadOwn : 2;
+ /**
+ GPIO Direction
+ Can choose between In, In with inversion Out, both In and Out, both In with inversion and out or disabling both.
+ Refer to definition of GPIO_DIRECTION for supported settings.
+ **/
+ UINT32 Direction : 5;
+ /**
+ Output State
+ Set Pad output value.
+ Refer to definition of GPIO_OUTPUT_STATE for supported settings.
+ This setting takes place when output is enabled.
+ **/
+ UINT32 OutputState : 2;
+ /**
+ GPIO Interrupt Configuration
+ Set Pad to cause one of interrupts (IOxAPIC/SCI/SMI/NMI). This setting is applicable only if GPIO is in input mode.
+ If GPIO is set to cause an SCI then also Gpe is enabled for this pad.
+ Refer to definition of GPIO_INT_CONFIG for supported settings.
+ **/
+ UINT32 InterruptConfig : 8;
+ /**
+ GPIO Power Configuration.
+ This setting controls Pad Reset Configuration.
+ Refer to definition of GPIO_RESET_CONFIG for supported settings.
+ **/
+ UINT32 PowerConfig : 4;
+
+ /**
+ GPIO Electrical Configuration
+ This setting controls pads termination and voltage tolerance.
+ Refer to definition of GPIO_ELECTRICAL_CONFIG for supported settings.
+ **/
+ UINT32 ElectricalConfig : 7;
+
+ /**
+ GPIO Lock Configuration
+ This setting controls pads lock.
+ Refer to definition of GPIO_LOCK_CONFIG for supported settings.
+ **/
+ UINT32 LockConfig : 3;
+ /**
+ Additional GPIO configuration
+ Refer to definition of GPIO_OTHER_CONFIG for supported settings.
+ **/
+ UINT32 OtherSettings : 2;
+ UINT32 RsvdBits : 27; ///< Reserved bits for future extension
+ UINT32 RsvdBits1; ///< Reserved bits for future extension
+} GPIO_CONFIG;
+
+
+typedef enum {
+ GpioHardwareDefault = 0x0
+} GPIO_HARDWARE_DEFAULT;
+
+///
+/// GPIO Pad Mode
+///
+typedef enum {
+ GpioPadModeGpio = 0x1,
+ GpioPadModeNative1 = 0x3,
+ GpioPadModeNative2 = 0x5,
+ GpioPadModeNative3 = 0x7,
+ GpioPadModeNative4 = 0x9
+} GPIO_PAD_MODE;
+
+///
+/// Host Software Pad Ownership modes
+///
+typedef enum {
+ GpioHostOwnDefault = 0x0, ///< Leave ownership value unmodified
+ GpioHostOwnAcpi = 0x1, ///< Set HOST ownership to ACPI
+ GpioHostOwnGpio = 0x3 ///< Set HOST ownership to GPIO
+} GPIO_HOSTSW_OWN;
+
+///
+/// GPIO Direction
+///
+typedef enum {
+ GpioDirDefault = 0x0, ///< Leave pad direction setting unmodified
+ GpioDirInOut = (0x1 | (0x1 << 3)), ///< Set pad for both output and input
+ GpioDirInInvOut = (0x1 | (0x3 << 3)), ///< Set pad for both output and input with inversion
+ GpioDirIn = (0x3 | (0x1 << 3)), ///< Set pad for input only
+ GpioDirInInv = (0x3 | (0x3 << 3)), ///< Set pad for input with inversion
+ GpioDirOut = 0x5, ///< Set pad for output only
+ GpioDirNone = 0x7 ///< Disable both output and input
+} GPIO_DIRECTION;
+
+///
+/// GPIO Output State
+///
+typedef enum {
+ GpioOutDefault = 0x0, ///< Leave output value unmodified
+ GpioOutLow = 0x1, ///< Set output to low
+ GpioOutHigh = 0x3 ///< Set output to high
+} GPIO_OUTPUT_STATE;
+
+///
+/// GPIO interrupt configuration
+/// This setting is applicable only if GPIO is in input mode.
+/// GPIO_INT_CONFIG allows to choose which interrupt is generated (IOxAPIC/SCI/SMI/NMI)
+/// and how it is triggered (edge or level).
+/// Field from GpioIntNmi to GpioIntApic can be OR'ed with GpioIntLevel to GpioIntBothEdgecan
+/// to describe an interrupt e.g. GpioIntApic | GpioIntLevel
+/// If GPIO is set to cause an SCI then also Gpe is enabled for this pad.
+/// Not all GPIO are capable of generating an SMI or NMI interrupt
+///
+
+typedef enum {
+ GpioIntDefault = 0x0, ///< Leave value of interrupt routing unmodified
+ GpioIntDis = 0x1, ///< Disable IOxAPIC/SCI/SMI/NMI interrupt generation
+ GpioIntNmi = 0x3, ///< Enable NMI interrupt only
+ GpioIntSmi = 0x5, ///< Enable SMI interrupt only
+ GpioIntSci = 0x9, ///< Enable SCI interrupt only
+ GpioIntApic = 0x11, ///< Enable IOxAPIC interrupt only
+ GpioIntLevel = (0x1 << 5), ///< Set interrupt as level triggered
+ GpioIntEdge = (0x3 << 5), ///< Set interrupt as edge triggered (type of edge depends on input inversion)
+ GpioIntLvlEdgDis = (0x5 << 5), ///< Disable interrupt trigger
+ GpioIntBothEdge = (0x7 << 5) ///< Set interrupt as both edge triggered
+} GPIO_INT_CONFIG;
+
+#define GPIO_INT_CONFIG_INT_SOURCE_MASK 0x1F ///< Mask for GPIO_INT_CONFIG for interrupt source
+#define GPIO_INT_CONFIG_INT_TYPE_MASK 0xE0 ///< Mask for GPIO_INT_CONFIG for interrupt type
+
+/**
+ GPIO Power Configuration
+ GPIO_RESET_CONFIG allows to set GPIO Reset type (PADCFG_DW0.PadRstCfg) which will
+ be used to reset certain GPIO settings.
+ Refer to EDS for settings that are controllable by PadRstCfg.
+**/
+typedef enum {
+
+
+ GpioResetDefault = 0x00, ///< Leave value of pad reset unmodified
+ ///
+ /// LBG configuration
+ ///
+ GpioResetPwrGood = 0x09, ///< GPP: RSMRST; GPD: DSW_PWROK; (PadRstCfg = 00b = "Powergood")
+ GpioResetDeep = 0x0B, ///< Deep GPIO Reset (PadRstCfg = 01b = "Deep GPIO Reset")
+ GpioResetNormal = 0x0D, ///< GPIO Reset (PadRstCfg = 10b = "GPIO Reset" )
+ GpioResetResume = 0x0F, ///< GPP: Reserved; GPD: RSMRST; (PadRstCfg = 11b = "Resume Reset")
+
+ ///
+ /// New GPIO reset configuration options
+ ///
+ /**
+ Resume Reset (RSMRST)
+ GPP: PadRstCfg = 00b = "Powergood"
+ GPD: PadRstCfg = 11b = "Resume Reset"
+ Pad setting will reset on:
+ - DeepSx transition
+ - G3
+ Pad settings will not reset on:
+ - S3/S4/S5 transition
+ - Warm/Cold/Global reset
+ **/
+ GpioResumeReset = 0x01,
+ /**
+ Host Deep Reset
+ PadRstCfg = 01b = "Deep GPIO Reset"
+ Pad settings will reset on:
+ - Warm/Cold/Global reset
+ - DeepSx transition
+ - G3
+ Pad settings will not reset on:
+ - S3/S4/S5 transition
+ **/
+ GpioHostDeepReset = 0x03,
+ /**
+ Platform Reset (PLTRST)
+ PadRstCfg = 10b = "GPIO Reset"
+ Pad settings will reset on:
+ - S3/S4/S5 transition
+ - Warm/Cold/Global reset
+ - DeepSx transition
+ - G3
+ **/
+ GpioPlatformReset = 0x05,
+ /**
+ Deep Sleep Well Reset (DSW_PWROK)
+ GPP: not applicable
+ GPD: PadRstCfg = 00b = "Powergood"
+ Pad settings will reset on:
+ - G3
+ Pad settings will not reset on:
+ - S3/S4/S5 transition
+ - Warm/Cold/Global reset
+ - DeepSx transition
+ **/
+ GpioDswReset = 0x07
+} GPIO_RESET_CONFIG;
+
+
+///
+/// GPIO Electrical Configuration
+/// Set GPIO termination and Pad Tolerance (applicable only for some pads)
+/// Field from GpioTermDefault to GpioTermNative can be OR'ed with GpioTolerance1v8.
+///
+typedef enum {
+ GpioTermDefault = 0x0, ///< Leave termination setting unmodified
+ GpioTermNone = 0x1, ///< none
+ GpioTermWpd5K = 0x5, ///< 5kOhm weak pull-down
+ GpioTermWpd20K = 0x9, ///< 20kOhm weak pull-down
+ GpioTermWpu1K = 0x13, ///< 1kOhm weak pull-up
+ GpioTermWpu2K = 0x17, ///< 2kOhm weak pull-up
+ GpioTermWpu5K = 0x15, ///< 5kOhm weak pull-up
+ GpioTermWpu20K = 0x19, ///< 20kOhm weak pull-up
+ GpioTermWpu1K2K = 0x1B, ///< 1kOhm & 2kOhm weak pull-up
+ GpioTermNative = 0x1F, ///< Native function controls pads termination
+ GpioNoTolerance1v8 = (0x1 << 5), ///< Disable 1.8V pad tolerance
+ GpioTolerance1v8 = (0x3 << 5) ///< Enable 1.8V pad tolerance
+} GPIO_ELECTRICAL_CONFIG;
+
+#define GPIO_ELECTRICAL_CONFIG_TERMINATION_MASK 0x1F ///< Mask for GPIO_ELECTRICAL_CONFIG for termination value
+#define GPIO_ELECTRICAL_CONFIG_1V8_TOLERANCE_MASK 0x60 ///< Mask for GPIO_ELECTRICAL_CONFIG for 1v8 tolerance setting
+
+///
+/// GPIO LockConfiguration
+/// Set GPIO configuration lock and output state lock
+/// GpioLockPadConfig and GpioLockOutputState can be OR'ed
+///
+typedef enum {
+ GpioLockDefault = 0x0, ///< Leave lock setting unmodified
+ GpioPadConfigLock = 0x3, ///< Lock Pad Configuration
+ GpioOutputStateLock = 0x5 ///< Lock GPIO pad output value
+} GPIO_LOCK_CONFIG;
+
+///
+/// Other GPIO Configuration
+/// GPIO_OTHER_CONFIG is used for less often settings and for future extensions
+/// Supported settings:
+/// - RX raw override to '1' - allows to override input value to '1'
+/// This setting is applicable only if in input mode (both in GPIO and native usage).
+/// The override takes place at the internal pad state directly from buffer and before the RXINV.
+///
+typedef enum {
+ GpioRxRaw1Default = 0x0, ///< Use default input override value
+ GpioRxRaw1Dis = 0x1, ///< Don't override input
+ GpioRxRaw1En = 0x3 ///< Override input to '1'
+} GPIO_OTHER_CONFIG;
+
+#pragma pack(pop)
+
+#endif //_GPIO_CONFIG_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h
new file mode 100644
index 0000000000..2b7d4cc86d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h
@@ -0,0 +1,25 @@
+/** @file
+ Data format for Emulation
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __EMULATION_DFX_VARIABLE_H__
+#define __EMULATION_DFX_VARIABLE_H__
+
+#pragma pack(1)
+typedef struct {
+ UINT8 DfxUbiosGeneration;
+ UINT8 DfxHybridSystemLevelEmulation;
+ UINT8 DfxPmMsrTrace;
+} EMULATION_DFX_CONFIGURATION;
+#pragma pack()
+
+extern EFI_GUID gEmulationDfxVariableGuid;
+#define EMULATION_DFX_CONFIGURATION_NAME L"EmulationDfxConfig"
+
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h
new file mode 100644
index 0000000000..96e9f6d428
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h
@@ -0,0 +1,39 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __FPGA_SOCKET_CONFIGURATION_DATA_H__
+#define __FPGA_SOCKET_CONFIGURATION_DATA_H__
+
+#include <Fpga.h>
+
+extern EFI_GUID gFpgaSocketVariableGuid;
+#define FPGA_SOCKET_CONFIGURATION_NAME L"FpgaSocketConfig"
+
+#pragma pack(1)
+
+typedef struct {
+
+ // User Bitmap to enable the FPGA socket.
+ UINT8 FpgaSetupEnabled;
+
+ // for each socket enabled, use this Bit stream GUID Index
+ // Note: variable is Index+ 1 for unused default to be 0
+ UINT8 FpgaSocketGuid[FPGA_MAX_SOCKET];
+ // FPGA Temperature Threshold 1/2: Max value clamped at 100 C;
+ // i.e. if the SW tries to write value greater than 100 C, HW will automatically default to 100 C.
+ UINT8 FpgaThermalTH1[FPGA_MAX_SOCKET];
+ UINT8 FpgaThermalTH2[FPGA_MAX_SOCKET];
+
+ // FPGA reserved data
+ UINT8 FpgaReserved[14];
+} FPGA_SOCKET_CONFIGURATION;
+#pragma pack()
+
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h
new file mode 100644
index 0000000000..5b760117f7
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h
@@ -0,0 +1,71 @@
+/** @file
+ MemBootHealthGuid.h
+
+ Header for using Structured PCD in MemBootHealth
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MEM_BOOT_HEALTH_GUID_H_
+#define _MEM_BOOT_HEALTH_GUID_H_
+
+// Enable Mem boot health check feature
+#define MEM_BOOT_HEALTH_ENABLE 1
+// Disable Mem boot health check feature
+#define MEM_BOOT_HEALTH_DISABLE 0
+
+// Mem Boot Health check option
+// Option to choose Mem Boot Health configuration type.
+// 00=>Auto (Use defaults)
+#define MEM_BOOT_HEALTH_CONFIG_AUTO 0
+// 01=>Manual(Override defaults with setup option)
+#define MEM_BOOT_HEALTH_CONFIG_MANUAL 1
+// 02=>Disable (Disable feature)
+#define MEM_BOOT_HEALTH_CONFIG_DISABLE 2
+
+#define ENABLE_REBOOT_ON_CRITICAL_FAILURE 1
+#define DISABLE_REBOOT_ON_CRITICAL_FAILURE 0
+
+#pragma pack(1)
+typedef struct {
+
+ //
+ // Memory Boot Health Check
+ //
+ UINT8 MemBootHealthVisible; // 0 => Hide Memory boot health check option, 1 => Enable the option in setup
+
+ UINT8 MemBootHealthCheck; // 0=>Auto, 1=>Manual and 2=>Disabled Memory Boot Health Check
+
+ UINT8 ResetOnCriticalError; // 0 => Dont reboot on critical error, 1 = Reboot on critical error
+ //
+ // Memory Boot Health check parameters
+ //
+ UINT8 WarningTxDqDelayLeftEdge;
+ UINT8 WarningTxDqDelayRightEdge;
+ UINT8 WarningTxVrefLeftEdge;
+ UINT8 WarningTxVrefRightEdge;
+ UINT8 WarningRxDqsDelayLeftEdge;
+ UINT8 WarningRxDqsDelayRightEdge;
+ UINT8 WarningRxVrefLeftEdge;
+ UINT8 WarningRxVrefRightEdge;
+
+ UINT8 CriticalTxDqDelayLeftEdge;
+ UINT8 CriticalTxDqDelayRightEdge;
+ UINT8 CriticalTxVrefLeftEdge;
+ UINT8 CriticalTxVrefRightEdge;
+ UINT8 CriticalRxDqsDelayLeftEdge;
+ UINT8 CriticalRxDqsDelayRightEdge;
+ UINT8 CriticalRxVrefLeftEdge;
+ UINT8 CriticalRxVrefRightEdge;
+} MEM_BOOT_HEALTH_CONFIG;
+#pragma pack()
+
+#define MEM_BOOT_HEALTH_GUID { 0xACD56900, 0xDEFC, 0x4127, { 0xDE, 0x12, 0x32, 0xA0, 0xD2, 0x69, 0x46, 0x2F } }
+
+#define MEM_BOOT_HEALTH_SETUP_STR L"MemBootHealthConfig"
+
+extern EFI_GUID gMemBootHealthGuid;
+#endif // _MEM_BOOT_HEALTH_GUID_H_
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h
new file mode 100644
index 0000000000..1512b90881
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h
@@ -0,0 +1,197 @@
+/** @file
+ GUID used for Memory Map Data entries in the HOB list.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MEMORY_MAP_DATA_H_
+#define _MEMORY_MAP_DATA_H_
+
+#include "SysHost.h"
+#include "PartialMirrorGuid.h"
+
+#define RESERVED_2 2
+#define RESERVED_4 4
+
+//
+// System Memory Map HOB information
+//
+
+#pragma pack(1)
+struct RankDevice {
+ UINT8 enabled; // 0 = disabled, 1 = enabled
+ UINT8 logicalRank; // Logical Rank number (0 - 7)
+ UINT16 rankSize; // Units of 64 MB
+};
+
+struct PersisentDpaMap
+{
+ UINT32 perRegionDPAOffset;
+ UINT32 SPALimit;
+};
+
+typedef struct DimmDevice {
+ UINT8 Present;
+ BOOLEAN Enabled;
+ UINT8 DcpmmPresent; // 1 - This is a DCPMM
+ UINT8 X4Present;
+ UINT8 NumRanks;
+ UINT8 keyByte;
+ UINT8 actKeyByte2; // Actual module type reported by SPD
+ UINT8 actSPDModuleOrg; // Actual number of DRAM ranks and device width
+ UINT8 dimmTs; // Thermal sensor data.
+ UINT16 VolCap; // Volatile capacity (AEP DIMM only)
+ UINT16 nonVolCap; // Non-volatile capacity (AEP DIMM only)
+ UINT16 DimmSize;
+ UINT32 NVmemSize;
+ UINT16 SPDMMfgId; // Module Mfg Id from SPD
+ UINT16 VendorID;
+ UINT16 DeviceID;
+ UINT16 RevisionID;
+ UINT32 perRegionDPA; // DPA of PMEM that Nfit needs
+ struct PersisentDpaMap perDPAMap[MAX_UNIQUE_NGN_DIMM_INTERLEAVE]; // DPA map
+ UINT8 serialNumber[NGN_MAX_SERIALNUMBER_STRLEN]; // Serial Number
+ UINT8 PartNumber[NGN_MAX_PARTNUMBER_STRLEN]; // Part Number
+ UINT8 FirmwareVersionStr[NGN_FW_VER_LEN]; // Used to update the SMBIOS TYPE 17
+ struct firmwareRev FirmwareVersion; // Firmware revision
+ struct RankDevice rankList[MAX_RANK_DIMM];
+ UINT16 InterfaceFormatCode;
+ UINT16 SubsystemVendorID;
+ UINT16 SubsystemDeviceID;
+ UINT16 SubsystemRevisionID;
+ UINT16 FisVersion; // Firmware Interface Specification version
+ UINT8 DimmSku; // Dimm SKU info
+ UINT8 manufacturingLocation; // Manufacturing location for the NVDIMM
+ UINT16 manufacturingDate; // Date the NVDIMM was manufactured
+ INT32 commonTck;
+ UINT8 EnergyType; // 0: 12V aux power; 1: dedicated backup energy source; 2: no backup energy source
+ BOOLEAN NvDimmNPresent; ///< JEDEC NVDIMM-N Type Memory Present
+ UINT16 SPDRegVen; ///< Register Vendor ID in SPD
+ UINT8 CidBitMap; // SubRankPer CS for DIMM device
+} MEMMAP_DIMM_DEVICE_INFO_STRUCT;
+
+struct ChannelDevice {
+ UINT8 Enabled; // 0 = channel disabled, 1 = channel enabled
+ UINT8 Features; // Bit mask of features to enable or disable
+ UINT8 MaxDimm; // Number of DIMM
+ UINT8 NumRanks; // Number of ranks on this channel
+ UINT8 chFailed;
+ UINT8 ngnChFailed;
+ UINT8 SpareLogicalRank[MAX_SPARE_RANK]; // Logical rank, selected as Spare
+ UINT8 SparePhysicalRank[MAX_SPARE_RANK]; // Physical rank, selected as spare
+ UINT16 SpareRankSize[MAX_SPARE_RANK]; // spare rank size
+ UINT8 EnabledLogicalRanks; // Bitmap of Logical ranks that are enabled
+ MEMMAP_DIMM_DEVICE_INFO_STRUCT DimmInfo[MAX_DIMM];
+};
+
+struct memcontroller {
+ UINT32 MemSize;
+};
+
+typedef struct socket {
+ UINT8 SocketEnabled;
+ UINT16 IioStackBitmap;
+ BOOLEAN Reserved[RESERVED_4];
+ UINT8 imcEnabled[MAX_IMC];
+ UINT8 SadIntList[MAX_DRAM_CLUSTERS * MAX_SAD_RULES][MC_MAX_NODE]; // SAD interleave list
+ UINT8 SktSkuValid; // Whether Socket SKU value is valid from PCU
+ UINT32 SktSkuLimit; // SKU limit value from PCU
+ UINT32 SktTotMemMapSPA; // Total memory mapped to SPA
+ UINT32 SktPmemMapSpa; // Total persistent memory mapped to SPA
+ UINT32 SktMemSize2LM; // Total memory excluded from Limit
+ SAD_TABLE SAD[MAX_DRAM_CLUSTERS * MAX_SAD_RULES]; // SAD table
+ struct memcontroller imc[MAX_IMC];
+ struct ChannelDevice ChannelInfo[MAX_CH];
+} MEMMAP_SOCKET;
+
+typedef struct SystemMemoryMapElement {
+ UINT16 Type; // Type of this memory element; Bit0: 1LM Bit1: 2LM Bit2: PMEM Bit3: PMEM-cache Bit4: BLK Window Bit5: CSR/Mailbox/Ctrl region
+ UINT8 NodeId; // Node ID of the HA Owning the memory
+ UINT8 SocketId; // Socket Id of socket that has his memory - ONLY IN NUMA
+ UINT8 SktInterBitmap; // Socket interleave bitmap, if more that on socket then ImcInterBitmap and ChInterBitmap are identical in all sockets
+ UINT8 ImcInterBitmap; // IMC interleave bitmap for this memory
+ UINT8 ChInterBitmap[MAX_IMC];//Bit map to denote which channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
+ UINT32 BaseAddress; // Base Address of the element in 64MB chunks
+ UINT32 ElementSize; // Size of this memory element in 64MB chunks
+} SYSTEM_MEMORY_MAP_ELEMENT;
+
+typedef struct SystemMemoryMapHob {
+ //
+ // Total Clusters. In SNC2 mode there are 2 clusters and SNC4 mode has 4 clusters.
+ // All2All/Quad/Hemi modes can be considered as having only one cluster (i.e SNC1).
+ //
+ UINT8 TotalClusters;
+
+ MEMORY_MAP_BLOCK_DECODER_DATA BlockDecoderData; // block decoder data structure
+ UINT32 lowMemBase; // Mem base in 64MB units for below 4GB mem.
+ UINT32 lowMemSize; // Mem size in 64MB units for below 4GB mem.
+ UINT32 highMemBase; // Mem base in 64MB units for above 4GB mem.
+ UINT32 highMemSize; // Mem size in 64MB units for above 4GB mem.
+ UINT32 memSize; // Total physical memory size
+ UINT16 memFreq; // Mem Frequency
+ UINT8 memMode; // 0 - Independent, 1 - Lockstep
+ UINT8 volMemMode; // 0 - 1LM, 1 - 2LM
+ UINT8 CacheMemType; // 0 - DDR$DDRT
+ UINT8 DdrtIntlvGranularity; // 1 - 256B, 2 - 4KB
+ UINT16 DramType;
+ UINT8 SmbMode[MAX_SOCKET][MAX_SMB_INSTANCE]; // Stores type of smbus mode: 0 - I2C mode, 1 - I3C mode
+ UINT8 DdrVoltage;
+ UINT8 DcpmmPresent; // If at least one DCPMM Present (used by Nfit), then this should get set
+ BOOLEAN EkvPresent; // Set if EKV controller on system
+ BOOLEAN BwvPresent; // Set if BWV controller on system
+ UINT8 XMPProfilesSup;
+ UINT16 Reserved1[MAX_SOCKET];
+ UINT32 Reserved2;
+ UINT32 Reserved3;
+ UINT16 Reserved4;
+ UINT16 Reserved5;
+ UINT8 SystemRasType;
+ UINT8 RasModesEnabled; // RAS modes that are enabled
+ UINT16 ExRasModesEnabled; // Extended RAS modes that are enabled
+ UINT8 sncEnabled; // 0 - SNC disabled for this configuration, 1 - SNC enabled for this configuration
+ UINT8 NumOfCluster;
+ UINT8 NumChPerMC;
+ UINT8 numberEntries; // Number of Memory Map Elements
+ SYSTEM_MEMORY_MAP_ELEMENT Element[(MAX_SOCKET * MAX_DRAM_CLUSTERS * MAX_SAD_RULES) + MAX_FPGA_REMOTE_SAD_RULES];
+ struct memSetup MemSetup;
+ MEM_RESERVED_1 Reserved142;
+ MEMMAP_SOCKET Socket[MAX_SOCKET];
+ struct memTiming profileMemTime[2];
+
+ UINT32 Reserved6;
+ UINT8 Reserved7[RESERVED_2];
+ EFI_GUID Reserved8[RESERVED_2];
+ UINT8 Reserved9;
+ RASMEMORYINFO RasMeminfo;
+ UINT8 LatchSystemShutdownState;
+ BOOLEAN IsWpqFlushSupported;
+ UINT8 EadrSupport;
+ UINT8 EadrCacheFlushMode;
+ UINT8 SetSecureEraseSktChHob[MAX_SOCKET][MAX_CH]; //MAX_CH * MAX_SOCKET * MAX_DCPMM_CH
+ HOST_DDRT_DIMM_DEVICE_INFO_STRUCT HostDdrtDimmInfo[MAX_SOCKET][MAX_CH];
+ UINT32 DdrCacheSize[MAX_SOCKET][MAX_CH]; // Size of DDR memory reserved for 2LM cache (64MB granularity)
+ BOOLEAN AdrStateForPmemModule[MAX_SOCKET][MAX_CH]; // ADR state for Intel PMEM Modules
+ UINT16 BiosFisVersion; // Firmware Interface Specification version currently supported by BIOS
+ UINT16 MaxAveragePowerLimit; // Max Power limit in mW used for averaged power ( Valid range ends at 15000mW)
+ UINT16 MinAveragePowerLimit; // Min Power limit in mW used for averaged power ( Valid range starts from 10000mW)
+ UINT16 CurrAveragePowerLimit; // Current Power limit in mW used for average power
+ UINT16 MaxMbbPowerLimit; // Max MBB power limit ( Valid range ends at 18000mW).
+ UINT16 MinMbbPowerLimit; // Min MBB power limit ( Valid range starts from 15000mW).
+ UINT16 CurrMbbPowerLimit; // Current Power limit in mW used for MBB power
+ UINT32 MaxMbbAveragePowerTimeConstant; // Max MBB Average Power Time Constant
+ UINT32 MinMbbAveragePowerTimeConstant; // Min MBB Average Power Time Constant
+ UINT32 CurrMbbAveragePowerTimeConstant; // Current MBB Average Power Time Constant
+ UINT32 MmiohBase; // MMIOH base in 64MB granularity
+ UINT8 MaxSadRules; // Maximum SAD entries supported by silicon (24 for 14nm silicon, 16 for 10nm silicon)
+ UINT8 NumberofChaDramClusters; // Number of CHA DRAM decoder clusters
+ UINT8 VirtualNumaEnable; // Enable or Disable Virtual NUMA
+ UINT8 VirtualNumOfCluster; // Number of Virtual NUMA nodes in each physical NUMA node (Socket or SNC cluster)
+ BOOLEAN NumaEnable; // Information if NUMA is enabled or not
+} SYSTEM_MEMORY_MAP_HOB;
+
+#pragma pack()
+
+#endif // _MEMORY_MAP_DATA_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h
new file mode 100644
index 0000000000..17fb93a163
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h
@@ -0,0 +1,61 @@
+/** @file
+ GUID used for ADDRESS_RANGE_MIRROR_VARIABLE.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PARTIAL_MIRROR_GUID_H_
+#define _PARTIAL_MIRROR_GUID_H_
+
+#define ADDRESS_BASED_MIRROR_VARIABLE_GUID { 0x7b9be2e0, 0xe28a, 0x4197, { 0xad, 0x3e, 0x32, 0xf0, 0x62, 0xf9, 0x46, 0x2c } }
+
+#define ADDRESS_RANGE_MIRROR_VARIABLE_CURRENT L"MirrorCurrent"
+#define ADDRESS_RANGE_MIRROR_VARIABLE_REQUEST L"MirrorRequest"
+#define ADDRESS_BASED_MIRROR_VARIABLE_SIZE sizeof(ADDRESS_RANGE_MIRROR_VARIABLE_DATA)
+#define ADDRESS_BASED_MIRROR_VARIABLE_ATTRIBUTE (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)
+#define ADDRESS_RANGE_MIRROR_VARIABLE_VERSION 1
+#define MIRROR_STATUS_SUCCESS 0
+#define MIRROR_STATUS_MIRROR_INCAPABLE 1
+#define MIRROR_STATUS_VERSION_MISMATCH 2
+#define MIRROR_STATUS_INVALID_REQUEST 3
+#define MIRROR_STATUS_UNSUPPORTED_CONFIG 4
+#define MIRROR_STATUS_OEM_SPECIFIC_CONFIGURATION 5
+
+extern EFI_GUID gAddressBasedMirrorGuid;
+
+#pragma pack(1)
+
+typedef struct {
+//
+// MirroredAmountAbove4GB is the amount of available memory above 4GB that needs to be mirrored
+// measured in basis point (hundredths of percent e.g. 12.75% = 1275).
+// In a multi-socket system, platform is required to distribute the mirrored memory ranges such that the
+// amount mirrored is approximately proportional to the amount of memory on each NUMA node. E.g. on
+// a two node machine with 64GB on node 0 and 32GB on node 1, a request for 12GB of mirrored memory
+// should be allocated with 8GB of mirror on node 0 and 4GB on node 1.
+//
+// For example, if the total memory in the system is 48GB and 12GB of memory above the 4GB addresses needs to be mirrored then the amount would be:
+// Total Memory = 48 GB
+// Total Memory above 4GB = 44 GB
+// Percentage = 8/44 * 100 = 18.18% = 1818 basis points
+// Consider a 2S system with 32 GB of memory attached to socket 0 and 16GB on socket 1,
+// then socket 0 should mirror 8 GB of memory and socket 1 mirror 4GB to maintain the requested 18%.
+// This ensures that OS has an adequate amount of mirrored memory on each NUMA domain.
+//
+ UINT8 MirrorVersion;
+ BOOLEAN MirrorMemoryBelow4GB;
+ UINT16 MirroredAmountAbove4GB;
+ UINT8 MirrorStatus;
+} ADDRESS_RANGE_MIRROR_VARIABLE_DATA;
+
+typedef struct {
+ ADDRESS_RANGE_MIRROR_VARIABLE_DATA MirrorCurrentType;
+ ADDRESS_RANGE_MIRROR_VARIABLE_DATA MirrorRequestType;
+} RASMEMORYINFO;
+#pragma pack()
+
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h
new file mode 100644
index 0000000000..2bce1aa905
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h
@@ -0,0 +1,150 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_INFO_H_
+#define _PLATFORM_INFO_H_
+
+#include <PlatformInfoTypes.h>
+
+extern EFI_GUID gEfiPlatformInfoGuid;
+
+#pragma pack(1)
+
+typedef struct {
+ UINT32 ReservedPci;
+} EFI_PLATFORM_PCI_DATA;
+
+typedef struct {
+ UINT32 ReservedCpu;
+} EFI_PLATFORM_CPU_DATA;
+
+typedef struct {
+ UINT64 SysIoApicEnable;
+ UINT8 SysSioExist;
+ UINT8 IsocEn; // Isoc Enabled
+ UINT8 MeSegEn; // Me Seg Enabled.
+ UINT8 DmiVc1; // 0 - Disable, 1 - Enable
+ UINT8 SocketConfig;
+ UINT8 DmiVcm; // 0 - Disable, 1 - Enable
+ UINT8 DmiReserved; // for alignment
+} EFI_PLATFORM_SYS_DATA;
+
+typedef struct {
+ UINT32 BiosGuardPhysBase;
+ UINT32 BiosGuardMemSize;
+ UINT32 MemTsegSize;
+ UINT32 MemIedSize;
+
+#ifdef LT_FLAG
+ UINT32 MemLtMemSize; // Below TSEG, contains (high to low: (Heap, SinitMem, reserved)3M, LtDevMemNonDMA 2M)
+ UINT32 MemDprMemSize; // 6M DPR contained in LtMem
+ UINT32 MemLtMemAddress;
+#endif // #ifdef LT_FLAG
+
+ UINT64 PsmiUcTraceRegionBase;
+ UINT64 PsmiUcTraceRegionSize;
+} EFI_PLATFORM_MEM_DATA;
+
+typedef struct {
+ UINT8 PchPciePortCfg1; // PCIE Port Configuration Strap 1
+ UINT8 PchPciePortCfg2; // PCIE Port Configuration Strap 2
+ UINT8 PchPciePortCfg3; // PCIE Port Configuration Strap 3
+ UINT8 PchPciePortCfg4; // PCIE Port Configuration Strap 4
+ UINT8 PchPciePortCfg5; // PCIE Port Configuration Strap 5
+ UINT8 PchPcieSBDE;
+ UINT8 LomLanSupported; // Indicates if PCH LAN on board is supported or not
+ UINT8 GbePciePortNum; // Indicates the PCIe port qhen PCH LAN on board is connnected.
+ UINT8 GbeRegionInvalid;
+ BOOLEAN GbeEnabled; // Indicates if the GBE is SS disabled
+ UINT8 PchStepping;
+} EFI_PLATFORM_PCH_DATA;
+
+//
+// Platform Deep Sleep Feature
+//
+typedef struct {
+ UINT8 PlatformDeepS5;
+ UINT8 DeepS5DelayTime;
+} EFI_PLATFORM_DEEPS5_DATA;
+
+typedef struct {
+ UINT8 EnableClockSpreadSpec;
+} EFI_PLATFORM_EXTERNAL_CLOCK;
+
+///
+/// Enumeration of possible Wilson City interposer types
+///
+typedef enum {
+ InterposerUnknown = 0, ///< Type is unknown and should be retrieved from the Platform HOB
+ InterposerA, ///< Interposer Type A
+ InterposerB, ///< Interposer Type B
+ InterposerMax ///< Maximum number of members of this enum
+} INTERPOSER_TYPE;
+
+#pragma pack(1)
+typedef struct {
+ UINT8 MappedMcId[MAX_IMC];
+} INTERPOSER;
+
+typedef struct {
+ INTERPOSER Interposer[InterposerMax];
+} INTERPOSER_MAP;
+#pragma pack()
+
+//
+// This HOB definition must be consistent with what is created in the
+// PlatformInfo protocol definition. This way the information in the
+// HOB can be directly copied upon the protocol and only the strings
+// will need to be updated.
+//
+typedef struct _EFI_PLATFORM_INFO {
+ UINT8 SystemUuid[16]; // 16 bytes
+ CHAR8 SerialNumber[64]; // 64 bytes
+ UINT32 Signature; // "$PIT" 0x54495024
+ UINT32 Size; // Size of the table
+ UINT16 Revision; // Revision of the table
+ UINT16 Type; // Platform Type
+ UINT32 CpuType; // Cpu Type
+ UINT8 CpuStepping; // Cpu Stepping
+ UINT32 TypeRevisionId; // Board Revision ID
+ UINT8 BoardId; // Board ID
+ UINT16 IioSku;
+ UINT16 IioRevision;
+ UINT16 PchSku;
+ UINT8 PchRevision;
+ UINT8 PchType; // Retrive PCH SKU type installed
+ UINT8 MaxNumOfPchs; // Maximum Number of installed PCHs
+ BOOLEAN ExtendedInfoValid; // If TRUE then below fields are Valid
+ UINT8 Checksum; // Checksum minus SystemUuid is valid in DXE only.
+ UINT64 TypeStringPtr;
+ UINT64 IioStringPtr;
+ UINT64 PchStringPtr;
+ EFI_PLATFORM_PCI_DATA PciData;
+ EFI_PLATFORM_CPU_DATA CpuData;
+ EFI_PLATFORM_MEM_DATA MemData;
+ EFI_PLATFORM_SYS_DATA SysData;
+ EFI_PLATFORM_PCH_DATA PchData;
+ UINT8 IioRiserId;
+ UINT8 PcieRiser1Type;
+ UINT8 PcieRiser2Type;
+ UINT8 PlatformCapabilities; // Platform capabilites describes platform is 2-socket modular board, 4S or 8S
+ //
+ // Wilson City Interposer Type
+ //
+ INTERPOSER_TYPE InterposerType[MAX_SOCKET]; // 0 - Unknown, 1 - InterposerA, 2 - InterposerB
+ UINT32 QATDis; // 0 - QAT Enabled; 1 - Disabled
+ UINT32 QATSel;
+ UINT8 MemoryTopology[MAX_SOCKET][MAX_IMC*MAX_MC_CH]; // Specifies the memory topology per socket-per channel
+ UINT8 MemoryConnectorType[MAX_SOCKET][MAX_IMC*MAX_MC_CH]; // Specifies the memory connector type per socket-per channel, type EFI_MEMORY_DIMM_CONNECTOR_TYPE
+ EFI_PLATFORM_DEEPS5_DATA DeepS5Data;
+ EFI_PLATFORM_EXTERNAL_CLOCK ExternalClock;
+} EFI_PLATFORM_INFO;
+
+#pragma pack()
+
+#endif // #ifndef _PLATFORM_INFO_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h
new file mode 100644
index 0000000000..57037c96dd
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h
@@ -0,0 +1,78 @@
+/** @file
+ This provides a versatile abstraction for the SiliconPolicyInitLib library interface.
+
+ This defines the typedef necessary for PPI and protocol use.
+ This defines structs for PPI and protocol production and consumption.
+ There is a single GUID defining both PPI and protocol.
+
+Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _SILICON_POLICY_INIT_LIB_INTERFACE_H_
+#define _SILICON_POLICY_INIT_LIB_INTERFACE_H_
+
+#include <Library/SiliconPolicyInitLib.h>
+
+//
+// All interface declarations should refer to the SiliconPolicyInitLib for description of functionality
+//
+
+typedef
+VOID *
+(EFIAPI *PEI_SILICON_POLICY_INIT_PRE_MEM) (
+ IN OUT VOID *Policy OPTIONAL
+ );
+
+typedef
+RETURN_STATUS
+(EFIAPI *PEI_SILICON_POLICY_DONE_PRE_MEM) (
+ IN VOID *Policy
+ );
+
+typedef
+VOID *
+(EFIAPI *PEI_SILICON_POLICY_INIT_POST_MEM) (
+ IN OUT VOID *Policy OPTIONAL
+ );
+
+typedef
+RETURN_STATUS
+(EFIAPI *PEI_SILICON_POLICY_DONE_POST_MEM) (
+ IN VOID *Policy
+ );
+
+typedef
+VOID *
+(EFIAPI *PEI_SILICON_POLICY_INIT_LATE) (
+ IN OUT VOID *Policy OPTIONAL
+ );
+
+typedef
+RETURN_STATUS
+(EFIAPI *PEI_SILICON_POLICY_DONE_LATE) (
+ IN VOID *Policy
+ );
+
+//
+// PPI structure declaration
+//
+typedef struct {
+ PEI_SILICON_POLICY_INIT_PRE_MEM SiliconPolicyInitPreMem;
+ PEI_SILICON_POLICY_DONE_PRE_MEM SiliconPolicyDonePreMem;
+ PEI_SILICON_POLICY_INIT_POST_MEM SiliconPolicyInitPostMem;
+ PEI_SILICON_POLICY_DONE_POST_MEM SiliconPolicyDonePostMem;
+} SILICON_POLICY_INIT_LIB_PPI;
+
+//
+// Protocol structure declaration
+//
+typedef struct {
+ PEI_SILICON_POLICY_INIT_LATE SiliconPolicyInitLate;
+ PEI_SILICON_POLICY_DONE_LATE SiliconPolicyDoneLate;
+} SILICON_POLICY_INIT_LIB_PROTOCOL;
+
+extern EFI_GUID gSiliconPolicyInitLibInterfaceGuid;
+
+#endif // _SILICON_POLICY_INIT_LIB_INTERFACE_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h
new file mode 100644
index 0000000000..8bc88cd97c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h
@@ -0,0 +1,57 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SOCKET_COMMONRC_CONFIG_DATA_H__
+#define __SOCKET_COMMONRC_CONFIG_DATA_H__
+
+
+#include <UncoreCommonIncludes.h>
+
+extern EFI_GUID gEfiSocketCommonRcVariableGuid;
+#define SOCKET_COMMONRC_CONFIGURATION_NAME L"SocketCommonRcConfig"
+
+#define UMABASEDCLUSTERING_DISABLED 0
+#define UMABASEDCLUSTERING_HEMISPHERE 2
+#define UMABASEDCLUSTERING_QUADRANT 4
+
+#pragma pack(1)
+typedef struct {
+ //
+ // Common Section of RC
+ //
+ UINT32 MmiohBase;
+ UINT16 MmiohSize;
+ UINT8 MmcfgBase;
+ UINT8 MmcfgSize;
+ UINT8 IsocEn;
+ UINT8 NumaEn;
+ UINT8 UmaBasedClustering;
+ UINT8 MirrorMode;
+ UINT8 CpuType;
+ UINT8 CpuChop;
+ UINT8 X2ApicForceEn;
+ UINT8 SystemRasType;
+ UINT8 NumCpus;
+ UINT8 ReservedS6;
+ UINT8 ReservedS7[MAX_B2P_MAILBOX_GROUPS];
+ UINT8 OcCap;
+ UINT8 IssMaxLevel;
+ UINT8 DcpmmEnable;
+ UINT8 ReservedS8;
+ UINT8 HbmSku;
+ UINT8 PbfCapableSystem;
+ UINT8 DcuRtlWaEn;
+ UINT8 SstCpCapableSystem;
+ UINT8 VirtualNumaEnable;
+} SOCKET_COMMONRC_CONFIGURATION;
+#pragma pack()
+
+#endif
+
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h
new file mode 100644
index 0000000000..7df44e93c3
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h
@@ -0,0 +1,444 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SOCKET_IIO_VARIABLE_H_
+#define _SOCKET_IIO_VARIABLE_H_
+
+#include <UncoreCommonIncludes.h>
+
+extern EFI_GUID gEfiSocketIioVariableGuid;
+#define SOCKET_IIO_CONFIGURATION_NAME L"SocketIioConfig"
+
+/*
+ These vars are not used anywhere - it is left here for reference as this is used in comments below.
+ Number must be used directly because of VFR compiler...
+
+ #ifndef MAX_STACKS_PER_SOCKET_VAR
+ #define MAX_STACKS_PER_SOCKET_VAR 6
+ #define MAX_PORTS_PER_SOCKET_VAR 21
+ #endif
+ #endif
+*/
+
+#if MAX_SOCKET == 1
+ #define TOTAL_VMD_STACKS_VAR 6 // MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+
+ #define TOTAL_NTB_PORTS_VAR 5 // NUMBER_NTB_PORTS_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IOU_VAR 5 // MAX_IOU_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_VMD_PCH_ROOTPORTS_VAR 20 // MAX_PCH_ROOTPORTS * MAX_SOCKET
+ #define TOTAL_RETIMERS_VAR 12 // MAX_SOCKET * MAX_STACKS_PER_SOCKET_VAR * MAX_RETIMERS_PER_STACK (ICX-SP related)
+
+ #define TOTAL_NPK_VAR 1 // NUMBER_TRACE_HUB_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_PORTS_VAR 21 // MAX_PORTS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_VMD_PORTS_VAR 24 // MAX_PORTS_PER_STACK * MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_DSA_VAR 1 // 1_DSA_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IAX_VAR 1 // 1_IAX_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_CPM_VAR 1 // 1_CPM_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_HQM_VAR 1 // 1_HQM_PER_SOCKET * MAX_SOCKET
+
+#endif
+
+#if MAX_SOCKET == 4
+ #define TOTAL_VMD_STACKS_VAR 24 // MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_NTB_PORTS_VAR 20 // NUMBER_NTB_PORTS_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IOU_VAR 20 // MAX_IOU_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_VMD_PCH_ROOTPORTS_VAR 80 // MAX_PCH_ROOTPORTS * MAX_SOCKET
+ #define TOTAL_RETIMERS_VAR 48 // MAX_SOCKET * MAX_STACKS_PER_SOCKET_VAR * MAX_RETIMERS_PER_STACK (ICX-SP related)
+ #define TOTAL_NPK_VAR 4 // NUMBER_TRACE_HUB_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_PORTS_VAR 84 // MAX_PORTS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_VMD_PORTS_VAR 96 // MAX_PORTS_PER_STACK * MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_DSA_VAR 4 // 1_DSA_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IAX_VAR 4 // 1_IAX_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_CPM_VAR 4 // 1_CPM_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_HQM_VAR 4 // 1_HQM_PER_SOCKET * MAX_SOCKET
+#endif
+
+#if MAX_SOCKET == 2
+ #define TOTAL_VMD_STACKS_VAR 12 // MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_NTB_PORTS_VAR 10 // NUMBER_NTB_PORTS_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IOU_VAR 10 // MAX_IOU_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_VMD_PCH_ROOTPORTS_VAR 40 // MAX_PCH_ROOTPORTS * MAX_SOCKET
+ #define TOTAL_RETIMERS_VAR 24 // MAX_SOCKET * MAX_STACKS_PER_SOCKET_VAR * MAX_RETIMERS_PER_STACK (ICX-SP related)
+ #define TOTAL_NPK_VAR 2 // NUMBER_TRACE_HUB_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_PORTS_VAR 42 // MAX_PORTS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_VMD_PORTS_VAR 48 // MAX_PORTS_PER_STACK * MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_DSA_VAR 2 // 1_DSA_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IAX_VAR 2 // 1_IAX_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_CPM_VAR 2 // 1_CPM_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_HQM_VAR 2 // 1_HQM_PER_SOCKET * MAX_SOCKET
+#endif
+
+#if MAX_SOCKET > 4
+ #define TOTAL_VMD_PCH_ROOTPORTS_VAR 160 // MAX_PCH_ROOTPORTS * MAX_SOCKET
+ #define TOTAL_NTB_PORTS_VAR 40 // NUMBER_NTB_PORTS_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IOU_VAR 40 // MAX_IOU_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_VMD_STACKS_VAR 48 // MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_RETIMERS_VAR 96 // MAX_SOCKET * MAX_STACKS_PER_SOCKET_VAR * MAX_RETIMERS_PER_STACK (ICX-SP related)
+ #define TOTAL_NPK_VAR 8 // NUMBER_TRACE_HUB_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_PORTS_VAR 168 // MAX_PORTS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_VMD_PORTS_VAR 192 // MAX_PORTS_PER_STACK * MAX_STACKS_PER_SOCKET_VAR * MAX_SOCKET
+ #define TOTAL_DSA_VAR MAX_SOCKET // 1_DSA_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_IAX_VAR MAX_SOCKET // 1_IAX_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_CPM_VAR MAX_SOCKET // 1_CPM_PER_SOCKET * MAX_SOCKET
+ #define TOTAL_HQM_VAR MAX_SOCKET // 1_HQM_PER_SOCKET * MAX_SOCKET
+#endif
+
+#pragma pack(1)
+
+typedef struct {
+
+/**
+==================================================================================================
+================================== VTd Setup Options ==================================
+==================================================================================================
+**/
+ UINT8 VTdSupport;
+ UINT8 DmaCtrlOptIn;
+ UINT8 InterruptRemap;
+ UINT8 PostedInterrupt;
+ UINT8 ATS;
+ UINT8 CoherencySupport;
+/**
+==================================================================================================
+================================== PCIE Setup Options ==================================
+==================================================================================================
+**/
+ // Vars used to configure (disable/greyout) parts of setup menu
+ UINT8 IioPresent[MAX_SOCKET];
+ UINT8 IioStackPresent[TOTAL_IIO_STACKS]; // based on sysInfo data
+ UINT8 PchPresentOnStack[MAX_SOCKET]; // stub for multiPCH
+ UINT8 RetimerPresent[TOTAL_RETIMERS_VAR]; // retimer detected in stack
+
+ UINT8 VtdAcsWa;
+
+ // Platform data needs to update these PCI Configuration settings
+ UINT8 PcieHotPlugOnPort[TOTAL_PORTS_VAR];
+ UINT8 SLOTHPSUP[TOTAL_PORTS_VAR]; // Hot Plug surprise supported - Slot Capabilities (D0-10 / F0 / R0xA4 / B5)
+
+ // General PCIE Configuration
+ UINT8 ConfigIOU0[MAX_SOCKET];
+ UINT8 ConfigIOU1[MAX_SOCKET];
+ UINT8 ConfigIOU2[MAX_SOCKET];
+ UINT8 ConfigIOU3[MAX_SOCKET];
+ UINT8 ConfigIOU4[MAX_SOCKET];
+ UINT8 ConfigIOU5[MAX_SOCKET];
+ UINT8 ConfigIOU6[MAX_SOCKET];
+ UINT8 ConfigIOU7[MAX_SOCKET];
+ UINT8 PcieSubSystemMode[TOTAL_IOU_VAR];
+ UINT8 CompletionTimeoutGlobal;
+ UINT8 CompletionTimeoutGlobalValue;
+ UINT8 CompletionTimeout[MAX_SOCKET]; // On Setup
+ UINT8 CompletionTimeoutValue[MAX_SOCKET]; // On Setup
+ UINT8 CoherentReadPart;
+ UINT8 CoherentReadFull;
+ UINT8 PcieGlobalAspm;
+ UINT8 StopAndScream;
+ UINT8 SnoopResponseHoldOff;
+ //
+ // PCIE capability
+ //
+ UINT8 PCIe_LTR;
+ UINT8 PcieExtendedTagField;
+ UINT8 Pcie10bitTag;
+ UINT8 PCIe_AtomicOpReq;
+ UINT8 PcieMaxReadRequestSize;
+ UINT8 PciePtm;
+
+
+ UINT8 RpCorrectableErrorEsc[MAX_SOCKET]; //on Setup
+ UINT8 RpUncorrectableNonFatalErrorEsc[MAX_SOCKET]; //on Setup
+ UINT8 RpUncorrectableFatalErrorEsc[MAX_SOCKET]; //on Setup
+
+ // mixc PCIE configuration
+ UINT8 PcieLinkDis[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 PcieAspm[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 PcieCommonClock[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 PcieMaxPayload[TOTAL_PORTS_VAR]; // On Setup PRD
+ UINT8 PcieDState[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 PcieL1Latency[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 MsiEn[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 ExtendedSync[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 PciePortEnable[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 IODC[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 MctpEn[TOTAL_PORTS_VAR]; // On Setup
+
+ //
+ // PCIE setup options for Link Control2
+ //
+ UINT8 PciePortLinkSpeed[TOTAL_PORTS_VAR]; //on Setup
+ UINT8 ComplianceMode[TOTAL_PORTS_VAR]; // On Setup PRD
+ UINT8 PciePortLinkMaxWidth[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 DeEmphasis[TOTAL_PORTS_VAR]; // On Setup
+
+ //
+ // PCIE setup options for MISCCTRLSTS
+ //
+ UINT8 EOI[TOTAL_PORTS_VAR]; // On Setup
+ UINT8 MSIFATEN[TOTAL_PORTS_VAR]; //On Setup.
+ UINT8 MSINFATEN[TOTAL_PORTS_VAR]; //On Setup.
+ UINT8 MSICOREN[TOTAL_PORTS_VAR]; //On Setup.
+ UINT8 ACPIPMEn[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 P2PRdDis[TOTAL_PORTS_VAR]; //On Setup Peer 2 peer
+ UINT8 DisPMETOAck[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ACPIHP[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ACPIPM[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 SRIS[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 TXEQ[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 SERRE[TOTAL_PORTS_VAR]; //On Setup
+ //
+ // PCIE RAS (Errors)
+ //
+
+ UINT8 PcieUnsupportedRequests[TOTAL_PORTS_VAR]; // Unsupported Request per-port option
+
+ //
+ // PCIE Link Training Ctrl
+ //
+
+
+ //
+ // North Peak (NPK)
+ //
+
+ UINT8 NorthTraceHubMode[TOTAL_NPK_VAR];
+ UINT32 NorthTraceHubMemReg0Size[TOTAL_NPK_VAR];
+ UINT32 NorthTraceHubMemReg1Size[TOTAL_NPK_VAR];
+
+ //
+ // Sierra Peak (SPK)
+ //
+ UINT8 SierraPeakMemBufferSize[MAX_SOCKET];
+
+ //
+ // MMIO poison enabling per stack
+ //
+ UINT8 PoisonMmioReadEn[TOTAL_IIO_STACKS]; // on setup
+/**
+==================================================================================================
+================================== Crystal Beach 3 Setup Options ===========================
+==================================================================================================
+**/
+ UINT8 Cb3DmaEn[TOTAL_CB3_DEVICES]; // on setup
+ UINT8 Cb3NoSnoopEn[TOTAL_CB3_DEVICES]; // on setup
+ UINT8 DisableTPH;
+ UINT8 PrioritizeTPH;
+ UINT8 CbRelaxedOrdering;
+ UINT8 CbDmaMultiCastEnable; // CbDmaMultiCastEnable test enable
+
+ UINT8 DsaEn[TOTAL_DSA_VAR]; // on setup
+ UINT8 IaxEn[TOTAL_IAX_VAR]; // on setup
+ UINT8 CpmEn[TOTAL_CPM_VAR]; // on setup
+ UINT8 HqmEn[TOTAL_HQM_VAR]; // on setup
+
+/**
+==================================================================================================
+================================== MISC IOH Setup Options ==========================
+==================================================================================================
+**/
+
+ // The following are for hiding each individual device and function
+ UINT8 PEXPHIDE[TOTAL_PORTS_VAR]; // Hide any of the DMI or PCIE devices - SKT 0,1,2,3; Device 0-10 PRD
+ UINT8 DevPresIoApicIio[TOTAL_IIO_STACKS];
+ // Hide IOAPIC Device 5, Function 4
+ UINT8 PCUF6Hide; // Hide Device PCU Device 30, Function 6
+ UINT8 EN1K; // Enable/Disable 1K granularity of IO for P2P bridges 0:20:0:98 bit 2
+ UINT8 DualCvIoFlow; // Dual CV IO Flow
+ UINT8 Xppdef;
+ UINT8 Pci64BitResourceAllocation;
+ UINT8 PcieBiosTrainEnable; // Used as a work around for A0 PCIe
+ UINT8 MultiCastEnable; // MultiCastEnable test enable
+ UINT8 McastBaseAddrRegion; // McastBaseAddrRegion
+ UINT8 McastIndexPosition; // McastIndexPosition
+ UINT8 McastNumGroup; // McastNumGroup
+
+
+ UINT8 HidePEXPMenu[TOTAL_PORTS_VAR]; // to suppress /display the PCIe port menu
+
+/**
+==================================================================================================
+================================== NTB Related Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 NtbPpd[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeOverride[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbSplitBar[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeImBar1[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeImBar2[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeImBar2_0[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeImBar2_1[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ1[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ2[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ2_0[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ2_1[TOTAL_NTB_PORTS_VAR]; //on setup option
+ UINT8 NtbXlinkCtlOverride[TOTAL_NTB_PORTS_VAR]; //on setup option
+
+ UINT8 NtbLinkBiosTrainEn;
+/**
+==================================================================================================
+================================== VMD Related Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 VMDEnabled[TOTAL_VMD_STACKS_VAR]; // indicates if VMD is enabled on given stack
+ UINT8 VMDPortEnable[TOTAL_VMD_PORTS_VAR]; // indicated if VMD is enabled on given port is enabled
+ UINT8 VMDPchPortAllowed[TOTAL_VMD_PCH_ROOTPORTS_VAR]; // indicates if VMD CAN BE enabled on given PCH Rp
+ UINT8 VMDPchPortEnable[TOTAL_VMD_PCH_ROOTPORTS_VAR]; // indicates if VMD IS enabled on given PCH Rp
+ UINT8 VMDHotPlugEnable[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDCfgBarSz[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDCfgBarAttr[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDMemBarSz1[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDMemBar1Attr[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDMemBarSz2[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDMemBar2Attr[TOTAL_VMD_STACKS_VAR];
+ UINT8 VMDDirectAssign[TOTAL_VMD_STACKS_VAR];
+
+ /**
+ ==================================================================================================
+ ================================== PCIe SSD Related Setup Options ==========================
+ ==================================================================================================
+ **/
+
+ UINT8 PcieAICEnabled[TOTAL_VMD_STACKS_VAR];
+ UINT8 PcieAICPortEnable[TOTAL_PORTS_VAR];
+ UINT8 PcieAICHotPlugEnable[TOTAL_VMD_STACKS_VAR];
+
+
+ /**
+ ==================================================================================================
+ ================================== Retimers Related Setup Options ==========================
+ ==================================================================================================
+ **/
+
+ UINT32 RetimerGlParmReg0Override[TOTAL_RETIMERS_VAR];
+ UINT32 RetimerPseudoPort0Reg2Override[TOTAL_RETIMERS_VAR];
+ UINT32 RetimerPseudoPort1Reg2Override[TOTAL_RETIMERS_VAR];
+
+ /**
+ ==================================================================================================
+ ======================== PCI-E Port Clock Gating Related Setup Options ========================
+ ==================================================================================================
+ **/
+ UINT8 PciePortClkGateEnable[TOTAL_PORTS_VAR]; // Indicates Clock gating for this PCIe port is enabled or not
+ /**
+ ==================================================================================================
+ ================================== PCIe Global Related Setup Options ==========================
+ ==================================================================================================
+ **/
+ UINT8 NoSnoopRdCfg; //on Setup
+ UINT8 NoSnoopWrCfg; //on Setup
+ UINT8 MaxReadCompCombSize; //on Setup
+ UINT8 ProblematicPort; //on Setup
+ UINT8 DmiAllocatingFlow; //on Setup
+ UINT8 PcieAllocatingFlow; //on Setup
+ UINT8 PcieHotPlugEnable; //on Setup
+ UINT8 PcieAcpiHotPlugEnable; //on Setup
+ UINT8 PcieLowLatencyRetimersEnabled;
+ UINT8 HaltOnDmiDegraded; //on Setup
+ UINT8 RxClockWA;
+ UINT8 GlobalPme2AckTOCtrl; //on Setup
+ UINT8 PcieSlotOprom1; //On Setup
+ UINT8 PcieSlotOprom2; //On Setup
+ UINT8 PcieSlotOprom3; //On Setup
+ UINT8 PcieSlotOprom4; //On Setup
+ UINT8 PcieSlotOprom5; //On Setup
+ UINT8 PcieSlotOprom6; //On Setup
+ UINT8 PcieSlotOprom7; //On Setup
+ UINT8 PcieSlotOprom8; //On Setup
+ UINT8 PcieSlotItemCtrl; //On Setup
+ UINT8 PcieRelaxedOrdering; //On Setup
+ UINT8 PciePhyTestMode; //On setup
+ UINT8 PcieEnqCmdSupport; //On setup
+ UINT16 DelayBeforePCIeLinkTraining; //On Setup
+/**
+==================================================================================================
+================================== Reserved Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 ReservedS9;
+ UINT8 ReservedS10;
+ UINT8 ReservedS11; // On Setup
+ UINT8 ReservedS12; // On Setup
+ UINT8 ReservedS13; // On Setup
+ UINT8 ReservedS14; // On Setup
+ UINT8 ReservedS15; // On Setup
+ UINT8 ReservedS16; // On Setup
+ UINT8 ReservedS17; // On Setup
+ UINT8 ReservedS18; // On Setup
+ UINT8 ReservedS19; // On Setup
+ UINT8 ReservedS20; // On Setup
+ UINT32 ReservedS21[MAX_DEVHIDE_REGS_PER_SYSTEM]; // On Setup
+ UINT8 ReservedS22[TOTAL_PORTS_VAR]; // On Setup
+
+ UINT8 ReservedS23[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS24[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS25[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS26[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS27[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS28[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS29[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS30[TOTAL_PORTS_VAR]; //On Setup
+
+ UINT8 ReservedS31[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS32[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS33[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS34[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS35[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS36[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS37[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS38[TOTAL_PORTS_VAR]; //On Setup
+
+ UINT8 ReservedS39[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS40[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS41[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS42[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS43[TOTAL_PORTS_VAR]; //On Setup
+
+
+ UINT8 ReservedS44[TOTAL_PORTS_VAR];
+ UINT8 ReservedS45[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ReservedS46; //On Setup
+
+ UINT8 ReservedS47; //On Setup
+
+/**
+==================================================================================================
+====================== IIO Global Performance Tuner Related Setup Options =====================
+==================================================================================================
+**/
+ UINT8 PerformanceTuningMode;
+
+ /**
+ ==================================================================================================
+ ====================== PCI-E Data Link Feature Exchange Enable ===============================
+ ==================================================================================================
+ **/
+ UINT8 PcieDataLinkFeatureExchangeEnable[TOTAL_PORTS_VAR]; //On Setup
+ /**
+ ==================================================================================================
+ ====================== Variables added post Beta ===============================
+ ==================================================================================================
+ **/
+ UINT8 PcieTxRxDetPoll[TOTAL_PORTS_VAR];
+ UINT8 EcrcGenEn[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 EcrcChkEn[TOTAL_PORTS_VAR]; //On Setup
+ UINT8 ControlIommu;
+ UINT32 VtdDisabledBitmask[MAX_SOCKET];
+ UINT8 X2ApicOptOut;
+ UINT8 SkipRetimersDetection;
+
+ UINT8 VtdPciAcsCtlWaEn; // Enables override of ACSCTL on PCIe root ports for VTd
+ UINT8 VtdPciAcsCtlBit0;
+ UINT8 VtdPciAcsCtlBit1;
+ UINT8 VtdPciAcsCtlBit2;
+ UINT8 VtdPciAcsCtlBit3;
+ UINT8 VtdPciAcsCtlBit4;
+} SOCKET_IIO_CONFIGURATION;
+#pragma pack()
+
+#endif // _SOCKET_IIO_VARIABLE_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h
new file mode 100644
index 0000000000..533489fafc
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h
@@ -0,0 +1,477 @@
+/** @file
+ Data format for Ioh Memory Config Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SOCKET_MEMORY_CONFIG_DATA_H__
+#define __SOCKET_MEMORY_CONFIG_DATA_H__
+
+
+#include <UncoreCommonIncludes.h>
+#include <MemDefaults.h>
+
+extern EFI_GUID gEfiSocketMemoryVariableGuid;
+#define SOCKET_MEMORY_CONFIGURATION_NAME L"SocketMemoryConfig"
+
+#pragma pack(1)
+typedef struct {
+ UINT8 ReservedS48;
+ UINT8 MemoryHotPlugBase;
+ UINT8 MemoryHotPlugLen;
+ UINT8 Srat;
+ UINT8 SratMemoryHotPlug;
+ UINT8 SratCpuHotPlug;
+ UINT8 PagePolicy;
+ UINT8 PatrolScrub;
+ UINT8 PatrolScrubDuration;
+ UINT8 TempRefreshOption;
+ UINT8 HalfxRefreshValue;
+ UINT8 TwoxRefreshValue;
+ UINT8 FourxRefreshValue;
+ UINT8 NsddcEn;
+ UINT8 EsddcEn;
+ UINT8 ColumnCorrectionDisable;
+ UINT8 SaiPolicyGroupWaBiosW;
+ UINT8 PatrolScrubAddrMode;
+ UINT8 partialmirrorsad0;
+ UINT8 PartialMirrorUefi;
+ UINT16 PartialMirrorUefiPercent;
+ UINT16 partialmirrorsize[MAX_PARTIAL_MIRROR]; // Array of sizes of different partial mirrors
+ UINT8 ImmediateFailoverAction;
+ UINT8 PlusOneEn;
+ UINT8 MemCeFloodPolicy;
+ UINT16 spareErrTh;
+ UINT8 TriggerSWErrThEn;
+ UINT16 SpareSwErrTh;
+ UINT16 timeWindow;
+ UINT8 DieSparing;
+ UINT8 PclsEn;
+ UINT8 ADDDCEn;
+ UINT8 DcpmmEccModeSwitch;
+ UINT8 AdddcErrInjEn;
+ UINT8 leakyBktTimeWindow;
+ UINT8 leakyBktLo;
+ UINT8 leakyBktHi;
+ UINT16 leakyBktHour;
+ UINT8 leakyBktMinute;
+ UINT8 CmdNormalization;
+ UINT8 LrDimmBacksideVrefEn;
+ UINT8 CmdVrefEnable;
+ UINT8 DramRonEn;
+ UINT8 McRonEn;
+ UINT8 RxCtleTrnEn;
+ UINT8 RxOdtEn;
+ UINT8 LrDimmWrVrefEn;
+ UINT8 LrDimmRdVrefEn;
+ UINT8 LrDimmTxDqCentering;
+ UINT8 LrDimmRxDqCentering;
+ UINT8 txEqCalibration;
+ UINT8 CmdTxEqCalibration;
+ UINT8 RxDfe;
+ UINT8 TxRiseFallSlewRate;
+ UINT8 iModeTraining;
+ UINT8 TcoCompTraining;
+ UINT8 RoundTripLatency;
+ UINT8 DutyCycleTraining;
+ UINT8 PxcTraining;
+ UINT8 DdjcTraining;
+ UINT8 refreshMode;
+ UINT8 dllResetTestLoops;
+ UINT8 DdrMemoryType;
+ UINT8 HwMemTest;
+ UINT16 MemTestLoops;
+ UINT8 TrainingResultOffsetFunctionEnable;
+ UINT16 OffsetTxDq;
+ UINT16 OffsetRxDq;
+ UINT16 OffsetTxVref;
+ UINT16 OffsetRxVref;
+ UINT16 OffsetCmdAll;
+ UINT16 OffsetCmdVref;
+ UINT16 OffsetCtlAll;
+ UINT32 AdvMemTestOptions;
+ UINT8 AdvMemTestResetList;
+ UINT8 AdvMemTestCondition;
+ UINT16 AdvMemTestCondVdd;
+ UINT8 AdvMemTestCondTwr;
+ UINT16 AdvMemTestCondTrefi;
+ UINT32 AdvMemTestCondPause;
+ UINT8 EccSupport;
+ UINT8 EccEnable;
+ UINT8 ReservedS49;
+ UINT8 ReservedS50;
+ UINT8 ReservedS51;
+ UINT8 ReservedS52;
+ UINT16 ReservedS53;
+ UINT16 ReservedS54;
+ UINT16 ReservedS55;
+ UINT16 ReservedS56;
+ UINT16 ReservedS57;
+ UINT8 ReservedS58;
+ UINT16 ReservedS59;
+ UINT8 ReservedS60;
+ UINT16 ReservedS61;
+ UINT8 ReservedS62;
+ UINT8 ReservedS63;
+ UINT16 ReservedS64;
+ UINT16 ReservedS65;
+ UINT8 ReservedS66;
+ UINT8 ReservedS67;
+ UINT8 ReservedS68;
+ UINT8 ReservedS69;
+ UINT8 ReservedS70;
+ UINT8 ReservedS71;
+ UINT8 ReservedS72;
+ UINT8 ReservedS73;
+ UINT8 ReservedS74[16]; //[MAX_SOCKET * MAX_IMC] = [8]
+ UINT8 volMemMode;
+ UINT8 CacheMemType; //Only valid if volMemMode is 2LM
+ UINT8 DdrCacheSize;
+ UINT8 PmemCaching;
+ UINT8 ReservedS75;
+ UINT8 memInterleaveGran1LM;
+ UINT8 ReservedS76;
+ UINT8 ReservedS77;
+ UINT8 ReservedS78;
+ UINT8 ReservedS79;
+ UINT8 ReservedS80;
+ UINT8 CkeProgramming;
+ UINT8 SrefProgramming;
+ UINT8 PkgcSrefEn;
+ UINT8 CkeIdleTimer;
+ UINT8 ApdEn;
+ UINT8 PpdEn;
+ UINT8 DdrtCkeEn;
+ UINT8 OppSrefEn;
+ UINT8 OppSrefVisible; //Setup variable to hide Opportunistic Self Refresh Knob
+ UINT8 DdrtSrefEn;
+ UINT8 DataDllOff;
+ UINT8 MdllOffEn;
+ UINT8 CkMode;
+ UINT8 MemTestOnColdFastBoot;
+ UINT8 AttemptFastBoot;
+ UINT8 AttemptFastBootCold;
+ UINT8 bdatEn;
+ UINT8 ScrambleEnDDRT;
+ UINT8 ScrambleEn; // for ddr4
+ UINT8 allowCorrectableError;
+ UINT8 allowCorrectableMemTestError;
+ UINT16 ScrambleSeedLow;
+ UINT16 ScrambleSeedHigh;
+ UINT8 CustomRefreshRateEn;
+ UINT8 CustomRefreshRate;
+ UINT8 readVrefCenter;
+ UINT8 wrVrefCenter;
+ UINT8 haltOnMemErr;
+ UINT8 thermalthrottlingsupport;
+ UINT8 MemTripReporting;
+ UINT8 OffPkgMemToThermTrip;
+ UINT8 OffPkgMemToMemTrip;
+ UINT8 InPkgMemToThermTrip;
+ UINT8 InPkgMemToMemTrip;
+ UINT8 DimmTempStatValue;
+ UINT8 XMPProfilesSup;
+ UINT8 XMPMode;
+ UINT8 tCAS;
+ UINT8 tRP;
+ UINT8 tRCD;
+ UINT8 tRAS;
+ UINT8 tWR;
+ UINT16 tRFC;
+ UINT8 tRRD;
+ UINT8 tRRD_L;
+ UINT8 tRTP;
+ UINT8 tWTR;
+ UINT8 tFAW;
+ UINT8 tCWL;
+ UINT8 tRC;
+ UINT8 commandTiming;
+ UINT16 tREFI;
+ UINT8 DdrFreqLimit;
+ UINT16 Vdd;
+ UINT8 lrdimmModuleDelay;
+ UINT32 rmtPatternLength;
+ UINT32 rmtPatternLengthExt;
+ UINT8 RecEnDelayAverage;
+ UINT8 check_pm_sts;
+ UINT8 check_platform_detect;
+ UINT8 MemPwrSave;
+ UINT8 ElectricalThrottlingMode;
+ UINT8 MultiThreaded;
+ UINT8 promoteMrcWarnings;
+ UINT8 promoteWarnings;
+ UINT8 oppReadInWmm;
+ UINT16 normOppInterval;
+ UINT8 ReservedS81[96]; //[MAX_SETUP_SOCKET * MAX_SETUP_IMC * MAX_SETUP_MC_CH] = [8 * 4 * 3 = 96]
+ UINT8 mdllSden;
+ UINT8 memhotSupport;
+ UINT8 MemHotIn;
+ UINT8 MemHotOut;
+ UINT8 MemHotOuputAssertThreshold;
+ UINT8 ADREn;
+ UINT8 RankMargin;
+ UINT8 EnableBacksideRMT;
+ UINT8 EnableBacksideCMDRMT;
+ UINT8 EnableNgnBcomMargining;
+ UINT8 ReservedS82;
+ UINT8 RankSparing;
+ UINT8 multiSparingRanks;
+ UINT8 ReservedS83;
+ UINT8 dimmIsolation;
+ UINT8 smbSpeed;
+ UINT8 SmbSpdAccess;
+ UINT8 SpdPrintEn;
+ UINT16 SpdPrintLength;
+ UINT8 EnforcePOR;
+ UINT8 pda;
+ UINT8 turnaroundOpt;
+ UINT8 turnaroundOptDdrt;
+ UINT8 oneRankTimingMode;
+ UINT8 eyeDiagram;
+ UINT8 NvmdimmPerfConfig;
+ UINT8 ReservedS84;
+ UINT8 ReservedS85;
+ UINT8 ReservedS86;
+ UINT8 ReservedS87;
+ UINT8 ReservedS88;
+ UINT8 ReservedS89;
+ UINT8 ReservedS90;
+ UINT8 ReservedS91;
+ UINT8 ReservedS92;
+ UINT8 ReservedS93;
+ UINT8 ReservedS94;
+ UINT8 ReservedS95;
+ UINT8 ReservedS96;
+ UINT8 ReservedS97;
+ UINT8 ReservedS98;
+ UINT8 ReservedS99;
+ UINT8 ReservedS100;
+ UINT8 ReservedS101;
+ UINT8 ReservedS102;
+ UINT8 ReservedS103;
+ UINT8 ReservedS104;
+ UINT8 DramRaplPwrLimitLockCsr;
+ UINT8 DramRaplEnable;
+ UINT8 BwLimitTfOvrd;
+ UINT8 perbitmargin;
+ UINT8 DramRaplExtendedRange;
+ UINT8 CmsEnableDramPm;
+ UINT8 logParsing;
+ UINT8 WritePreamble;
+ UINT8 ReadPreamble;
+ UINT8 WrCRC;
+ UINT8 AepOnSystem;
+ UINT8 EkvOnSystem; // 0 => Do not suppress power management policy for BWV, 1 => suppress power management policy for BWV.
+ UINT8 BwvOnSystem; // 0 => Do not suppress power management policy for EKV, 1 => suppress power management policy for EKV.
+ // NGN options
+ UINT8 LockNgnCsr;
+ UINT8 NgnCmdTime;
+ UINT8 NgnEccCorr;
+ UINT8 NgnEccWrChk;
+ UINT8 NgnEccRdChk;
+ UINT8 NgnEccExitCorr;
+ UINT8 NgnDebugLock;
+ UINT8 NgnArsPublish;
+ UINT8 RmtOnColdFastBoot;
+ UINT8 LegacyRmt;
+ UINT8 mrcRepeatTest;
+ UINT8 ReservedS105;
+ UINT8 ReservedS106;
+ UINT8 ReservedS107;
+ UINT8 staggerref;
+ UINT32 memFlows;
+ UINT32 memFlowsExt;
+ UINT32 memFlowsExt2;
+ UINT32 memFlowsExt3;
+ UINT8 Blockgnt2cmd1cyc;
+ UINT8 TrefiPerChannel;
+ UINT8 TrefiNumofRank;
+ UINT16 TrefiDelay;
+ UINT8 Disddrtopprd;
+ UINT16 Reserved;
+ UINT8 setSecureEraseAllDIMMs;
+ UINT8 setSecureEraseSktCh[64]; // [MAX_SOCKET * MAX_IMC * MAX_MC_CH]
+ UINT8 SetSecureEraseSktChHob[64]; // [MAX_SOCKET * MAX_IMC * MAX_MC_CH]
+ UINT8 AppDirectMemoryHole;
+ UINT8 LatchSystemShutdownState;
+ UINT8 ExtendedType17;
+ //
+ // PPR related
+ //
+ UINT8 pprType;
+ UINT8 pprErrInjTest;
+ // CR QoS Configuration Profiles
+ UINT8 FastGoConfig;
+ UINT8 ReservedS108;
+ UINT8 LegacyADRModeEn;
+ UINT8 MinNormalMemSize;
+ UINT8 ADRDataSaveMode;
+ UINT8 eraseArmNVDIMMS;
+ UINT8 restoreNVDIMMS;
+ UINT8 interNVDIMMS;
+ UINT8 imcBclk;
+ UINT8 spdCrcCheck;
+ UINT8 ReservedS109;
+ UINT8 SETUP_REMOVE_SanitizeOverwriteNvmDimm; // removed
+ UINT8 EliminateDirectoryInFarMemory;
+ UINT8 NvmdimmPowerCyclePolicy;
+
+ //CMI Init option
+ UINT8 CmiInitOption;
+ //
+ // Cmd setup hold percent offset for 2n timing
+ //
+ UINT8 cmdSetupPercentOffset;
+ UINT8 ShortStroke2GB;
+ UINT8 NvDimmEnergyPolicy; //Energy Policy Management
+ UINT8 ReservedS110;
+ UINT8 ReservedS111;
+ UINT8 ReservedS112;
+ UINT8 ReservedS113;
+ UINT8 DisableDirForAppDirect;
+ UINT8 NvmMediaStatusException;
+ UINT8 NvmQos;
+ UINT8 ReservedS114;
+ UINT8 ReservedS115;
+ UINT8 ReservedS116;
+
+ //
+ // FIS 2.x
+ //
+ UINT16 DcpmmAveragePowerLimit; // Power limit in mW used for averaged power ( Valid range starts from 10000mW).
+ UINT8 DcpmmAveragePowerTimeConstant; // Value used as a base time window for power usage measurements Turbo Mode Support(in mSec).
+ UINT32 DcpmmMbbAveragePowerTimeConstant; // Value used as a base time window for power usage measurements Memory Bandwidth Boost Support(in mSec).
+ UINT8 DcpmmMbbFeature; // Allows enabling and disabling the feature (Turbo Mode State/Memory Bandwidth Boost).
+ UINT16 DcpmmMbbMaxPowerLimit; // Power limit in mW used for limiting the Turbo Mode/Memory Bandwidth Boost
+ // power consumption (Valid range starts from 15000mW).
+
+ UINT8 ReservedS117;
+ UINT8 ReservedS118;
+ UINT8 ReservedS119;
+
+ UINT8 ReservedS120;
+ UINT8 LsxImplementation;
+ UINT8 FactoryResetClear;
+ UINT8 EadrSupport;
+ UINT32 NvdimmSmbusMaxAccessTime;
+ UINT32 NvdimmSmbusReleaseDelay;
+ UINT8 NfitPublishMailboxStructs;
+
+ //
+ // fADR setup option
+ //
+ UINT8 FadrSupport;
+
+ //
+ // Biased 2-way near memory cache support options
+ //
+ UINT8 EnableTwoWayNmCache; // Enable or disable biased 2-way near memory cache.
+ UINT16 NonPreferredWayMask; // A 10-bit mask to control the bias counter ratio.
+ UINT8 PreferredReadFirst; // Reads are issued to the non-preferred or preferred way first.
+
+ //
+ // Boot-time fast zero memory setup option
+ //
+ UINT8 FastZeroMemSupport; // Enable or disable boot-time fast zero memory support.
+
+ //
+ // XOR decoder options
+ //
+ UINT8 ReservedS121;
+ UINT8 ReservedS122;
+ UINT8 ReservedS123;
+ UINT8 ReservedS124;
+ UINT8 ReservedS125;
+ UINT8 ReservedS126;
+ UINT8 ReservedS127;
+
+ UINT8 ReservedS128;
+ UINT8 ReservedS129;
+
+ UINT8 ReservedS130;
+ UINT16 ReservedS131;
+ UINT8 ReservedS132;
+ UINT8 ReservedS133;
+ UINT8 ReservedS134;
+ UINT8 ReservedS135;
+ UINT8 DcpmmApiVersion200OnSystem; // 0 => Suppress DcpmmAveragePowerTimeConstant, 1 => Do not suppress DcpmmAveragePowerTimeConstant.
+ UINT8 DcpmmApiVersion201OnSystem; // 0 => Suppress DcpmmAveragePowerTimeConstant, 1 => Do not suppress DcpmmAveragePowerTimeConstant.
+ UINT8 DcpmmApiVersion200OrGreaterOnSystem;
+ UINT8 ReservedS136;
+ UINT8 EnforcePopulationPor;
+
+ //
+ // DFE Path Finding
+ //
+ UINT8 EnableTapSweep;
+
+ UINT8 DfeGainBias;
+
+ UINT8 Tap1Start;
+ UINT8 Tap1End;
+ UINT8 Tap1Size;
+
+ UINT8 Tap2Start;
+ UINT8 Tap2End;
+ UINT8 Tap2Size;
+
+ UINT8 Tap3Start;
+ UINT8 Tap3End;
+ UINT8 Tap3Size;
+
+ UINT8 Tap4Start;
+ UINT8 Tap4End;
+ UINT8 Tap4Size;
+
+ UINT8 TrainingCompOptions; // Memory Training Comp Options Values.
+
+ UINT8 PeriodicRcomp; // Memory Periodic Rcomp Auto/Enable/Disable.
+ UINT8 PeriodicRcompInterval; // Memory Periodic Rcomp Interval.
+
+ UINT8 ReservedS137;
+
+ UINT8 AepNotSupportedException;
+
+ UINT8 ReservedS138;
+
+ UINT8 ReservedS139;
+ UINT8 PanicWm;
+
+ UINT16 OffsetRecEn;
+
+ UINT8 EadrCacheFlushMode;
+ UINT8 ReservedS140;
+ UINT8 ReservedS141;
+ UINT8 ReservedS142;
+ UINT8 ReservedS143;
+
+ UINT8 ReservedS144;
+ UINT8 ReservedS145;
+ UINT8 LrdimmDbDfeTraining;
+
+ UINT8 ReservedS146;
+ UINT8 ReservedS147;
+ UINT8 ReservedS148;
+ UINT8 AdvMemTestRetryAfterRepair;
+ UINT8 AdvMemTestPpr;
+ UINT8 AdvMemTestRankListNumEntries;
+ UINT32 AdvMemTestRankList[ADV_MT_LIST_LIMIT];
+
+ UINT32 SmartTestKey;
+ UINT8 SetMemTested;
+
+ //
+ // RMT minimum margin check
+ //
+ UINT8 RmtMinimumMarginCheck;
+
+ UINT8 ReservedS149;
+} SOCKET_MEMORY_CONFIGURATION;
+
+#pragma pack()
+
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h
new file mode 100644
index 0000000000..d279066b68
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h
@@ -0,0 +1,320 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SOCKET_MP_LINK_CONFIG_DATA_H__
+#define __SOCKET_MP_LINK_CONFIG_DATA_H__
+
+#include <UncoreCommonIncludes.h>
+
+extern EFI_GUID gEfiSocketMpLinkVariableGuid;
+#define SOCKET_MP_LINK_CONFIGURATION_NAME L"SocketMpLinkConfig"
+
+#pragma pack(1)
+typedef struct {
+ // SKXTODO: rename to Kti when removing HSX code
+ UINT8 QpiSetupNvVariableStartTag; // This must be the very first one of the whole KTI Setup NV variable!
+
+ //
+ // Used by the PciHostBridge DXE driver, these variables don't need to be exposed through setup options
+ // The variables are used as a communication vehicle from the PciHostBridge DXE driver to an OEM hook
+ // which updates the KTI resource map
+ //
+ //
+ // KTI Host structure inputs
+ //
+ UINT8 BusRatio[MAX_SOCKET];
+ UINT8 D2KCreditConfig; // 1 - Min, 2 - Med (Default), 3- Max
+ UINT8 SnoopThrottleConfig; // 0 - Disabled, 1 - Min, 2 - Med (Default), 3- Max
+ UINT8 SnoopAllCores; // 0 - Disabled, 1 - Enabled, 2 - Auto
+ UINT8 LegacyVgaSoc; // Socket that claims the legacy VGA range; valid values are 0-3; 0 is default.
+ UINT8 LegacyVgaStack; // Stack that claims the legacy VGA range; valid values are 0-3; 0 is default.
+ UINT8 P2pRelaxedOrdering; // 1 - Enable; 0 - Disable
+ UINT8 DebugPrintLevel; // Bit 0 - Fatal, Bit1 - Warning, Bit2 - Info Summary; Bit 3 - Info detailed. 1 - Enable; 0 - Disable
+ UINT8 DegradePrecedence; // Use DEGRADE_PRECEDENCE definition; TOPOLOGY_PRECEDENCE is default
+ UINT8 Degrade4SPreference; // 4S1LFullConnect topology is default; another option is 4S2LRing topology.
+
+ //
+ // Phy/Link Layer Options
+ //
+ UINT8 QpiLinkSpeedMode; // Link speed mode selection; 0 - Slow Speed; 1- Full Speed
+ UINT8 QpiLinkSpeed; // One of SPEED_REC_96GT, SPEED_REC_104GT, MAX_KTI_LINK_SPEED (default), FREQ_PER_LINK
+ UINT8 KtiLinkL0pEn; // 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiLinkL1En; // 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiFailoverEn; // 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiLbEn; // 0 - Disable(default), 1 - Enable
+ UINT8 KtiCrcMode; // 0 - 8 bit CRC 1 - 16 bit CRC Mode
+ UINT8 QpiCpuSktHotPlugEn; // 0 - Disable (default), 1 - Enable
+ UINT8 KtiCpuSktHotPlugTopology; // 0 - 4S Topology (default), 1 - 8S Topology
+ UINT8 KtiSkuMismatchCheck; // 0 - No, 1 - Yes (default)
+ UINT8 KtiLinkVnaOverride; // 0x100 - per link, 0xff - max (default), 0x00 - min
+ UINT8 SncEn; // 0 - Disable (default), 1 - Enable
+ UINT8 IoDcMode; // 0 - Disable IODC, 1 - AUTO (default), 2 - IODC_EN_REM_INVITOM_PUSH, 3 - IODC_EN_REM_INVITOM_ALLOCFLOW
+ // 4 - IODC_EN_REM_INVITOM_ALLOC_NONALLOC, 5 - IODC_EN_REM_INVITOM_AND_WCILF
+ UINT8 DirectoryModeEn; // 0 - Disable; 1 - Enable (default)
+ UINT8 XptPrefetchEn; // XPT Prefetch : 1 - Enable (Default); 0 - Disable
+ UINT8 KtiPrefetchEn; // KTI Prefetch : 1 - Enable (Default); 0 - Disable
+ UINT8 XptRemotePrefetchEn; // XPT Remote Prefetch : 1 - Enable (Default); 0 - Disable
+ UINT8 RdCurForXptPrefetchEn; // RdCur for XPT Prefetch : 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 IrqThreshold; // KTI IRQ Threshold setting
+ UINT8 TorThresLoctoremNorm; // TOR threshold - Loctorem threshold normal
+ UINT8 TorThresLoctoremEmpty; // TOR threshold - Loctorem threshold empty
+ UINT8 MbeBwCal; // 0 - Linear, 1 - Biased, 2 - Legacy, 3 - AUTO (default = Linear)
+ UINT8 TscSyncEn; // TSC Sync Enable: 0 - Disable; 1 - Enable; 2 - AUTO (default)
+ UINT8 StaleAtoSOptEn; // HA A to S directory optimization
+ UINT8 LLCDeadLineAlloc; // Never fill dead lines in LLC: 1 - Enable, 0 - Disable
+ UINT8 SplitLock; // Setting this bit removes the Ubox PCU handshake during stopreq and startreq only
+ // for splitlocks: - Enable, 0 - Disable
+ UINT8 KtiAdaptationEn; // 0 - Disable, 1 - Enable
+ UINT8 KtiAdaptationSpeed; // Use KTI_LINK_SPEED definition; MAX_KTI_LINK_SPEED - Auto (i.e BIOS choosen speed)
+
+ UINT8 ReservedS150;
+ UINT8 ReservedS151;
+ UINT8 ReservedS152;
+ UINT8 ReservedS153;
+ UINT8 ReservedS154;
+ UINT8 ReservedS155;
+ UINT8 ReservedS156;
+ UINT8 ReservedS157;
+ UINT8 ReservedS158;
+ UINT8 ReservedS159;
+ UINT8 ReservedS160;
+ UINT8 ReservedS161;
+ UINT8 ReservedS162;
+ UINT8 ReservedS163;
+ UINT8 ReservedS164;
+ UINT8 ReservedS165;
+ UINT8 ReservedS166;
+ UINT8 ReservedS167;
+ UINT8 ReservedS168;
+ UINT8 ReservedS169;
+ UINT8 ReservedS170;
+ UINT8 ReservedS171;
+ UINT8 ReservedS172;
+ UINT8 ReservedS173;
+ UINT8 ReservedS174;
+ UINT8 ReservedS175;
+ UINT8 ReservedS176;
+ UINT8 ReservedS177;
+ UINT8 ReservedS178;
+
+ UINT8 ReservedS179;
+ UINT8 ReservedS180;
+ UINT8 ReservedS181;
+ UINT8 ReservedS182;
+ UINT8 ReservedS183;
+ UINT8 ReservedS184;
+ UINT8 ReservedS185;
+ UINT32 ReservedS186;
+
+ UINT8 ReservedS187;
+ UINT8 ReservedS188;
+
+#define UPICPUPRTVARIABLE(x) x##KtiPortDisable;x##KtiLinkSpeed;x##KtiLinkVnaOverride;
+
+ UINT8 KtiCpuPerPortStartTag;
+ UPICPUPRTVARIABLE (UINT8 Cpu0P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu0P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu0P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu0P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu0P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu0P5)
+#endif
+#if MAX_SOCKET > 1
+ UPICPUPRTVARIABLE (UINT8 Cpu1P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu1P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu1P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu1P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu1P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu1P5)
+#endif
+#endif
+#if MAX_SOCKET > 2
+ UPICPUPRTVARIABLE (UINT8 Cpu2P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu2P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu2P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu2P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu2P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu2P5)
+#endif
+#endif
+#if MAX_SOCKET > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu3P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu3P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu3P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu3P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu3P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu3P5)
+#endif
+#endif
+#if (MAX_SOCKET > 4)
+ UPICPUPRTVARIABLE (UINT8 Cpu4P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu4P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu4P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu4P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu4P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu4P5)
+#endif
+#endif
+#if (MAX_SOCKET > 5)
+ UPICPUPRTVARIABLE (UINT8 Cpu5P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu5P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu5P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu5P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu5P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu5P5)
+#endif
+#endif
+#if (MAX_SOCKET > 6)
+ UPICPUPRTVARIABLE (UINT8 Cpu6P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu6P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu6P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu6P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu6P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu6P5)
+#endif
+#endif
+#if (MAX_SOCKET > 7)
+ UPICPUPRTVARIABLE (UINT8 Cpu7P0)
+ UPICPUPRTVARIABLE (UINT8 Cpu7P1)
+ UPICPUPRTVARIABLE (UINT8 Cpu7P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTVARIABLE (UINT8 Cpu7P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTVARIABLE (UINT8 Cpu7P4)
+ UPICPUPRTVARIABLE (UINT8 Cpu7P5)
+#endif
+#endif
+
+#define UPICPUPRTDFXVARIABLE(x) x##ReservedS189;x##ReservedS190;x##ReservedS191;x##ReservedS246;
+
+ UINT8 DfxKtiCpuPerPortStartTag;
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu0P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu0P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu0P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu0P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu0P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu0P5)
+#endif
+#if MAX_SOCKET > 1
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu1P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu1P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu1P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu1P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu1P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu1P5)
+#endif
+#endif
+#if MAX_SOCKET > 2
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu2P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu2P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu2P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu2P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu2P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu2P5)
+#endif
+#endif
+#if MAX_SOCKET > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu3P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu3P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu3P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu3P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu3P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu3P5)
+#endif
+#endif
+#if MAX_SOCKET > 4
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu4P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu4P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu4P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu4P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu4P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu4P5)
+#endif
+#endif
+#if MAX_SOCKET > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu5P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu5P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu5P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu5P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu5P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu5P5)
+#endif
+#endif
+#if MAX_SOCKET > 6
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu6P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu6P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu6P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu6P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu6P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu6P5)
+#endif
+#endif
+#if MAX_SOCKET > 7
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu7P0)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu7P1)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu7P2)
+#if MAX_KTI_PORTS > 3
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu7P3)
+#endif
+#if MAX_KTI_PORTS > 5
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu7P4)
+ UPICPUPRTDFXVARIABLE (UINT8 Cpu7P5)
+#endif
+#endif
+
+ UINT8 QpiSetupNvVariableEndTag; // This must be the last one of the whole KTI Setup NV variable
+} SOCKET_MP_LINK_CONFIGURATION;
+
+#pragma pack()
+
+#endif // __SOCKET_MP_LINK_CONFIG_DATA_H__
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h
new file mode 100644
index 0000000000..567a44e73f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h
@@ -0,0 +1,60 @@
+/** @file
+ UEFI variables used by DXE to pass PCI resource reconfiguration request to PEI.
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SOCKET_PCI_RESOURCE_CONFIG_DATA_H_
+#define _SOCKET_PCI_RESOURCE_CONFIG_DATA_H_
+
+extern EFI_GUID gEfiSocketPciResourceDataGuid;
+
+/**
+ * PCI MMIO and IO resource reconfiguration request structure.
+ **/
+#define SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME L"SystemPciResourceConfigData"
+
+typedef struct {
+ UINT64 Base; ///< Base (starting) address of a range (I/O, 32 and 64-bit mmio regions)
+ UINT64 Limit; ///< Limit (last valid) address of a range
+} PCIE_BASE_LIMIT;
+
+typedef struct {
+ PCIE_BASE_LIMIT Io; ///< Base and limit of I/O range assigned to entity
+ PCIE_BASE_LIMIT LowMmio; ///< Base and limit of low MMIO region for entity
+ PCIE_BASE_LIMIT HighMmio; ///< Base and limit of high (64-bit) MMIO region for entity
+} PCI_BASE_LIMITS;
+
+typedef struct {
+ PCI_BASE_LIMITS SocketLimits; ///< Base and Limit of all PCIe resources for the socket
+ PCI_BASE_LIMITS StackLimits[MAX_LOGIC_IIO_STACK]; ///< Base and Limit of all PCIe resources for each stack of the socket
+} SOCKET_PCI_BASE_LIMITS;
+
+typedef struct {
+ //
+ // Save basic system configuration parameters along with the resource map to detect a change.
+ // Remember low and high I/O memory range when saving recource configuration. It is used to verify
+ // whether system memory map changed. Remember also stacks configured when creating the map.
+ // If anything changed reset the system PCI resource configuration.
+ //
+ UINT64 MmioHBase;
+ UINT64 MmioHLimit;
+ UINT32 MmioLBase;
+ UINT32 MmioLLimit;
+ UINT16 IoBase;
+ UINT16 IoLimit;
+ UINT16 StackPresentBitmap[MAX_SOCKET];
+ //
+ // Used by the PciHostBridge DXE driver, these variables don't need to be exposed through setup options
+ // The variables are used as a communication vehicle from the PciHostBridge DXE driver to an OEM hook
+ // which updates the KTI resource map.
+ //
+ SOCKET_PCI_BASE_LIMITS Socket[MAX_SOCKET]; ///< Base and limit of all PCIe resources for each socket
+} SYSTEM_PCI_BASE_LIMITS;
+
+
+#endif // _SOCKET_PCI_RESOURCE_CONFIG_DATA_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h
new file mode 100644
index 0000000000..460e6e300b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h
@@ -0,0 +1,300 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SOCKET_POWERMANAGEMENT_CONFIGURATION_DATA_H__
+#define __SOCKET_POWERMANAGEMENT_CONFIGURATION_DATA_H__
+
+
+#include <UncoreCommonIncludes.h>
+
+extern EFI_GUID gEfiSocketPowermanagementVarGuid;
+#define SOCKET_POWERMANAGEMENT_CONFIGURATION_NAME L"SocketPowerManagementConfig"
+
+#define NUM_CST_LAT_MSR 3
+
+#pragma pack(1)
+
+typedef struct {
+ UINT8 WFRWAEnable;
+ UINT8 UncoreFreqScaling;
+ UINT8 InputUncoreFreq;
+ UINT8 ProcessorEistSupport; // Gates EIST based on CPUID ECX[7]
+ UINT8 ProcessorEistEnable; // EIST or GV3 setup option
+ UINT8 GpssTimer; // Global P-state Selection timer setup option
+
+ // Intel Speed Select (ISS)
+ UINT8 IssTdpLevel;
+ UINT8 DynamicIss;
+
+ // Config TDP
+ UINT8 ConfigTdpLevel;
+ UINT8 ConfigTdpLock;
+
+ // Individual controls for ACPI sleep states
+ // ** These can be overridden by AcpiSleepState because these knobs are not available to CRB **
+ //
+ UINT8 AcpiS3Enable;
+ UINT8 AcpiS4Enable;
+
+ //
+ //HWPM starts
+ //
+ UINT8 ProcessorHWPMEnable;
+ UINT8 ProcessorHWPMInterrupt;
+ UINT8 ProcessorEPPEnable;
+ UINT8 ProcessorEppProfile;
+ UINT8 ProcessorAPSrocketing;
+ UINT8 ProcessorScalability;
+ UINT8 ProcessorRaplPrioritization;
+ UINT8 ProcessorOutofBandAlternateEPB;
+ //
+ //HWPM ends
+ //
+ UINT8 ProcessorEistPsdFunc; // EIST/PSD Function select option
+ UINT8 BootPState; // Boot Performance Mode
+
+ //
+ // Active PBF (Prioritized Base Frequency)
+ //
+ UINT8 ProcessorActivePbf;
+ //
+ // Configure PBF High Priority Cores
+ //
+ UINT8 ProcessorConfigurePbf;
+
+ //
+ // Processor Control
+ //
+ UINT8 TurboMode;
+ UINT8 EnableXe;
+
+ //OverClocking
+ UINT8 HideOverclockingLock;
+ UINT8 OverclockingLock;
+ UINT8 AvxSupport;
+
+ UINT8 AvxLicensePreGrant;
+ UINT8 AvxIccpLevel;
+
+ UINT8 TurboRatioLimitRatio[8];
+ UINT8 TurboRatioLimitCores[8];
+
+ UINT8 C2C3TT;
+ UINT8 DynamicL1; // Enabling Dynamic L1
+ UINT8 ProcessorCcxEnable; // Enabling CPU C states of processor
+ UINT8 PackageCState; // Package C-State Limit
+ UINT8 EnableLowerLatencyMode; // Enable Lower Latency Mode for register accesses
+ UINT8 C3Enable; // Enable/Disable NHM C3(ACPI C2) report to OS
+ UINT8 C6Enable; // Enable/Disable NHM C6(ACPI C3) report to OS
+ UINT8 ProcessorC1eEnable; // Enabling C1E state of processor
+ UINT8 OSCx; // ACPI C States
+ UINT8 C1AutoDemotion; // Enabling C1 auto demotion
+ UINT8 C1AutoUnDemotion; // Enabling C1 auto un-demotion
+ UINT8 MonitorMWait; // Enabling IO MWAIT
+
+ UINT8 CStateLatencyCtrlValid[NUM_CST_LAT_MSR]; // C_STATE_LATENCY_CONTROL_x.Valid
+ UINT8 CStateLatencyCtrlMultiplier[NUM_CST_LAT_MSR]; // C_STATE_LATENCY_CONTROL_x.Multiplier
+ UINT16 CStateLatencyCtrlValue[NUM_CST_LAT_MSR]; // C_STATE_LATENCY_CONTROL_x.Value
+
+ UINT8 TStateEnable; // T states enable?
+ UINT8 OnDieThermalThrottling; // Throtte ratio
+ UINT8 ProchotLock;
+ UINT8 EnableProcHot;
+ UINT8 EnableThermalMonitor;
+ UINT8 ThermalMonitorStatusFilter;
+ UINT8 ThermalMonitorStatusFilterTimeWindow;
+ UINT8 ProchotResponse;
+ UINT8 EETurboDisable;
+ UINT8 SapmctlValCtl;
+ UINT8 PwrPerfTuning;
+ UINT8 AltEngPerfBIAS;
+ UINT8 PwrPerfSwitch;
+ UINT8 WorkLdConfig;
+ UINT16 EngAvgTimeWdw1;
+
+ UINT8 ProchotResponseRatio;
+ UINT8 TCCActivationOffset;
+
+ UINT8 P0TtlTimeLow1;
+ UINT8 P0TtlTimeHigh1;
+
+ UINT8 PkgCLatNeg;
+ UINT8 LTRSwInput;
+ UINT8 SAPMControl;
+ UINT8 CurrentConfig;
+ UINT8 PriPlnCurCfgValCtl;
+ UINT8 Psi3Code;
+ UINT16 CurrentLimit;
+
+ UINT8 Psi3Thshld;
+ UINT8 Psi2Code;
+ UINT8 Psi2Thshld;
+ UINT8 Psi1Code;
+ UINT8 Psi1Thshld;
+
+ //Power Management Setup options
+ UINT8 PkgCstEntryValCtl;
+ UINT8 NativeAspmEnable;
+
+ // PRIMARY_PLANE_CURRENT_CONFIG_CONTROL 0x601
+ UINT8 PpcccLock;
+
+ UINT8 SnpLatVld;
+ UINT8 SnpLatOvrd;
+ UINT8 SnpLatMult;
+ UINT16 SnpLatVal;
+ UINT16 NonSnpLatVld;
+ UINT8 NonSnpLatOvrd;
+ UINT8 NonSnpLatMult;
+ UINT16 NonSnpLatVal;
+
+ // DYNAMIC_PERF_POWER_CTL (CSR 1:30:2:0x64)
+ UINT8 EepLOverride;
+ UINT8 EepLOverrideEn;
+ UINT8 ITurboOvrdEn;
+ UINT8 CstDemotOvrdEN;
+ UINT8 TrboDemotOvrdEn;
+ UINT8 UncrPerfPlmtOvrdEn;
+ UINT8 EetOverrideEn;
+ UINT8 IoBwPlmtOvrdEn;
+ UINT8 ImcApmOvrdEn; // unused
+ UINT8 IomApmOvrdEn;
+ UINT8 KtiApmOvrdEn;
+ UINT8 PerfPLmtThshld;
+
+ // SAPMCTL_CFG (CSR 1:30:1:0xB0)
+ UINT8 Iio0PkgcClkGateDis[MAX_SOCKET]; //Bit[0]
+ UINT8 Iio1PkgcClkGateDis[MAX_SOCKET]; //Bit[1]
+ UINT8 Iio2PkgcClkGateDis[MAX_SOCKET]; //Bit[2]
+ UINT8 Kti01PkgcClkGateDis[MAX_SOCKET]; //Bit[3]
+ UINT8 Kti23PkgcClkGateDis[MAX_SOCKET]; //Bit[4]
+ UINT8 Kti45PkgcClkGateDis[MAX_SOCKET]; //Bit[5]
+ UINT8 P0pllOffEna[MAX_SOCKET]; //Bit[16]
+ UINT8 P1pllOffEna[MAX_SOCKET]; //Bit[17]
+ UINT8 P2pllOffEna[MAX_SOCKET]; //Bit[18]
+ UINT8 Mc0pllOffEna[MAX_SOCKET]; //Bit[22]
+ UINT8 Mc1pllOffEna[MAX_SOCKET]; //Bit[23]
+ UINT8 Mc0PkgcClkGateDis[MAX_SOCKET]; //Bit[6]
+ UINT8 Mc1PkgcClkGateDis[MAX_SOCKET]; //Bit[7]
+ UINT8 Kti01pllOffEna[MAX_SOCKET]; //Bit[19]
+ UINT8 Kti23pllOffEna[MAX_SOCKET]; //Bit[20]
+ UINT8 Kti45pllOffEna[MAX_SOCKET]; //Bit[21]
+ UINT8 SetvidDecayDisable[MAX_SOCKET]; //Bit[30];
+ UINT8 SapmCtlLock[MAX_SOCKET]; //Bit[31];
+
+ // PERF_P_LIMIT_CONTROL (CSR 1:30:2:0xe4)
+ UINT8 PerfPLimitClip;
+ UINT8 PerfPLimitEn;
+
+ // PERF_P_LIMIT_CONTROL (CSR 1:30:2:0xe4) >= HSX C stepping
+ UINT8 PerfPlimitDifferential;
+ UINT8 PerfPLimitClipC;
+
+ // SKX: PKG_CST_ENTRY_CRITERIA_MASK2 (CSR 1:30:2:0x90)
+ UINT8 Kti0In[MAX_SOCKET];
+ UINT8 Kti1In[MAX_SOCKET];
+ UINT8 Kti2In[MAX_SOCKET];
+
+ // SKX: PKG_CST_ENTRY_CRITERIA_MASK (CSR 1:30:2:0x8c)
+ UINT8 PcieIio0In[MAX_SOCKET];
+ UINT8 PcieIio1In[MAX_SOCKET];
+ UINT8 PcieIio2In[MAX_SOCKET];
+ UINT8 PcieIio3In[MAX_SOCKET];
+ UINT8 PcieIio4In[MAX_SOCKET];
+ UINT8 PcieIio5In[MAX_SOCKET];
+
+ // WRITE_PKGC_SA_PS_CRITERIA (B2P)
+ UINT8 EnablePkgcCriteria;
+ UINT8 PkgCCriteriaLogicalIpType[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaKti[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaRlink[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaFxr[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaMcddr[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaHbm[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaIio[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaHqm[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaNac[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaTip[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaMdfs[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaHcx[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaDino[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpTypeMcddr[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpTypeHbm[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpTypeIio[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoKti[MAX_SOCKET];
+ UINT8 EnableLinkInL1Kti[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoRlink[MAX_SOCKET];
+ UINT8 EnableLinkInL1Rlink[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoFxr[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskFxr[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskFxr[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoMcddr[MAX_SOCKET];
+ UINT8 PkgcCriteriaPsOptionMcddr[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoHbm[MAX_SOCKET];
+ UINT8 PkgcCriteriaPsOptionHbm[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoIio[MAX_SOCKET];
+ UINT8 EnableLinkInL1Iio[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoHqm[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskHqm[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskHqm[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoNac[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskNac[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskNac[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoTip[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskTip[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskTip[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoMdfs[MAX_SOCKET];
+ UINT8 AllowLpStateMdfs[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoHcx[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskHcx[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskHcx[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoDino[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskDino[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskDino[MAX_SOCKET];
+
+ UINT8 FastRaplDutyCycle;
+ UINT8 TurboPowerLimitLock;
+ UINT8 TurboPowerLimitCsrLock;
+ UINT8 PowerLimit1En;
+ UINT16 PowerLimit1Power;
+ UINT16 PowerLimit1Time;
+ UINT8 PowerLimit2En;
+ UINT16 PowerLimit2Power;
+ UINT16 PowerLimit2Time;
+
+ UINT8 PmaxDetector;
+ UINT8 PmaxAutoAdjustment;
+ UINT8 PmaxLoadLine;
+ UINT8 PmaxSign;
+ UINT8 PmaxOffset;
+ UINT8 PmaxOffsetNegative;
+ UINT8 PmaxTriggerSetup;
+
+ //XTU 3.0
+
+ UINT8 MaxEfficiencyRatio[MAX_SOCKET];
+ UINT8 MaxNonTurboRatio[MAX_SOCKET];
+
+ UINT8 VccSAandVccIOdisable;
+ // Software LTR Override Control
+ UINT8 SwLtrOvrdCtl;
+ UINT8 EnhancedPmaxDetector;
+ UINT8 PcodeWdogTimerEn;
+
+ UINT8 RunCpuPpmInPei;
+
+ UINT8 UncoreFreqRaplLimit;
+} SOCKET_POWERMANAGEMENT_CONFIGURATION;
+#pragma pack()
+
+#endif
+
+
+
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h
new file mode 100644
index 0000000000..52ab370ce7
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h
@@ -0,0 +1,143 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SOCKET_PROCESSORCORE_CONFIGURATION_DATA_H__
+#define __SOCKET_PROCESSORCORE_CONFIGURATION_DATA_H__
+
+#include <UncoreCommonIncludes.h>
+
+extern EFI_GUID gEfiSocketProcessorCoreVarGuid;
+#define SOCKET_PROCESSORCORE_CONFIGURATION_NAME L"SocketProcessorCoreConfig"
+
+#pragma pack(1)
+
+typedef struct {
+
+ UINT8 CpuidMaxValue;
+
+ UINT8 ProcessorHyperThreadingDisable; // Hyper Threading [ALL]
+ UINT8 ProcessorVmxEnable; // Enabling VMX
+ UINT8 ProcessorSmxEnable; // Enabling SMX (TXT LT)
+ UINT8 ProcessorLtsxEnable; // Enabling TXT (TXT LT-SX)
+ UINT8 ThreeStrikeTimer; // Disable 3strike timer
+ UINT8 FastStringEnable; // Fast String
+ UINT8 MachineCheckEnable; // Machine Check
+ UINT8 MlcStreamerPrefetcherEnable; // Hardware Prefetch
+ UINT8 MlcSpatialPrefetcherEnable; // Adjacent Cache Line Prefetch
+ UINT8 DCUStreamerPrefetcherEnable; // DCU Streamer Prefetcher
+ UINT8 DCUIPPrefetcherEnable; // DCU IP Prefetcher
+ UINT8 DCUModeSelection; // DCU Mode Selection
+ UINT8 ProcessorX2apic; // Enable Processor XAPIC
+ UINT8 BspSelection; // Select BSP
+ UINT8 IedTraceSize; // IED trace size
+ UINT8 TsegSize; // TSEG size
+ UINT8 AllowMixedPowerOnCpuRatio; // Allow Mixed PowerOn CpuRatio
+ UINT8 CheckCpuBist; // check and disable BIST faile core or ignore
+ UINT8 CoreFailover; // Enable spare core(s) in place of core(s) that fail BIST
+ UINT64 ReservedS192;
+ UINT8 ProcessorFlexibleRatio; // Non-Turbo Mode Processor Core Ratio Multiplier
+ UINT8 ProcessorFlexibleRatioOverrideEnable; // Non-Turbo Mode Processor Core Ratio Multiplier Enable
+ UINT8 ForcePhysicalModeEnable; // Force physical destionation mode
+ UINT8 LlcPrefetchEnable; // LLC Prefetch
+ UINT8 CpuMtoIWa; // MtoI Workaround;
+ UINT8 ProcessorVirtualWireMode;
+
+ UINT8 ProcessorMsrLockControl; // MSR Lock Bit Control
+ UINT8 ProcessorMsrPkgCstConfigControlLock; // MSR PKG_CST_CONFIG_CONTROL lock
+ UINT8 DebugInterface; // IA32_DEBUG_INTERFACE_MSR
+ UINT8 AesEnable;
+ UINT8 PpinControl; // PPIN Control MSR
+ UINT8 LockChipset; // Lock Chipset
+ UINT8 BiosAcmErrorReset; // Disable LT-SX and reset system when BIOS ACM error occurs
+ UINT8 AcmType; // 0x80 = debug signed ACM; 0x40 = NPW production signed ACM; 0x00 = PW production signed ACM
+
+ // SecurityPolicy Stalagmite
+ #include <Guid/SecurityPolicy_Flat.h>
+
+ UINT8 SkipStopPbet; // Skip StopPbet
+
+ UINT64 CoreDisableMask[MAX_SOCKET]; // one for each CPU socket
+
+ // IOT/OCLA configs
+#ifndef OCLA_TOR_ENTRY_MAX
+ #define OCLA_TOR_ENTRY_MIN 0
+ #define OCLA_TOR_ENTRY_MAX 0x11 // 15 or 17 depending on Isoch on/off
+ #define OCLA_TOR_ENTRY_DEFAULT 1
+ #define OCLA_WAY_MIN 0
+ #define OCLA_WAY_MAX 8 // max 8 LLC ways out of 11 can be reserved for OCLA
+ #define OCLA_WAY_DEFAULT 1
+#endif
+ UINT8 IotEn[MAX_SOCKET];
+ UINT8 OclaMaxTorEntry[MAX_SOCKET];
+ UINT8 OclaMinWay[MAX_SOCKET];
+ UINT32 IioLlcWaysMask; // MSR CBO_SLICE0_CR_IIO_LLC_WAYS bitmask.
+ UINT32 ExpandedIioLlcWaysMask; // MSR INGRESS_SPARE[10:0] bitmask. - Only Bits[10:0] are used
+ UINT32 RemoteWaysMask; // MSR INGRESS_SPARE[26:16] bitmask. - Only Bits[10:0] are used
+
+ UINT8 PCIeDownStreamPECIWrite;
+
+ //
+ // SMM Blocked and SMM Delayed
+ //
+ UINT8 SmmBlockedDelayed;
+
+ //
+ // eSMM Save State Mode
+ //
+ UINT8 eSmmSaveState;
+
+ UINT8 PeciInTrustControlBit; //On Setup
+ UINT8 PeciAgtLegacyTrustBit;
+ UINT8 PeciAgtSmbusTrustBit;
+ UINT8 PeciAgtIeTrustBit;
+ UINT8 PeciAgtGenericTrustBit;
+ UINT8 PeciAgtEspiTrustBit;
+ UINT8 Poison;
+ UINT8 Viral;
+ UINT8 EVMode;
+ UINT8 SmbusErrorRecovery;
+ UINT8 CpuL1NextPagePrefetcherDisable;
+ UINT8 CpuPaLimit;
+ UINT8 RdtCatOpportunisticTuning;
+ UINT8 CpuDbpEnable; // Enable/Disable DBP-F
+ UINT8 GlobalPsmiEnable;
+ UINT8 PsmiTrace[MAX_SOCKET];
+ UINT8 PsmiHandlerSize[MAX_SOCKET];
+ UINT8 PsmiTraceRegion0[MAX_SOCKET];
+ UINT8 PsmiTraceBufferSizeRegion0[MAX_SOCKET];
+ UINT8 PsmiTraceMemTypeRegion0[MAX_SOCKET];
+ UINT8 PsmiTraceRegion1[MAX_SOCKET];
+ UINT8 PsmiTraceBufferSizeRegion1[MAX_SOCKET];
+ UINT8 PsmiTraceMemTypeRegion1[MAX_SOCKET];
+ UINT8 PsmiTraceRegion2[MAX_SOCKET];
+ UINT8 PsmiTraceBufferSizeRegion2[MAX_SOCKET];
+ UINT8 PsmiTraceMemTypeRegion2[MAX_SOCKET];
+ UINT8 PsmiTraceRegion3[MAX_SOCKET];
+ UINT8 PsmiTraceBufferSizeRegion3[MAX_SOCKET];
+ UINT8 PsmiTraceMemTypeRegion3[MAX_SOCKET];
+ UINT8 PsmiTraceRegion4[MAX_SOCKET];
+ UINT8 PsmiTraceBufferSizeRegion4[MAX_SOCKET];
+ UINT8 PsmiTraceMemTypeRegion4[MAX_SOCKET];
+ UINT8 L2RfoPrefetchDisable; // L2 RFO Prefetch
+ UINT8 AmpPrefetchEnable;
+ UINT8 TscResetEnable;
+ UINT8 AcExceptionOnSplitLockEnable;
+ // FuSa (SAF) Start
+ UINT8 SafSupport;
+ UINT8 EnableSaf;
+ // FuSa (SAF) End
+ UINT8 CFRS3mEnable;
+ UINT8 CFRS3mManualCommit;
+ UINT8 CFRPucodeEnable;
+ UINT8 CFRPucodeManualCommit;
+ UINT8 CpuCrashLogGprs;
+} SOCKET_PROCESSORCORE_CONFIGURATION;
+#pragma pack()
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h
new file mode 100644
index 0000000000..49de34bcb2
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h
@@ -0,0 +1,36 @@
+/** @file
+ Data format for Socket Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SOCKET_CONFIG_DATA_H__
+#define __SOCKET_CONFIG_DATA_H__
+
+#include <UncoreCommonIncludes.h>
+#include <Guid/SocketIioVariable.h>
+#include <Guid/SocketCommonRcVariable.h>
+#include <Guid/SocketPowermanagementVariable.h>
+#include <Guid/SocketProcessorCoreVariable.h>
+#include <Guid/SocketMpLinkVariable.h>
+#include <Guid/SocketMemoryVariable.h>
+
+#pragma pack(1)
+
+typedef struct {
+ SOCKET_IIO_CONFIGURATION IioConfig;
+ SOCKET_COMMONRC_CONFIGURATION CommonRcConfig;
+ SOCKET_MP_LINK_CONFIGURATION UpiConfig;
+ SOCKET_MEMORY_CONFIGURATION MemoryConfig;
+ SOCKET_POWERMANAGEMENT_CONFIGURATION PowerManagementConfig;
+ SOCKET_PROCESSORCORE_CONFIGURATION SocketProcessorCoreConfiguration;
+} SOCKET_CONFIGURATION;
+
+
+
+#pragma pack()
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h
new file mode 100644
index 0000000000..369732921e
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h
@@ -0,0 +1,50 @@
+/** @file
+ GUID and structure used for debug status code policy.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _STATUS_CODE_DATA_TYPE_EX_DEBUG_GUID_H_
+#define _STATUS_CODE_DATA_TYPE_EX_DEBUG_GUID_H_
+
+#define STATUS_CODE_DATA_TYPE_EX_DEBUG_GUID \
+ { 0x7859daa2, 0x926e, 0x4b01,{0x85, 0x86, 0xc6, 0x2d, 0x45, 0x64, 0x21, 0xd2} }
+
+#define MAX_EX_DEBUG_SIZE 0x200 // Inherited from PEI status code max
+#define MAX_EX_DEBUG_STR_LEN (MAX_EX_DEBUG_SIZE - sizeof(EX_DEBUG_INFO))
+
+typedef
+CHAR8 *
+(EFIAPI *PROCESS_BUFFER) (
+ IN VOID *ProcessDataPtr,
+ IN CHAR8 *Buffer,
+ IN OUT UINTN *BufferSize
+ );
+
+typedef
+VOID *
+(EFIAPI *PRINT_SYNC_ACQUIRE) (
+ VOID
+ );
+
+typedef
+VOID *
+(EFIAPI *PRINT_SYNC_RELEASE) (
+ VOID
+ );
+
+typedef struct {
+ PROCESS_BUFFER ProcessBuffer; // Buffer processing function
+ VOID *ProcessDataPtr; // Data needed for processing
+ PRINT_SYNC_ACQUIRE PrintSyncAcquire; // Acquire sync function
+ PRINT_SYNC_RELEASE PrintSyncRelease; // Release sync function
+ UINT32 DebugStringLen;
+ CHAR8 *DebugString; // Provided debug string
+} EX_DEBUG_INFO;
+
+extern EFI_GUID gStatusCodeDataTypeExDebugGuid;
+
+#endif // _STATUS_CODE_DATA_TYPE_EX_DEBUG_GUID_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h b/Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h
new file mode 100644
index 0000000000..df11dda735
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h
@@ -0,0 +1,398 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIO_CONFIG_H
+#define _IIO_CONFIG_H
+#include <ConfigBlock/TraceHubConfig.h>
+
+#pragma pack(1) //to align members on byte boundary
+/**
+The Silicon Policy allows the platform code to publish a set of configuration
+information that the RC drivers will use to configure the silicon hardware.
+**/
+typedef struct {
+ UINT8 ReservedAJ[MAX_TOTAL_PORTS];
+ UINT8 ReservedAK[MAX_TOTAL_PORTS];
+ UINT8 ReservedAL[MAX_TOTAL_PORTS];
+ UINT8 ReservedAM[MAX_TOTAL_PORTS];
+ UINT8 ReservedAN[MAX_TOTAL_PORTS];
+ UINT8 ReservedAO[MAX_TOTAL_PORTS];
+ UINT8 ReservedAP[MAX_TOTAL_PORTS];
+ UINT8 ReservedAQ[MAX_TOTAL_PORTS];
+ UINT8 ReservedAR[MAX_TOTAL_PORTS];
+ UINT8 ReservedAS[MAX_TOTAL_PORTS];
+ UINT8 ReservedAT[MAX_TOTAL_PORTS];
+ UINT8 ReservedAU[MAX_TOTAL_PORTS];
+ UINT8 ReservedAV[MAX_TOTAL_PORTS];
+ UINT8 ReservedAW[MAX_TOTAL_PORTS];
+ UINT8 ReservedAX[MAX_TOTAL_PORTS];
+ UINT8 ReservedAY[MAX_TOTAL_PORTS];
+ UINT8 ReservedE[MAX_TOTAL_PORTS];
+ UINT8 ReservedF[MAX_TOTAL_PORTS];
+ UINT8 ReservedG[MAX_TOTAL_PORTS];
+ UINT8 ReservedAZ[MAX_TOTAL_PORTS];
+ UINT8 ReservedBA[MAX_TOTAL_PORTS];
+
+ UINT8 PciePortClkGateEnable[MAX_TOTAL_PORTS];
+ UINT8 ExtendedSync[MAX_TOTAL_PORTS];
+ UINT8 PciePortEnable[MAX_TOTAL_PORTS];
+ UINT8 PcieMaxPayload[MAX_TOTAL_PORTS];
+ UINT8 PcieAspm[MAX_SOCKET][NUMBER_PORTS_PER_SOCKET]; // On Setup
+ UINT8 PcieTxRxDetPoll[MAX_SOCKET][NUMBER_PORTS_PER_SOCKET];
+ UINT8 PciePortLinkSpeed[MAX_TOTAL_PORTS];
+ UINT8 PciePtm;
+ UINT8 PcieHotPlugEnable;
+ UINT8 PCIe_LTR;
+ UINT8 PcieUnsupportedRequests[MAX_TOTAL_PORTS];
+ UINT8 RpCorrectableErrorEsc[MAX_SOCKET]; //on Setup
+ UINT8 RpUncorrectableNonFatalErrorEsc[MAX_SOCKET]; //on Setup
+ UINT8 RpUncorrectableFatalErrorEsc[MAX_SOCKET]; //on Setup
+ UINT8 ComplianceMode[MAX_TOTAL_PORTS];
+} IIO_PCIE_CONFIG_DATA;
+
+typedef struct _IIO_RETIMER_DATA {
+ UINT8 RetimerPresent; // eq. 0 => there is no retimer data
+ UINT32 GlParamReg0; // current value of Global Param. Reg. 0
+ UINT32 GlParamReg1; // current value of Global Param. Reg. 1
+ UINT32 PseudoPort0Reg2; // current value of Pseudo Port0 Reg. 2
+ UINT32 PseudoPort1Reg2; // current value of Pseudo Port1 Reg. 2
+ UINT32 GlParmReg0Override; // value to write to Global Param. Reg. 0
+ UINT32 PseudoPort0Reg2Override; // value to write to Pseudo Port0 Reg. 2
+ UINT32 PseudoPort1Reg2Override; // value to write to Pseudo Port1 Reg. 2
+} IIO_RETIMER_DATA;
+
+typedef struct {
+/**
+==================================================================================================
+================================== VTd Setup Options ==================================
+==================================================================================================
+**/
+ UINT8 VTdSupport;
+ UINT8 DmaCtrlOptIn;
+ UINT8 InterruptRemap;
+ UINT8 PostedInterrupt;
+ UINT8 ATS;
+ UINT8 CoherencySupport;
+ UINT8 VtdAcsWa;
+ UINT8 VtdPciAcsCtl; // Value to set in PCIe ACSCTL register if reqeusted
+
+/**
+==================================================================================================
+================================== PCIE Setup Options ==================================
+==================================================================================================
+**/
+ // Platform data needs to update these PCI Configuration settings
+ UINT8 SLOTEIP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Electromechanical Interlock Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B17)
+ UINT8 SLOTHPCAP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Slot Hot Plug capable - Slot Capabilities (D0-10 / F0 / R0xA4 / B6)
+ UINT8 SLOTHPSUP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Hot Plug surprise supported - Slot Capabilities (D0-10 / F0 / R0xA4 / B5)
+ UINT8 SLOTPIP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Power Indicator Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B4)
+ UINT8 SLOTAIP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Attention Inductor Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B3)
+ UINT8 SLOTMRLSP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // MRL Sensor Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B2)
+ UINT8 SLOTPCP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Power Controller Present - Slot Capabilities (D0-10 / F0 / R0xA4 /B1)
+ UINT8 SLOTABP[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Attention Button Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B0)
+ UINT8 PcieSSDCapable[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Indicate if Port will PcieSSD capable.
+
+ UINT8 PcieHotPlugOnPort[MAX_SOCKET][NUMBER_PORTS_PER_SOCKET]; // manual override of hotplug for port
+
+ // General PCIE Configuration
+ UINT8 PcieSubSystemMode[MAX_SOCKET][MAX_IOU_PER_SOCKET]; //on Setup
+
+ UINT8 CompletionTimeoutGlobal;
+ UINT8 CompletionTimeoutGlobalValue;
+ UINT8 CompletionTimeout[MAX_SOCKET]; // On Setup
+ UINT8 CompletionTimeoutValue[MAX_SOCKET]; // On Setup
+ UINT8 CoherentReadPart;
+ UINT8 CoherentReadFull;
+ UINT8 PcieGlobalAspm;
+ UINT8 StopAndScream;
+ UINT8 SnoopResponseHoldOff;
+ //
+ // PCIE capability
+ //
+ UINT8 PcieExtendedTagField;
+ UINT8 Pcie10bitTag;
+ UINT8 PCIe_AtomicOpReq;
+ UINT8 PcieMaxReadRequestSize;
+
+
+ // mixc PCIE configuration
+ UINT8 PcieLinkDis[MAX_TOTAL_PORTS]; // On Setup
+ UINT8 PcieCommonClock[MAX_TOTAL_PORTS]; // On Setup
+ UINT8 PcieDState[MAX_TOTAL_PORTS]; // On Setup
+ UINT8 PcieL0sLatency[MAX_TOTAL_PORTS]; //On Setup
+ UINT8 PcieL1Latency[MAX_TOTAL_PORTS]; //On Setup
+ UINT8 MsiEn[MAX_TOTAL_PORTS]; // On Setup
+ UINT8 IODC[MAX_TOTAL_PORTS]; // On Setup
+ //
+ // VPP Control
+ //
+ BOOLEAN VppEnabled[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // 00 -- Disable, 01 -- Enable //no setup option defined- aj
+ UINT8 VppPort[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // 00 -- Port 0, 01 -- Port 1 //no setup option defined- aj
+ UINT8 VppAddress[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // 01-07 for SMBUS address of Vpp //no setup option defined- aj
+
+ //
+ // Mux and channel for segment
+ //
+ UINT8 MuxAddress[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // SMBUS address of MUX //no setup option defined
+ UINT8 ChannelID[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // 00 -- channel 0, 01 -- channel 1 //no setup option defined
+
+ //
+ // PCIE setup options for Link Control2
+ //
+ UINT8 PciePortLinkMaxWidth[MAX_TOTAL_PORTS]; // On Setup
+ UINT8 DeEmphasis[MAX_TOTAL_PORTS]; // On Setup
+
+ //
+ // PCIE RAS (Errors)
+ //
+ UINT8 Serr;
+ UINT8 Perr;
+ UINT8 IioErrorEn;
+ UINT8 LerEn;
+ UINT8 WheaPcieErrInjEn;
+
+ //
+ // PciePll
+ //
+ UINT8 PciePllSsc; //On Setup
+
+ //
+ // PCIE Link Training Ctrl
+ //
+ UINT16 DelayBeforePCIeLinkTraining; //On Setup
+
+ //
+ // Retimers related config
+ //
+ IIO_RETIMER_DATA Retimer[MAX_SOCKET][MAX_IIO_STACK][MAX_RETIMERS_PER_STACK];
+ BOOLEAN SkipRetimersDetection; // Skip detection of retimers in UBA code
+
+/**
+==================================================================================================
+================================== Crystal Beach 3 Setup Options ===========================
+==================================================================================================
+**/
+ UINT8 Cb3DmaEn[TOTAL_CB3_DEVICES]; // on setup
+ UINT8 Cb3NoSnoopEn[TOTAL_CB3_DEVICES]; // on setup
+ UINT8 DisableTPH;
+ UINT8 PrioritizeTPH;
+ UINT8 CbRelaxedOrdering;
+ UINT8 CbDmaMultiCastEnable; // MultiCastEnable test enable
+
+ UINT8 DsaEn[NUM_DSA*MAX_SOCKET]; // on setup
+ UINT8 IaxEn[NUM_IAX*MAX_SOCKET]; // on setup
+ UINT8 CpmEn[NUM_CPM*MAX_SOCKET]; // on setup
+ UINT8 HqmEn[NUM_HQM*MAX_SOCKET]; // on setup
+
+/**
+==================================================================================================
+================================== MISC IOH Setup Options ==========================
+==================================================================================================
+**/
+
+ // The following are for hiding each individual device and function
+ UINT8 PEXPHIDE[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET]; // Hide any of the DMI or PCIE devices - SKT 0,1,2,3; Device 0-10 PRD
+ UINT8 PCUF6Hide; // Hide Device PCU Device 30, Function 6
+ UINT8 EN1K; // Enable/Disable 1K granularity of IO for P2P bridges 0:20:0:98 bit 2
+ UINT8 DualCvIoFlow; // Dual CV IO Flow
+ UINT8 PcieBiosTrainEnable; // Used as a work around for A0 PCIe
+ UINT8 MultiCastEnable; // MultiCastEnable test enable
+ UINT8 McastBaseAddrRegion; // McastBaseAddrRegion
+ UINT8 McastIndexPosition; // McastIndexPosition
+ UINT8 McastNumGroup; // McastNumGroup
+ UINT8 MctpEn[MAX_TOTAL_PORTS]; // Enable/Disable MCTP for each Root Port
+
+ UINT8 LegacyVgaSoc;
+ UINT8 LegacyVgaStack;
+
+ UINT8 HidePEXPMenu[MAX_TOTAL_PORTS]; // to suppress /display the PCIe port menu
+
+ BOOLEAN PoisonMmioReadEn[MAX_SOCKET][MAX_IIO_STACK]; // on setup
+
+/**
+==================================================================================================
+================================== NTB Related Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 NtbPpd[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeOverride[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbSplitBar[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeImBar1[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeImBar2[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeImBar2_0[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeImBar2_1[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ1[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ2[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ2_0[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbBarSizeEmBarSZ2_1[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+ UINT8 NtbXlinkCtlOverride[MAX_SOCKET*NUMBER_NTB_PORTS_PER_SOCKET]; //on setup option
+
+ UINT8 NtbLinkBiosTrainEn; // on setup option
+/**
+==================================================================================================
+================================== VMD Related Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 VMDEnabled[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDPortEnable[MAX_SOCKET][NUMBER_PORTS_PER_SOCKET];
+ UINT8 VMDHotPlugEnable[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDCfgBarSz[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDCfgBarAttr[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDMemBarSz1[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDMemBar1Attr[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDMemBarSz2[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDMemBar2Attr[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+ UINT8 VMDPchPortEnable[MAX_SOCKET][MAX_VMD_ROOTPORTS_PER_PCH];
+ UINT8 VMDDirectAssign[MAX_SOCKET][MAX_VMD_STACKS_PER_SOCKET];
+
+ /**
+ ==================================================================================================
+ ================================== PcieSSD Related Setup Options ==========================
+ ==================================================================================================
+ **/
+ UINT8 PcieAICEnabled[MAX_SOCKET*MAX_STACKS_PER_SOCKET]; // Indicate if PCIE AIC Device will be connected behind an specific IOUx
+ UINT8 PcieAICPortEnable[MAX_SOCKET*NUMBER_PORTS_PER_SOCKET];
+ UINT8 PcieAICHotPlugEnable[MAX_SOCKET*MAX_STACKS_PER_SOCKET];
+
+
+/**
+==================================================================================================
+================================== Gen3 Related Setup Options ==========================
+==================================================================================================
+**/
+
+ //PCIE Global Option
+ UINT8 NoSnoopRdCfg; //on Setup
+ UINT8 NoSnoopWrCfg; //on Setup
+ UINT8 MaxReadCompCombSize; //on Setup
+ UINT8 ProblematicPort; //on Setup
+ UINT8 DmiAllocatingFlow; //on Setup
+ UINT8 PcieAllocatingFlow; //on Setup
+ UINT8 PcieAcpiHotPlugEnable; //on Setup
+ BOOLEAN PcieLowLatencyRetimersEnabled;
+ UINT8 HaltOnDmiDegraded; //on Setup
+ UINT8 GlobalPme2AckTOCtrl; //on Setup
+
+ UINT8 PcieSlotOprom1; //On Setup
+ UINT8 PcieSlotOprom2; //On Setup
+ UINT8 PcieSlotOprom3; //On Setup
+ UINT8 PcieSlotOprom4; //On Setup
+ UINT8 PcieSlotOprom5; //On Setup
+ UINT8 PcieSlotOprom6; //On Setup
+ UINT8 PcieSlotOprom7; //On Setup
+ UINT8 PcieSlotOprom8; //On Setup
+ UINT8 PcieSlotItemCtrl; //On Setup
+ UINT8 PcieRelaxedOrdering; //On Setup
+ UINT8 PciePhyTestMode; //On setup
+ UINT8 PcieEnqCmdSupport; //On setup
+/**
+==================================================================================================
+================================== IOAPIC Related Setup Options ==========================
+==================================================================================================
+**/
+
+ UINT8 DevPresIoApicIio[TOTAL_IIO_STACKS];
+/**
+==================================================================================================
+================================== Security Related Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 LockChipset;
+ UINT8 PeciInTrustControlBit;
+ UINT8 PeciAgtLegacyTrustBit;
+ UINT8 PeciAgtSmbusTrustBit;
+ UINT8 PeciAgtIeTrustBit;
+ UINT8 PeciAgtGenericTrustBit;
+ UINT8 PeciAgtEspiTrustBit;
+ UINT8 ProcessorX2apic;
+ UINT8 ProcessorMsrLockControl;
+ UINT8 Xppdef;
+ UINT8 Pci64BitResourceAllocation;
+ UINT8 Imr2SupportEnable;
+/**
+==================================================================================================
+================================== Reserved Setup Options ==========================
+==================================================================================================
+**/
+ UINT8 ReservedQ; // On Setup
+ UINT8 ReservedR;
+ UINT8 ReservedS; // On Setup
+ UINT8 ReservedT; // On Setup
+ UINT8 ReservedU; // On Setup
+ UINT8 ReservedV; // On Setup
+ UINT8 ReservedW; // On Setup
+ UINT8 ReservedX; // On Setup
+ UINT8 ReservedY; // On Setup
+ UINT8 ReservedZ; // On Setup
+ UINT8 ReservedAA; // On Setup
+ UINT8 ReservedAB; // On Setup
+
+ UINT32 ReservedAC[MAX_SOCKET][NUM_DEVHIDE_UNCORE_STACKS][NUM_DEVHIDE_REGS_PER_STACK];
+ UINT32 ReservedAD[MAX_SOCKET][NUM_DEVHIDE_IIO_STACKS][NUM_DEVHIDE_REGS_PER_STACK];
+
+ UINT8 ReservedAE[MAX_TOTAL_PORTS]; // On Setup
+
+ UINT8 ReservedAF[MAX_TOTAL_PORTS];
+ UINT8 ReservedAG[MAX_TOTAL_PORTS]; // On Setup
+ BOOLEAN ReservedAH; // On Setup
+
+
+/**
+==================================================================================================
+====================== IIO Global Performance Tuner Related Setup Options =====================
+==================================================================================================
+**/
+ UINT8 PerformanceTuningMode;
+
+/**
+=================================================================================================
+====================== PCI-E Data Link Feature Exchange Enable ===============================
+==================================================================================================
+**/
+ UINT8 PcieDataLinkFeatureExchangeEnable[MAX_TOTAL_PORTS]; //On Setup
+
+/**
+==================================================================================================
+====================== IIO Trace Hub struct for setup options =================================
+==================================================================================================
+**/
+ TRACE_HUB_CONFIG CpuTraceHubConfig[MAX_SOCKET][NUMBER_TRACE_HUB_PER_SOCKET];
+
+ UINT8 SLOTIMP[MAX_TOTAL_PORTS];
+ UINT8 SLOTSPLS[MAX_TOTAL_PORTS];
+ UINT8 SLOTSPLV[MAX_TOTAL_PORTS];
+ UINT16 SLOTPSP[MAX_TOTAL_PORTS];
+ UINT8 ConfigIOU[MAX_SOCKET][MAX_IOU_PER_SOCKET]; // 00-x4x4x4x4, 01-x4x4x8NA, 02-x8NAx4x4, 03-x8NAx8NA, 04-x16 (P1p2p3p4)
+
+ UINT8 EOI[MAX_TOTAL_PORTS];
+ UINT8 MSIFATEN[MAX_TOTAL_PORTS];
+ UINT8 MSINFATEN[MAX_TOTAL_PORTS];
+ UINT8 MSICOREN[MAX_TOTAL_PORTS];
+ UINT8 ACPIPMEn[MAX_TOTAL_PORTS];
+ UINT8 DISL0STx[MAX_TOTAL_PORTS];
+ UINT8 P2PRdDis[MAX_TOTAL_PORTS];
+ UINT8 DisPMETOAck[MAX_TOTAL_PORTS];
+ UINT8 ACPIHP[MAX_TOTAL_PORTS];
+ UINT8 ACPIPM[MAX_TOTAL_PORTS];
+ UINT8 SRIS[MAX_TOTAL_PORTS];
+ UINT8 TXEQ[MAX_TOTAL_PORTS];
+ UINT8 EcrcGenEn[MAX_TOTAL_PORTS];
+ UINT8 EcrcChkEn[MAX_TOTAL_PORTS];
+ UINT8 SERRE[MAX_TOTAL_PORTS];
+
+ //
+ // Sierra Peak (SPK)
+ //
+ UINT8 SierraPeakMemBufferSize[MAX_SOCKET]; // on setup
+ IIO_PCIE_CONFIG_DATA IioPcieConfig;
+
+ UINT32 VtdDisabledBitmask[MAX_SOCKET];
+} IIO_CONFIG;
+#pragma pack()
+
+#endif // _IIO_CONFIG_H
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h b/Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h
new file mode 100644
index 0000000000..088cc471f4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h
@@ -0,0 +1,204 @@
+/** @file
+ This file provides required platform data structure for IOH.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIO_PLATFORM_DATA_H_
+#define _IIO_PLATFORM_DATA_H_
+
+#include <Upi/KtiSi.h>
+#include <IioRegs.h>
+#include <IioConfig.h>
+
+typedef enum {
+ DmiTypeVc0,
+ DmiTypeVc1,
+ DmiTypeVcm,
+ MaxDmiVcType
+} DMI_VC_TYPE;
+
+typedef enum {
+ DmiTypeTc0,
+ DmiTypeTc1,
+ DmiTypeTc2,
+ DmiTypeTc3,
+ DmiTypeTc4,
+ DmiTypeTc5,
+ DmiTypeTc6,
+ DmiTypeTc7,
+ MaxDmiTcType
+}DMI_TC_TYPE;
+
+#pragma pack(1)
+
+typedef union {
+ struct {
+ UINT32 Value;
+ UINT32 ValueHigh;
+ } Address32bit;
+ UINT64 Address64bit;
+} IIO_PTR_ADDRESS;
+
+/*
+ * Following are the data structure defined to support multiple CBDMA types on a system
+ */
+
+typedef struct {
+ UINT32 NoSnoopSupported : 1;
+ UINT32 RelaxOrderSupported : 1;
+} CB_CONFIG_CAPABILITY;
+
+typedef struct {
+ UINT8 CB_VER;
+ UINT8 BusNo;
+ UINT8 DevNo;
+ UINT8 FunNo;
+ UINT8 MaxNoChannels;
+ CB_CONFIG_CAPABILITY CBConfigCap;
+} CBDMA_CONTROLLER;
+
+typedef struct {
+ CBDMA_CONTROLLER CbDmaDevice;
+} DMA_HOST;
+
+// <<<< end of CBDMA data structures >>>>
+
+typedef struct {
+ UINT8 LinkWidth;
+ UINT8 LinkSpeed;
+} IIO_DMI_DATA;
+
+typedef struct {
+ UINT8 SystemRasType;
+ BOOLEAN IsocEnable;
+ UINT8 EVMode;
+ UINT32 meRequestedSize;
+ UINT32 ieRequestedSize;
+ UINT8 DmiVc[MaxDmiVcType];
+ UINT8 DmiVcId[MaxDmiVcType];
+ UINT8 DmiTc[MaxDmiTcType];
+ UINT8 PlatformType;
+ UINT8 IOxAPICCallbackBootEvent;
+ UINT8 RasOperation;
+ UINT8 SocketUnderOnline;
+ UINT8 CompletedReadyToBootEventServices;
+ UINT8 SocketPresent[MaxIIO];
+ UINT8 SocketBaseBusNumber[MaxIIO];
+ UINT8 SocketLimitBusNumber[MaxIIO];
+ UINT32 StackPresentBitmap[MaxIIO];
+ UINT64_STRUCT SegMmcfgBase[MaxIIO];
+ UINT8 SegmentSocket[MaxIIO];
+ UINT8 SocketStackPersonality[MaxIIO][MAX_IIO_STACK];
+ UINT8 SocketStackBus[MaxIIO][MAX_IIO_STACK];
+ UINT8 SocketStackBaseBusNumber[MaxIIO][MAX_IIO_STACK];
+ UINT8 SocketStackLimitBusNumber[MaxIIO][MAX_IIO_STACK];
+ UINT32 SocketStackMmiolBase[MaxIIO][MAX_IIO_STACK];
+ UINT32 SocketStackMmiolLimit[MaxIIO][MAX_IIO_STACK];
+ UINT8 SocketPortBusNumber[MaxIIO][NUMBER_PORTS_PER_SOCKET];
+ UINT8 StackPerPort[MaxIIO][NUMBER_PORTS_PER_SOCKET];
+ UINT8 SocketUncoreBusNumber[MaxIIO][MAX_UNCORE_STACK]; // 10nm only
+ UINT32 PchIoApicBase;
+ UINT32 PciResourceMem32Base[MaxIIO];
+ UINT32 PciResourceMem32Limit[MaxIIO];
+ UINT8 Pci64BitResourceAllocation;
+ UINT32 StackPciResourceMem32Limit[MaxIIO][MAX_IIO_STACK];
+ UINT32 VtdBarAddress[MaxIIO][MAX_IIO_STACK];
+ UINT32 IoApicBase[MaxIIO][MAX_IIO_STACK];
+ UINT32 RcBaseAddress;
+ UINT64 PciExpressBase;
+ UINT32 PmBase[MaxIIO];
+ UINT32 PchSegRegBaseAddress[MaxIIO];
+ UINT8 PcieRiser1Type;
+ UINT8 PcieRiser2Type;
+ UINT8 DmiVc1;
+ UINT8 DmiVcm;
+ UINT8 Emulation;
+ UINT8 SkuPersonality[MAX_SOCKET];
+ UINT8 StackPersonality[MaxIIO][MAX_IIO_STACK];
+ UINT8 StackId[MaxIIO][MAX_IIO_STACK];
+ UINT8 VMDStackEnable[MaxIIO][MAX_IIO_STACK];
+ UINT8 IODC;
+ UINT8 MultiPch;
+ UINT8 FpgaActive[MaxIIO];
+ UINT32 TraceHubMemBase;
+ UINT8 DmiSocketMap;
+ IIO_DMI_DATA DmiSocketData[MAX_SOCKET];
+ UINT64 PciTrainingStartTime; // time in microseconds
+} IIO_V_DATA;
+
+typedef struct {
+ UINT8 Device;
+ UINT8 Function;
+} IIO_PORT_INFO;
+
+typedef struct {
+ UINT8 Valid;
+ UINT8 IioUplinkPortIndex; //defines platform specific uplink port index (if any else FF)
+ IIO_PORT_INFO UplinkPortInfo;
+} IIO_UPLINK_PORT_INFO;
+
+typedef struct _INTEL_IIO_PORT_INFO {
+ UINT8 Device;
+ UINT8 Function;
+ UINT8 Reserved137;
+ UINT8 Reserved138;
+ UINT8 Reserved139;
+ UINT8 Reserved140;
+ UINT8 Reserved141;
+ UINT8 SuperClusterPort;
+ UINT8 NtbDevice;
+ UINT8 NtbFunction;
+} INTEL_IIO_PORT_INFO;
+
+typedef struct _INTEL_DMI_PCIE_INFO {
+ INTEL_IIO_PORT_INFO PortInfo[NUMBER_PORTS_PER_SOCKET];
+} INTEL_DMI_PCIE_INFO;
+
+typedef struct _INTEL_IIO_PRELINK_DATA {
+ INTEL_DMI_PCIE_INFO PcieInfo;
+ IIO_UPLINK_PORT_INFO UplinkInfo[MaxIIO];
+} INTEL_IIO_PRELINK_DATA;
+
+typedef struct {
+ UINT8 PciePortPresent[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 PciePortConfig[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 PciePortOwnership[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 CurrentPXPMap[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 MaxPXPMap[MaxIIO * NUMBER_PORTS_PER_SOCKET]; // Max link width
+ BOOLEAN LaneReversedPXPMap[MaxIIO][MAX_IOU_PER_SOCKET];
+ UINT8 PciePortMaxWidth[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 PciePortNegWidth[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 PciePortNegSpeed[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ UINT8 RetimerConnectCount[MaxIIO*NUMBER_PORTS_PER_SOCKET];
+ IIO_PTR_ADDRESS PtrAddress;
+ IIO_PTR_ADDRESS PtrPcieTopology;
+ UINT64 McastRsvdMemory;
+ DMA_HOST DMAhost[MaxIIO];
+ UINT8 resetRequired;
+ UINT8 MaxPciePortNumberPerSocket[MaxIIO];
+
+ //
+ // IsSocketSmbEnabled and TimeoutOnVppOccured are needed only as a WA for SMB issue in socket
+ //
+ BOOLEAN IsSocketSmbEnabled[MaxIIO]; // contains TRUE if socket smb controller was enabled for given IIO (socket)
+ BOOLEAN TimeoutOnVppOccurred[MaxIIO]; // contains TRUE if there was a timeout after VPP programming
+} IIO_OUT_DATA;
+
+typedef struct {
+ IIO_V_DATA IioVData;
+ INTEL_IIO_PRELINK_DATA PreLinkData;
+ IIO_OUT_DATA IioOutData;
+} IIO_VAR;
+
+typedef struct {
+ IIO_CONFIG SetupData;
+ IIO_VAR IioVar;
+} IIO_GLOBALS;
+
+#pragma pack()
+
+#endif //_IIO_PLATFORM_DATA_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h b/Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h
new file mode 100644
index 0000000000..98f759be81
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h
@@ -0,0 +1,179 @@
+/** @file
+
+ @copyright
+ Copyright 2010 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIO_REGS_H_
+#define _IIO_REGS_H_
+
+#include <IioSetupDefinitions.h>
+
+/**
+==================================================================================================
+================================== General Definitions ==================================
+==================================================================================================
+**/
+//-----------------------------------------------------------------------------------
+// PCIE port index for SKX
+//------------------------------------------------------------------------------------
+#define SOCKET_0_INDEX 0
+#define SOCKET_1_INDEX 21
+#define SOCKET_2_INDEX 42
+#define SOCKET_3_INDEX 63
+#define SOCKET_4_INDEX 84
+#define SOCKET_5_INDEX 105
+#define SOCKET_6_INDEX 126
+#define SOCKET_7_INDEX 147
+
+//-----------------------------------------------------------------------------------
+// Number's ports per stack definitions for 10nm
+//------------------------------------------------------------------------------------
+
+// STACK0 for: ICX-SP
+#define NUMBER_PORTS_PER_STACK0_10NM 1
+
+// NON-STACK0 for: ICX-SP
+#define NUMBER_PORTS_PER_NON_STACK0_10NM 4
+
+#define MAX_UNCORE_STACK 2 // MAX_LOGIC_IIO_STACK - MAX_IIO_STACK
+
+#define MaxIIO MAX_SOCKET
+
+#define TOTAL_CB3_DEVICES 64 // IOAT_TOTAL_FUNCS * MAX_SOCKET. Note: this covers up to 8S.
+#define MAX_TOTAL_PORTS (MAX_SOCKET * NUMBER_PORTS_PER_SOCKET) //NUMBER_PORTS_PER_SOCKET * MaxIIO. As now, treats setup S0-S3 = S4_S7 as optimal
+
+ #define NUM_IAX 1 //number of IAX per Socket
+ #define NUM_DSA 1 //number of DSA per Socket
+ #define NUM_CPM 1 //number of CPM per Socket
+ #define NUM_HQM 1 //number of HQM per Socket
+
+#define TOTAL_IIO_STACKS 48 // MAX_SOCKET * MAX_IIO_STACK. Not reflect architecture but only sysHost structure!
+
+#define NUMBER_NTB_PORTS_PER_SOCKET 5
+
+#ifndef MAX_STACKS_PER_SOCKET
+ #define MAX_STACKS_PER_SOCKET 6
+ #define MAX_IIO_PORTS_PER_STACK NUMBER_PORTS_PER_NON_STACK0_10NM
+#endif
+
+#define MAX_IOU_PER_SOCKET 5 // Max IOU number per socket for all silicon generation, SKX, ICX
+
+#define MAX_VMD_ROOTPORTS_PER_PCH 20 // Max number of rootports in PCH
+#define MAX_VMD_STACKS_PER_SOCKET 6 // Max number of stacks per socket supported by VMD
+
+#define MAX_RETIMERS_PER_STACK 2 // Max number of retimers per pcie controller (ICX-SP)
+
+#ifndef NELEMENTS
+#define NELEMENTS(Array) (sizeof(Array)/sizeof((Array)[0]))
+#endif
+
+
+/**
+==================================================================================================
+================================== IIO Root Port Definitions ====================
+==================================================================================================
+**/
+// Max BDFs definitions
+#define MAX_FUNC_NUM 8
+#define MAX_DEV_NUM 32
+#define MAX_BUS_NUM 256
+
+#define PORT_0_INDEX 0
+#define PORT_A_INDEX 1
+#define PORT_B_INDEX 2
+#define PORT_C_INDEX 3
+#define PORT_D_INDEX 4
+#define PORT_E_INDEX 5
+#define PORT_F_INDEX 6
+#define PORT_G_INDEX 7
+#define PORT_H_INDEX 8
+
+//-----------------------------------------------------------------------------------
+// Port Index definition for SKX
+//------------------------------------------------------------------------------------
+#define PCIE_PORT_2_DEV 0x02
+// IOU0
+#define PORT_1A_INDEX 1
+#define PORT_1B_INDEX 2
+#define PORT_1C_INDEX 3
+#define PORT_1D_INDEX 4
+// IOU1
+#define PORT_2A_INDEX 5
+#define PORT_2B_INDEX 6
+#define PORT_2C_INDEX 7
+#define PORT_2D_INDEX 8
+// IOU2
+#define PORT_3A_INDEX 9
+#define PORT_3B_INDEX 10
+#define PORT_3C_INDEX 11
+#define PORT_3D_INDEX 12
+//MCP0
+#define PORT_4A_INDEX 13
+#define PORT_4B_INDEX 14
+#define PORT_4C_INDEX 15
+#define PORT_4D_INDEX 16
+//MCP1
+#define PORT_5A_INDEX 17
+#define PORT_5B_INDEX 18
+#define PORT_5C_INDEX 19
+#define PORT_5D_INDEX 20
+
+//-----------------------------------------------------------------------------------
+// Port Index definition for ICX-SP
+//------------------------------------------------------------------------------------
+
+// IOU0
+#define PORT_1A_INDEX_1 1
+#define PORT_1B_INDEX_1 2
+#define PORT_1C_INDEX_1 3
+#define PORT_1D_INDEX_1 4
+// IOU1
+#define PORT_2A_INDEX_2 5
+#define PORT_2B_INDEX_2 6
+#define PORT_2C_INDEX_2 7
+#define PORT_2D_INDEX_2 8
+// IOU2
+#define PORT_3A_INDEX_3 9
+#define PORT_3B_INDEX_3 10
+#define PORT_3C_INDEX_3 11
+#define PORT_3D_INDEX_3 12
+// IOU3
+#define PORT_4A_INDEX_4 13
+#define PORT_4B_INDEX_4 14
+#define PORT_4C_INDEX_4 15
+#define PORT_4D_INDEX_4 16
+// IOU4
+#define PORT_5A_INDEX_5 17
+#define PORT_5B_INDEX_5 18
+#define PORT_5C_INDEX_5 19
+#define PORT_5D_INDEX_5 20
+
+//
+// Port Config Mode
+//
+#define REGULAR_PCIE_OWNERSHIP 0
+#define VMD_OWNERSHIP 3
+#define PCIEAIC_OCL_OWNERSHIP 4
+
+#define NUMBER_TRACE_HUB_PER_SOCKET 1
+
+//
+// 8 stacks per each socket:
+// - 6 IIO stacks (used only on 14nm systems - 10nm doesn't hide per-IP)
+// - 2 uncore stacks (used only for 10nm systems - 14nm doesn't have such stacks)
+//
+#define NUM_DEVHIDE_REGS_PER_STACK 8 // devHide 32-bit register for each function on stack
+#define NUM_DEVHIDE_UNCORE_STACKS 2 // number of uncore stacks in setup structure
+#define NUM_DEVHIDE_IIO_STACKS 6 // number of IIO stacks ins etup structure
+
+#if MaxIIO > 4
+#define MAX_DEVHIDE_REGS_PER_SYSTEM 512 // MAX_DEVHIDE_REGS_PER_SOCKET * MaxIIO
+#else
+#define MAX_DEVHIDE_REGS_PER_SYSTEM 256 // MAX_DEVHIDE_REGS_PER_SOCKET * MaxIIO
+#endif
+
+#endif //_IIO_REGS_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h b/Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h
new file mode 100644
index 0000000000..55496e60d4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h
@@ -0,0 +1,60 @@
+/** @file
+ Definitions shared with HFR/VFR files.
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIOSETUPDEFINITIONS_H_
+#define _IIOSETUPDEFINITIONS_H_
+
+//-----------------------------------------------------------------------------------
+// Number of ports per socket for CPUs
+//------------------------------------------------------------------------------------
+#define NUMBER_PORTS_PER_SOCKET_ICX 21
+#define NUMBER_PORTS_PER_SOCKET_SKX 21
+#define NUMBER_PORTS_PER_SOCKET_CPX 13
+
+//-----------------------------------------------------------------------------------
+// General NUMBER_PORTS_PER_SOCKET definition
+//------------------------------------------------------------------------------------
+#define NUMBER_PORTS_PER_SOCKET NUMBER_PORTS_PER_SOCKET_SKX
+
+/**
+==================================================================================================
+================= Equates common for Setup options (.vfr/.hfr) and source files (.c/.h) ==========
+==================================================================================================
+**/
+
+#define IIO_BIFURCATE_xxxxxxxx 0xFE
+#define IIO_BIFURCATE_x4x4x4x4 0x0
+#define IIO_BIFURCATE_x4x4xxx8 0x1
+#define IIO_BIFURCATE_xxx8x4x4 0x2
+#define IIO_BIFURCATE_xxx8xxx8 0x3
+#define IIO_BIFURCATE_xxxxxx16 0x4
+#define IIO_BIFURCATE_x2x2x4x8 0x5
+#define IIO_BIFURCATE_x4x2x2x8 0x6
+#define IIO_BIFURCATE_x8x2x2x4 0x7
+#define IIO_BIFURCATE_x8x4x2x2 0x8
+#define IIO_BIFURCATE_x2x2x4x4x4 0x9
+#define IIO_BIFURCATE_x4x2x2x4x4 0xA
+#define IIO_BIFURCATE_x4x4x2x2x4 0xB
+#define IIO_BIFURCATE_x4x4x4x2x2 0xC
+#define IIO_BIFURCATE_x2x2x2x2x8 0xD
+#define IIO_BIFURCATE_x8x2x2x2x2 0xE
+#define IIO_BIFURCATE_x2x2x2x2x4x4 0xF
+#define IIO_BIFURCATE_x2x2x4x2x2x4 0x10
+#define IIO_BIFURCATE_x2x2x4x4x2x2 0x11
+#define IIO_BIFURCATE_x4x2x2x2x2x4 0x12
+#define IIO_BIFURCATE_x4x2x2x4x2x2 0x13
+#define IIO_BIFURCATE_x4x4x2x2x2x2 0x14
+#define IIO_BIFURCATE_x2x2x2x2x2x2x4 0x15
+#define IIO_BIFURCATE_x2x2x2x2x4x2x2 0x16
+#define IIO_BIFURCATE_x2x2x4x2x2x2x2 0x17
+#define IIO_BIFURCATE_x4x2x2x2x2x2x2 0x18
+#define IIO_BIFURCATE_x2x2x2x2x2x2x2x2 0x19
+#define IIO_BIFURCATE_AUTO 0xFF
+
+#endif /* _IIOSETUPDEFINITIONS_H_ */
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h b/Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h
new file mode 100644
index 0000000000..32fc4a2978
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h
@@ -0,0 +1,166 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIO_UNIVERSAL_DATA_
+#define _IIO_UNIVERSAL_DATA_
+
+#define IIO_UNIVERSAL_DATA_GUID { 0x7FF396A1, 0xEE7D, 0x431E, { 0xBA, 0x53, 0x8F, 0xCA, 0x12, 0x7C, 0x44, 0xC0 } }
+#include "SysHost.h"
+#include "IioPlatformData.h"
+#include "UncoreCommonIncludes.h"
+#include <Guid/SocketVariable.h>
+
+//--------------------------------------------------------------------------------------//
+// Structure definitions for Universal Data Store (UDS)
+//--------------------------------------------------------------------------------------//
+#define UINT64 unsigned long long
+
+#pragma pack(1)
+
+
+typedef struct {
+ UINT8 Valid; // TRUE, if the link is valid (i.e reached normal operation)
+ UINT8 PeerSocId; // Socket ID
+ UINT8 PeerSocType; // Socket Type (0 - CPU; 1 - IIO)
+ UINT8 PeerPort; // Port of the peer socket
+}QPI_PEER_DATA;
+
+typedef struct {
+ UINT8 Valid;
+ UINT32 MmioBar[TYPE_MAX_MMIO_BAR];
+ UINT8 PcieSegment;
+ UINT64_STRUCT SegMmcfgBase;
+ UINT16 stackPresentBitmap;
+ UINT16 M2PciePresentBitmap;
+ UINT8 TotM3Kti;
+ UINT8 TotCha;
+ UINT32 ChaList[MAX_CHA_MAP];
+ UINT32 SocId;
+ QPI_PEER_DATA PeerInfo[MAX_FW_KTI_PORTS]; // QPI LEP info
+} QPI_CPU_DATA;
+
+typedef struct {
+ UINT8 Valid;
+ UINT8 SocId;
+ QPI_PEER_DATA PeerInfo[MAX_SOCKET]; // QPI LEP info
+} QPI_IIO_DATA;
+
+typedef struct {
+ IIO_PORT_INFO PortInfo[NUMBER_PORTS_PER_SOCKET];
+} IIO_DMI_PCIE_INFO;
+
+typedef struct _STACK_RES {
+ UINT8 Personality;
+ UINT8 BusBase;
+ UINT8 BusLimit;
+ UINT16 PciResourceIoBase;
+ UINT16 PciResourceIoLimit;
+ UINT32 IoApicBase;
+ UINT32 IoApicLimit;
+ UINT32 Mmio32Base; // Base of low MMIO configured for this stack in memory map
+ UINT32 Mmio32Limit; // Limit of low MMIO configured for this stack in memory map
+ UINT64 Mmio64Base; // Base of high MMIO configured for this stack in memory map
+ UINT64 Mmio64Limit; // Limit of high MMIO configured for this stack in memory map
+ UINT32 PciResourceMem32Base; // Base of low MMIO resource available for PCI devices
+ UINT32 PciResourceMem32Limit; // Limit of low MMIO resource available for PCI devices
+ UINT64 PciResourceMem64Base; // Base of high MMIO resource available for PCI devices
+ UINT64 PciResourceMem64Limit; // Limit of high MMIO resource available for PCI devices
+ UINT32 VtdBarAddress;
+ UINT32 Mmio32MinSize; // Minimum required size of MMIO32 resource needed for this stack
+} STACK_RES;
+
+typedef struct {
+ UINT8 Valid;
+ UINT8 SocketID; // Socket ID of the IIO (0..3)
+ UINT8 BusBase;
+ UINT8 BusLimit;
+ UINT16 PciResourceIoBase;
+ UINT16 PciResourceIoLimit;
+ UINT32 IoApicBase;
+ UINT32 IoApicLimit;
+ UINT32 Mmio32Base; // Base of low MMIO configured for this socket in memory map
+ UINT32 Mmio32Limit; // Limit of low MMIO configured for this socket in memory map
+ UINT64 Mmio64Base; // Base of high MMIO configured for this socket in memory map
+ UINT64 Mmio64Limit; // Limit of high MMIO configured for this socket in memory map
+ STACK_RES StackRes[MAX_LOGIC_IIO_STACK];
+ UINT32 RcBaseAddress;
+ IIO_DMI_PCIE_INFO PcieInfo;
+ UINT8 DmaDeviceCount;
+} IIO_RESOURCE_INSTANCE;
+
+typedef struct {
+ UINT16 PlatGlobalIoBase; // Global IO Base
+ UINT16 PlatGlobalIoLimit; // Global IO Limit
+ UINT32 PlatGlobalMmio32Base; // Global Mmiol base
+ UINT32 PlatGlobalMmio32Limit; // Global Mmiol limit
+ UINT64 PlatGlobalMmio64Base; // Global Mmioh Base [43:0]
+ UINT64 PlatGlobalMmio64Limit; // Global Mmioh Limit [43:0]
+ QPI_CPU_DATA CpuQpiInfo[MAX_SOCKET]; // QPI related info per CPU
+ QPI_IIO_DATA IioQpiInfo[MAX_SOCKET]; // QPI related info per IIO
+ UINT32 MemTsegSize;
+ UINT32 MemIedSize;
+ UINT64 PciExpressBase;
+ UINT32 PciExpressSize;
+ UINT32 MemTolm;
+ IIO_RESOURCE_INSTANCE IIO_resource[MAX_SOCKET];
+ UINT8 numofIIO;
+ UINT8 MaxBusNumber;
+ UINT32 packageBspApicID[MAX_SOCKET]; // This data array is valid only for SBSP, not for non-SBSP CPUs. <AS> for CpuSv
+ UINT8 EVMode;
+ UINT8 Pci64BitResourceAllocation;
+ UINT8 SkuPersonality[MAX_SOCKET];
+ UINT8 VMDStackEnable[MaxIIO][MAX_IIO_STACK];
+ UINT16 IoGranularity;
+ UINT32 MmiolGranularity;
+ UINT64_STRUCT MmiohGranularity;
+ UINT8 RemoteRequestThreshold; //5370389
+ UINT32 UboxMmioSize;
+ UINT32 MaxAddressBits;
+} PLATFORM_DATA;
+
+typedef struct {
+ UINT8 CurrentUpiiLinkSpeed;// Current programmed UPI Link speed (Slow/Full speed mode)
+ UINT8 CurrentUpiLinkFrequency; // Current requested UPI Link frequency (in GT)
+ UINT8 OutKtiCpuSktHotPlugEn; // 0 - Disabled, 1 - Enabled for PM X2APIC
+ UINT32 OutKtiPerLinkL1En[MAX_SOCKET]; // output kti link enabled status for PM
+ UINT8 IsocEnable;
+ UINT32 meRequestedSize; // Size of the memory range requested by ME FW, in MB
+ UINT32 ieRequestedSize; // Size of the memory range requested by IE FW, in MB
+ UINT8 DmiVc1;
+ UINT8 DmiVcm;
+ UINT32 CpuPCPSInfo;
+ UINT8 cpuSubType;
+ UINT8 SystemRasType;
+ UINT8 numCpus; // 1,..4. Total number of CPU packages installed and detected (1..4)by QPI RC
+ UINT16 tolmLimit;
+ UINT32 tohmLimit;
+ RC_VERSION RcVersion;
+ BOOLEAN MsrTraceEnable;
+ UINT8 DdrXoverMode; // DDR 2.2 Mode
+ // For RAS
+ UINT8 bootMode;
+ UINT8 OutClusterOnDieEn; // Whether RC enabled COD support
+ UINT8 OutSncEn;
+ UINT8 OutNumOfCluster;
+ UINT8 imcEnabled[MAX_SOCKET][MAX_IMC];
+ UINT16 LlcSizeReg;
+ UINT8 chEnabled[MAX_SOCKET][MAX_CH];
+ UINT8 memNode[MC_MAX_NODE];
+ UINT8 IoDcMode;
+ UINT8 ReservedBC;
+} SYSTEM_STATUS;
+
+typedef struct {
+ PLATFORM_DATA PlatformData;
+ SYSTEM_STATUS SystemStatus;
+ UINT32 OemValue;
+} IIO_UDS;
+#pragma pack()
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h b/Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h
new file mode 100644
index 0000000000..75b73113ac
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h
@@ -0,0 +1,26 @@
+/** @file
+
+ ImonVrSvid.h
+
+ API Header for IMON VR PCD Structure
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IMON_VR_SVID_H_
+#define _IMON_VR_SVID_H_
+
+//Maximum IMON COUNT
+#define MAX_IMON_COUNT 16
+
+//End of List
+#define IMON_ADDR_LIST_END 0xFF
+
+typedef struct {
+ UINT8 VrSvid[MAX_IMON_COUNT];
+} VCC_IMON;
+
+#endif //_IMON_VR_SVID_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h b/Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h
new file mode 100644
index 0000000000..bea4f72ce9
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h
@@ -0,0 +1,22 @@
+/** @file
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _kti_setup_definitions_h
+#define _kti_setup_definitions_h
+
+//
+// Link speed
+//
+//
+// ICX KTI Speed options
+//
+#define SPEED_REC_96GT 0
+#define SPEED_REC_104GT 1
+#define SPEED_REC_112GT 2
+
+#endif // _kti_setup_definitions_h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h
new file mode 100644
index 0000000000..0a212840e4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h
@@ -0,0 +1,35 @@
+/** @file
+ Interface header file for the Compressed Variable library class.
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _COMPRESSED_VARIABLE_LIB_H_
+#define _COMPRESSED_VARIABLE_LIB_H_
+
+#include <Uefi.h>
+
+/**
+ Retrieve data from a HOB(s), then compress and save the data.
+
+ @param[in] HobGuid GUID of the HOB to save.
+ @param[in] VariableName Name of the variable to save as.
+ @param[in] VariableGuid GUID of the variable to save as.
+
+ @retval EFI_SUCCESS The variable was saved successfully.
+ @retval !EFI_SUCCESS Failure.
+
+**/
+
+EFI_STATUS
+EFIAPI
+SaveVariableFromHob (
+ IN EFI_GUID HobGuid,
+ IN CHAR16 *VariableName,
+ IN EFI_GUID VariableGuid
+ );
+
+#endif // #ifndef _COMPRESSED_VARIABLE_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h
new file mode 100644
index 0000000000..be12385348
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h
@@ -0,0 +1,34 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EMULATION_CONFIGURATION_LIB_H_
+#define _EMULATION_CONFIGURATION_LIB_H_
+
+#include <Uefi.h>
+
+#pragma pack(1)
+
+typedef struct {
+ UINT8 UbiosGenerationSetting; // indicate if uBIOS generation is enable or not in setup menu
+ UINT8 HybridSystemLevelEmulationSetting; // indicate if HSLE is enable or not in setup menu
+ UINT8 UbiosOutputMode; // indicate if we should output register writes to the serial port
+ UINT32 LoopBackLabelNumber; // used to create ASM reads for emulation
+ UINT8 FnvAccessValue; // indicate if FNV access enable or not
+ UINT8 MsrTraceEnable; // indicate if Mrs Trace is enable or not in setup menu
+ UINT8 MsrTraceOutputMode; // indicate if Mrs Trace Asm Output Mode
+} EMULATION_SETTING;
+
+#pragma pack()
+
+#define ASM_OUTPUT_ENABLE BIT0 // flag to indicate ASM output is enabled
+
+#define FNV_ACCESS_DISABLE 0 // flag to indicate FNV access is disabled
+
+#define MSR_OUTPUT_DISABLE 0 // flag to indicate Mrs Trace Asm Output is disabled
+
+#endif // _EMULATION_CONFIGURATION_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h
new file mode 100644
index 0000000000..d5cf1c01d0
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h
@@ -0,0 +1,32 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MEMTYPELIB_H_
+#define _MEMTYPELIB_H_
+
+typedef enum {
+ MemTypeNone = 0,
+ MemType1lmDdr,
+ MemType1lmAppDirect,
+ MemType1lmAppDirectReserved,
+ MemType1lmCtrl,
+ MemType1lmHbm,
+ MemTypeNxm,
+ MemType2lmDdrCacheMemoryMode,
+ MemType2lmDdrWbCacheAppDirect,
+ MemType2lmHbmCacheDdr,
+ MemType2lmHbmCacheMemoryMode,
+ MemTypeCxlAccVolatileMem,
+ MemTypeCxlAccPersistentMem,
+ MemTypeFpga,
+ MemTypeCxlExpVolatileMem,
+ MemTypeCxlExpPersistentMem,
+ MemTypeMax
+} MEM_TYPE;
+
+#endif // _MEMTYPELIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h
new file mode 100644
index 0000000000..8eae5c64df
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h
@@ -0,0 +1,66 @@
+/** @file
+
+ MemVrSvidMapLib.h
+
+ API Header for VrSvid Mapping
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MEM_VR_SVID_MAP_LIB_H_
+#define _MEM_VR_SVID_MAP_LIB_H_
+
+#define MAX_SVID_MC 16
+#define MAX_SVID_SOCKET 16
+
+typedef struct {
+ UINT8 Mc[MAX_SVID_MC]; // Store SVID for Socket\MC Pair
+} SVID_SOCKET;
+
+typedef struct {
+ SVID_SOCKET Socket[MAX_SVID_SOCKET];
+} MEM_SVID_MAP;
+
+
+/**
+ Get SVID Mapping from Socket and MCID
+
+ @param[in] Socket - Socket Id - 0 based
+ @param[in] McId - Memory controller 0 based
+ @param[in] SvidValue - SVID Value
+
+ @retval EFI_SUCCESS - Value found
+ @retval EFI_NOT_FOUND - Value not found
+
+**/
+EFI_STATUS
+EFIAPI
+GetSvidMap (
+ IN UINT8 Socket,
+ IN UINT8 McId,
+ IN UINT8 *SvidValue
+ );
+
+/**
+ Set SVID Mapping for given Socket and MCID
+
+ @param[in] Socket - Socket Id - 0 based
+ @param[in] McId - Memory controller 0 based
+ @param[in] SvidValue - SVID Value
+
+ @retval EFI_SUCCESS - Value set successfully
+ @retval EFI_NOT_FOUND - Value not set
+
+**/
+EFI_STATUS
+EFIAPI
+SetSvidMap (
+ IN UINT8 Socket,
+ IN UINT8 McId,
+ IN UINT8 SvidValue
+ );
+
+#endif //_MEM_VR_SVID_MAP_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h
new file mode 100644
index 0000000000..adda16bdc2
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h
@@ -0,0 +1,22 @@
+/** @file
+ Header file for PchInfoLib.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_INFO_LIB_H_
+#define _PCH_INFO_LIB_H_
+
+#include <PchAccess.h>
+
+typedef enum {
+ PchH = 1,
+ PchLp,
+ PchMini,
+ PchUnknownSeries
+} PCH_SERIES;
+
+#endif // _PCH_INFO_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h
new file mode 100644
index 0000000000..1f31ffed74
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h
@@ -0,0 +1,17 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+UINT32
+IsSioExist (
+ VOID
+ );
+
+VOID
+InitializeSio (
+ VOID
+ );
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h b/Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h
new file mode 100644
index 0000000000..0287e98b4d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h
@@ -0,0 +1,326 @@
+/** @file
+ The Semaphore Library API provides the necessary functions to acquire/release
+ the global or a socket's semaphore.
+
+ This API is designed to allow a calling agent to acquire a global (the SBSP)
+ semaphore or a socket's semaphore. It also provides functionality to release
+ the semaphore and check if ownership has been obtained. If a semaphore is
+ desired, an agent should first attempt to acquire it, then check if it has
+ ownership. If ownership has not been obtained, the agent must wait until
+ ownership has been obtained before proceeding. Once the desired task is complete
+ the semaphore must be released. Semaphores should be used for when ensuring
+ exclusive access to resoruces among CPU sockets is necessary.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SEMAPHORE_LIB_H_
+#define _SEMAPHORE_LIB_H_
+
+#include <Uefi.h>
+
+///
+/// Used to identify which System Sempahore is being accessed. There are
+/// currently two System Semaphores available for use (0 and 1).
+///
+typedef enum {
+ SystemSemaphore0, ///< Semaphore 0 - Used for SPD/SMBus access
+ SystemSemaphore1, ///< Semaphore 1 - Used for Debug print
+ SystemSemaphoreMax
+} SYSTEM_SEMAPHORE_NUMBER;
+
+///
+/// Used to identify which Local Sempahore is being accessed. There are
+/// currently two Local Semaphores available for use (0 and 1).
+///
+typedef enum {
+ LocalSemaphore0,
+ LocalSemaphore1,
+ LocalSemaphoreMax
+} LOCAL_SEMAPHORE_NUMBER;
+
+#define DO_NOT_ADD_TO_QUEUE FALSE
+#define ADD_TO_QUEUE TRUE
+
+/**
+ Acquire a global (BSP) semaphore for the calling socket.
+
+ Used for ensuring exclusive access to resources among CPU sockets.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireGlobalSemaphore (SystemSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsGlobalSemaphoreOwned (SystemSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseGlobalSemaphore (SystemSemaphore0);
+ ......
+
+ @param[in] SemaphoreNumber - SYSTEMSEMAPHORE register number (0 or 1)
+ @param[in] AddToQueue - specifices whether to add the requesting
+ socket to the queue (TRUE or FALSE)
+ @param[out] QueueNumber - assigned place in line of semaphore request,
+ if adding to queue
+
+ @retval TRUE - successfully acquired semaphore
+ @retval FALSE - semaphore not acquired
+**/
+BOOLEAN
+EFIAPI
+AcquireGlobalSemaphore (
+ IN SYSTEM_SEMAPHORE_NUMBER SemaphoreNumber,
+ IN BOOLEAN AddToQueue,
+ OUT UINT32 *QueueNumber OPTIONAL
+ );
+
+/**
+ Checks if a global (BSP) semaphore is owned by the calling socket.
+
+ Used for ensuring exclusive access to resources among CPU sockets.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireGlobalSemaphore (SystemSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsGlobalSemaphoreOwned (SystemSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseGlobalSemaphore (SystemSemaphore0);
+ ......
+
+ @param[in] SemaphoreNumber - SYSTEMSEMAPHORE register number (0 or 1)
+ @param[in] QueueNumber - assigned place in line of semaphore request
+ that was returned by AcquireGlobalSemaphore
+
+ @retval TRUE - successfully acquired semaphore
+ @retval FALSE - semaphore not acquired
+**/
+BOOLEAN
+EFIAPI
+IsGlobalSemaphoreOwned (
+ IN SYSTEM_SEMAPHORE_NUMBER SemaphoreNumber,
+ IN UINT32 QueueNumber
+ );
+
+/**
+ Release a global (BSP) semaphore owned by the calling socket.
+
+ Used for ensuring exclusive access to resources among CPU sockets.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireGlobalSemaphore (SystemSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsGlobalSemaphoreOwned (SystemSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseGlobalSemaphore (SystemSemaphore0);
+ ......
+
+ @param[in] SemaphoreNumber - SYSTEMSEMAPHORE register number (0 or 1)
+
+ @retval EFI_SUCCESS - successfully released semaphore
+ @retval EFI_DEVICE_ERROR - error releasing semaphore
+**/
+EFI_STATUS
+EFIAPI
+ReleaseGlobalSemaphore (
+ IN SYSTEM_SEMAPHORE_NUMBER SemaphoreNumber
+ );
+
+
+/**
+ Acquire a socket semaphore for the calling socket.
+
+ Used for ensuring exclusive access to resources among CPU sockets.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireSocketSemaphore (Socket, SystemSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsSocketSemaphoreOwned (Socket, SystemSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseSocketSemaphore (Socket, SystemSemaphore0);
+ ......
+
+ @param[in] Socket - Socket where the semaphore is located
+ @param[in] SemaphoreNumber - SYSTEMSEMAPHORE register number (0 or 1)
+ @param[in] AddToQueue - specifices whether to add the requesting
+ socket to the queue (TRUE or FALSE)
+ @param[out] QueueNumber - assigned place in line of semaphore request,
+ if adding to queue
+
+ @retval TRUE - successfully acquired semaphore
+ @retval FALSE - semaphore not acquired
+**/
+BOOLEAN
+EFIAPI
+AcquireSocketSemaphore (
+ IN UINT8 Socket,
+ IN SYSTEM_SEMAPHORE_NUMBER SemaphoreNumber,
+ IN BOOLEAN AddToQueue,
+ OUT UINT32 *QueueNumber OPTIONAL
+ );
+
+/**
+ Checks if a socket semaphore is owned by the calling socket.
+
+ Used for ensuring exclusive access to resources among CPU sockets.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireSocketSemaphore (Socket, SystemSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsSocketSemaphoreOwned (Socket, SystemSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseSocketSemaphore (Socket, SystemSemaphore0);
+ ......
+
+ @param[in] Socket - Socket where the semaphore is located
+ @param[in] SemaphoreNumber - SYSTEMSEMAPHORE register number (0 or 1)
+ @param[in] QueueNumber - assigned place in line of semaphore request
+ that was returned by AcquireSocketSemaphore
+
+ @retval TRUE - successfully acquired semaphore
+ @retval FALSE - semaphore not acquired
+**/
+BOOLEAN
+EFIAPI
+IsSocketSemaphoreOwned (
+ IN UINT8 Socket,
+ IN SYSTEM_SEMAPHORE_NUMBER SemaphoreNumber,
+ IN UINT32 QueueNumber
+ );
+
+/**
+ Release a socket semaphore owned by the calling socket.
+
+ Used for ensuring exclusive access to resources among CPU sockets.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireSocketSemaphore (Socket, SystemSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsSocketSemaphoreOwned (Socket, SystemSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseSocketSemaphore (Socket, SystemSemaphore0);
+ ......
+
+ @param[in] Socket - Socket to release semaphore
+ @param[in] SemaphoreNumber - SYSTEMSEMAPHORE register number (0 or 1)
+
+ @retval EFI_SUCCESS - successfully released semaphore
+ @retval EFI_DEVICE_ERROR - error releasing semaphore
+**/
+EFI_STATUS
+EFIAPI
+ReleaseSocketSemaphore (
+ IN UINT8 Socket,
+ IN SYSTEM_SEMAPHORE_NUMBER SemaphoreNumber
+ );
+
+/**
+ Acquire a local semaphore for the calling thread.
+
+ Used for ensuring exclusive access to resources among CPU threads.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireLocalSemaphore (LocalSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsLocalSemaphoreOwned (LocalSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseLocalSemaphore (LocalSemaphore0);
+ ......
+
+ @param[in] SemaphoreNumber - LOCALSEMAPHORE register number (0 or 1)
+ @param[in] AddToQueue - specifices whether to add the requesting
+ thread to the queue (TRUE or FALSE)
+ @param[out] QueueNumber - assigned place in line of semaphore request,
+ if adding to queue
+
+ @retval TRUE - successfully acquired semaphore
+ @retval FALSE - semaphore not acquired
+**/
+BOOLEAN
+EFIAPI
+AcquireLocalSemaphore (
+ IN LOCAL_SEMAPHORE_NUMBER SemaphoreNumber,
+ IN BOOLEAN AddToQueue,
+ OUT UINT32 *QueueNumber OPTIONAL
+ );
+
+/**
+ Checks if a local semaphore is owned by the calling thread.
+
+ Used for ensuring exclusive access to resources among CPU threads.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireLocalSemaphore (LocalSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsLocalSemaphoreOwned (LocalSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseLocalSemaphore (LocalSemaphore0);
+ ......
+
+ @param[in] SemaphoreNumber - LOCALSEMAPHORE register number (0 or 1)
+ @param[in] QueueNumber - assigned place in line of semaphore request
+ that was returned by AcquireLocalSemaphore
+
+ @retval TRUE - successfully acquired semaphore
+ @retval FALSE - semaphore not acquired
+**/
+BOOLEAN
+EFIAPI
+IsLocalSemaphoreOwned (
+ IN LOCAL_SEMAPHORE_NUMBER SemaphoreNumber,
+ IN UINT32 QueueNumber
+ );
+
+/**
+ Release a local semaphore owned by the calling thread.
+
+ Used for ensuring exclusive access to resources among CPU threads.
+
+ IMPORTANT:
+ The functions must be called in the sequence below:
+ ......
+ Owned = AcquireLocalSemaphore (LocalSemaphore0, ADD_TO_QUEUE, &QNum);
+ while (!Owned) {
+ Owned = IsLocalSemaphoreOwned (LocalSemaphore0, QNum));
+ }
+ DoSomething ();
+ ReleaseLocalSemaphore (LocalSemaphore0);
+ ......
+
+ @param[in] SemaphoreNumber - LOCALSEMAPHORE register number (0 or 1)
+
+ @retval EFI_SUCCESS - successfully released semaphore
+ @retval EFI_INVALID_PARAMETER - semaphore number is out of range
+ @retval EFI_DEVICE_ERROR - error releasing semaphore
+**/
+EFI_STATUS
+EFIAPI
+ReleaseLocalSemaphore (
+ IN LOCAL_SEMAPHORE_NUMBER SemaphoreNumber
+ );
+
+#endif // _SEMAPHORE_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h b/Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h
new file mode 100644
index 0000000000..6cde7ac633
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h
@@ -0,0 +1,20 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// This defines the maximum number of cores supported by some modules.
+// It is generally better to use a dynamic solution.
+// This is also defined by build tools for some special build
+// environments used in validation that do not support EDK II build
+// and thus can't use PCD.
+//
+
+#ifndef MAX_CORE
+#define MAX_CORE (FixedPcdGet32 (PcdMaxCpuCoreCount))
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h b/Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h
new file mode 100644
index 0000000000..06f2e54db3
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h
@@ -0,0 +1,20 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// This defines the maximum number of sockets supported by some modules.
+// It is generally better to use a dynamic solution.
+// This is also defined by build tools for some special build
+// environments used in validation that do not support EDK II build
+// and thus can't use PCD.
+//
+
+#ifndef MAX_SOCKET
+#define MAX_SOCKET (FixedPcdGet32 (PcdMaxCpuSocketCount))
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h b/Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h
new file mode 100644
index 0000000000..3240fc7166
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h
@@ -0,0 +1,20 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// This defines the maximum number of threads supported by some modules.
+// It is generally better to use a dynamic solution.
+// This is also defined by build tools for some special build
+// environments used in validation that do not support EDK II build
+// and thus can't use PCD.
+//
+
+#ifndef MAX_THREAD
+#define MAX_THREAD (FixedPcdGet32 (PcdMaxCpuThreadCount))
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h b/Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h
new file mode 100644
index 0000000000..6958b1431b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h
@@ -0,0 +1,41 @@
+/** @file
+ Mem common Hearder File
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __MEM_COMMON_H__
+#define __MEM_COMMON_H__
+
+#define MAX_CH ((MAX_IMC)*(MAX_MC_CH)) // Max channels per socket
+
+typedef enum {
+ ReservedMemSs,
+ Ddr4MemSs = 1,
+ Ddr5MemSs = 2,
+ LpDdr4MemSs = 3,
+ LpDdr5MemSs = 4,
+ Hbm2MemSs = 5,
+ MrcMstMax,
+ MrcMstDelim = MAX_INT32
+} MRC_MST;
+
+typedef enum {
+ TYPE_SCF_BAR = 0,
+ TYPE_PCU_BAR,
+ TYPE_MEM_BAR0,
+ TYPE_MEM_BAR1,
+ TYPE_MEM_BAR2,
+ TYPE_MEM_BAR3,
+ TYPE_MEM_BAR4,
+ TYPE_MEM_BAR5,
+ TYPE_MEM_BAR6,
+ TYPE_MEM_BAR7,
+ TYPE_SBREG_BAR,
+ TYPE_MAX_MMIO_BAR
+} MMIO_BARS;
+
+#endif //#ifndef __MEM_COMMON_H__
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h b/Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h
new file mode 100644
index 0000000000..0b002311fb
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h
@@ -0,0 +1,38 @@
+/** @file
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _DDR4_SPD_REGS_H_
+#define _DDR4_SPD_REGS_H_
+
+//
+// DDR4 SPD Spec 4.0 Register Definitions
+//
+
+/* Byte 132 (0x084) (Registered): RDIMM Thermal Heat Spreader Solution */
+
+#define SPD_RDIMM_RDIMM_THERMAL_HEAT_SPREADER_SOLUTION_REG 0x0084
+
+typedef union {
+ struct {
+ UINT8 heat_spreader_thermal_characteristics : 7;
+ /* Bits[0:6]
+ Heat Spreader Thermal Characteristics
+ 0 = Undefined
+ All other settings to be defined
+ */
+ UINT8 heat_spreader_solution : 1;
+ /* Bits[7]
+ Heat Spreader Solution
+ 0 = Heat spreader solution is not incorporated onto this assembly
+ 1 = Heat spreader solution is incorporated onto this assembly
+ */
+ } Bits;
+ UINT8 Data;
+} RDIMM_RDIMM_THERMAL_HEAT_SPREADER_SOLUTION_STRUCT;
+
+#endif // #ifndef _DDR4_SPD_REGS_H_
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h b/Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h
new file mode 100644
index 0000000000..ae47ef2034
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h
@@ -0,0 +1,28 @@
+/** @file
+ ProcSmbChipCommon.h
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PROC_SMB_CHIP_COMMON_H_
+#define _PROC_SMB_CHIP_COMMON_H_
+
+#include <MemDefaults.h>
+
+//
+// Available SMBus clock periods to be programmed.
+//
+typedef enum {
+ SmbClk100K = SMB_CLK_100K, // 100 Khz in I2C mode; 4Mhz in I3C mode
+ SmbClk400K = SMB_CLK_400K, // 400 Khz in I2C mode; 6Mhz in I3C mode
+ SmbClk700K = SMB_CLK_700K, // 700 Khz in I2C mode; 8Mhz in I3C mode
+ SmbClk1M = SMB_CLK_1M, // 1 Mhz in I2C mode; 10Mhz in I3C mode
+ SmbClkPeriodMax
+} SMB_CLOCK_FREQUENCY;
+
+#define MAX_SMB_INSTANCE 2 // Maximum number of SMBUS Instances
+
+#endif // _PROC_SMB_CHIP_COMMON_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Platform.h b/Silicon/Intel/WhitleySiliconPkg/Include/Platform.h
new file mode 100644
index 0000000000..b8ed188f16
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Platform.h
@@ -0,0 +1,266 @@
+/** @file
+ Platform specific information
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <BackCompatible.h>
+#include <Uefi.h>
+#include <Library/PcdLib.h>
+
+#ifndef __PLATFORM_H__
+#define __PLATFORM_H__
+
+//
+// Assigning default ID and base addresses here, these definitions are used by ACPI tables
+//
+
+#define PCH_IOAPIC (UINT64)BIT0
+#define PCH_IOAPIC_ID 0x08
+#define PCH_IOAPIC_ADDRESS 0xFEC00000 // This must get range from Legacy IIO
+#define PCH_INTERRUPT_BASE 0
+
+#define PC00_IOAPIC (UINT64)BIT1 //Because PCH_IOAPIC gets the first bit, these bit values will be 1+PC number.
+#define PC00_IOAPIC_ID 0x09
+#define PC00_INTERRUPT_BASE 24
+
+#define PC01_IOAPIC (UINT64)BIT2
+#define PC01_IOAPIC_ID 0x0A
+#define PC01_INTERRUPT_BASE 32
+
+#define PC02_IOAPIC (UINT64)BIT3
+#define PC02_IOAPIC_ID 0x0B
+#define PC02_INTERRUPT_BASE 40
+
+#define PC03_IOAPIC (UINT64)BIT4
+#define PC03_IOAPIC_ID 0x0C
+#define PC03_INTERRUPT_BASE 48
+
+#define PC04_IOAPIC (UINT64)BIT5
+#define PC04_IOAPIC_ID 0x0D
+#define PC04_INTERRUPT_BASE 56
+
+#define PC05_IOAPIC (UINT64)BIT6
+#define PC05_IOAPIC_ID 0x0E
+#define PC05_INTERRUPT_BASE 64
+
+#define PC06_IOAPIC (UINT64)BIT7
+#define PC06_IOAPIC_ID 0x0F
+#define PC06_INTERRUPT_BASE 72
+
+#define PC07_IOAPIC (UINT64)BIT8
+#define PC07_IOAPIC_ID 0x10
+#define PC07_INTERRUPT_BASE 80
+
+#define PC08_IOAPIC (UINT64)BIT9
+#define PC08_IOAPIC_ID 0x11
+#define PC08_INTERRUPT_BASE 88
+
+#define PC09_IOAPIC (UINT64)BIT10
+#define PC09_IOAPIC_ID 0x12
+#define PC09_INTERRUPT_BASE 96
+
+#define PC10_IOAPIC (UINT64)BIT11
+#define PC10_IOAPIC_ID 0x13
+#define PC10_INTERRUPT_BASE 104
+
+#define PC11_IOAPIC (UINT64)BIT12
+#define PC11_IOAPIC_ID 0x14
+#define PC11_INTERRUPT_BASE 112
+
+#define PC12_IOAPIC (UINT64)BIT13
+#define PC12_IOAPIC_ID 0x15
+#define PC12_INTERRUPT_BASE 120
+
+#define PC13_IOAPIC (UINT64)BIT14
+#define PC13_IOAPIC_ID 0x16
+#define PC13_INTERRUPT_BASE 128
+
+#define PC14_IOAPIC (UINT64)BIT15
+#define PC14_IOAPIC_ID 0x17
+#define PC14_INTERRUPT_BASE 136
+
+#define PC15_IOAPIC (UINT64)BIT16
+#define PC15_IOAPIC_ID 0x18
+#define PC15_INTERRUPT_BASE 144
+
+#define PC16_IOAPIC (UINT64)BIT17
+#define PC16_IOAPIC_ID 0x19
+#define PC16_INTERRUPT_BASE 152
+
+#define PC17_IOAPIC (UINT64)BIT18
+#define PC17_IOAPIC_ID 0x1A
+#define PC17_INTERRUPT_BASE 160
+
+#define PC18_IOAPIC (UINT64)BIT19
+#define PC18_IOAPIC_ID 0x1B
+#define PC18_INTERRUPT_BASE 168
+
+#define PC19_IOAPIC (UINT64)BIT20
+#define PC19_IOAPIC_ID 0x1C
+#define PC19_INTERRUPT_BASE 176
+
+#define PC20_IOAPIC (UINT64)BIT21
+#define PC20_IOAPIC_ID 0x1D
+#define PC20_INTERRUPT_BASE 184
+
+#define PC21_IOAPIC (UINT64)BIT22
+#define PC21_IOAPIC_ID 0x1E
+#define PC21_INTERRUPT_BASE 192
+
+#define PC22_IOAPIC (UINT64)BIT23
+#define PC22_IOAPIC_ID 0x1F
+#define PC22_INTERRUPT_BASE 200
+
+#define PC23_IOAPIC (UINT64)BIT24
+#define PC23_IOAPIC_ID 0x20
+#define PC23_INTERRUPT_BASE 208
+
+#define PC24_IOAPIC (UINT64)BIT25
+#define PC24_IOAPIC_ID 0x21
+#define PC24_INTERRUPT_BASE 216
+
+#define PC25_IOAPIC (UINT64)BIT26
+#define PC25_IOAPIC_ID 0x22
+#define PC25_INTERRUPT_BASE 224
+
+#define PC26_IOAPIC (UINT64)BIT27
+#define PC26_IOAPIC_ID 0x23
+#define PC26_INTERRUPT_BASE 232
+
+#define PC27_IOAPIC (UINT64)BIT28
+#define PC27_IOAPIC_ID 0x24
+#define PC27_INTERRUPT_BASE 240
+
+#define PC28_IOAPIC (UINT64)BIT29
+#define PC28_IOAPIC_ID 0x25
+#define PC28_INTERRUPT_BASE 248
+
+#define PC29_IOAPIC (UINT64)BIT30
+#define PC29_IOAPIC_ID 0x26
+#define PC29_INTERRUPT_BASE 256
+
+#define PC30_IOAPIC (UINT64)BIT31
+#define PC30_IOAPIC_ID 0x27
+#define PC30_INTERRUPT_BASE 264
+
+#define PC31_IOAPIC (UINT64)BIT32
+#define PC31_IOAPIC_ID 0x28
+#define PC31_INTERRUPT_BASE 272
+
+#define PC32_IOAPIC (UINT64)BIT33
+#define PC32_IOAPIC_ID 0x29
+#define PC32_INTERRUPT_BASE 280
+
+#define PC33_IOAPIC (UINT64)BIT34
+#define PC33_IOAPIC_ID 0x2A
+#define PC33_INTERRUPT_BASE 288
+
+#define PC34_IOAPIC (UINT64)BIT35
+#define PC34_IOAPIC_ID 0x2B
+#define PC34_INTERRUPT_BASE 296
+
+#define PC35_IOAPIC (UINT64)BIT36
+#define PC35_IOAPIC_ID 0x2C
+#define PC35_INTERRUPT_BASE 304
+
+#define PC36_IOAPIC (UINT64)BIT37
+#define PC36_IOAPIC_ID 0x2D
+#define PC36_INTERRUPT_BASE 312
+
+#define PC37_IOAPIC (UINT64)BIT38
+#define PC37_IOAPIC_ID 0x2E
+#define PC37_INTERRUPT_BASE 320
+
+#define PC38_IOAPIC (UINT64)BIT39
+#define PC38_IOAPIC_ID 0x2F
+#define PC38_INTERRUPT_BASE 328
+
+#define PC39_IOAPIC (UINT64)BIT40
+#define PC39_IOAPIC_ID 0x30
+#define PC39_INTERRUPT_BASE 336
+
+#define PC40_IOAPIC (UINT64)BIT41
+#define PC40_IOAPIC_ID 0x31
+#define PC40_INTERRUPT_BASE 344
+
+#define PC41_IOAPIC (UINT64)BIT42
+#define PC41_IOAPIC_ID 0x32
+#define PC41_INTERRUPT_BASE 352
+
+#define PC42_IOAPIC (UINT64)BIT43
+#define PC42_IOAPIC_ID 0x33
+#define PC42_INTERRUPT_BASE 360
+
+#define PC43_IOAPIC (UINT64)BIT44
+#define PC43_IOAPIC_ID 0x34
+#define PC43_INTERRUPT_BASE 368
+
+#define PC44_IOAPIC (UINT64)BIT45
+#define PC44_IOAPIC_ID 0x35
+#define PC44_INTERRUPT_BASE 376
+
+#define PC45_IOAPIC (UINT64)BIT46
+#define PC45_IOAPIC_ID 0x36
+#define PC45_INTERRUPT_BASE 384
+
+#define PC46_IOAPIC (UINT64)BIT47
+#define PC46_IOAPIC_ID 0x37
+#define PC46_INTERRUPT_BASE 392
+
+#define PC47_IOAPIC (UINT64)BIT48
+#define PC47_IOAPIC_ID 0x38
+#define PC47_INTERRUPT_BASE 400
+
+//
+// Define platform base
+// Note: All the PCH devices must get Legacy IO resources within first 16KB
+// since KTI RC allcoates range 0-16KB for the legacy IIO.
+//
+#define PCH_ACPI_BASE_ADDRESS PcdGet16 (PcdAcpiBaseAddress) // ACPI Power Management I/O Register Base Address
+
+#define PCH_TCO_BASE_ADDRESS PcdGet16 (PcdTcoBaseAddress)
+
+#define SIO_GPIO_BASE_ADDRESS 0x0800
+
+//
+// SMBUS Data
+//
+#define PCH_SMBUS_BASE_ADDRESS 0x0780
+
+//
+// CMOS usage
+//
+
+// Second bank
+//
+#define CMOS_PLATFORM_ID_LO 0x18 // Second bank CMOS location of Platform ID
+#define CMOS_PLATFORM_ID_HI 0x19 //
+
+#define PCI_BUS_NUMBER_PCH_HPET 0x0
+#define PCI_DEVICE_NUMBER_PCH_HPET 0x1F
+
+#define PCI_FUNCTION_NUMBER_PCH_HPET0 0x00
+
+#define PCI_BUS_NUMBER_PCH_IOAPIC 0x00
+#define PCI_DEVICE_NUMBER_PCH_IOAPIC 0x1E
+
+#define PCI_FUNCTION_NUMBER_PCH_IOAPIC 0x0
+
+//
+// AHCI port offset values
+//
+#define EFI_AHCI_PORT_START 0x0100
+#define EFI_AHCI_PORT_REG_WIDTH 0x0080
+#define EFI_AHCI_PORT_CLB 0x0000
+#define EFI_AHCI_PORT_CLBU 0x0004
+#define EFI_AHCI_PORT_FB 0x0008
+#define EFI_AHCI_PORT_FBU 0x000C
+#define EFI_AHCI_PORT_IS 0x0010
+#define EFI_AHCI_PORT_IE 0x0014
+#define EFI_AHCI_PORT_CMD 0x0018
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h b/Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h
new file mode 100644
index 0000000000..ca91434663
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h
@@ -0,0 +1,106 @@
+/** @file
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_INFO_TYPES_H_
+#define _PLATFORM_INFO_TYPES_H_
+
+//
+// DIMM Connector type
+//
+typedef enum {
+ DimmConnectorPth = 0x00, // Through hole connector
+ DimmConnectorSmt, // Surface mount connector
+ DimmConnectorMemoryDown, // Platform soldered DRAMs
+ DimmConnectorIgnore, // Ignore connector type
+ DimmConnectorMax
+} EFI_MEMORY_DIMM_CONNECTOR_TYPE;
+
+//
+// Platform types - used with EFI_PLATFORM_INFO BoardId
+//
+typedef enum {
+ StartOfEfiPlatformTypeEnum = 0x00,
+ //For PPO
+ TypeNeonCityEPRP,
+ TypeWolfPass,
+ TypeTennesseePass,
+ TypeHedtCRB,
+ TypeLightningRidgeEXRP,
+ TypeLightningRidgeEX8S1N,
+ TypeBarkPeak,
+ TypeYubaCityRP,
+ TypeRidgeport,
+ //End PPO
+ TypeWilsonCityRP,
+ TypeWilsonCityModular,
+ TypeCoyotePass,
+ TypeIdaville,
+ TypeMoroCityRP,
+ TypeBrightonCityRp,
+ TypeJacobsville,
+ TypeSnrSvp,
+ TypeSnrSvpSodimm,
+ TypeJacobsvilleMDV,
+ TypeFrostCreekRP,
+ TypeVictoriaCanyonRP,
+ TypeArcherCityRP,
+ TypeNeonCityEPECB,
+ TypeIsoscelesPeak,
+ TypeWilsonPointRP,
+ TypeWilsonPointModular,
+ TypeBretonSound,
+ TypeWilsonCityPPV,
+ TypeCooperCityRP,
+ TypeWilsonCitySMT,
+ TypeSnrSvpSodimmB,
+ TypeArcherCityModular,
+ TypeArcherCityEVB,
+ TypeArcherCityXPV,
+ TypeBigPineKey,
+ TypeExperWorkStationRP,
+ EndOfEfiPlatformTypeEnum
+} EFI_PLATFORM_TYPE;
+
+#define TypePlatformUnknown 0xFF
+#define TypePlatformMin StartOfEfiPlatformTypeEnum + 1
+#define TypePlatformMax EndOfEfiPlatformTypeEnum - 1
+#define TypePlatformDefault TypeWilsonPointRP
+
+//
+// CPU type: Standard (no MCP), -F, etc
+//
+typedef enum {
+ CPU_TYPE_STD,
+ CPU_TYPE_F,
+ CPU_TYPE_P,
+ CPU_TYPE_MAX
+} CPU_TYPE;
+
+#define CPU_TYPE_STD_MASK (1 << CPU_TYPE_STD)
+#define CPU_TYPE_F_MASK (1 << CPU_TYPE_F)
+#define CPU_TYPE_P_MASK (1 << CPU_TYPE_P)
+
+typedef enum {
+ DaisyChainTopology = 0x00,
+ InvSlotsDaisyChainTopology,
+ TTopology
+} EFI_MEMORY_TOPOLOGY_TYPE;
+
+//
+// Values for SocketConfig
+//
+
+#define SOCKET_UNDEFINED 0
+#define SOCKET_4S 1
+#define SOCKET_HEDT 2
+#define SOCKET_1S 3
+#define SOCKET_1SWS 4
+#define SOCKET_8S 5
+#define SOCKET_2S 6
+
+#endif // #ifndef _PLATFORM_INFO_TYPES_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h
new file mode 100644
index 0000000000..c6915582c6
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h
@@ -0,0 +1,474 @@
+/** @file
+ UBS silicon access PPI
+
+ This PPI abstracts all UBA silicon accesses
+
+ @copyright
+ Copyright 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _DYNAMIC_SI_LIBARY_PPI_H_
+#define _DYNAMIC_SI_LIBARY_PPI_H_
+
+// {C1176733-159F-42d5-BCB9-320660B17310}
+#define DYNAMIC_SI_LIBARY_PPI_GUID \
+ { 0x4e18e22b, 0x5034, 0x4512, { 0xb7, 0xe5, 0x0b, 0xf1, 0x9d, 0xe3, 0x59, 0x8c } }
+
+#define UBA_ACCESS_PPI_VERSION 01
+#define UBA_ACCESS_PPI_SIGNATURE SIGNATURE_32('D', 'S', 'L', 'P')
+
+#include <Library/SpsPeiLib.h>
+#include <IioPlatformData.h>
+#include <GpioConfig.h>
+#include <Library/PchInfoLib.h>
+#include <Library/GpioLib.h>
+
+//
+// Functions
+//
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GET_GPIO_INPUT_VALUE) (
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *InputVal
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SET_GPIO_OUTPUT_VALUE) (
+ IN GPIO_PAD GpioPad,
+ IN UINT32 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GPIO_SET_PAD) (
+ IN GPIO_PAD GpioPad,
+ IN GPIO_CONFIG *GpioData
+ );
+
+typedef
+UINT16
+(EFIAPI *PEI_GET_PCH_DEVICE_ID) (
+ VOID
+ );
+
+typedef
+PCH_SERIES
+(EFIAPI *PEI_GET_PCH_SERIES) (
+ VOID
+ );
+
+typedef
+PCH_STEPPING
+(EFIAPI *PEI_GET_PCH_STEPPING) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IS_PCH_GBE_REGION_VALID) (
+ VOID
+ );
+
+typedef
+UINT32
+(EFIAPI *PEI_GET_PCH_GBE_PORT_NUMBER) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IS_PCH_GBE_PRESENT) (
+ VOID
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_PchDisableGbe) (
+ VOID
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_PchDisableGbeByPchId) (
+ IN UINT8 PchId
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GpioConfigurePadsByPchId) (
+ IN UINT8 PchId,
+ IN UINT32 NumberOfItems,
+ IN GPIO_INIT_CONFIG *GpioInitTableAddress
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GpioGetInputValueByPchId) (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *InputVal
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PeiGetCurrenClockingMode) (
+ OUT CLOCKING_MODES *ClockingMode
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GetPchPcieRpDevFunByPchId) (
+ IN UINT8 PchId,
+ IN UINTN RpNumber,
+ OUT UINTN *RpDev,
+ OUT UINTN *RpFun
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IsSimicsEnvironment) (
+ VOID
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetPchMaxSataPortNum) (
+ VOID
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetPchMaxsSataPortNum) (
+ VOID
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GpioSetPadConfigByPchId) (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_CONFIG *GpioData
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetPchMaxPciePortNum) (
+ VOID
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchGetSataLaneNumByPchId) (
+ IN UINT8 PchId,
+ UINT32 SataLaneIndex,
+ UINT8 *LaneNum
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchGetPcieLaneNumByPchId) (
+ IN UINT8 PchId,
+ UINT32 PcieLaneIndex,
+ UINT8 *LaneNum
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchGetsSataLaneNumByPchId) (
+ IN UINT8 PchId,
+ UINT32 SataLaneIndex,
+ UINT8 *LaneNum
+ );
+
+typedef
+UINTN
+(EFIAPI *PEI_MmPciBase) (
+ IN UINT32 Bus,
+ IN UINT32 Device,
+ IN UINT32 Function
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_HybridSystemLevelEmulationEnabled) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IioIsSocketPresent) (
+ IN UINT8 IioIndex
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetMaxPortNumPerSocket) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IsVMDEnabledForPort) (
+ IN UINT8 IioIndex,
+ IN UINT8 PortIndex
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IioAreLanesAssignedToPort) (
+ IN IIO_GLOBALS *IioGlobalData,
+ IN UINT8 IioIndex,
+ IN UINT8 PortIndex
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetPortIndexbyStack) (
+ IN UINT8 StackIndex,
+ IN UINT8 PortIndex
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IsDmiStack) (
+ IN UINT8 Stack
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IsCpuAndRevision) (
+ IN UINT8 CpuType,
+ IN UINT16 Revision
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetMaxStackNumPerSocket) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_IioIsStackPresent) (
+ IN UINT8 IioIndex,
+ IN UINT8 StackIndex
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetMaxPortNumPerStack) (
+ IN UINT8 Stack
+ );
+
+//
+// From KtiApi.h
+//
+typedef
+BOOLEAN
+(EFIAPI *PEI_SocketPresent) (
+ IN UINT32 SocId
+ );
+
+/**
+ Get SVID Mapping from Socket and MCID
+
+ @param[in] Socket - Socket Id - 0 based
+ @param[in] McId - Memory controller 0 based
+ @param[in] SvidValue - SVID Value
+
+ @retval EFI_SUCCESS - Value found
+ @retval EFI_NOT_FOUND - Value not found
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GetSvidMap) (
+ IN UINT8 Socket,
+ IN UINT8 McId,
+ IN UINT8 *SvidValue
+ );
+
+typedef
+UINT16
+(EFIAPI *PEI_PmcGetAcpiBase) (
+ VOID
+ );
+
+typedef
+UINT16
+(EFIAPI *PEI_PmcGetAcpiBaseByPchId) (
+ IN UINT8 PchId
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchLpcIoDecodeRangesSet) (
+ IN UINT16 LpcIoDecodeRanges
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CheckPowerOffNow) (
+ VOID
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_PmcSetPlatformStateAfterPowerFailure) (
+ IN UINT8 PowerStateAfterG3
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_PmcClearPowerFailureStatus) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_PmcIsPowerFailureDetected) (
+ VOID
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchLpcGenIoRangeSet) (
+ IN UINT16 Address,
+ IN UINTN Length
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchLpcIoEnableDecodingSet) (
+ IN UINT16 LpcIoEnableDecoding
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchPcrAndThenOr32) (
+ IN PCH_SBI_PID Pid,
+ IN UINT16 Offset,
+ IN UINT32 AndData,
+ IN UINT32 OrData
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PchPcrRead32ByPchId) (
+ IN UINT8 PchId,
+ IN PCH_SBI_PID Pid,
+ IN UINT16 Offset,
+ OUT UINT32 *OutData
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_ReadNmiEn) (
+ VOID
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetPchXhciMaxUsb2PortNum) (
+ VOID
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_GetPchXhciMaxUsb3PortNum) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_PchIsGbeAvailable) (
+ VOID
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_EnableMcaOnCacheableMmio) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PEI_X2ApicIdDetect) (
+ IN VOID *Host
+ );
+
+//
+// Abstracting silicon functional implementations from OpenBoardPkg code
+//
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ PEI_GET_GPIO_INPUT_VALUE GpioGetInputValue;
+ PEI_SET_GPIO_OUTPUT_VALUE GpioSetOutputValue;
+ PEI_GPIO_SET_PAD GpioSetPadConfig;
+
+ PEI_GET_PCH_DEVICE_ID GetPchLpcDeviceId;
+ PEI_GET_PCH_SERIES GetPchSeries;
+ PEI_GET_PCH_STEPPING PchStepping;
+ PEI_IS_PCH_GBE_REGION_VALID PchIsGbeRegionValid;
+ PEI_GET_PCH_GBE_PORT_NUMBER PchGetGbePortNumber;
+ PEI_IS_PCH_GBE_PRESENT PchIsGbePresent;
+
+ PEI_PchDisableGbeByPchId PchDisableGbeByPchId;
+ PEI_GpioConfigurePadsByPchId GpioConfigurePadsByPchId;
+ PEI_GpioSetPadConfigByPchId GpioSetPadConfigByPchId;
+ PEI_GpioGetInputValueByPchId GpioGetInputValueByPchId;
+ PEI_PeiGetCurrenClockingMode PeiGetCurrenClockingMode;
+ PEI_GetPchPcieRpDevFunByPchId GetPchPcieRpDevFunByPchId;
+ PEI_IsSimicsEnvironment IsSimicsEnvironment;
+ PEI_GetPchMaxSataPortNum GetPchMaxSataPortNum;
+ PEI_GetPchMaxsSataPortNum GetPchMaxsSataPortNum;
+ PEI_GetPchMaxPciePortNum GetPchMaxPciePortNum;
+ PEI_PchGetSataLaneNumByPchId PchGetSataLaneNumByPchId;
+ PEI_PchGetsSataLaneNumByPchId PchGetsSataLaneNumByPchId;
+ PEI_PchGetPcieLaneNumByPchId PchGetPcieLaneNumByPchId;
+ PEI_MmPciBase MmPciBase;
+ PEI_HybridSystemLevelEmulationEnabled HybridSystemLevelEmulationEnabled;
+ PEI_IioIsSocketPresent IioIsSocketPresent;
+ PEI_GetMaxPortNumPerSocket GetMaxPortNumPerSocket;
+ PEI_IsVMDEnabledForPort IsVMDEnabledForPort;
+ PEI_IioAreLanesAssignedToPort IioAreLanesAssignedToPort;
+ PEI_GetPortIndexbyStack GetPortIndexbyStack;
+ PEI_IsDmiStack IsDmiStack;
+ PEI_IsCpuAndRevision IsCpuAndRevision;
+ PEI_PchDisableGbe PchDisableGbe;
+ PEI_GetMaxStackNumPerSocket GetMaxStackNumPerSocket;
+ PEI_IioIsStackPresent IioIsStackPresent;
+ PEI_GetMaxPortNumPerStack GetMaxPortNumPerStack;
+ PEI_SocketPresent SocketPresent;
+ PEI_GetSvidMap GetSvidMap;
+
+ PEI_PmcGetAcpiBase PmcGetAcpiBase;
+ PEI_PmcGetAcpiBaseByPchId PmcGetAcpiBaseByPchId;
+ PEI_PchLpcIoDecodeRangesSet PchLpcIoDecodeRangesSet;
+ PEI_CheckPowerOffNow CheckPowerOffNow;
+ PEI_PmcSetPlatformStateAfterPowerFailure PmcSetPlatformStateAfterPowerFailure;
+ PEI_PmcClearPowerFailureStatus PmcClearPowerFailureStatus;
+ PEI_PmcIsPowerFailureDetected PmcIsPowerFailureDetected;
+ PEI_PchLpcGenIoRangeSet PchLpcGenIoRangeSet;
+ PEI_PchLpcIoEnableDecodingSet PchLpcIoEnableDecodingSet;
+ PEI_PchPcrAndThenOr32 PchPcrAndThenOr32;
+ PEI_PchPcrRead32ByPchId PchPcrRead32ByPchId;
+ PEI_ReadNmiEn ReadNmiEn;
+
+ PEI_GetPchXhciMaxUsb2PortNum GetPchXhciMaxUsb2PortNum;
+ PEI_GetPchXhciMaxUsb3PortNum GetPchXhciMaxUsb3PortNum;
+ PEI_PchIsGbeAvailable PchIsGbeAvailable;
+ PEI_EnableMcaOnCacheableMmio EnableMcaOnCacheableMmio;
+ PEI_X2ApicIdDetect X2ApicIdDetect;
+} DYNAMIC_SI_LIBARY_PPI;
+
+extern EFI_GUID gDynamicSiLibraryPpiGuid;
+
+#endif // _DYNAMIC_SI_LIBARY_PPI_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h
new file mode 100644
index 0000000000..6c5ca06bc1
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h
@@ -0,0 +1,2112 @@
+/** @file
+ Header file defining MEMORY_POLICY_PPI, which is for platform code to set platform
+ specific configurations of memory reference code.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MEMORY_POLICY_PPI_H_
+#define _MEMORY_POLICY_PPI_H_
+
+#include <MemHostChipCommon.h>
+#include <PlatformHost.h>
+#include <Memory/ProcSmbChipCommon.h>
+#include <Guid/MemBootHealthGuid.h>
+#include <PlatformInfoTypes.h>
+
+
+///
+/// Number of group of BIOS-to-Pcode Mailbox command.
+//
+#define MAX_B2P_MAILBOX_GROUPS 32
+
+#pragma pack(push, 1)
+
+///
+/// Memory Timings Settings.
+//
+struct memTiming {
+
+ ///
+ /// @brief
+ /// Column Latency.
+ /// @details
+ /// Column Latency (CL) time is the number of clock cycles needed to access a
+ /// certain column of data in RAM. It's also known as CAS (column address
+ /// strobe) time.
+ //
+ UINT8 nCL;
+
+ ///
+ /// @brief
+ /// Row Precharge.
+ /// @details
+ /// RP (row precharge) time is the number of clock cycles needed to terminate
+ /// access to an open row of memory, and open access to the next row.
+ //
+ UINT8 nRP;
+
+ ///
+ /// @brief
+ /// RAS to CAS Delay.
+ /// @details
+ /// RAS to CAS Delay (RCD) is the number of clock cycles delay required
+ /// between an active command row address strobe (RAS) and a CAS. It is
+ /// the time required between the memory controller asserting a row address,
+ /// and then asserting a column address during the subsequent read or write
+ /// command. RCD stands for row address to column address delay time.
+ //
+ UINT8 nRCD;
+
+ ///
+ /// @brief
+ /// Row to Row Delay.
+ /// @details
+ /// Active to Active Delay, Row to Row Delay or RAS to RAS Delay. The amount of
+ /// cycles that taken to activate the next bank of memory.
+ //
+ UINT8 nRRD;
+ UINT8 nRRD_L;
+
+ ///
+ /// @brief
+ /// Write to Read Delay.
+ /// @details
+ /// Write to Read Delay. The amount of cycles required between a valid write
+ /// command and the next read command.
+ //
+ UINT8 nWTR;
+
+ ///
+ /// @brief
+ /// Row Active Strobe.
+ /// @details
+ /// Row Active Strobe (RAS) time is the minimum number of clock cycles needed
+ /// to access a certain row of data in RAM between the data request and the
+ /// precharge command. It's known as active to precharge delay.
+ //
+ UINT8 nRAS;
+
+ ///
+ /// @brief
+ /// Read To Precharge delay.
+ /// @details
+ /// The number of clocks between a read command to a row pre-charge command.
+ //
+ UINT8 nRTP;
+
+ ///
+ /// @brief
+ /// Write Recovery time.
+ /// @details
+ /// The amount of cycles that are required between a valid
+ /// write operation and precharge, to make sure that data is written properly.
+ ///
+ UINT8 nWR;
+
+ ///
+ /// @brief
+ /// Four Activate Window.
+ /// @details
+ /// Four Activate Window, which specifies the time window in wich four activates
+ /// are allowed on the same rank.
+ //
+ UINT8 nFAW;
+
+ ///
+ /// CAS (WRITE) latency (CWL).
+ //
+ UINT8 nCWL;
+
+ ///
+ /// @brief
+ /// Row Cycle.
+ /// @details
+ /// Row Cycle time, the minimum time in cycles taken for a row to complete a full
+ /// cycle, which typically can be calculated by nRC = nRAS + nRP.
+ //
+ UINT8 nRC;
+
+ ///
+ /// @brief
+ /// Command Rate.
+ /// @details
+ /// Command Rate / Command per Clock (1T/2T) is the delay between a memory chip
+ /// is selected and the first active command can be issued.
+ //
+ UINT8 nCMDRate;
+
+ ///
+ /// The limit of DDR frequency ratio, based on base clock frequency.
+ //
+ UINT8 ddrFreqLimit;
+
+ ///
+ /// Vdd for DRAM core.
+ //
+ UINT16 vdd;
+
+ ///
+ /// XMP Memory Controller Voltage Level.
+ //
+ UINT8 ucVolt;
+
+ ///
+ /// Bits map to indicate if a CAS in a CAS list is supported.
+ //
+ UINT64 casSup;
+
+ ///
+ /// Refresh Interval.
+ //
+ UINT16 tREFI;
+
+ ///
+ /// @brief
+ /// Refresh to Activate Delay.
+ /// @details
+ /// Refresh to Activate Delay or Refresh Cycle Time. The number of clocks from
+ /// a Refresh command to the first Activate command.
+ //
+ UINT16 nRFC;
+
+ ///
+ /// Frequency of DDR.
+ //
+ UINT16 ddrFreq;
+};
+
+typedef struct ReservedS193 {
+
+ UINT8 ReservedS69;
+
+ UINT8 ReservedS70;
+
+ UINT8 ReservedS68;
+
+ UINT8 ReservedS67;
+
+ UINT8 ReservedS71;
+
+ UINT8 ReservedS74[MAX_SOCKET * MAX_IMC];
+
+ UINT8 ReservedS194[MAX_SOCKET];
+
+ UINT8 ReservedS77;
+
+ UINT8 ReservedS48;
+
+ UINT32 ReservedS195;
+
+ UINT8 ReservedS196;
+
+ UINT8 ReservedS107;
+
+ UINT8 ReservedS105;
+
+ UINT8 ReservedS75;
+
+ UINT8 ReservedS108;
+
+ UINT8 ReservedS73;
+
+ UINT8 ReservedS197;
+
+
+ UINT8 ReservedS49;
+
+ UINT8 ReservedS50;
+
+ UINT8 ReservedS51;
+
+ UINT8 ReservedS52;
+
+ UINT16 ReservedS53;
+
+ UINT16 ReservedS54;
+
+ UINT16 ReservedS55;
+
+ UINT16 ReservedS56;
+
+ UINT16 ReservedS57;
+
+ UINT8 ReservedS58;
+
+ UINT16 ReservedS59;
+
+ UINT8 ReservedS60;
+
+ UINT16 ReservedS61;
+
+ UINT8 ReservedS62;
+
+ UINT8 ReservedS63;
+
+ UINT16 ReservedS64;
+
+ UINT16 ReservedS65;
+
+ UINT8 ReservedS66;
+
+ UINT8 ReservedS198 : 1,
+ ReservedS199 : 1,
+ ReservedS200 : 1,
+ ReservedS119 : 1,
+ ReservedS201 : 4;
+ UINT8 ReservedS120;
+
+ BOOLEAN ReservedS128; // Posted CSR access method is available when this is TRUE
+
+ BOOLEAN ReservedS130;
+
+ UINT16 ReservedS131;
+
+ BOOLEAN ReservedS111;
+
+ BOOLEAN ReservedS202;
+
+ UINT8 ReservedS203;
+
+ BOOLEAN ReservedS204;
+
+ BOOLEAN ReservedS205;
+
+ BOOLEAN ReservedS206;
+
+ UINT8 ReservedS121;
+
+ UINT8 ReservedS122;
+
+ UINT8 ReservedS123;
+
+ UINT8 ReservedS124;
+
+ UINT8 ReservedS125;
+
+ UINT8 ReservedS126;
+
+ UINT8 ReservedS127;
+
+ BOOLEAN ReservedS137;
+
+ UINT8 SenseAmpCalibHwSwOption;
+
+ BOOLEAN ReservedS129;
+
+ UINT8 ReservedS207 :4,
+ ReservedS208 :1,
+ ReservedS209 :1,
+ ReservedS210 :2;
+
+ UINT8 ReservedS143;
+
+ UINT8 ReservedS144;
+
+ UINT8 ReservedS145;
+
+ UINT8 ReservedS211 :4,
+ ReservedS212 :1,
+ ReservedS213 :3;
+
+ UINT8 ReservedS148;
+
+
+ UINT8 ReservedS149;
+
+} RESERVED_S193;
+
+///
+/// DIMM enable/disable information
+//
+struct ddrDimmSetup {
+
+ ///
+ /// Setting for each DIMM to be mapped out.
+ //
+ UINT8 mapOut[MAX_RANK_DIMM];
+};
+
+///
+/// Channel setup structure declaration
+//
+struct ddrChannelSetup {
+ UINT8 enabled; /// Channel enable switch.
+ UINT8 numDimmSlots; /// Number of DIMM slots per channel.
+ UINT8 batterybacked; /// ADR Battery backed or not.
+ UINT8 rankmask; /// Rank mask. 0 = disable; 1 = enable.
+ struct ddrDimmSetup dimmList[MAX_DIMM]; /// DIMM enable/disable information.
+};
+
+///
+/// PPR DRAM Address.
+//
+typedef struct {
+ UINT8 dimm;
+ UINT8 rank;
+ UINT8 subRank;
+ UINT32 nibbleMask;
+ UINT8 bank;
+ UINT32 row;
+} PPR_ADDR;
+
+///
+/// PPR Address, buffer to hold DRAM Address that need to be repaired.<BR>
+//
+typedef struct {
+ UINT8 pprAddrStatus;
+ UINT8 socket;
+ UINT8 mc;
+ UINT8 ch;
+ PPR_ADDR pprAddr;
+} PPR_ADDR_MRC_SETUP;
+
+
+///
+/// Socket setup structure declaration.
+//
+struct ddrSocketSetup {
+
+ ///
+ /// iMC enable/disable switch.
+ //
+ UINT8 enabled;
+
+ ///
+ /// Bit-mapped options per socket.
+ //
+ UINT8 options;
+
+ ///
+ /// Platform configuration for each channel.
+ //
+ struct ddrChannelSetup ddrCh[MAX_CH];
+
+ ///
+ /// Enable/Disable memory controller.
+ //
+ UINT8 imcEnabled[MAX_IMC];
+};
+
+///
+/// Define AdvMemTest Rank List item
+/// The input format is defined as follows:
+/// Rank number in bits[3:0]
+/// DIMM number in bits[7:4]
+/// Channel number in the MC in bits[11:8]
+/// MC number in bits[15:12]
+/// Socket number in bits [19:16]
+/// bits [31:20] are reserved
+/// For example:
+/// To test MC 0, CH 1, DIMM 0, RANK 0 on Socket 0, you need to enter a value of 0x100
+/// To test MC 1, CH 0, DIMM 0, RANK 0 on Socket 0, you need to enter a value of 0x1000
+//
+typedef union {
+ struct {
+ UINT32 Rank: 4;
+ UINT32 Dimm: 4;
+ UINT32 Channel: 4;
+ UINT32 Mc: 4;
+ UINT32 Socket: 4;
+ UINT32 rsvd: 12;
+ } Bits;
+ UINT32 Data;
+} AdvMemTestRankData;
+
+///
+/// Host memory setup structure declaration.
+//
+struct memSetup {
+
+ ///
+ /// @brief
+ /// Flags for enabling (1)/disabling(0) MRC features.<BR>
+ /// @details
+ /// TEMPHIGH_EN BIT0, enables support for 95 degree DIMMs.<BR>
+ /// ATTEMPT_FAST_BOOT_COLD BIT1.<BR>
+ /// PDWN_SR_CKE_MODE BIT2, enables CKE to be tri-stated during
+ /// register clock off power down self-refresh.<BR>
+ /// OPP_SELF_REF_EN BIT3, enables the opportunistic self refresh mechanism.<BR>
+ /// MDLL_SHUT_DOWN_EN BIT4, enables MDLL shutdown.<BR>
+ /// PAGE_POLICY BIT5, Clear for open page, set for closed page. Open page
+ /// has better performance and power usage in general.
+ /// Close page may benefit some applications with poor <BR>
+ /// locality.<BR>
+ /// ALLOW2XREF_EN BIT6, enables 2X refresh if needed for extended operating
+ /// temperature range (95degrees) If TEMPHIGH_EN is also
+ /// set, setting this bit will result in 2X refresh timing
+ /// for the IMC refresh control register. <BR>
+ /// MULTI_THREAD_MRC_EN BIT7, enables multithreaded MRC. This reduces boot time for
+ /// systems with multiple processor sockets.<BR>
+ /// ADAPTIVE_PAGE_EN BIT8, enables adaptive page mode. The memory controller will
+ /// dynamically determine how long to keep pages open<BR>
+ /// to improve performance.<BR>
+ /// CMD_CLK_TRAINING_EN BIT9, enables command to clock training step.<BR>
+ /// SCRAMBLE_EN BIT10, set to enable data scrambling. This should always be
+ /// enabled except for debug purposes.<BR>
+ /// SCRAMBLE_EN_DDRT BIT11, set to enable data scrambling. This should always be
+ /// enabled except for debug purposes.<BR>
+ /// DISPLAY_EYE_EN BIT12,<BR>
+ /// DDR_RESET_LOOP BIT13, enables infinite channel reset loop without retries
+ /// for gathering of margin data.<BR>
+ /// NUMA_AWARE BIT14, enables configuring memory interleaving appropriately
+ /// for NUMA aware OS.<BR>
+ /// DISABLE_WMM_OPP_READ BIT15, disables issuing read commands opportunistically during WMM.<BR>
+ /// RMT_COLD_FAST_BOOT BIT16. <BR>
+ /// ECC_CHECK_EN BIT17, enables ECC checking.<BR>
+ /// ECC_MIX_EN BIT18, enables ECC in a system with mixed ECC and non-ECC memory in a
+ /// channel by disabling ECC when this configuration is detected.<BR>
+ /// DISABLE_ECC_SUPPORT BIT19, disables ECC check.<BR>
+ /// CA_PARITY_EN BIT20, <BR>
+ /// PER_NIBBLE_EYE_EN BIT22.
+ /// RAS_TO_INDP_EN BIT23, switches from lockstep or mirror mode to independenct channel
+ /// mode when memory is present on channel 2 and this is enabled.<BR>
+ /// MARGIN_RANKS_EN BIT25, enables the rank margin tool.<BR>
+ /// MEM_OVERRIDE_EN BIT26, enables use of inputMemTime inputs as hard overrides.<BR>
+ /// DRAMDLL_OFF_PD_EN BIT27, <BR>
+ /// MEMORY_TEST_EN BIT28, enables execution of MemTest if on cold boot<BR>
+ /// MEMORY_TEST_COLD_FAST_BOOT_EN BIT29, enables the memory test when going through a cold fast boot
+ /// path<BR>
+ /// ATTEMPT_FAST_BOOT BIT30, attempts to take a fast boot path if the NVRAM structure is good
+ /// and the memory config hasn't changed. For example, on a warm boot,
+ /// this will take the "fast warm" path through MRC which attempts
+ /// to make it as close as possible to the S3 path.<BR>
+ /// SW_MEMORY_TEST_EN BIT31. <BR>
+ //
+ UINT32 options;
+
+ ///
+ /// @brief
+ /// Flags for enabling (1)/disabling(0) MRC features.<BR>
+ /// @details
+ /// PD_CRC_CHECK BIT0<BR>
+ /// SET_MEM_TESTED_EN BIT1<BR>
+ /// AVAILABLE BIT2<BR>
+ /// TURNAROUND_OPT_EN_DDRT BIT3<BR>
+ /// PDA_EN BIT5<BR>
+ /// TURNAROUND_OPT_EN BIT6<BR>
+ /// AVAILABLE BIT7<BR>
+ /// ALLOW_CORRECTABLE_ERROR BIT8<BR>
+ /// ALLOW_CORRECTABLE_MEM_TEST_ERROR BIT9<BR>
+ /// AVAILABLE BIT10<BR>
+ /// AVAILABLE BIT11<BR>
+ /// AVAILABLE BIT12<BR>
+ /// PER_BIT_MARGINS BIT13<BR>
+ /// DUTY_CYCLE_EN BIT14<BR>
+ /// LRDIMM_BACKSIDE_VREF_EN BIT15<BR>
+ /// AVAILABLE BIT16<BR>
+ /// DRAM_RX_EQ_EN BIT17<BR>
+ /// AVAILABLE BIT18<BR>
+ /// AVAILABLE BIT19<BR>
+ /// AVAILABLE BIT20<BR>
+ /// OPTIONS_EXT_RESERVED1 BIT21<BR>
+ /// AVAILABLE BIT22<BR>
+ /// WR_CRC BIT23<BR>
+ /// OPTIONS_EXT_RESERVED2 BIT24<BR>
+ /// AVAILABLE BIT25<BR>
+ /// AVAILABLE BIT26<BR>
+ /// AVAILABLE BIT27<BR>
+ /// AVAILABLE BIT28<BR>
+ /// DIMM_ISOLATION_EN BIT29<BR>
+ /// AVAILABLE BIT30<BR>
+ //
+ UINT32 optionsExt;
+
+ ///
+ /// @brief
+ /// NGN Flags.
+ /// @details
+ /// NGN_CMD_TIME BIT1<BR>
+ /// NGN_DEBUG_LOCK BIT6<BR>
+ /// NGN_ARS_ON_BOOT BIT7<BR>
+ /// NGN_ARS_PUBLISH BIT9<BR>
+ /// NGN_ECC_EXIT_CORR BIT10<BR>
+ /// NGN_ECC_CORR BIT11<BR>
+ /// NGN_ECC_WR_CHK BIT12<BR>
+ /// NGN_ECC_RD_CHK BIT13<BR>
+ //
+ UINT32 optionsNgn;
+
+
+ ///
+ /// @brief
+ /// PDA behavior for x16 devices.<BR>
+ /// @details
+ /// 0 - will disable PDA operation when a x16 device is detected.<BR>
+ /// 1 - will not modify PDA Mode.<BR>
+ //
+ UINT8 PdaModeX16;
+
+ ///
+ /// @brief
+ /// IMC BCLK frequency. <BR>
+ /// @details
+ /// 0 - Auto, MRC code determine the value.<BR>
+ /// 1 - 100MHz.<BR>
+ /// 2 - 133MHz.<BR>
+ //
+ UINT8 imcBclk;
+
+ ///
+ /// @brief
+ /// Enforce memory POR configurations.<BR>
+ /// @details
+ /// 0 (ENFORCE_POR_EN) - Enforce memory POR.<BR>
+ /// 1 (ENFORCE_STRETCH_EN) - Enforce memory frequency stretch goal.<BR>
+ /// 2 (ENFORCE_POR_DIS) - Do not enforce POR configurations.<BR>
+ //
+ UINT8 enforcePOR;
+
+ ///
+ /// @brief
+ /// DDR Frequency Limit.
+ /// @details
+ /// Forces a DDR frequency slower than the common tCK detected via SPD.<BR>
+ /// A DDR frequency faster than the common frequency is a config error.<BR>
+ /// Options are 0=AUTO, 1=DDR_800, 3=DDR_1066, 5=DDR_1333, 7=DDR_1600, <BR>
+ /// 9=DDR_1866, 11=DDR_2133, 13=DDR2400.<BR>
+ //
+ UINT8 ddrFreqLimit;
+
+ ///
+ /// @brief
+ /// Channels interleave setting.
+ /// @details
+ /// Valid options are 1, 2, or 3 way interleave. Other values defaults
+ /// to 3 ways interleave.<BR>
+ //
+ UINT8 chInter;
+
+ ///
+ /// @brief
+ /// DIMM types.<BR>
+ /// @details
+ /// 0=RDIMM, 1=UDIMM, 2 = RDIMMandUDIMM or SODIMM, 9=LRDIMM; 10=QRDIMM, 11=NVMDIMM.<BR>
+ //
+ UINT8 dimmTypeSupport;
+
+ ///
+ /// @brief
+ /// CKE Power managment mode.<BR>
+ /// @details
+ /// 0 = Disabled.<BR>
+ /// 1 = APD Enabled, PPD Disabled.<BR>
+ /// 2 = APD Disabled, PPDF Enabled.<BR>
+ /// 3 = APD Disabled, PPDS Enabled.<BR>
+ /// 4 = APD Enabled, PPDF Enabled.<BR>
+ /// 5 = APD Enabled, PPDS Enabled.<BR>
+ //
+ UINT8 ckeThrottling;
+
+ ///
+ /// @brief
+ /// Open Loop Thermal Throttling.
+ /// @details
+ /// (value/100) * 255 / max number of dimms per channel = DIMM_TEMP_THRT_LMT THRT_HI.<BR>
+ //
+ UINT8 olttPeakBWLIMITPercent;
+
+ ///
+ /// @brief
+ /// Bitmapped field for Thermal Throttling Modes.
+ /// @details
+ /// Defined in mem.thermalThrottlingOptions section.<BR>
+ //
+ UINT16 thermalThrottlingOptions;
+
+ ///
+ /// @brief
+ /// Option to manualy enter Temperature refresh value.
+ /// @details
+ /// Select Manual to use value from HalfxRefreshValue, TwoxRefreshValue and
+ /// FourxRefreshValue. Auto for default value in MRC code.<BR>
+ /// 0 = Auto.<BR>
+ /// 1 = Manual option select.<BR>
+ //
+ UINT8 TempRefreshOption;
+
+ ///
+ /// Half X temperature refresh value.
+ //
+ UINT8 HalfxRefreshValue;
+
+ ///
+ /// Two X temperature refresh value.
+ //
+ UINT8 TwoxRefreshValue;
+
+ ///
+ /// Four X temperature refresh value.
+ //
+ UINT8 FourxRefreshValue;
+
+ //
+ // Receive Enable Average Feature
+ //
+ BOOLEAN RecEnDelayAverage;
+
+ ///
+ /// @brief
+ /// Thermal Throttling O/P bits - (High | Mid | Low).<BR>
+ /// @details
+ /// 0= Memhot output disabled,<BR>
+ /// 1 = Memhot on High,<BR>
+ /// 2 = Memhot on High|Mid, <BR>
+ /// 3 = Memhot on High|Mid|Low.<BR>
+ //
+ UINT8 MemHotOuputAssertThreshold;
+
+ ///
+ /// @brief
+ /// Enable/Disable the initialization of THRTMID on TEMPLO.<BR>
+ /// @details
+ /// 0 = THRTMID on TEMPLO disabled,<BR>
+ /// 1 = THRTMID on TEMPLO enabled.<BR>
+ //
+ UINT8 ThrottlingMidOnTempLo;
+
+ ///
+ /// @brief
+ /// Enable/Disable DRAM RAPL.<BR>
+ /// @details
+ /// 0 - disable.<BR>
+ /// 1 - enable.<BR>
+ //
+ UINT8 DramRaplEnable;
+
+ ///
+ /// Multipler of BW_LIMIT_TF when DRAM RAPL is enabled.
+ //
+ UINT8 dramraplbwlimittf;
+
+ ///
+ /// @brief
+ /// Notify PCU to enable/disable DRAM PM of memory controller.<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 CmsEnableDramPm;
+
+ ///
+ /// @brief
+ /// DRAM RAPL Refresh Base.
+ /// @details
+ /// Allows custom tuning of Power scaling by Refresh rate in units of 0.1x
+ /// when DRAM RAPL is enabled.<BR>
+ //
+ UINT8 dramraplRefreshBase;
+
+ ///
+ /// Enable disable per Bit DeSkew Training.
+ //
+ UINT8 perBitDeSkew;
+
+ UINT8 ReservedS214;
+ UINT8 ReservedS215;
+ UINT8 ReservedS86;
+ UINT8 ReservedS216;
+ UINT8 ReservedS217;
+ UINT8 ReservedS218;
+ UINT8 ReservedS219;
+ UINT8 ReservedS220;
+ UINT8 ReservedS221;
+ UINT8 ReservedS222;
+ UINT8 ReservedS223;
+ UINT8 ReservedS224;
+ UINT8 ReservedS225;
+ UINT8 ReservedS226;
+ UINT8 ReservedS227;
+ UINT8 ReservedS228;
+ UINT8 ReservedS229;
+ UINT8 ReservedS230;
+ UINT8 ReservedS231;
+ UINT8 ReservedS232;
+ UINT8 ReservedS233;
+
+ ///
+ /// NVDIMM Factory Reset Clear
+ //
+ UINT8 FactoryResetClear;
+
+ ///
+ /// Enable Backside RMT.
+ //
+ UINT8 enableBacksideRMT;
+
+ ///
+ /// Enable Backside CMD RMT.
+ //
+ UINT8 enableBacksideCMDRMT;
+
+ ///
+ /// Enable NVMDIMM BCOM margining support.
+ //
+ UINT8 enableNgnBcomMargining;
+
+ ///
+ /// @brief
+ /// Training Result Offset function enable or disable.
+ /// @details
+ /// It controls whether to enable the function to offset the final training results or not.<BR>
+ /// Enable - Enables training results to be offset. <BR>
+ /// Disable - Disables this feature; current default is Enable disable<BR>
+
+ //
+ UINT8 trainingResultOffsetFunctionEnable;
+
+ ///
+ /// Platform value to offset the final memory training result of TxDq.
+ //
+ INT16 offsetTxDq;
+
+ ///
+ /// Platform value to offset the final memory training result of RxDq.
+ //
+ INT16 offsetRxDq;
+
+ ///
+ /// Platform value to offset the final memory training result of TxVref.
+ //
+ INT16 offsetTxVref;
+
+ ///
+ /// Platform value to offset the final memory training result of RxVref.
+ //
+ INT16 offsetRxVref;
+
+ ///
+ /// Platform value to offset the final memory training result of CmdAll.
+ //
+ INT16 offsetCmdAll;
+
+ ///
+ /// Platform value to offset the final memory training result of CmdVref.
+ //
+ INT16 offsetCmdVref;
+
+ ///
+ /// Platform value to offset the final memory training result of CtlAll.
+ //
+ INT16 offsetCtlAll;
+
+ ///
+ /// Platform value to offset the final memory training result of RecvEn.
+ //
+ INT16 OffsetRecEn;
+
+ ///
+ /// Rank Margin Test: patten length.
+ //
+ UINT32 rmtPatternLength;
+
+ ///
+ /// Rank Margin Test: patten length extension.
+ //
+ UINT32 rmtPatternLengthExt;
+
+ ///
+ /// Memory RAS: Specifies the number of hours it takes for patrol scrub to scrub all system memory
+ //
+ UINT32 patrolScrubDuration;
+
+ ///
+ /// Enable/Disable Memory RAS die sparing.
+ //
+ UINT8 DieSparing;
+
+ ///
+ /// Memory RAS: Address Range Scrubbing
+ //
+ UINT8 NgnAddressRangeScrub;
+
+ ///
+ /// Number of MemTests loops to execute for legacy MemTest (type 8 and 10), that
+ /// provides the ability of inverting the data pattern in every odd pass for detecting
+ /// opposite polarity faults
+ //
+ UINT16 memTestLoops;
+
+ ///
+ /// CPGC MemTest step bit fields to enable different advanced MemTest options
+ //
+ UINT32 AdvMemTestOptions;
+
+ ///
+ /// Enable/Disable PPR repair during Advanced Memtest
+ //
+ UINT8 AdvMemTestPpr;
+
+ ///
+ /// Retry the Advanced Memtest step after a PPR repair occurs
+ /// This option is useful for testing that the PPR repair was successful, but it adds some latency
+ //
+ UINT8 AdvMemTestRetry;
+
+ ///
+ /// Reset row fail list after executing each Advanced MemTest option
+ /// This option is useful for testing multiple options.
+ //
+ UINT8 AdvMemTestResetList;
+
+ ///
+ /// Set Test Conditions for Advanced Memtest algorithms
+ /// ADV_MEM_TEST_COND_DISABLE - Do not modify test conditions during Advanced Memtest
+ /// ADV_MEM_TEST_COND_AUTO - Modify test conditions automatically based on Advanced Memtest algorithm
+ /// ADV_MEM_TEST_COND_MANUAL - Modify test conditions manually based on AdvMemTestCond input options
+ //
+ UINT8 AdvMemTestCondition;
+
+ ///
+ /// Manually set Vdd level when AdvMemTestCondition = ADV_MEM_TEST_COND_MANUAL
+ /// Specify Vdd in units of mV
+ //
+ UINT16 AdvMemTestCondVdd;
+
+ ///
+ /// Manually set host Write Recovery time when AdvMemTestCondition = ADV_MEM_TEST_COND_MANUAL
+ /// Specify host tWR value in units of tCK. This timing is only applicable in Open Page mode.
+ //
+ UINT8 AdvMemTestCondTwr;
+
+ ///
+ /// Manually set host tREFI time when AdvMemTestCondition = ADV_MEM_TEST_COND_MANUAL
+ /// Specify host tREFI in units of usec. 7800 = 1x refresh rate; 15600 = 0.5x refresh rate
+ //
+ UINT16 AdvMemTestCondTrefi;
+
+ ///
+ /// Manually set Pause time without refresh when AdvMemTestCondition = ADV_MEM_TEST_COND_MANUAL
+ /// Specify the Pause time in units of msec. It is applied between write and read steps to test data retention.
+ //
+
+ UINT32 AdvMemTestCondPause;
+ ///
+ /// Indicate the number of Ranks that will be tested in the system. A value of 0 will test all Ranks
+ ///
+ //
+ UINT8 AdvMemTestRankListNumEntries;
+
+ ///
+ /// The list of Rank addresses in the sysem that will execute AdvMemTest
+ //
+ AdvMemTestRankData AdvMemTestRankList[ADV_MT_LIST_LIMIT];
+
+ UINT8 Reserved0;
+ UINT8 Reserved1;
+ UINT8 Reserved2;
+ UINT32 Reserved3;
+ UINT32 Reserved4;
+ UINT8 Reserved5;
+ UINT8 Reserved6;
+ ///
+ /// Low 16 bits of the data scrambling seed.
+ //
+ UINT16 scrambleSeedLow;
+
+ ///
+ /// High 16 bits of the data scrambling seed
+ //
+ UINT16 scrambleSeedHigh;
+
+ ///
+ /// @brief
+ /// ADR: Enable/Disable Async DRAM Refresh(ADR) feature<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 ADREn;
+
+ ///
+ /// @brief
+ /// ADR: Enable/Dsiable Legacy ADR Async DRAM Refresh(ADR) feature<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 LegacyADRModeEn;
+
+ ///
+ /// @brief
+ /// ADR: Minimum memory size assigned as system memory when only JEDEC NVDIMMs are present<BR>
+ /// @details
+ /// 2 - 2GB.<BR>
+ /// 4 - 4GB.<BR>
+ /// 6 - 6GB.<BR>
+ /// 8 - 8GB.<BR>
+ //
+ UINT8 MinNormalMemSize;
+
+ ///
+ /// @brief
+ /// ADR: Data Save Mode for ADR. <BR>
+ /// @details
+ /// 0=Disabled, <BR>
+ /// 1=Batterybacked, <BR>
+ /// 2=NVDIMM.<BR>
+ //
+ UINT8 ADRDataSaveMode;
+
+ ///
+ /// @brief
+ /// ADR: Use the PCH_PM_STS register as ADR recovery indicator.<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 check_pm_sts;
+
+ ///
+ /// @brief
+ /// ADR: Use the PlatformDetectADR OEM hook function as ADR recovery indicator.<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 check_platform_detect;
+
+ ///
+ /// @brief
+ /// Memory RAS: Normal operation duration within sparing interval.
+ //
+ UINT16 normOppIntvl;
+
+ ///
+ /// @brief
+ /// SM Bus Clock Frequency- see SMB_CLOCK_FREQUENCY.<BR>
+ /// @details
+ /// 0 - SMB_CLK_100K.<BR>
+ /// 1 - SMB_CLK_400K. <BR>
+ /// 2 - SMB_CLK_700K.<BR>
+ /// 3 - SMB_CLK_1M.<BR>
+ //
+ SMB_CLOCK_FREQUENCY SpdSmbSpeed;
+
+ ///
+ /// @brief
+ /// Enable(1)/Disable(0) SPD data Print.<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 SpdPrintEn;
+
+ ///
+ /// @brief
+ /// Pirnt length of SPD data.<BR>
+ /// @details
+ /// 0 - AUTO(512 for DDR4, 1024 for DDR5).<BR>
+ /// 256.<BR>
+ /// 512.<BR>
+ ///
+ UINT16 SpdPrintLength;
+
+ ///
+ /// Socket setup configuration.
+ //
+ struct ddrSocketSetup socket[MAX_SOCKET];
+
+ ///
+ /// Memory timing settings.
+ //
+ struct memTiming inputMemTime;
+
+ UINT32 XMPChecksum[MAX_SOCKET][MAX_CH][MAX_DIMM];
+
+ UINT32 Reserved7;
+
+ UINT32 Reserved8;
+
+ UINT32 Reserved9;
+
+ ///
+ /// @brief
+ /// Custom tuning multiplier of Refresh rate from 2.0x to 4.0x in units of 0.1x
+ //
+ UINT8 customRefreshRate;
+
+ ///
+ /// @brief
+ /// Enable Mirror on entire memory for TAD0.<BR>
+ /// @details
+ /// 0 - Disable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 partialmirrorsad0;
+
+ ///
+ /// Size of each partial mirror to be created in order.
+ //
+ UINT16 partialmirrorsize[MAX_PARTIAL_MIRROR];
+
+ ///
+ /// @brief
+ /// Imitate behavior of UEFI based Address Range Mirror with setup option.
+ /// @details
+ /// It controls whether to enable partial mirror in 1LM and 2LM or not.
+ //
+ UINT8 partialMirrorUEFI;
+
+ ///
+ /// @brief
+ /// Numerator of the mirror ratio.<BR>
+ /// @details
+ /// Given the Numerator (N) and Denominator (D) returned by this function, and<BR>
+ /// the total memory size (T), the mirror size (M) should be computed as follows:<BR>
+ /// M = (T * N) / D<BR>
+ /// MirroredAmountAbove4GB is the amount of available memory above 4GB that needs to be mirrored
+ /// measured in basis point (hundredths of percent e.g. 12.75% = 1275).
+ /// In a multi-socket system, platform is required to distribute the mirrored memory ranges such that the
+ /// amount mirrored is approximately proportional to the amount of memory on each NUMA node. E.g. on
+ /// a two node machine with 64GB on node 0 and 32GB on node 1, a request for 12GB of mirrored memory
+ /// should be allocated with 8GB of mirror on node 0 and 4GB on node 1.<BR>
+ UINT32 partialmirrorpercent;
+
+ ///
+ /// @brief
+ /// Partial mirror status.<BR>
+ /// @details
+ /// MIRROR_STATUS_SUCCESS 0<BR>
+ /// MIRROR_STATUS_MIRROR_INCAPABLE 1<BR>
+ /// MIRROR_STATUS_VERSION_MISMATCH 2<BR>
+ /// MIRROR_STATUS_INVALID_REQUEST 3<BR>
+ /// MIRROR_STATUS_UNSUPPORTED_CONFIG 4<BR>
+ /// MIRROR_STATUS_OEM_SPECIFIC_CONFIGURATION 5<BR>
+ //
+ UINT8 partialmirrorsts;
+
+ ///
+ /// Immediate failover enable or disable when mirror scrub reads a uncorrected error.
+ //
+ UINT8 ImmediateFailoverAction;
+
+ ///
+ /// Number of times to loop through RMT to test the DLL Reset.
+ //
+ UINT8 dllResetTestLoops;
+
+ ///
+ /// @brief
+ /// Flags to enable(1)/disable(0) memory training steps in MRC flow.
+ /// The following are bit to MRC training step map.<BR>
+ /// @details
+ /// MF_X_OVER_EN BIT0;<BR>
+ /// MF_SENSE_AMP_EN BIT1;<BR>
+ /// MF_E_CMDCLK_EN BIT2;<BR>
+ /// MF_REC_EN_EN BIT3;<BR>
+ /// MF_RD_DQS_EN BIT4;<BR>
+ /// MF_WR_LVL_EN BIT5;<BR>
+ /// MF_WR_FLYBY_EN BIT6;<BR>
+ /// MF_WR_DQ_EN BIT7;<BR>
+ /// MF_CMDCLK_EN BIT8;<BR>
+ /// MF_RD_ADV_EN BIT9;<BR>
+ /// MF_WR_ADV_EN BIT10;<BR>
+ /// MF_RD_VREF_EN BIT11;<BR>
+ /// MF_WR_VREF_EN BIT12;<BR>
+ /// MF_RT_OPT_EN BIT13;<BR>
+ /// MF_RX_DESKEW_EN BIT14;<BR>
+ /// MF_TX_DESKEW_EN BIT14;<BR>
+ /// MF_TX_EQ_EN BIT15;<BR>
+ /// MF_IMODE_EN BIT16;<BR>
+ /// MF_EARLY_RID_EN BIT17;<BR>
+ /// MF_DQ_SWIZ_EN BIT18;<BR>
+ /// MF_LRBUF_RD_EN BIT19;<BR>
+ /// MF_LRBUF_WR_EN BIT20;<BR>
+ /// MF_RANK_MARGIN_EN BIT21;<BR>
+ /// MF_E_WR_VREF_EN BIT22;<BR>
+ /// MF_E_RD_VREF_EN BIT23;<BR>
+ /// MF_L_RD_VREF_EN BIT24;<BR>
+ /// MF_MEMINIT_EN BIT25;<BR>
+ /// MF_NORMAL_MODE_EN BIT27;<BR>
+ /// MF_CMD_VREF_EN BIT28;<BR>
+ /// MF_L_WR_VREF_EN BIT29;<BR>
+ /// MF_MEMTEST_EN BIT30;<BR>
+ /// MF_E_CTLCLK_EN BIT31.<BR>
+ //
+ UINT32 memFlows;
+
+ ///
+ /// @brief
+ /// Extension of flags to enable(1)/disable(0) memory training steps in MRC flow.<BR>
+ /// @details
+ /// MF_EXT_RX_CTLE_EN BIT0<BR>
+ /// MF_EXT_PXC_EN BIT1<BR>
+ /// MF_EXT_CMD_NORM_EN BIT2<BR>
+ /// MF_EXT_LRDIMM_BKSIDE_EN BIT3<BR>
+ /// MF_EXT_CHECK_POR BIT6<BR>
+ /// MF_EXT_MMRC_RUN BIT7<BR>
+ /// MF_EXT_THROTTLING_EARLY BIT8<BR>
+ /// MF_EXT_THROTTLING BIT9<BR>
+ /// MF_EXT_POST_TRAINING BIT10<BR>
+ /// MF_EXT_E_CONFIG BIT11<BR>
+ /// MF_EXT_L_CONFIG BIT12<BR>
+ /// MF_EXT_MCODT_EN BIT14<BR>
+ /// MF_EXT_MCRON_EN BIT15<BR>
+ /// MF_EXT_DIMMRON_EN BIT16<BR>
+ /// MF_EXT_CACLK_BACKSIDE_EN BIT17<BR>
+ /// MF_DQ_SWIZ_X16_EN BIT18<BR>
+ /// MF_EXT_TCO_COMP_EN BIT19<BR>
+ /// MF_EXT_TX_SLEW_RATE_EN BIT20<BR>
+ /// MF_EXT_INIT_MEM_EN BIT21<BR>
+ /// MF_EXT_CMD_TX_EQ_EN BIT22<BR>
+ /// MF_EXT_RCOMP_STAT_LEG BIT23<BR>
+ /// MF_EXT_DDJC_EN BIT24<BR>
+ /// MF_EXT_RX_DFE_EN BIT25<BR>
+ /// MF_EXT_CSCLK_EN BIT26<BR>
+ /// MF_EXT_CSCLK_BACKSIDE_EN BIT27<BR>
+ /// MF_EXT_CACLK_EN BIT28<BR>
+ /// MF_X_OVER_HWFSM_EN BIT29<BR>
+ /// MF_EXT_INIT_CMI_EN BIT30<BR>
+ /// MF_EXT_QxCA_CLK_EN BIT31<BR>
+ //
+ UINT32 memFlowsExt;
+
+ //
+ // Addtional storage for memory flows
+ //
+
+ UINT32 memFlowsExt2;
+ UINT32 memFlowsExt3;
+
+ ///
+ /// @brief
+ /// Write Preamble timing.<BR>
+ /// @details
+ /// 0 = PREAMBLE_1TCLK;<BR>
+ /// 1 = PREAMBLE_2TCLK;<BR>
+ /// 2 = PREAMBLE_3TCLK;<BR>
+ /// 3 = PREAMBLE_4TCLK.<BR>
+ //
+ UINT8 writePreamble;
+
+ ///
+ /// @brief
+ /// Read Preamble timing.<BR>
+ /// @details
+ /// 0 = PREAMBLE_1TCLK;<BR>
+ /// 1 = PREAMBLE_2TCLK;<BR>
+ /// 2 = PREAMBLE_3TCLK;<BR>
+ /// 3 = PREAMBLE_4TCLK.<BR>
+ //
+ UINT8 readPreamble;
+
+ ///
+ /// Enable extended range for DRAM RAPL.
+ //
+ UINT8 DramRaplExtendedRange;
+
+ ///
+ /// @brief
+ /// Memory RAS: Threshold value for logging Correctable Errors(CE).
+ /// @details
+ /// Threshold of 10 logs 10th CE, "All" logs every CE, and "None"
+ /// means no CE logging. All and None are not valid with Rank Sparing.
+ //
+ UINT16 spareErrTh;
+
+ ///
+ /// Memory RAS: Enable/Disable New 48B SDDC.<BR>
+ //
+ UINT8 NsddcEn;
+
+
+ ///
+ /// Memory RAS: Enable/Disable enhanced sddc.<BR>
+ //
+ UINT8 EsddcEn;
+
+ ///
+ /// Disable - Turns ON Column Correction feature. Enable - Turns OFF Column Correction feature
+ //
+ UINT8 ColumnCorrectionDisable;
+
+ ///
+ /// Memory RAS: Enable/Disable leaky bucket time window based interface.<BR>
+ //
+ UINT8 leakyBktTimeWindow;
+
+ ///
+ /// Leaky bucket low mask position.
+ //
+ UINT8 leakyBktLo;
+
+ ///
+ /// Leaky bucket high mask position.
+ //
+ UINT8 leakyBktHi;
+
+ ///
+ /// Leaky bucket time window based interface Hour(0 - 3744).
+ //
+ UINT16 leakyBktHour;
+
+ ///
+ /// Leaky bucket time window based interface Minute" (0 - 60).
+ //
+ UINT8 leakyBktMinute;
+
+ ///
+ /// Number of spare ranks per channel.
+ //
+ UINT8 spareRanks;
+
+ ///
+ /// Controls if NVDIMMs are interleaved together or not.
+ //
+ UINT8 interNVDIMMS;
+
+ ///
+ /// Control if BIOS will perform NVDIMM Restore operation.
+ //
+ UINT8 restoreNVDIMMS;
+
+ ///
+ /// Control if BIOS will perform NVDIMM erase & ARM operations.
+ //
+ UINT8 eraseArmNVDIMMS;
+
+ ///
+ /// Cmd setup percent offset for late cmd traning result. The possible
+ /// values are from 0 to 100.
+ //
+ UINT8 cmdSetupPercentOffset;
+
+ ///
+ /// @brief
+ /// Memory RAS. Power-up DDR4 Post Package Repair (PPR) type.<BR>
+ /// @details
+ /// 0 - PPR disabled.<BR>
+ /// 1 - PPR type hard.<BR>
+ /// 2 - PPR type soft.<BR>
+ //
+ UINT8 pprType;
+
+ ///
+ /// @brief
+ /// PPR Address.
+ /// @details
+ /// Buffer to hold DRAM Address that need to be repaired by PPR (Post Package Repair).<BR>
+ /// Platform Sample Implementation: <BR>
+ /// RAS code uses pprAddrSetup to cause MRC to launch PPR (Post Package Repair) on
+ /// a subsequent boot. RAS code passes failed DRAM information into pprAddrSetup
+ /// via the UEFI variable PPR_ADDR_VARIABLE.
+ //
+ PPR_ADDR_MRC_SETUP pprAddrSetup[MAX_PPR_ADDR_ENTRIES];
+
+ ///
+ /// IMC interleave setting (within a socket). Valid options are 1 or 2 way interleave.
+ //
+ UINT8 imcInter;
+
+ ///
+ /// Enable/Disable support for JEDEC RCD v2.0+ One Rank Timing Mode.
+ //
+ UINT8 oneRankTimingModeEn;
+
+ struct ReservedS193 ReservedS193;
+
+ ///
+ /// @brief
+ /// Volatile Memory Mode
+ /// @details
+ /// 0 - 1LM;<BR>
+ /// 1 - 2LM;<BR>
+ //
+ UINT8 volMemMode;
+
+ ///
+ /// For 2LM, the caching type. Only valid if volMemMode is 2LM
+ /// 0 - DDR caching DDRT.
+ //
+ UINT8 CacheMemType;
+
+ ///
+ /// @brief
+ /// Size of channel DDR to use as 2LM cache.
+ /// @details
+ /// Size of channel DDR to use as 2LM cache when Volatile Memory Mode
+ /// under Crystal Ridge is 1LM+2LM.
+ //
+ UINT8 DdrCacheSize;
+
+ ///
+ /// Caching contorl for AppDirect.
+ //
+ UINT8 PmemCaching;
+
+ ///
+ /// eADR support.
+ //
+ UINT8 EadrSupport;
+ UINT8 EadrCacheFlushMode;
+
+ ///
+ /// Enable or disable fADR support.
+ //
+ UINT8 FadrSupport;
+
+ ///
+ /// Memory interleave mode for 1LM.
+ //
+ UINT8 memInterleaveGran1LM;
+
+ ///
+ /// Enable or disable biased 2-way near memory cache.
+ //
+ UINT8 EnableTwoWayNmCache;
+
+ ///
+ /// A 10-bit mask to control the bias counter ratio.
+ //
+ UINT16 NonPreferredWayMask;
+
+ ///
+ /// Reads are issued to the non-preferred or preferred way first.
+ //
+ UINT8 PreferredReadFirst;
+
+ ///
+ /// Enable or disable boot-time fast zero memory support.
+ //
+ UINT8 FastZeroMemSupport;
+
+ ///
+ /// Enable/Disable DDRT memory power saving.
+ //
+ UINT8 DdrtMemPwrSave;
+
+ ///
+ /// @brief
+ /// Memory RAS: Patrol Scrub Address Mode.<BR>
+ /// @details
+ /// Selects the address mode between System Physical Address (or) Reverse Address.<BR>
+ /// 0 - PATROL_SCRUB_REVERSE_ADDR,<BR>
+ /// 1 - PATROL_SCRUB_SPA, <BR>
+ //
+ UINT8 patrolScrubAddrMode;
+
+ ///
+ /// @brief
+ /// Self Refresh control programming.
+ /// @details
+ /// Memory power managment feature:<BR>
+ /// Select manual or auto programming Self Refresh controls at Load Line point
+ /// 0/1/2/3 registers.<BR>
+ /// 0 - auto - MRC determines the value;<BR>
+ /// 1 - manual - use value from user Setup.<BR>
+ //
+ UINT8 SrefProgramming;
+
+ ///
+ /// @brief
+ /// Opportunistic self-refresh setting.
+ /// @details
+ /// Memory power managment feature:<BR>
+ /// opportunistic self-refresh setting in Self Refresh controls at Load Line point
+ /// 0/1/2/3 registers.<BR>
+ /// 0 - disable;<BR>
+ /// 1 - enable.<BR>
+ //
+ UINT8 OppSrefEn;
+
+ ///
+ /// @brief
+ /// Master DLLs (MDLL) setting.
+ /// @details
+ /// Memory power managment feature:<BR>
+ /// Master DLLs (MDLL) setting in Self Refresh controls at Load Line point 0/1/2/3 registers.<BR>
+ /// When 0 - Master DLLs (MDLL) cannot be turned off in Self Refresh.<BR>
+ /// When 1 - Master DLLs (MDLL) can be turned off in Self Refresh.<BR>
+ //
+ UINT8 MdllOffEn;
+
+ ///
+ /// @brief
+ /// Enables or disables Self Refresh in PkgC flow.<BR>
+ /// @details
+ /// Memory power managment feature.<BR>
+ /// 0 - Didable.<BR>
+ /// 1 - Enable.<BR>
+ //
+ UINT8 PkgcSrefEn;
+
+ ///
+ /// @brief
+ /// Configures CK behavior during self-refresh.<BR>
+ /// @details
+ /// 0 - CK is driven during self refresh.<BR>
+ /// 2 - CK is pulled low during self refresh.<BR>
+ //
+ UINT8 CkMode;
+
+ ///
+ /// @brief
+ /// CKE Registers Programming Mode.
+ /// @details
+ /// Select manual or auto programming registers Control for CKE (DRAM powerdown modes).
+ /// at Load Line point 0/1/23.<BR>
+ /// 0 - auto - MRC determines the value.<BR>
+ /// 1 - manual - use value from user Setup.<BR>
+ //
+ UINT8 CkeProgramming;
+
+ ///
+ /// @brief
+ /// CKE Idle Timer.
+ /// @details
+ /// Set the number of rank idle cycles that causes CKE power-down entrance.
+ /// The number of idle cycles (in DCLKs) are based from command CS assertion.
+ /// It is important to program this parameter to be greater than roundtrip
+ /// latency parameter in order to avoid the CKE de-assertion sooner than data return.
+ //
+ UINT8 CkeIdleTimer;
+
+ ///
+ /// @brief
+ /// CKE Active Power Down Mode for DDR4 DIMMs.<BR>
+ /// @details
+ /// 0 = APD is disabled.<BR>
+ /// 1 = APD is enabled.<BR>
+ //
+ UINT8 ApdEn;
+
+ ///
+ /// @brief
+ /// CKE Precharge Power Down (PPD).<BR>
+ /// @details
+ /// 0 = PPD is disabled.<BR>
+ /// 1 = PPD is enabled.<BR>
+ //
+ UINT8 PpdEn;
+
+ ///
+ /// @brief
+ /// CKE Active Power Down Mode for DDR-T DIMMs.<BR>
+ /// @details
+ /// 0 = APD is disabled.<BR>
+ /// 1 = APD is enabled.<BR>
+ //
+ UINT8 DdrtCkeEn;
+
+ ///
+ /// @brief
+ /// Turn off DDRIO data DLL in CKE Power Down or OppSR low power mode.<BR>
+ /// @details
+ /// 0 = Do not turn off data DLL.<BR>
+ /// 1 = Turn off data DLL.<BR>
+ //
+ UINT8 DataDllOff;
+
+ ///
+ /// @brief
+ /// RAS: Enable/Disable Extended ADDDC sparing.<BR>
+ /// @details
+ /// 0 = Disabled.<BR>
+ /// 1 = Enabled.<BR>
+ //
+ UINT8 ExtendedADDDCEn;
+
+ ///
+ /// @brief
+ /// DDRT Defeature Enable/Disable BLOCK GNT2CMD1CYC.<BR>
+ /// @details
+ /// 0 = Disabled.<BR>
+ /// 1 = Enabled.<BR>
+ //
+ UINT8 Blockgnt2cmd1cyc;
+
+ ///
+ /// @brief
+ /// Enable/Disable NVMDIMM OPPRD.<BR>
+ /// @details
+ /// 0 = DDRT RPQ Reads will not be scheduled in DDR4 mode DDRT Underfill Reads
+ /// will not be scheduled in DDR4 mode.<BR>
+ /// 1 = DDRT RPQ Reads will be scheduled in DDR4 mode. GNTs continue to be blocked
+ /// in DDR4 mode. This should be set for DDRT 2N mode.DDRT Underfill Reads will
+ /// be scheduled in DDR4 mode. GNTs continue to be blocked in DDR4 mode This
+ /// bit should be set for DDRT 2N mod.<BR>
+ //
+ UINT8 Disddrtopprd;
+
+ UINT16 Reserved10;
+
+ ///
+ /// @brief
+ /// NGNVM DIMM Secure Erase Unit, Erases the persistent memory region of the selected DIMMs".<BR>
+ /// @details
+ /// 0 - Erase DIMMs according to setting of setSecureEraseSktCh.<BR>
+ // 1 - enable Erase All DIMMs, Erases the persistent memory region of all NVMDIMMs in the system".<BR>
+ UINT8 setSecureEraseAllDIMMs;
+
+ ///
+ /// @brief
+ /// Enable/Disable secure erase of persistent memory region of NVMDIMM.<BR>
+ /// @details
+ /// 0 = Disable erasing the persistent memory region of NVMDIMM in <Channel 0, Memory controller 0, Socket 0.<BR>
+ /// 1 = Enable erasing the persistent memory region of NVMDIMM in Channel 0, Memory controller 0, Socket 0.<BR>
+ //
+ UINT8 setSecureEraseSktCh[MAX_SOCKET][MAX_CH];
+
+ ///
+ /// @brief
+ /// Select Crystal Ridge FastGo QoS Configuration Profiles.<BR>
+ /// @details
+ /// CR_FASTGO_DEFAULT 0;<BR>
+ /// CR_FASTGO_DISABLE 1;<BR>
+ /// CR_FASTGO_DISABLE_MLC_SQ_THRESHOLD_5 2;<BR>
+ /// CR_FASTGO_DISABLE_MLC_SQ_THRESHOLD_6 3;<BR>
+ /// CR_FASTGO_DISABLE_MLC_SQ_THRESHOLD_8 4;<BR>
+ /// CR_FASTGO_DISABLE_MLC_SQ_THRESHOLD_10 5;<BR>
+ /// CR_FASTGO_AUTOMATIC 6;<BR>
+ /// CR_FASTGO_LAST_OPTION CR_FASTGO_AUTOMATIC;<BR>
+ /// CR_FASTGO_KNOB_DEFAULT CR_FASTGO_AUTOMATIC.<BR>
+ //
+ UINT8 FastGoConfig;
+
+ ///
+ /// @brief
+ /// Non-Volatile Memory DIMM baseline performance settings depending on the workload behavior.<BR>
+ /// @details
+ /// 0 = BW Optimized.<BR>
+ /// 1 = Latency Optimized.<BR>
+ //
+ UINT8 NvmdimmPerfConfig;
+
+ ///
+ /// @brief
+ /// Memory topology of each channel per socket.<BR>
+ /// @details
+ /// 0 = DaisyChainTopology.<BR>
+ /// 1 = InvSlotsDaisyChainTopology.<BR>
+ /// 2 = TTopology.<BR>
+ //
+ EFI_MEMORY_TOPOLOGY_TYPE MemoryTopology[MAX_SOCKET][MAX_CH];
+
+ ///
+ /// @brief
+ /// Memory connector type of each channel per socket.<BR>
+ /// @details
+ /// 0 = DimmConnectorPth.<BR>
+ /// 1 = DimmConnectorSmt.<BR>
+ /// 2 = DimmConnectorMemoryDown.<BR>
+ //
+ EFI_MEMORY_DIMM_CONNECTOR_TYPE MemoryConnectorType[MAX_SOCKET][MAX_CH];
+
+ ///
+ /// @brief
+ /// Enable/Disable the App Direct Memory Hole.<BR>
+ /// @details
+ /// 0 = disable.<BR>
+ /// 1 = enable.<BR>
+ //
+ UINT8 AppDirectMemoryHole;
+
+ ///
+ /// @brief
+ /// Enable/disable Latch System Shutdown (LSS) of all enabled NVDIMMs.<BR>
+ /// @details
+ /// LSS is supposed to be done by the persistent memory driver in OS using ACPI DSM function,
+ /// before any write to persistent memory is done. BIOS knob is implemented to enable Latch LSS
+ /// for operating systems that would not call DSM. Enabling latch twice is not a problem so the BIOS
+ /// action does not colide with OSes that use DSM to enable latch.<BR>
+ /// 0 = Disable.<BR>
+ /// 1 = Enable.<BR>
+ //
+ UINT8 LatchSystemShutdownState;
+
+ ///
+ /// @brief
+ /// Select snoopy mode for 2LM.
+ /// @details
+ /// Set to 0 to Enables new 2LM specific feature to
+ /// avoid directory updates to far-memory from non-NUMA optimized workloads.<BR>
+ /// 0 = Enable eliminating directory in far memory.<BR>
+ /// 1 = Disable eliminating directory in far memory.<BR>
+ //
+ UINT8 EliminateDirectoryInFarMemory;
+
+ ///
+ /// @brief
+ /// Power Cycle Policy on NVM Surprise Clock Stop.
+ /// @details
+ /// Enable/Disable power cycle policy when NVMDIMM receive surprise clock stop.
+ //
+ UINT8 NvmdimmPowerCyclePolicy;
+
+ ///
+ /// @brief
+ /// NV DIMM Energy Policy Management.<BR>
+ /// @details
+ /// 1 = Setting Energy Policy to Device Managed.<BR>
+ /// 2 = Setting Energy Policy to Host Managed.<BR>
+ //
+ UINT8 NvDimmEnergyPolicy;
+
+ ///
+ /// @brief
+ /// Option to force Rx DFE enabled or disabled.<BR>
+ /// @details
+ /// 0 = Disable Rx DFE.<BR>
+ /// 1 = Enable Rx DFE.<BR>
+ /// 2 = Auto. MRC code detemines if enable or disable.<BR>
+ //
+ UINT8 RxDfeEn;
+
+ ///
+ /// @brief
+ /// Enable/Disable TX Rise Fall Slew Rate Training. <BR>
+ /// @details
+ /// 0 = Dsiable.<BR>
+ /// 1 = Enable.<BR>
+ /// 2 = AUTO, will enable if DDR Freq >= 2933.<BR>
+ //
+ UINT8 TxRiseFallSlewRate;
+
+ ///
+ /// @brief
+ /// Forces PXC (Phase-based Crosstalk Cancellation) initialization.
+ /// @details
+ /// Forces PXC (Phase-based Crosstalk Cancellation) initialization even if
+ /// PXC training is not enabled.<BR>
+ /// 0 = Disable.<BR>
+ /// 1 = Enable.<BR>
+ //
+ UINT8 ForcePxcInit;
+
+ ///
+ /// @brief
+ /// CMI Initialize Option.<BR>
+ /// @details
+ /// 0 = Initialize with desired credit.<BR>
+ /// 1 = Inialize with default(Reset Value)credit.<BR>
+ //
+ UINT8 CmiInitOption;
+
+ ///
+ /// @brief
+ /// Snoopy mode for AD.
+ /// @details
+ /// Snoopy mode for AD: Disable/Enable new AD specific feature to avoid directory
+ /// updates to DDRT memory from non-NUMA optimized workloads.<BR>
+ /// 0 = Disable.<BR>
+ /// 1 = Enable.<BR>
+ //
+ UINT8 DisableDirForAppDirect;
+
+ ///
+ /// @brief
+ /// Enable/Disable Crystal Ridge MediaStatus Exception.<BR>
+ /// @details
+ /// 0 = Disable.<BR>
+ /// 1 = Enable.<BR>
+ //
+ UINT8 NvmMediaStatusException;
+
+ ///
+ /// @brief
+ /// Select Crystal Ridge QoS tuning recipes.<BR>
+ /// @details
+ /// 0 = Enables tuning recipe 1 for CR QoS knobs <BR>
+ /// (recommended for 2-2-2 memory configuration in AD);<BR>
+ /// 1 = Enables tuning recipe 2 for CR QoS knobs<BR>
+ /// (recommended for other memory configuration in AD);<BR>
+ /// 2 = Enables tuning recipe 3 for CR QoS knobs <BR>
+ /// (recommended for 1 DIMM per channel config);<BR>
+ /// 3 = Disable CR QoS feature.<BR>
+ //
+ UINT8 NvmQos;
+
+ ///
+ /// @brief
+ /// Disable/Enable using extended Type 17 SMBIOS Structures.<BR>
+ /// @details
+ /// 0 = Disable.<BR>
+ /// 1 = Enable .<BR>
+ //
+ UINT8 ExtendedType17;
+
+ ///
+ /// @brief
+ /// Gen 2 Intel Optane DC Persistent Memory (DCPMM) Average Power Limit (in mW)".
+ /// @details
+ /// Valid range for power limit starts from 10000mW and must be a multiple of 250mW."
+ //
+ UINT16 DcpmmAveragePowerLimit;
+
+ ///
+ /// @brief
+ /// Gen 2 DCPMM Average Power Time Constant for Turbo Mode support (in mSec).
+ /// @details
+ /// This value is used as a base time window for power usage measurements.
+ //
+ UINT8 DcpmmAveragePowerTimeConstant;
+
+
+ ///
+ /// @brief
+ /// Gen 2 DCPMM Average Power Time Constant for Memory Bandwidth Boost Feature support(in mSec).
+ /// @details
+ /// This value is used as a base time window for power usage measurements.
+ //
+ UINT32 DcpmmMbbAveragePowerTimeConstant;
+
+ ///
+ /// @brief
+ /// Gen 2 DCPMM Turbo Mode/Memory Bandwidth Boost Feature Enable.<BR>
+ /// @details
+ /// 0 = Disable.<BR>
+ /// 1 = Enable.<BR>
+ //
+ UINT8 DcpmmMbbFeature;
+
+ ///
+ /// @brief
+ /// DCPPM Power limit in mW for Turbo Mode/Memory Bandwidth Boost Feature.
+ /// @details
+ /// DCPPM Power limit in mW used for limiting the Turbo Mode/Memory Bandwidth Boost power consumption (Valid
+ /// range starts from 15000mW).
+ //
+ UINT16 DcpmmMbbMaxPowerLimit;
+
+ ///
+ /// @brief
+ /// Select LSx (LSI/LSR/LSW) ACPI method implementation.<BR>
+ /// @details
+ /// 0 = Software SMI.<BR>
+ /// 1 = ASL.<BR>
+ //
+ UINT8 LsxImplementation;
+
+ ///
+ /// @brief
+ /// Set Smbus maximum access time<BR>
+ /// @details
+ /// Maximum amount of time (ms) UEFI mgmt driver is allowed to use the SMBus.<BR>
+ //
+ UINT32 NvdimmSmbusMaxAccessTime;
+
+ ///
+ /// @brief
+ /// Set Smbus release delay.<BR>
+ /// @details
+ /// Delay time (ms) before releasing after UEFI mgmt driver requests SMBus release.<BR>
+ //
+ UINT32 NvdimmSmbusReleaseDelay;
+
+ ///
+ /// @brief
+ /// Controls Mailbox structures in the NFIT
+ /// @details
+ /// 0 - Publish Mailbox structures in the NFIT
+ /// 1 - Do not publish Mailbox structures in the NFIT
+ ///
+ UINT8 NfitPublishMailboxStructsDisable;
+
+ ///
+ /// @brief
+ /// Enforce memory population POR configurations.<BR>
+ /// @details
+ /// 0 (ENFORCE_POPULATION_POR_DIS) - Do not enforce memory population POR.<BR>
+ /// 1 (ENFORCE_POPULATION_POR_ENFORCE_SUPPORTED) - Enforce supported memory populations.<BR>
+ /// 2 (ENFORCE_POPULATION_POR_ENFORCE_VALIDATED) - Enforce validated memory populations.<BR>
+ //
+ UINT8 EnforcePopulationPor;
+
+ ///
+ /// Configure Stagger Host Refresh feature
+ ///
+ UINT8 TrefiPerChannel;
+ UINT8 TrefiNumofRank;
+ UINT16 TrefiDelay;
+
+ //
+ // DFE Path Finding
+ //
+ UINT8 EnableTapSweep;
+
+ INT8 DfeGainBias;
+
+ INT8 Tap1Start;
+ INT8 Tap1End;
+ UINT8 Tap1Size;
+
+ INT8 Tap2Start;
+ INT8 Tap2End;
+ UINT8 Tap2Size;
+
+ INT8 Tap3Start;
+ INT8 Tap3End;
+ UINT8 Tap3Size;
+
+ INT8 Tap4Start;
+ INT8 Tap4End;
+ UINT8 Tap4Size;
+
+ ///
+ /// @brief
+ /// Training Comp Options Values.
+ /// @details
+ /// Options for issuing a Comp. cycle (RCOMP) at specific points in training.<BR>
+ /// 0 - One RCOMP cycle only on PHY Init (MMRC Init);<BR>
+ /// 1 - One RCOMP cycle after every JEDEC Init;<BR>
+ /// 2 - One RCOMP cycle right before every training step;<BR>
+ //
+ UINT8 TrainingCompOptions;
+
+ ///
+ /// @brief
+ /// Periodic Rcomp Control.
+ /// @details
+ /// Enable/Disable memory periodic Rcomp with PCU.<BR>
+ /// 0 - Disable;<BR>
+ /// 1 - Enable;<BR>
+ /// 2 - Auto;<BR>
+ //
+ UINT8 PeriodicRcomp;
+
+ ///
+ /// @brief
+ /// Periodic Rcomp Interval.
+ /// @details
+ /// Interval of periodic Rcomp controlled by PCU.<BR>
+ //
+ UINT8 PeriodicRcompInterval;
+
+ ///
+ /// @brief
+ /// Use SMBUS for early MRW commands
+ /// @details
+ /// Option to require all MRW commands to be sent over SMBUS until QCA training is complete<BR>
+ //
+ BOOLEAN UseSmbusForMrwEarly;
+
+ ///
+ /// @brief
+ /// Enable/Disable AEP DIMM Not Supported Exception.<BR>
+ /// @details
+ /// 0 = Disable.<BR>
+ /// 1 = Enable.<BR>
+ //
+ UINT8 AepNotSupportedException;
+
+ //
+ // Memory Boot Health Check
+ //
+ MEM_BOOT_HEALTH_CONFIG MemBootHealthConfig;
+
+ /// @brief
+ /// Select between Panic/High Watermark of Auto or High or Low.<BR>
+ /// @details
+ /// 0 = Auto
+ /// 1 = High<BR>
+ /// 2 = Low<BR>
+ UINT8 PanicWm;
+
+ /// @brief
+ /// Enable/Disable LRDIMM DB DFE.<BR>
+ /// @details
+ /// 0 - Disable;<BR>
+ /// 1 - Pmem Only;<BR>
+ /// 2 - All LRDIMM;<BR>
+ UINT8 DataBufferDfe;
+
+ ///
+ /// @brief
+ /// Enable/Disable Virtual NUMA.<BR>
+ /// @details
+ /// 0 - disable.<BR>
+ /// 1 - enable.<BR>
+ //
+ UINT8 VirtualNumaEnable;
+
+ ///
+ /// @brief
+ /// Smart Test Key pattern.<BR>
+ /// @details
+ /// Option to enter the confidential key to be used<BR>
+ //
+ UINT32 smartTestKey;
+
+ ///
+ /// Enable RMT minimum margin check
+ //
+ BOOLEAN RmtMinimumMarginCheckEnable;
+}; // memSetup
+
+///
+/// Common Platform Settings of MRC.
+///
+struct commonSetup {
+ ///
+ /// @brief
+ /// Flags for common platform settings.<BR>
+ /// @details
+ /// PROMOTE_WARN_EN BIT0 Enables warnings to be treated as fatal error.<BR>
+ /// PROMOTE_MRC_WARN_EN BIT1 Enables MRC warnings to be treated as fatal error.<BR>
+ /// HALT_ON_ERROR_EN BIT2 Enables errors to loop forever.<BR>
+ /// HALT_ON_ERROR_AUTO BIT3 Auto reset with Maximum Serial port debug<BR>
+ /// message level when fatal error is encountered.<BR>
+ //
+ UINT32 options;
+
+ ///
+ /// @brief
+ /// MRC debug feature. It indicates if debug jumper is set. <BR>
+ /// @details
+ /// 0 - Debug jumper is not set.<BR>
+ /// 1 - Debug jumper is set.<BR>
+ //
+ UINT8 debugJumper;
+
+ ///
+ /// @brief
+ /// Specifies what level of debug messages will be sent to serial port.<BR>
+ /// @details
+ /// Available options are a bitfield where: <BR>
+ /// SDBG_MIN BIT0;<BR>
+ /// SDBG_MAX BIT1;<BR>
+ /// SDBG_TRACE BIT2;<BR>
+ /// SDBG_MEM_TRAIN BIT3 + SDBG_MAX;<BR>
+ /// SDBG_CPGC BIT5;<BR>
+ /// SDBG_MINMAX SDBG_MIN + SDBG_MAX.<BR>
+ //
+ UINT32 serialDebugMsgLvl;
+
+ ///
+ /// MRC debug feature: Enable/Disable serial port buffer.<BR>
+ //
+ UINT8 serialBufEnable;
+
+ ///
+ /// MRC debug feature: Enable/Disable serial port pipe.<BR>
+ //
+ UINT8 serialPipeEnable;
+
+ ///
+ /// MRC debug feature: Enable/Disable serial pipe compress.<BR>
+ //
+ UINT8 serialPipeCompress;
+
+ ///
+ /// @brief
+ /// Maximum addressable memory supported by the platform.
+ /// @details
+ /// Skylake Processor supports up to 46-bit addressing. This input should be the
+ /// total number of addressable bytes in 256MB units. (0x40000 for 46-bit
+ /// and 0x1000 for 40-bit).
+ //
+ UINT32 maxAddrMem;
+
+ ///
+ /// User configurable IO port for post code which is traditionally located at 0x80.
+ //
+ UINT16 debugPort;
+
+ ///
+ /// 32-bit pointer to an optional OEM NVRAM image to be copied into the host NVRAM structure.
+ ///
+ UINT32 nvramPtr;
+
+ ///
+ /// 32-bit pointer to an optional OEM provided Host structure.
+ //
+ UINT32 sysHostBufferPtr;
+
+ ///
+ /// @brief
+ /// Disable/Enable DDRT Transcator.<BR>
+ /// @details
+ /// 0 - Disable;<BR>
+ /// 1 - Enable;<BR>
+ //
+ UINT8 ddrtXactor;
+
+ UINT8 ReservedS3;
+
+ UINT8 ReservedS7[MAX_B2P_MAILBOX_GROUPS];
+
+ ///
+ /// @brief
+ /// Socktet configuration supported by platform
+ /// @details
+ /// 0 - SOCKET_UNDEFINED
+ /// 1 - SOCKET_4S
+ /// 2 - SOCKET_HEDT High End Desktop
+ /// 3 - SOCKET_1S
+ /// 4 - SOCKET_1SWS 1 Socket Work Station
+ /// 5 - SOCKET_8S
+ /// 6 - SOCKET_2S
+ //
+ UINT8 SocketConfig;
+};
+
+///
+/// Platform Setting for MRC.
+//
+typedef struct sysSetup {
+
+ ///
+ /// Memory technology related settings for MRC.
+ //
+ struct memSetup mem;
+
+ ///
+ /// Common platform settings not related to memory techology.
+ //
+ struct commonSetup common;
+
+ ///
+ /// @brief
+ /// WFR Uncore GV Rate Reduction.<BR>
+ /// @details
+ /// AUTO: Enable if WFR socket is detected in system.<BR>
+ /// Enabled: Always enables WFR Uncore GV Rate Reduction.<BR>
+ //
+ UINT8 WFRWAEnable;
+
+ ///
+ /// Enable/Disable Pmax through BIOS to Pcode Mailbox.
+ //
+ UINT8 PmaxDisable;
+
+ UINT8 Pci64BitResourceAllocation; // TODO - This is IIO related, they need to stop relying on MRC structures
+
+
+ ///
+ /// Whether of not we should recover from ADR.
+ //
+
+ UINT32 AdrEvent;
+
+} SYS_SETUP;
+
+#pragma pack(pop)
+
+///
+/// Revison of MEMORY_POLICY_PPI.
+//
+#define MEMORY_POLICY_PPI_REVISION 0x00000001
+
+///
+/// Memory Policy PPI Definition.
+//
+typedef struct _MEMORY_POLICY_PPI {
+
+ ///
+ /// Revision of this PPI.
+ //
+ UINT32 Revision;
+
+ ///
+ /// This data structure contanis all platform level configuration for MRC.
+ //
+ SYS_SETUP *SysSetup;
+} MEMORY_POLICY_PPI;
+
+extern EFI_GUID gMemoryPolicyPpiGuid;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h
new file mode 100644
index 0000000000..82725bc84e
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h
@@ -0,0 +1,53 @@
+/** @file
+ RAS IMC S3 Data Load PPI
+
+ @copyright
+ Copyright 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _RAS_IMC_S3_DATA_H_
+#define _RAS_IMC_S3_DATA_H_
+
+#include <Uefi/UefiBaseType.h>
+
+typedef struct _RAS_IMC_S3_DATA_PPI RAS_IMC_S3_DATA_PPI;
+
+/**
+ Retrieves data for S3 saved memory RAS features from non-volatile storage.
+
+ If the Data buffer is too small to hold the contents of the NVS data,
+ the error EFI_BUFFER_TOO_SMALL is returned and DataSize is set to the
+ required buffer size to obtain the data.
+
+ @param[in] This A pointer to this instance of the RAS_IMC_S3_DATA_PPI.
+ @param[in, out] DataSize On entry, points to the size in bytes of the Data buffer.
+ On return, points to the size of the data returned in Data.
+ @param[out] Data Points to the buffer which will hold the returned data.
+
+ @retval EFI_SUCCESS The NVS data was read successfully.
+ @retval EFI_NOT_FOUND The NVS data does not exist.
+ @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the NVS data.
+ DataSize is updated with the size required for
+ the NVS data.
+ @retval EFI_INVALID_PARAMETER DataSize or Data is NULL.
+ @retval EFI_DEVICE_ERROR The NVS data could not be retrieved because of a device error.
+ @retval EFI_UNSUPPORTED This platform does not support the save/restore of S3 memory data
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *RAS_IMC_S3_DATA_PPI_GET_IMC_S3_RAS_DATA) (
+ IN CONST RAS_IMC_S3_DATA_PPI *This,
+ IN OUT UINT32 *DataSize,
+ OUT VOID *Data
+ );
+
+struct _RAS_IMC_S3_DATA_PPI {
+ RAS_IMC_S3_DATA_PPI_GET_IMC_S3_RAS_DATA GetImcS3RasData;
+};
+
+extern EFI_GUID gRasImcS3DataPpiGuid;
+
+#endif // _RAS_IMC_S3_DATA_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h
new file mode 100644
index 0000000000..e355dcaba3
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h
@@ -0,0 +1,39 @@
+/** @file
+ Silicon Policy PPI is used for specifying platform
+ related Intel silicon information and policy setting.
+ This PPI is consumed by the silicon PEI modules and carried
+ over to silicon DXE modules.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UPI_POLICY_PPI_H_
+#define _UPI_POLICY_PPI_H_
+
+#include <Upi/KtiHost.h>
+
+///
+/// PPI revision information
+/// This PPI will be extended in a backwards compatible manner over time
+/// Added interfaces should be documented here with the revisions added
+/// Revision 1: Initial revision
+#define UPI_POLICY_PPI_REVISION 0x1
+
+typedef struct _UPI_POLICY_PPI UPI_POLICY_PPI;
+
+struct _UPI_POLICY_PPI {
+ /**
+ This member specifies the revision of the UPI_POLICY_PPI. This field is used to
+ indicate backwards compatible changes to the INTERFACE. Platform code that produces
+ this INTERFACE must fill with the correct revision value for UPI code
+ to correctly interpret the content of the INTERFACE fields.
+ **/
+ UINT32 Revision;
+ KTI_HOST_IN Upi;
+};
+
+#endif // _UPI_POLICY_PPI_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h
new file mode 100644
index 0000000000..df8317937f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h
@@ -0,0 +1,252 @@
+/** @file
+ Dynamic link silicon library service access Protocol
+
+ This protocol abstracts silicon static library accesses via a protocol
+
+ @copyright
+ Copyright 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _DYNAMIC_SI_LIBARY_PROTOCOL_H_
+#define _DYNAMIC_SI_LIBARY_PROTOCOL_H_
+
+#include <Library/CompressedVariableLib.h>
+#include <IioPlatformData.h>
+#include <Include/SystemInfoVar.h>
+#include <Guid/MemoryMapData.h>
+#include <Library/CpuEarlyDataLib.h>
+#include <UsraAccessType.h>
+#include <IioUniversalData.h>
+
+#define DYNAMIC_SI_LIBARY_PROTOCOL_GUID \
+ { 0xb235fbed, 0x3b25, 0x4cb3, { 0x98, 0x9c, 0x8c, 0xe7, 0xec, 0x49, 0x8b, 0x7e } }
+
+#define DYNAMIC_SI_LIBARY_PROTOCOL_SIGNATURE SIGNATURE_32('D', 'S', 'L', 'P')
+#define DYNAMIC_SI_LIBARY_PROTOCOL_VERSION 0x01
+
+//
+// Functions
+//
+
+typedef
+EFI_STATUS
+(EFIAPI *DXE_SET_GPIO_OUTPUT_VALUE) (
+ IN UINT32 GPioPad,
+ IN UINT32 Value
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *DXE_IsCpuAndRevision) (
+ IN UINT8 CpuType,
+ IN UINT16 Revision
+ );
+
+typedef
+CPU_VAR_DATA *
+(EFIAPI *DXE_GetCpuVarData) (
+ );
+
+typedef
+UINT8
+(EFIAPI *DXE_MaxSataControllerNum) (
+ VOID
+ );
+
+typedef
+UINTN
+(EFIAPI *DXE_MmPciBase) (
+ IN UINT32 Bus,
+ IN UINT32 Device,
+ IN UINT32 Function
+ );
+
+typedef
+CPU_CSR_ACCESS_VAR *
+(EFIAPI *DXE_GetSysCpuCsrAccessVar) (
+ VOID
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_IioPciHookBeforeEnumeration) (
+ IN UINT8 Segment,
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Function,
+ IN UINT32 DidVid
+ );
+
+typedef
+CHAR8*
+(EFIAPI *DXE_PchGetSeriesStr) (
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *DXE_PchGetSteppingStr) (
+ OUT CHAR8 *Buffer,
+ IN UINT32 BufferSize
+ );
+
+typedef
+CHAR8*
+(EFIAPI *DXE_PchGetSkuStr) (
+ VOID
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *DXE_SaveVariableFromHob) (
+ IN EFI_GUID HobGuid,
+ IN CHAR16 *VariableName,
+ IN EFI_GUID VariableGuid
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_SetColdBootSlowRequired) (
+ IN BOOLEAN ColdBootSlowRequired
+ );
+
+typedef
+SYS_INFO_VAR_NVRAM *
+(EFIAPI *DXE_GetSysInfoVarNvramPtr) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *DXE_HybridSystemLevelEmulationEnabled) (
+ VOID
+ );
+
+typedef
+SYSTEM_MEMORY_MAP_HOB *
+(EFIAPI *DXE_GetSystemMemoryMapData) (
+ VOID
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *DXE_X2ApicIdDetect) (
+ IN VOID *Host
+ );
+
+typedef
+RETURN_STATUS
+(EFIAPI *DXE_RegisterRead) (
+ IN USRA_ADDRESS *Address,
+ IN VOID *Buffer
+ );
+
+typedef
+RETURN_STATUS
+(EFIAPI *DXE_RegisterWrite) (
+ IN USRA_ADDRESS *Address,
+ IN VOID *Buffer
+ );
+
+typedef
+UINT8
+(EFIAPI *DXE_SataDevNumber) (
+ IN UINT32 SataCtrlIndex
+ );
+
+typedef
+UINT8
+(EFIAPI *DXE_SataFuncNumber) (
+ IN UINT32 SataCtrlIndex
+ );
+
+typedef
+UINT16
+(EFIAPI *DXE_PmcGetAcpiBase) (
+ VOID
+ );
+
+typedef
+UINTN
+(EFIAPI *DXE_PchGetPmcBaseByPchId) (
+ IN UINT8 PchId
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_SetBiosInfoFlagWpe) (
+ VOID
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_ProgramGenProtRangeRegs) (
+ IIO_UDS *IioUds
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_ProgramImrRegs) (
+ IIO_UDS *IioUds
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_ProgramImr2Regs) (
+ IIO_UDS *IioUds
+ );
+
+typedef
+VOID
+(EFIAPI *DXE_CheckAndPopulateIedTraceMemory) (
+ UINTN IedTraceSize,
+ IIO_UDS *IioUds
+ );
+
+typedef
+UINT32
+(EFIAPI *DXE_ReadScratchpad7) (
+ VOID
+ );
+
+//
+// UBA specific silicon abstraction protocol
+//
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ DXE_GetCpuVarData GetCpuVarData;
+ DXE_IsCpuAndRevision IsCpuAndRevision;
+ DXE_MaxSataControllerNum MaxSataControllerNum;
+ DXE_MmPciBase MmPciBase;
+ DXE_GetSysCpuCsrAccessVar GetSysCpuCsrAccessVar;
+ DXE_IioPciHookBeforeEnumeration IioPciHookBeforeEnumeration;
+ DXE_SET_GPIO_OUTPUT_VALUE GpioSetOutputValue;
+ DXE_PchGetSeriesStr PchGetSeriesStr;
+ DXE_PchGetSteppingStr PchGetSteppingStr;
+ DXE_PchGetSkuStr PchGetSkuStr;
+ DXE_SaveVariableFromHob SaveVariableFromHob;
+ DXE_SetColdBootSlowRequired SetColdBootSlowRequired;
+ DXE_GetSysInfoVarNvramPtr GetSysInfoVarNvramPtr;
+ DXE_X2ApicIdDetect X2ApicIdDetect;
+ DXE_GetSystemMemoryMapData GetSystemMemoryMapData;
+ DXE_RegisterRead RegisterRead;
+ DXE_RegisterWrite RegisterWrite;
+ DXE_HybridSystemLevelEmulationEnabled HybridSystemLevelEmulationEnabled;
+ DXE_SataDevNumber SataDevNumber;
+ DXE_SataFuncNumber SataFuncNumber;
+ DXE_PmcGetAcpiBase PmcGetAcpiBase;
+ DXE_PchGetPmcBaseByPchId PchGetPmcBaseByPchId;
+ DXE_SetBiosInfoFlagWpe SetBiosInfoFlagWpe;
+ DXE_ProgramGenProtRangeRegs ProgramGenProtRangeRegs;
+ DXE_ProgramImrRegs ProgramImrRegs;
+ DXE_ProgramImr2Regs ProgramImr2Regs;
+ DXE_CheckAndPopulateIedTraceMemory CheckAndPopulateIedTraceMemory;
+ DXE_ReadScratchpad7 ReadScratchpad7;
+} DYNAMIC_SI_LIBARY_PROTOCOL;
+
+extern EFI_GUID gDynamicSiLibraryProtocolGuid;
+
+#endif // _DYNAMIC_SI_LIBARY_PROTOCOL_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h
new file mode 100644
index 0000000000..53bf977d31
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h
@@ -0,0 +1,60 @@
+/** @file
+ Dynamic link silicon library service access Protocol
+
+ This protocol abstracts silicon static library accesses via an SMM protocol
+
+ @copyright
+ Copyright 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _DYNAMIC_SI_LIBARY_SMM_PROTOCOL_H_
+#define _DYNAMIC_SI_LIBARY_SMM_PROTOCOL_H_
+
+
+#define DYNAMIC_SI_LIBARY_SMM_PROTOCOL_GUID \
+ { 0xb235fbed, 0x3b25, 0x4cb3, { 0x98, 0x9c, 0x8c, 0xe7, 0xec, 0x49, 0x8b, 0x7e } }
+
+#define DYNAMIC_SI_LIBARY_SMM_PROTOCOL_SIGNATURE SIGNATURE_32('D', 'S', 'L', 'S')
+#define DYNAMIC_SI_LIBARY_SMM_PROTOCOL_VERSION 0x01
+
+//
+// Functions
+//
+
+typedef
+UINTN
+(EFIAPI *SMM_MmPciBase) (
+ IN UINT32 Bus,
+ IN UINT32 Device,
+ IN UINT32 Function
+ );
+
+typedef
+UINT16
+(EFIAPI *SMM_PmcGetAcpiBase) (
+ VOID
+ );
+
+typedef
+UINTN
+(EFIAPI *SMM_PchGetPmcBaseByPchId) (
+ IN UINT8 PchId
+ );
+
+//
+// UBA specific silicon abstraction protocol
+//
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ SMM_MmPciBase MmPciBase;
+ SMM_PmcGetAcpiBase PmcGetAcpiBase;
+ SMM_PchGetPmcBaseByPchId PchGetPmcBaseByPchId;
+} DYNAMIC_SI_LIBARY_SMM_PROTOCOL;
+
+extern EFI_GUID gDynamicSiLibrarySmmProtocolGuid;
+
+#endif // _DYNAMIC_SI_LIBARY_SMM_PROTOCOL_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h
new file mode 100644
index 0000000000..b5b51d4799
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h
@@ -0,0 +1,212 @@
+/** @file
+ Definition of the global NVS area protocol. This protocol
+ publishes the address and format of a global ACPI NVS buffer used as a communications
+ buffer between SMM code and ASL code.
+ Note: Data structures defined in this protocol are not naturally aligned.
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_GLOBAL_NVS_AREA_H_
+#define _EFI_GLOBAL_NVS_AREA_H_
+
+//
+// Global NVS Area Protocol GUID
+//
+#define EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID { 0x74e1e48, 0x8132, 0x47a1, 0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc }
+//
+// Because of ASL constrains cannot use MAX_SOCKET and MAX_LOGIC_IIO_STACK to configure ACPI objects. The symbols
+// below are the largest values of MAX_SOCKET or MAX_LOGIC_IIO_STACK currently supported in BiosParameterRegion.asi.
+//
+#define NVS_MAX_SOCKETS 8
+#define NVS_MAX_LOGIC_IIO_STACKS 14
+
+#if NVS_MAX_SOCKETS < MAX_SOCKET
+#error "Must update NVS_MAX_SOCKETS and BiosParameterRegion.asi to handle so many sockets"
+#endif
+#if NVS_MAX_LOGIC_IIO_STACKS < MAX_LOGIC_IIO_STACK
+#error "Must update NVS_MAX_LOGIC_IIO_STACKS and BiosParameterRegion.asi to handle so many stacks"
+#endif
+
+//
+// Extern the GUID for protocol users.
+//
+extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid;
+
+//
+// Global NVS Area definition
+// BIOS parameters region provided by POST code to ASL, defined as PSYS in BiosParametersRegion.asi
+//
+#pragma pack (1)
+
+typedef struct {
+ // IOAPIC Start
+ UINT32 PlatformId;
+ UINT64 IoApicEnable;
+ UINT8 ApicIdOverrided :1;
+ UINT8 PchIoApic_24_119 :1;
+ UINT8 Cpx4Detect :1;
+ UINT8 Reserved0 :5;
+ // IOAPIC End
+
+ // Power Management Start
+ UINT8 TpmEnable :1;
+ UINT8 CStateEnable :1;
+ UINT8 C3Enable :1;
+ UINT8 C6Enable :1;
+ UINT8 C7Enable :1;
+ UINT8 MonitorMwaitEnable :1;
+ UINT8 PStateEnable :1;
+ UINT8 EmcaEn :1;
+ UINT8 HWAllEnable :2;
+ UINT8 KBPresent :1;
+ UINT8 MousePresent :1;
+ UINT8 TStateEnable :1;
+ UINT8 TStateFineGrained :1;
+ UINT8 OSCX :1;
+ UINT8 Reserved1 :1;
+ // Power Management End
+
+ // RAS Start
+ UINT8 CpuChangeMask;
+ UINT8 IioChangeMask;
+ UINT16 IioPresentBitMask[NVS_MAX_SOCKETS];
+ UINT32 SocketBitMask; // make sure this is at 4byte boundary
+ UINT8 CpuCoreThreadsCount;
+ UINT32 ProcessorApicIdBase[NVS_MAX_SOCKETS];
+ UINT64 ProcessorBitMask[NVS_MAX_SOCKETS]; // cores 0-63 for each socket
+ UINT64 ProcessorBitMaskHi[NVS_MAX_SOCKETS]; // cores 64-127 for each socket
+ UINT32 MmCfg;
+ UINT32 TsegSize;
+ UINT32 SmiRequestParam[4];
+ UINT32 SciRequestParam[4];
+ UINT64 MigrationActionRegionAddress;
+ UINT8 Cpu0Uuid[16];
+ UINT8 Cpu1Uuid[16];
+ UINT8 Cpu2Uuid[16];
+ UINT8 Cpu3Uuid[16];
+ UINT8 Cpu4Uuid[16];
+ UINT8 Cpu5Uuid[16];
+ UINT8 Cpu6Uuid[16];
+ UINT8 Cpu7Uuid[16];
+ UINT8 CpuSpareMask;
+ UINT8 Mem0Uuid[16];
+ UINT8 Mem1Uuid[16];
+ UINT8 Mem2Uuid[16];
+ UINT8 Mem3Uuid[16];
+ UINT8 Mem4Uuid[16];
+ UINT8 Mem5Uuid[16];
+ UINT8 Mem6Uuid[16];
+ UINT8 Mem7Uuid[16];
+ UINT8 Mem8Uuid[16];
+ UINT8 Mem9Uuid[16];
+ UINT8 Mem10Uuid[16];
+ UINT8 Mem11Uuid[16];
+ UINT8 Mem12Uuid[16];
+ UINT8 Mem13Uuid[16];
+ UINT8 Mem14Uuid[16];
+ UINT8 Mem15Uuid[16];
+ UINT64 EmcaL1DirAddr;
+ UINT32 ProcessorId;
+ UINT8 PcieAcpiHotPlugEnable;
+ UINT8 WheaEnabled;
+ UINT8 WheaSci;
+ UINT8 PropagateSerrOption;
+ UINT8 PropagatePerrOption;
+ // RAS End
+
+ // VTD Start
+ UINT64 DrhdAddr[3];
+ UINT64 AtsrAddr[3];
+ UINT64 RhsaAddr[3];
+ // VTD End
+
+ // SR-IOV WA Start
+ UINT8 WmaaSICaseValue;
+ UINT16 WmaaSISeg;
+ UINT8 WmaaSIBus;
+ UINT8 WmaaSIDevice;
+ UINT8 WmaaSIFunction;
+ UINT8 WmaaSISts;
+ UINT8 WheaSupportEn;
+ // SR-IOV End
+
+ // BIOS Guard Start
+ UINT64 BiosGuardMemAddress;
+ UINT8 BiosGuardMemSize;
+ UINT16 BiosGuardIoTrapAddress;
+ UINT8 CpuSkuNumOfBitShift;
+ // BIOS Guard End
+
+ // USB3 Start
+ UINT8 XhciMode;
+ UINT8 HostAlertVector1;
+ UINT8 HostAlertVector2;
+ // USB3 End
+
+ // HWPM Start
+ UINT8 HWPMEnable :2; // HWPM
+ UINT8 Reserved3 :1; // reserved bit
+ UINT8 HwpInterrupt :1; // HWP Interrupt
+ UINT8 Reserved2 :4; // reserved bits
+ // HWPM End
+
+ // SGX Start
+ UINT8 SgxStatus;
+ UINT64 EpcLength[8]; // MAX_IMC * MAX_SOCKET
+ UINT64 EpcBaseAddress[8]; // MAX_IMC * MAX_SOCKET
+ // SGX End
+
+ // PCIe Multi-Seg Start
+ UINT8 BusBase[NVS_MAX_SOCKETS][NVS_MAX_LOGIC_IIO_STACKS]; // PCI bus base number for each stack
+ UINT8 PcieMultiSegSupport; // Enable /Disable switch
+ UINT8 PcieSegNum[NVS_MAX_SOCKETS]; // PCI segment number array for each socket
+ // PCIe Multi-seg end
+
+ UINT8 SncAnd2Cluster; // 0 - SNC disabled, 2 - SNC enabled (2 clusters), 4 - SNC enabled (4 clusters)
+
+ // XTU Start
+ UINT32 XTUBaseAddress; // 193 XTU Base Address
+ UINT32 XTUSize; // 197 XTU Entries Size
+ UINT32 XMPBaseAddress; // 201 XTU Base Address
+ UINT8 DDRReferenceFreq; // 205 DDR Reference Frequency
+ UINT8 Rtd3Support; // 206 Runtime D3 support.
+ UINT8 Rtd3P0dl; // 207 User selctable Delay for Device D0 transition.
+ UINT8 Rtd3P3dl; // 208 User selctable Delay for Device D0 transition.
+ // XTU End
+
+ // FPGA Root Port Bus
+ UINT8 FpgaBusBase[8];
+ UINT8 FpgaBusLimit[8];
+
+ // FPGA present bit
+ UINT8 FpgaPresent[8];
+
+ // FPGA Resource Allocation
+ UINT32 VFPBMemBase[8];
+ UINT32 VFPBMemLimit[8];
+
+ // FPGA KTI present bitmap
+ UINT32 FpgaKtiPresent;
+ // FPGA Bus for KTI
+ UINT8 FpgaKtiBase[8];
+
+ UINT16 PmBase; // ACPI IO Base Address
+ UINT8 DebugModeIndicator; // Debug Mode Indicator
+ UINT8 IioPcieRpCapOffset; // IIO PCIe root port PCIe Capability offset
+ UINT8 ArtTscLinkFlag; // Flag to indicate if TSC is linked to ART
+} BIOS_ACPI_PARAM;
+
+#pragma pack ()
+
+//
+// Global NVS Area Protocol
+//
+typedef struct _EFI_GLOBAL_NVS_AREA_PROTOCOL {
+ BIOS_ACPI_PARAM *Area;
+} EFI_GLOBAL_NVS_AREA_PROTOCOL;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h
new file mode 100644
index 0000000000..9efb4466f1
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h
@@ -0,0 +1,47 @@
+/** @file
+ This protocol provides access to the Ioh Universal Data Structure
+ This protocol is EFI compatible.
+
+ @copyright
+ Copyright 2005 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_IIO_UDS_PROTOCOL_H_
+#define _EFI_IIO_UDS_PROTOCOL_H_
+
+#include <IioUniversalData.h>
+
+#define EFI_IIO_UDS_PROTOCOL_GUID \
+ { 0xa7ced760, 0xc71c, 0x4e1a, 0xac, 0xb1, 0x89, 0x60, 0x4d, 0x52, 0x16, 0xcb }
+
+typedef struct _EFI_IIO_UDS_PROTOCOL EFI_IIO_UDS_PROTOCOL;
+
+typedef
+EFI_STATUS
+(EFIAPI *IIH_ENABLE_VC) (
+ IN EFI_IIO_UDS_PROTOCOL *This,
+ IN UINT32 VcCtrlData
+ );
+/**
+
+ Enables the requested VC in IIO
+
+ @param This Pointer to the EFI_IOH_UDS_PROTOCOL instance.
+ @param VcCtrlData Data read from VC resourse control reg.
+
+**/
+
+
+typedef struct _EFI_IIO_UDS_PROTOCOL {
+ IIO_UDS *IioUdsPtr;
+ IIH_ENABLE_VC EnableVc;
+} EFI_IIO_UDS_PROTOCOL;
+
+//
+// Extern the GUID for protocol users.
+//
+extern EFI_GUID gEfiIioUdsProtocolGuid;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h
new file mode 100644
index 0000000000..a782bc3a1e
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h
@@ -0,0 +1,85 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_PCI_CALLBACK_H
+#define _EFI_PCI_CALLBACK_H
+
+#include <Include/IndustryStandard/Pci22.h>
+#include <Protocol/CpuIo2.h>
+#include <Protocol/PciRootBridgeIo.h>
+
+
+//
+// Global Id for PCI callback
+//
+#define EFI_PCI_CALLBACK_PROTOCOL_GUID \
+ { \
+ 0x1ca0e202, 0xfe9e, 0x4776, 0x9f, 0xaa, 0x57, 0xc, 0x19, 0x61, 0x7a, 0x06 \
+ }
+
+typedef struct _EFI_PCI_CALLBACK_PROTOCOL EFI_PCI_CALLBACK_PROTOCOL;
+
+typedef enum {
+ EfiPciEnumerationDeviceScanning = 1,
+ EfiPciEnumerationBusNumberAssigned = 2,
+ EfiPciEnumerationResourceAssigned = 4,
+} EFI_PCI_ENUMERATION_PHASE;
+
+typedef struct {
+ PCI_TYPE00 PciHeader;
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
+ EFI_CPU_IO2_PROTOCOL *CpuIo;
+} EFI_PCI_CALLBACK_CONTEXT;
+
+typedef
+VOID
+(EFIAPI *EFI_PCI_CALLBACK_FUNC) (
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_ENUMERATION_PHASE Phase,
+ IN EFI_PCI_CALLBACK_CONTEXT *Context
+);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_REGISTER_PCI_CALLBACK) (
+ IN EFI_PCI_CALLBACK_PROTOCOL *This,
+ IN EFI_PCI_CALLBACK_FUNC Function,
+ IN EFI_PCI_ENUMERATION_PHASE Phase
+)
+/*++
+
+Routine Description:
+
+ Register a callback during PCI bus enumeration
+
+Arguments:
+
+ This - Protocol instance pointer.
+ Function - Callback function pointer.
+ Phase - PCI enumeration phase.
+
+Returns:
+
+ EFI_SUCCESS - Function has registed successfully
+ EFI_UNSUPPORTED - The function has been regisered
+ EFI_InVALID_PARAMETER - The parameter is incorrect
+
+--*/
+;
+
+//
+// Protocol definition
+//
+typedef struct _EFI_PCI_CALLBACK_PROTOCOL {
+ EFI_REGISTER_PCI_CALLBACK RegisterPciCallback;
+} EFI_PCI_CALLBACK_PROTOCOL;
+
+extern EFI_GUID gEfiPciCallbackProtocolGuid;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h b/Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h
new file mode 100644
index 0000000000..f0b618a65f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h
@@ -0,0 +1,23 @@
+/** @file
+ RC Version header file.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _RC_VERSION_H_
+#define _RC_VERSION_H_
+
+///
+/// RC version number structure.
+///
+typedef struct {
+ UINT8 Major;
+ UINT8 Minor;
+ UINT8 Revision;
+ UINT16 BuildNumber;
+} RC_VERSION;
+
+#endif // _RC_VERSION_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h b/Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h
new file mode 100644
index 0000000000..732a3c2be6
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h
@@ -0,0 +1,49 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SCRATCHPAD_LIST__
+#define __SCRATCHPAD_LIST__
+
+//
+// Sticky BIOS Scratchpad 7. This struct contains the bit definitions for this Scratchpad.
+//
+// Comments: Reserved for Intel use.
+//
+
+#define BIOS_SCRATCHPAD7_COMPLETION_DELAY_RESET_COUNT_SIZE 2
+
+typedef union {
+ struct {
+ UINT32 Available : 4; // Bits[3:0] - These bits are not reserved.
+ UINT32 EnteredColdResetFlow : 1; // Bits[4:4] - Entered cold reset flow.
+ UINT32 CompletedColdResetFlow : 1; // Bits[5:5] - Completed cold reset flow.
+ UINT32 CompletionDelayResetCount : BIOS_SCRATCHPAD7_COMPLETION_DELAY_RESET_COUNT_SIZE;
+ // Bits[7:6] - The number of resets requested because the calculated
+ // completion delay was out of bounds. Only the socket 0 instance of this is
+ // used. This bitfield is used with workaround S1409301288.
+ UINT32 Available1 : 7; // Bits[14:8] - These bits are not reserved.
+ UINT32 CompletedWarmResetWA : 1; // Bits[15:15] - Indicates if the Warm reset WA was done in sec.
+ UINT32 SbspSocketId : 4; // Bits[19:16] - SBSP socket id
+ UINT32 PrefetchFailRecovery : 1; // Bits[20:20] - Prefetch failure/recovery.
+ UINT32 UmaBasedClusteringDowngrade : 2; // Bits[22:21] - Indicate UMA based clusting downgrade
+ // 0:default; 1: Quad-> Hemi 2: Quad-> Disable 3: Hemi-> Disable
+ UINT32 MarginTestfailure : 1; // Bits[23:23] - This bit is set when Margin Test Fails
+ UINT32 DcuModeSelect : 1; // Bits [24:24] - DCU_MODE select 0/1: 32KB 8-way no-ECC (hardware default) /
+ // 16KB 4-way with ECC.
+ UINT32 DwrBiosStall : 1; // Bits[25:25] - BIOS Stall if enter DWR.
+ UINT32 InDwr : 1; // Bits[26:26] - In DWR.
+ UINT32 FailMemChkFastColdBoot : 1; // Bits[27:27] - Bit set when setup option "DEBUG INTERFACE" is enabled
+ UINT32 BistFrbEventLastBoot : 1; // Bits[28:28] - BIST/FRB event occured during the last boot.
+ UINT32 RemoteSocketReleased : 1; // Bits[29:29] - Remote socket released in LT enabled system.
+ UINT32 SncFailRecovery : 1; // Bits[30:30] - Snc failure/recovery.
+ UINT32 AepDimmPresent : 1; // Bits[31:31] - AEP Dimm Present
+ } Bits;
+ UINT32 Data;
+} BIOS_SCRATCHPAD7_STRUCT;
+
+#endif // #ifndef __SCRATCHPAD_LIST__
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h b/Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h
new file mode 100644
index 0000000000..da5a879a03
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h
@@ -0,0 +1,53 @@
+/** @file
+ Header file for the SiliconUpdUpdate.h Library.
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SILICON_UPD_UPDATE_H_
+#define _SILICON_UPD_UPDATE_H_
+
+#pragma pack(1)
+typedef struct {
+ //For IioPcieConfig
+ UINT8 Socket;
+ UINT16 PortIndex;
+ UINT8 HidePort;
+ UINT8 DeEmphasis;
+ UINT8 PortLinkSpeed;
+ UINT8 MaxPayload;
+ UINT8 ReservedE;
+ UINT8 ReservedF;
+ UINT8 ReservedG;
+ UINT8 Sris;
+ UINT8 PcieCommonClock;
+ //For IIO Ntb
+ UINT8 NtbIndex;
+ UINT8 NtbPpd;
+ UINT8 NtbBarSizeOverride;
+ UINT8 NtbSplitBar;
+ UINT8 NtbBarSizeImBar1;
+ UINT8 NtbBarSizeImBar2;
+ UINT8 NtbBarSizeImBar2_0;
+ UINT8 NtbBarSizeImBar2_1;
+ UINT8 NtbBarSizeEmBarSZ1;
+ UINT8 NtbBarSizeEmBarSZ2;
+ UINT8 NtbBarSizeEmBarSZ2_0;
+ UINT8 NtbBarSizeEmBarSZ2_1;
+ UINT8 NtbXlinkCtlOverride;
+} UPD_IIO_PCIE_PORT_CONFIG;
+
+// IIO_PCIE_PORT_CONFIG:
+// PciePortConfiguration - Pointer to an array of PCIe port configuration structures as declared above
+// NumberOfEntries - Number of elements in the PciePortConfiguration Array
+
+typedef struct {
+ UPD_IIO_PCIE_PORT_CONFIG *ConfigurationTable;
+ UINT16 NumberOfEntries;
+} IIO_PCIE_PORT_CONFIG;
+#pragma pack()
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h b/Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h
new file mode 100644
index 0000000000..3eff6110aa
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h
@@ -0,0 +1,93 @@
+/** @file
+ System Infor Var Hearder File
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SYSTEM_INFO_VAR_INCLUDES__
+#define __SYSTEM_INFO_VAR_INCLUDES__
+
+#include <MemCommon.h>
+#include <Upi/KtiSi.h>
+#include <Pi/PiBootMode.h>
+
+#define SYS_INFO_NVRAM_VAR_NAME L"InfoVarNvramData"
+
+#pragma pack (push,1)
+
+typedef enum BootMode {
+ NormalBoot = 0, // Normal path through RC with full init, mem detection, init, training, etc.
+ // Some of these MRC specific init routines can be skipped based on MRC input params
+ // in addition to the sub-boot type (WarmBoot, WarmBootFast, etc).
+ S3Resume = 1 // S3 flow through RC. Should do the bare minimum required for S3
+ // init and be optimized for speed.
+} BootMode;
+
+//
+// This is used to determine what type of die is connected to a UPI link
+//
+typedef enum {
+ UpiConnectionTypeCpu,
+ UpiConnectionTypePcieGen4,
+ UpiConnectionTypeFpga,
+ UpiConnectionTypeMax
+} UPI_CONNECTION_TYPE;
+
+typedef struct {
+ UINT16 stackPresentBitmap[MAX_SOCKET]; ///< bitmap of present stacks per socket
+ UINT8 StackBus[MAX_SOCKET][MAX_LOGIC_IIO_STACK];///< Bus of each stack
+ UINT32 StackMmiol[MAX_SOCKET][MAX_IIO_STACK]; ///< mmiol of each IIO stack, if it works as CXL, the mmiol base is RCRBBAR
+ UINT8 SocketFirstBus[MAX_SOCKET];
+ UINT8 Socket10nmUboxBus0[MAX_SOCKET]; //10nm CPU use only
+ UINT8 SocketLastBus[MAX_SOCKET];
+ UINT8 segmentSocket[MAX_SOCKET];
+ UINT8 KtiPortCnt;
+ UINT32 socketPresentBitMap;
+ UINT32 SecondaryDieBitMap;
+ UINT32 FpgaPresentBitMap;
+ UINT32 mmCfgBase;
+ UINT32 mmCfgBaseH[MAX_SOCKET];
+ UINT32 mmCfgBaseL[MAX_SOCKET];
+ UINT8 DdrMaxCh;
+ UINT8 DdrMaxImc;
+ UINT8 DdrNumChPerMc;
+ UINT8 imcEnabled[MAX_SOCKET][MAX_IMC];
+ UINT8 mcId[MAX_SOCKET][MAX_CH];
+ MRC_MST MemSsType[MAX_SOCKET];
+ UINT32 MmioBar[MAX_SOCKET][TYPE_MAX_MMIO_BAR];
+ UINT8 HbmMaxCh;
+ UINT8 HbmMaxIoInst;
+ UINT8 HbmNumChPerMc;
+ UINT8 HbmNumChPerIo;
+ UINT32 LastCsrAddress[2];
+ UINT32 LastCsrMmioAddr;
+ UINT8 CsrCachingEnable;
+ UINT32 LastCsrMcAddress[2];
+ UINT32 LastCsrMcMmioPhyAddr;
+ UINT8 CsrPciBarCachingEnable;
+ UINT32 LastCsrPciBarAddr[2];
+ UINT64 LastCsrPciBarPhyAddr;
+ UINT32 LastSBPortId[MAX_SOCKET];
+ UPI_CONNECTION_TYPE UpiConnectionType[MAX_SOCKET];
+ BOOLEAN PostedCsrAccessAllowed; // SW is allowed to use posted CSR writes method when TRUE
+ BOOLEAN PostedWritesEnabled; // All CSR writes use posted method when TRUE, non-posted when FALSE
+ BOOLEAN DataPopulated; // CPU_CSR_ACCESS_VAR is unavailable when FALSE
+ BOOLEAN HbmSku;
+ UINT8 SocketConfig;
+ UINT8 HcxType[MAX_SOCKET];
+} CPU_CSR_ACCESS_VAR;
+
+typedef struct {
+ UINT32 MeRequestedSizeNv;
+ UINT32 MeRequestedAlignmentNv;
+ UINT32 IeRequestedSizeNv;
+ UINT32 IeRequestedAlignmentNv;
+ UINT8 SbspSocketIdNv;
+} SYS_INFO_VAR_NVRAM;
+
+#pragma pack (pop)
+
+#endif //#ifndef __SYSTEM_INFO_VAR_INCLUDES__
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h b/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
new file mode 100644
index 0000000000..0ea93e9a78
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
@@ -0,0 +1,111 @@
+/** @file
+ This file defines common equates.
+
+ @copyright
+ Copyright 2011 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UNCORE_COMMON_INCLUDES_H_
+#define _UNCORE_COMMON_INCLUDES_H_
+
+#include <MaxSocket.h>
+#include <MaxCore.h>
+#include <MaxThread.h>
+
+#ifndef V_INTEL_VID
+#define V_INTEL_VID 0x8086
+#endif
+
+#define MAX_PROCESSOR_TSEG 5
+
+// CPX CPU steppings/revisions
+#ifndef CPX_A0_CPU_STEP
+#define CPX_A0_CPU_STEP 0x0A
+#endif //#ifdef CPX_A0_CPU_STEP
+
+#ifndef CPX_A1_CPU_STEP
+#define CPX_A1_CPU_STEP 0x0B
+#endif //#ifdef CPX_A1_CPU_STEP
+
+//
+// ICX SP CPU steppings
+//
+#ifndef ICXSP_R0_CPU_STEP
+#define ICXSP_R0_CPU_STEP 0x00
+#endif
+#ifndef ICXSP_L0_CPU_STEP
+#define ICXSP_L0_CPU_STEP 0x04
+#endif
+#ifndef ICXSP_C0_CPU_STEP
+#define ICXSP_C0_CPU_STEP 0x05
+#endif
+#ifndef ICXSP_D0_CPU_STEP
+#define ICXSP_D0_CPU_STEP 0x06
+#endif
+
+#define MAX_DIE 1
+#define MAX_CPU_NUM (MAX_THREAD * MAX_CORE * MAX_DIE * MAX_SOCKET)
+
+#ifndef MAX_HA
+#define MAX_HA 2
+#endif
+
+// If you change this, please also update MAX_IMC in Library\ProcMemInit\Include\MemHostChip.h
+// If you change this, please also update MAX_IMC in Library\ProcMemInit\Platform\Include\MemDefaults.h
+#ifndef MAX_IMC
+#define MAX_IMC 2 // Maximum memory controllers per socket
+#endif
+
+// If you change this, please also update MAX_MC_CH in Library\ProcMemInit\Include\MemHostChip.h
+// If you change this, please also update MAX_IMC in Library\ProcMemInit\Platform\Include\MemDefaults.h
+#ifndef MAX_MC_CH
+#define MAX_MC_CH 3 // Max number of channels per MC (3 for EP)
+#endif
+
+// If you change this, please also update MAX_CH in Library\ProcMemInit\Include\MemHostChip.h
+// If you change this, please also update MAX_IMC in Library\ProcMemInit\Platform\Include\MemDefaults.h
+#ifndef MAX_CH
+#define MAX_CH ((MAX_IMC)*(MAX_MC_CH)) // Max channels per socket (worst case EP * EX combination = 16)
+#endif
+
+// If you change this, please also update MAX_DIMM in Library\ProcMemInit\Include\MemHostChip.h
+#ifndef MAX_DIMM
+#define MAX_DIMM 2 // Max DIMM per channel
+#endif
+
+// If you change this, please also update MC_MAX_NODE in Library\ProcMemInit\Include\MemHostChip.h
+#ifndef MC_MAX_NODE
+#define MC_MAX_NODE (MAX_SOCKET * MAX_IMC) // Max number of memory nodes
+#endif
+
+#ifndef TOTAL_CB3_DEVICES
+#define TOTAL_CB3_DEVICES 64 // IOAT_TOTAL_FUNCS * MAX_SOCKET. Note: this covers up to 8S.
+#endif
+
+#ifndef MaxIIO
+#define MaxIIO MAX_SOCKET
+#endif
+
+#ifndef TOTAL_IIO_STACKS
+#define TOTAL_IIO_STACKS 48 // MAX_SOCKET * MAX_IIO_STACK. Not reflect architecture but only sysHost structure!
+#endif
+
+#ifndef NUMBER_NTB_PORTS_PER_SOCKET
+#define NUMBER_NTB_PORTS_PER_SOCKET 5
+#endif // #ifndef NUMBER_NTB_PORTS_PER_SOCKET
+
+#ifndef MAX_DEVHIDE_REGS_PER_SYSTEM
+ #if MaxIIO > 4
+ #define MAX_DEVHIDE_REGS_PER_SYSTEM 512 // MAX_DEVHIDE_REGS_PER_SOCKET * MaxIIO
+ #else
+ #define MAX_DEVHIDE_REGS_PER_SYSTEM 256 // MAX_DEVHIDE_REGS_PER_SOCKET * MaxIIO
+ #endif
+#endif
+
+#ifndef MAX_B2P_MAILBOX_GROUPS
+#define MAX_B2P_MAILBOX_GROUPS 32
+#endif // !MAX_B2P_MAILBOX_GROUPS
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h b/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h
new file mode 100644
index 0000000000..67e0acd2ca
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h
@@ -0,0 +1,36 @@
+/** @file
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _KTI_DISCOVERY_H_
+#define _KTI_DISCOVERY_H_
+
+#include "DataTypes.h"
+#include <Upi/KtiSi.h>
+
+#pragma pack(1)
+
+//
+// Generic Data structure to describe Link Exchange Parameter (LEP) info
+//
+typedef struct {
+ UINT32 Valid : 1; ///< TRUE, if the link is valid (i.e trained successfully for low speed, no validation override that disables it)
+ UINT32 PeerSocId : 3; ///< Socket ID
+ UINT32 PeerSocType : 2; ///< Socket Type
+ UINT32 PeerPort : 4; ///< Port of the peer socket
+ UINT32 DualLink : 1; ///< TRUE, if there is a second link to the same neighbor
+ UINT32 TwoSkt3Link : 1; ///< TRUE, if there is a second and third link to the same neighbor
+ UINT32 TwoSkt4Link : 1; ///< TRUE, if there are 4 links between 2 sockets
+ UINT32 DualLinkIndex : 3; ///< Index of the second link that is connected to the same immediate neighbor
+ UINT32 DisallowRouteThru : 1; ///< TRUE if the link is not allowed to configure as route through traffic
+ UINT32 SpokeOfPinwheel : 1; ///< TRUE if the link is chosen as spoke of pinwheel
+ UINT32 Rsvd1 : 14;
+} KTI_LINK_DATA;
+
+#pragma pack()
+
+#endif // _KTI_DISCOVERY_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h b/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h
new file mode 100644
index 0000000000..cf558b3d34
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h
@@ -0,0 +1,304 @@
+/** @file
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+// Definition Flag:
+// 1. KTI_SW_SIMULATION -> run with KTIRC Simulation
+// 2. IA32 -> run with IA32 mode
+
+
+#ifndef _KTI_HOST_H_
+#define _KTI_HOST_H_
+
+#include "DataTypes.h"
+#include "PlatformHost.h"
+#include <Upi/KtiSi.h>
+#include <Upi/KtiDisc.h>
+#include "MemHostChipCommon.h"
+
+#pragma pack(1)
+
+/*********************************************************
+ KTIRC Host Structure Related
+*********************************************************/
+
+typedef enum {
+ KTI_LINK0 = 0x0,
+ KTI_LINK1,
+ KTI_LINK2,
+ KTI_LINK3,
+ KTI_LINK4,
+ KTI_LINK5
+} KTI_LOGIC_LINK;
+
+typedef struct {
+
+ UINT8 Reserved1;
+ UINT8 Reserved2;
+ UINT8 Reserved3;
+ UINT8 Reserved4;
+ UINT8 Reserved5;
+ UINT8 Reserved6;
+ UINT8 Reserved7;
+ UINT8 Reserved8;
+ UINT8 Reserved9;
+ UINT8 Reserved10;
+ UINT8 Reserved11;
+ UINT8 Reserved12;
+ UINT8 Reserved13;
+ UINT8 Reserved14;
+ UINT8 Reserved15;
+ UINT8 Reserved16;
+ UINT8 Reserved17;
+ UINT8 Reserved18;
+ UINT8 Reserved19;
+ UINT8 Reserved20;
+ UINT8 Reserved21;
+ UINT8 Reserved22;
+ UINT8 Reserved23;
+ UINT8 Reserved24;
+ UINT8 Reserved25;
+ UINT8 Reserved26;
+ UINT8 Reserved27;
+ UINT8 Reserved28;
+ UINT8 Reserved29;
+
+ UINT8 Reserved30;
+ UINT8 Reserved31;
+ UINT8 Reserved32;
+ UINT8 Reserved33;
+ UINT8 Reserved34;
+ UINT8 Reserved35;
+ UINT8 Reserved36;
+ UINT8 Reserved37;
+ UINT32 Reserved38;
+
+ UINT8 Reserved39;
+ UINT8 Reserved40;
+
+} KTI_RESERVED_3;
+
+typedef struct {
+ UINT32 Reserved1:2;
+ UINT32 Reserved2:2;
+ UINT32 Reserved3:2;
+ UINT32 Rsvd1 : 26;
+} KTI_RESERVED_1;
+
+typedef struct {
+ UINT8 Reserved4 : 2;
+ UINT8 Rsvd1 : 6;
+} KTI_RESERVED_2;
+
+typedef struct {
+ KTI_RESERVED_1 Link[MAX_FW_KTI_PORTS];
+ KTI_RESERVED_2 Phy[MAX_FW_KTI_PORTS];
+} KTI_RESERVED_4;
+
+//
+// PHY settings that are system dependent. Need 1 of these for each socket/link/freq.
+//
+
+typedef struct {
+ UINT8 SocketID;
+ UINT8 AllLanesUseSameTxeq;
+ UINT8 Freq;
+ UINT32 Link;
+ UINT32 TXEQL[20];
+ UINT32 CTLEPEAK[5];
+} PER_LANE_EPARAM_LINK_INFO;
+
+//
+// This is for full speed mode, all lanes have the same TXEQ setting
+//
+typedef struct {
+ UINT8 SocketID;
+ UINT8 Freq;
+ UINT32 Link;
+ UINT32 AllLanesTXEQ;
+ UINT8 CTLEPEAK;
+} ALL_LANES_EPARAM_LINK_INFO;
+
+#define ADAPTIVE_CTLE 0x3f
+
+typedef enum {
+ TYPE_UBOX = 0,
+ TYPE_UBOX_IIO,
+ TYPE_MCP,
+ TYPE_FPGA,
+ TYPE_HFI,
+ TYPE_NAC,
+ TYPE_GRAPHICS,
+ TYPE_DINO,
+ TYPE_RESERVED,
+ TYPE_DISABLED, // This item must be prior to stack specific disable types
+ TYPE_UBOX_IIO_DIS,
+ TYPE_MCP_DIS,
+ TYPE_FPGA_DIS,
+ TYPE_HFI_DIS,
+ TYPE_NAC_DIS,
+ TYPE_GRAPHICS_DIS,
+ TYPE_DINO_DIS,
+ TYPE_RESERVED_DIS,
+ TYPE_NONE
+} STACK_TYPE;
+
+//
+// Link layer settings, per link
+//
+typedef struct {
+ UINT8 KtiPortDisable:1; // TRUE - Port disabled; FALSE- Port enabled (default)
+ UINT8 KtiLinkVnaOverride:7; // Numeric value 0x00-0x7f
+ UINT8 Rsvd:8;
+} KTI_CPU_LINK_SETTING;
+
+
+//
+// Phy general setting, per link
+//
+typedef struct {
+ UINT32 KtiLinkSpeed:3;
+ UINT32 Rsvd:29;
+} KTI_CPU_PHY_SETTING;
+
+//
+// Per CPU setting
+//
+typedef struct {
+ KTI_CPU_LINK_SETTING Link[MAX_FW_KTI_PORTS];
+ KTI_CPU_PHY_SETTING Phy[MAX_FW_KTI_PORTS];
+} KTI_CPU_SETTING;
+
+//
+// KTIRC input structure
+//
+typedef struct {
+ //
+ // Protocol layer and other general options; note that "Auto" is provided only options whose value will change depending
+ // on the topology, not for all options.
+ //
+
+ //
+ // Indicates the ratio of Bus/MMIOL/IO resource to be allocated for each CPU's IIO.
+ // Value 0 indicates, that CPU is not relevant for the system. If resource is
+ // requested for an CPU that is not currently populated, KTIRC will assume
+ // that the ratio is 0 for that CPU and won't allocate any resources for it.
+ // If resource is not requested for an CPU that is populated, KTIRC will force
+ // the ratio for that CPU to 1.
+ //
+
+
+ UINT8 BusRatio[MAX_SOCKET];
+
+ UINT8 D2KCreditConfig; // 1 - Min, 2 - Med (Default), 3- Max
+ UINT8 SnoopThrottleConfig; // 0 - Disabled (Default), 1 - Min, 2 - Med, 3- Max
+ UINT8 SnoopAllCores; // 0 - Disabled, 1 - Enabled, 2 - Auto
+ UINT8 LegacyVgaSoc; // Socket that claims the legacy VGA range; valid values are 0-7; 0 is default.
+ UINT8 LegacyVgaStack; // Stack that claims the legacy VGA range; valid values are 0-3; 0 is default.
+ UINT8 ColdResetRequestStart;
+ UINT8 P2pRelaxedOrdering; // 0 - Disable(default) 1 - Enable
+ UINT8 DebugPrintLevel; // Bit 0 - Fatal, Bit1 - Warning, Bit2 - Info Summary; Bit 3 - Info detailed. 1 - Enable; 0 - Disable
+ UINT8 SncEn; // 0 - Disable, (default) 1 - Enable
+ UINT8 UmaClustering; // 0 - Disable, 2 - 2Clusters UMA, 4 - 4Clusters UMA
+ UINT8 IoDcMode; // 0 - Disable IODC, 1 - AUTO (default), 2 - IODC_EN_REM_INVITOM_PUSH, 3 - IODC_EN_REM_INVITOM_ALLOCFLOW
+ // 4 - IODC_EN_REM_INVITOM_ALLOC_NONALLOC, 5 - IODC_EN_REM_INVITOM_AND_WCILF
+ UINT8 DegradePrecedence; // Use DEGRADE_PRECEDENCE definition; TOPOLOGY_PRECEDENCE is default
+ UINT8 Degrade4SPreference;// 4S1LFullConnect topology is default; another option is 4S2LRing topology.
+ UINT8 DirectoryModeEn; // 0 - Disable; 1 - Enable (default)
+ UINT8 XptPrefetchEn; // Xpt Prefetch : 1 - Enable; 0 - Disable; 2 - Auto (default)
+ UINT8 KtiPrefetchEn; // Kti Prefetch : 1 - Enable; 0 - Disable; 2 - Auto (default)
+ UINT8 XptRemotePrefetchEn; // Xpt Remote Prefetch : 1 - Enable; 0 - Disable; 2 - Auto (default) (ICX only)
+ UINT8 RdCurForXptPrefetchEn; // RdCur for XPT Prefetch : 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiFpgaEnable[MAX_SOCKET]; // Indicate if should enable Fpga device found in this socket : 0 - Disable, 1 - Enable, 2- Auto
+ UINT8 DdrtQosMode; // DDRT QoS Feature: 0 - Disable (default), 1 - M2M QoS Enable, Cha QoS Disable
+ // 2 - M2M QoS Enable, Cha QoS Enable
+
+ //
+ // Phy/Link Layer Options (System-wide and per socket)
+ //
+ UINT8 KtiLinkSpeedMode; // Link speed mode selection; 0 - Slow Speed; 1- Full Speed (default)
+ UINT8 KtiLinkSpeed; // Use KTI_LINKSPEED definition
+ UINT8 KtiAdaptationEn; // 0 - Disable, 1 - Enable
+ UINT8 KtiAdaptationSpeed; // Use KTI_LINK_SPEED definition; MAX_KTI_LINK_SPEED - Auto (i.e BIOS choosen speed)
+ UINT8 KtiLinkL0pEn; // 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiLinkL1En; // 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiFailoverEn; // 0 - Disable, 1 - Enable, 2- Auto (default)
+ UINT8 KtiLbEn; // 0 - Disable(default), 1 - Enable
+ UINT8 KtiCrcMode; // CRC_MODE_16BIT, CRC_MODE_ROLLING_32BIT, CRC_MODE_AUTO or CRC_MODE_PER_LINK
+
+ UINT8 KtiCpuSktHotPlugEn; // 0 - Disable (default), 1 - Enable
+ UINT8 KtiCpuSktHotPlugTopology; // 0 - 4S Topology (default), 1 - 8S Topology
+ UINT8 KtiSkuMismatchCheck; // 0 - No, 1 - Yes (default)
+ UINT8 IrqThreshold; // IRQ Threshold setting
+ UINT8 TorThresLoctoremNorm; // TOR threshold - Loctorem threshold normal
+ UINT8 TorThresLoctoremEmpty; // TOR threshold - Loctorem threshold empty
+ UINT8 MbeBwCal; // 0 - Linear, 1 - Biased, 2 - Legacy, 3 - AUTO (default = Linear)
+ UINT8 TscSyncEn; // TSC sync in sockets: 0 - Disable, 1 - Enable, 2 - AUTO (Default)
+ UINT8 StaleAtoSOptEn; // HA A to S directory optimization: 1 - Enable; 0 - Disable; 2 - Auto (Default)
+ UINT8 LLCDeadLineAlloc; // LLC dead line alloc: 1 - Enable(Default); 0 - Disable
+ UINT8 SplitLock;
+ UINT8 ColdResetRequestEnd;
+
+ //
+ // Phy/Link Layer Options (per Port)
+ //
+ KTI_CPU_SETTING PhyLinkPerPortSetting[MAX_SOCKET];
+
+
+ UINT8 mmCfgBase; ///< MMCFG Base address, must be 64MB (SKX, HSX, BDX) / 256MB (GROVEPORT) aligned. Options: {0:1G, 1:1.5G, 2:1.75G, 3:2G, 4:2.25G, 5:3G, 6: Auto}
+ UINT8 mmCfgSize; ///< MMCFG Size address, must be 64M, 128M or 256M. Options: {0:64M, 1:128M, 2:256M, 3:512M, 4:1G, 5:2G, 6: Auto}
+ UINT32 mmiolBase; ///< MMIOL Base address, must be 64MB aligned
+ UINT32 mmiolSize; ///< MMIOL Size address
+ UINT32 mmiohBase; ///< Address bits above 4GB, i,e, the hex value here is address Bit[45:32] for SKX family, Bit[51:32] for ICX-SP
+ UINT8 CpuPaLimit; ///< Limits the max address to 46bits. This will take precedence over mmiohBase
+ UINT8 lowGap;
+ UINT8 highGap;
+ UINT16 mmiohSize; ////<< Number of 1GB contiguous regions to be assigned for MMIOH space per CPU. Range 1-1024
+ UINT8 isocEn; ///< 1 - Enable; 0 - Disable (BIOS will force this for 4S)
+ UINT8 dcaEn; ///< 1 - Enable; 0 - Disable
+
+ /*
+ BoardTypeBitmask:
+ Bits[3:0] - Socket0
+ Bits[7:4] - Socket1
+ Bits[11:8] - Socket2
+ Bits[15:12] - Socket3
+ Bits[19:16] - Socket4
+ Bits[23:20] - Socket5
+ Bits[27:24] - Socket6
+ Bits[31:28] - Socket7
+
+ Within each Socket-specific field, bits mean:
+ Bit0 = CPU_TYPE_STD support; always 1 on Socket0
+ Bit1 = CPU_TYPE_F support
+ Bit2 = CPU_TYPE_P support
+ Bit3 = reserved
+ */
+ UINT32 BoardTypeBitmask;
+ UINT32 AllLanesPtr;
+ UINT32 PerLanePtr;
+ UINT32 AllLanesSizeOfTable;
+ UINT32 PerLaneSizeOfTable;
+ UINT32 WaitTimeForPSBP; // the wait time in units of 1000us for PBSP to check in.
+ BOOLEAN IsKtiNvramDataReady;
+ UINT32 OemHookPostTopologyDiscovery;
+ UINT32 OemGetResourceMapUpdate;
+ UINT32 OemGetAdaptedEqSettings;
+ UINT32 OemCheckCpuPartsChangeSwap;
+
+ BOOLEAN WaSerializationEn; // Enable BIOS serialization WA by PcdWaSerializationEn
+ KTI_RESERVED_3 Reserved166;
+ KTI_RESERVED_4 Reserved167[MAX_SOCKET];
+ UINT8 KtiInEnableMktme; // 0 - Disabled; 1 - Enabled; MkTme status decides D2Kti feature state
+ UINT32 CFRImagePtr;
+ UINT8 S3mCFRCommit; // 0 - Disable S3m CFR flow. 1 - Provision S3m CFR but not Commit. 2 - Provsion and Commit S3M CFR.
+ UINT8 PucodeCFRCommit; // 0 - Disable Pucode CFR flow. 1 - Provision Pucode CFR but not Commit. 2 - Provsion and Commit Pucode CFR.
+} KTI_HOST_IN;
+
+#pragma pack()
+
+#endif // _KTI_HOST_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h b/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h
new file mode 100644
index 0000000000..c0653bfae0
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h
@@ -0,0 +1,32 @@
+/** @file
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _KTI_SI_H_
+#define _KTI_SI_H_
+
+#include "DataTypes.h"
+
+#if (MAX_SOCKET == 1)
+ #define MAX_FW_KTI_PORTS 3 // Maximum KTI PORTS to be used in structure definition.
+#else
+ #define MAX_FW_KTI_PORTS 6 // Maximum KTI PORTS to be used in structure definition
+#endif //(MAX_SOCKET == 1)
+
+#define IIO_PSTACK0 1
+#define IIO_PSTACK1 2
+#define IIO_PSTACK2 3
+#define IIO_PSTACK3 4
+#define IIO_PSTACK4 5
+
+#define UBOX_STACK MAX_LOGIC_IIO_STACK - 1 //use stack 13 for ubox
+
+#define IIO_RESERVED_1 6
+
+#define MAX_CHA_MAP 4
+
+#endif // _KTI_SI_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h b/Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h
new file mode 100644
index 0000000000..e53aeb285b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h
@@ -0,0 +1,291 @@
+/** @file
+ Unified Silicon Register Access Types
+
+ @copyright
+ Copyright 2011 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __USRA_ACCESS_TYPE_H__
+#define __USRA_ACCESS_TYPE_H__
+
+typedef enum {
+ AddrTypePCIE = 0,
+ AddrTypePCIEBLK,
+ AddrTypeCSR,
+ AddrTypePCIIO,
+ AddrTypeCSRMEM,
+ AddrTypeCSRCFG,
+ AddrTypeMaximum
+} USRA_ADDR_TYPE;
+
+typedef enum {
+ CsrBoxInst = 0,
+ CsrMcId,
+ CsrChId,
+ CsrIoId,
+ InstTypeMax
+} CSR_INSTANCE_TYPE;
+
+typedef enum {
+ UsraWidth8 = 0,
+ UsraWidth16,
+ UsraWidth32,
+ UsraWidth64,
+ UsraWidthFifo8,
+ UsraWidthFifo16,
+ UsraWidthFifo32,
+ UsraWidthFifo64,
+ UsraWidthFill8,
+ UsraWidthFill16,
+ UsraWidthFill32,
+ UsraWidthFill64,
+ UsraWidthMaximum
+} USRA_ACCESS_WIDTH;
+
+#define USRA_ENABLE 1;
+#define USRA_DISABLE 0;
+
+#define PCI_CONFIGURATION_ADDRESS_PORT 0xCF8
+#define PCI_CONFIGURATION_DATA_PORT 0xCFC
+
+#pragma pack (1)
+
+typedef struct {
+ UINT32 RawData32[2]; // RawData of two UINT32 type, place holder
+ UINT32 AddrType:8; // Address type: CSR, PCIE, MMIO, IO, SMBus ...
+ UINT32 AccessWidth:4; // The Access width for 8, 16,32,64 -bit access
+ UINT32 FastBootEn:1; // Fast Boot Flag, can be used to log register access trace for fast boot
+ UINT32 S3Enable:1; // S3 Enable bit, when enabled, it will save the write to script to support S3
+ UINT32 HptrType:1; // Host Pointer type, below or above 4GB
+ UINT32 ConvertedType:1; // The address type was from converted type, use this field for address migration support
+ UINT32 RFU3:16; // Reserved for User use or Future Use
+
+ UINT32 HostPtr:32; // The Host Pointer, to point to Attribute buffer etc.
+} ADDR_ATTRIBUTE_TYPE;
+
+typedef struct {
+ UINT32 Offset:12; // The PCIE Register Offset
+ UINT32 Func:3; // The PCIE Function
+ UINT32 Dev:5; // The PCIE Device
+ UINT32 Bus:8; // The PCIE Bus
+ UINT32 RFU1:4; // Reserved for User use or Future Use
+
+ UINT32 Seg:16; // The PCI Segment
+ UINT32 Count:16; // Access Count
+
+} USRA_PCIE_ADDR_TYPE;
+
+#define BUS_DEV_FUN_OFFSET_MASK 0x0FFFFFFF
+
+typedef struct {
+ UINT32 Offset; // This Offset occupies 32 bits. It's platform code's responsibilty to define the meaning of specific
+ // bits and use them accordingly.
+ UINT32 InstId:8; // The Box Instance, 0 based, Index/Port within the box, Set Index as 0 if the box has only one instances
+ UINT32 SocketId:8; // The Socket Id
+ UINT32 InstType:8; // The Instance Type
+ UINT32 RFU:8; // Reserved for User use or Future Ues
+} USRA_CSR_ADDR_TYPE;
+
+typedef struct {
+ UINT32 Offset:8; // The PCIIO Register Offset
+ UINT32 Func:3; // The PCIIO Function
+ UINT32 Dev:5; // The PCIIO Device
+ UINT32 Bus:8; // The PCIIO Bus
+ UINT32 RFU:7; // Reserved for User use or Future Use
+ UINT32 EnableBit:1; // The PCIIO Register Enable Bit
+} USRA_PCIIO_ADDR_TYPE;
+
+typedef struct {
+ UINT32 Offset:32; // The register offset
+ UINT32 SocketId:8; // The socket ID
+ UINT32 MemBarId:8; // The ID of the BAR
+ UINT32 High64Split:1; // Move address up to access top of 64 bit register
+ UINT32 Reserved:15; // Reserved for User use or Future Use
+} USRA_CSR_MEM_ADDR_TYPE;
+
+typedef struct {
+ UINT32 Offset:32; // The register offset
+ UINT32 SocketId:7; // The socket ID
+ UINT32 Bus:8; // Bus
+ UINT32 Device:8; // Device
+ UINT32 Function:8; // Function
+ UINT32 High64Split:1; // Move address up to access top of 64 bit register
+} USRA_CSR_CFG_ADDR_TYPE;
+
+#pragma pack()
+
+typedef union {
+ UINT32 dwRawData[4];
+ ADDR_ATTRIBUTE_TYPE Attribute; // The address attribute type.
+ USRA_PCIE_ADDR_TYPE Pcie;
+ USRA_PCIE_ADDR_TYPE PcieBlk;
+ USRA_CSR_ADDR_TYPE Csr;
+ USRA_PCIIO_ADDR_TYPE PciIo;
+ USRA_CSR_MEM_ADDR_TYPE CsrMem;
+ USRA_CSR_CFG_ADDR_TYPE CsrCfg;
+} USRA_ADDRESS;
+
+//
+// Assemble macro for USRA_PCIE_ADDR_TYPE
+//
+#define USRA_PCIE_SEG_ADDRESS(Address, WIDTH, SEG, BUS, DEV, FUNC, OFFSET) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypePCIE; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Seg = (UINT32)(SEG); \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Bus = (UINT32)(BUS) & 0xFF; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Dev = (UINT32)(DEV) & 0x1F; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Func = (UINT32)(FUNC) & 0x07; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Offset = (UINT32)(OFFSET) & 0x0FFF
+
+ //
+ // Assemble macro for USRA_BDFO_ADDR_TYPE
+ //
+#define USRA_PCIE_SEG_BDFO_ADDRESS(Address, WIDTH, SEG, BDFO) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypePCIE; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Seg = (UINT32)(SEG); \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Bus = (UINT32)(BDFO >> 20) & 0xFF; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Dev = (UINT32)(BDFO >> 15) & 0x1F; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Func = (UINT32)(BDFO >> 12) & 0x07; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Offset = (UINT32)(BDFO) & 0x0FFF
+
+ //
+ // Assemble macro for USRA_PCIE_SEG_LIB_ADDR_TYPE
+ //
+#define USRA_PCIE_SEG_LIB_ADDRESS(Address, PCISEGADDR, WIDTH) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypePCIE; \
+ ((USRA_ADDRESS *)(&Address))->Pcie.Seg = (UINT32)((PCISEGADDR >> 32) & 0x0000FFFF); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.RawData32[0] = (UINT32)(PCISEGADDR & BUS_DEV_FUN_OFFSET_MASK)
+
+ //
+ // Assemble macro for USRA_PCIE_BLK_ADDR_TYPE
+ //
+#define USRA_BLOCK_PCIE_ADDRESS(Address, WIDTH, COUNT, SEG, BUS, DEV, FUNC, OFFSET) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypePCIEBLK; \
+ ((USRA_ADDRESS *)(&Address))->PcieBlk.Count = (UINT32)COUNT; \
+ ((USRA_ADDRESS *)(&Address))->PcieBlk.Seg = (UINT32)SEG; \
+ ((USRA_ADDRESS *)(&Address))->PcieBlk.Bus = (UINT32)(BUS) & 0xFF; \
+ ((USRA_ADDRESS *)(&Address))->PcieBlk.Dev = (UINT32)(DEV) & 0x1F; \
+ ((USRA_ADDRESS *)(&Address))->PcieBlk.Func = (UINT32)(FUNC) & 0x07; \
+ ((USRA_ADDRESS *)(&Address))->PcieBlk.Offset = (UINT32)(OFFSET) & 0x0FFF
+ //
+ // Assemble macro for USRA_PCIE_SEG_ADDR_TYPE
+ //
+#define USRA_PCIE_ADDRESS(Address, WIDTH, BUS, DEV, FUNC, OFFSET) \
+ USRA_PCIE_SEG_ADDRESS(Address, WIDTH, 0, BUS, DEV, FUNC, OFFSET)
+
+ //
+ // Assemble macro for USRA CSR common Address
+ //
+#define USRA_CSR_COMMON_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Csr.SocketId = SOCKETID; \
+ ((USRA_ADDRESS *)(&Address))->Csr.InstId = INSTID; \
+ ((USRA_ADDRESS *)(&Address))->Csr.Offset = CSROFFSET
+
+ //
+ // Assemble macro for address type CSR
+ //
+#define USRA_CSR_OFFSET_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET) \
+ USRA_CSR_COMMON_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET); \
+ ((USRA_ADDRESS *)(&Address))->Csr.InstType = CsrBoxInst; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypeCSR
+
+#define USRA_CSR_MCID_OFFSET_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET) \
+ USRA_CSR_COMMON_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET); \
+ ((USRA_ADDRESS *)(&Address))->Csr.InstType = CsrMcId; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypeCSR
+
+#define USRA_CSR_CHID_OFFSET_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET) \
+ USRA_CSR_COMMON_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET); \
+ ((USRA_ADDRESS *)(&Address))->Csr.InstType = CsrChId; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypeCSR
+
+#define USRA_CSR_IOID_OFFSET_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET) \
+ USRA_CSR_COMMON_ADDRESS(Address, SOCKETID, INSTID, CSROFFSET); \
+ ((USRA_ADDRESS *)(&Address))->Csr.InstType = CsrIoId; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypeCSR
+
+ //
+ // Assemble macro for USRA_PCIIO_ADDR_TYPE
+ //
+#define USRA_PCI_IO_ADDRESS(Address, WIDTH, BUS, DEV, FUNC, OFFSET) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypePCIIO; \
+ ((USRA_ADDRESS *)(&Address))->PciIo.Bus = (UINT32)(BUS) & 0xFF; \
+ ((USRA_ADDRESS *)(&Address))->PciIo.Dev = (UINT32)(DEV) & 0x1F; \
+ ((USRA_ADDRESS *)(&Address))->PciIo.Func = (UINT32)(FUNC) & 0x07; \
+ ((USRA_ADDRESS *)(&Address))->PciIo.Offset = (UINT32)(OFFSET) & 0xFF; \
+ ((USRA_ADDRESS *)(&Address))->PciIo.EnableBit = 1
+
+ //
+ // Assemble macro for USRA_BDFO_PCIIO_ADDR_TYPE
+ //
+#define USRA_PCI_IO_BDFO_ADDRESS(Address, WIDTH, BDFO) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypePCIIO; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.RawData32[0] = (UINT32)(BDFO) & 0xFFFFFF; \
+ ((USRA_ADDRESS *)(&Address))->PciIo.EnableBit = 1
+
+ //
+ // Assemble macro for USRA_CSR_MMIO_ADDR_TYPE
+ //
+#define USRA_CSR_MEM_ADDRESS(Address, SOCKETID, MEMBARID, OFFSET, WIDTH) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypeCSRMEM; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->CsrMem.SocketId = SOCKETID; \
+ ((USRA_ADDRESS *)(&Address))->CsrMem.MemBarId = MEMBARID; \
+ ((USRA_ADDRESS *)(&Address))->CsrMem.Offset = OFFSET; \
+ ((USRA_ADDRESS *)(&Address))->CsrMem.High64Split = 0;
+
+ //
+ // Assemble macro for USRA_CSR_CFG_ADDR_TYPE
+ //
+#define USRA_CSR_CFG_ADDRESS(Address, SOCKETID, BUS, DEVICE, FUNCTION, OFFSET, WIDTH) \
+ USRA_ZERO_ADDRESS(Address); \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AddrType = AddrTypeCSRCFG; \
+ ((USRA_ADDRESS *)(&Address))->Attribute.AccessWidth = WIDTH; \
+ ((USRA_ADDRESS *)(&Address))->CsrCfg.SocketId = SOCKETID; \
+ ((USRA_ADDRESS *)(&Address))->CsrCfg.Bus = BUS; \
+ ((USRA_ADDRESS *)(&Address))->CsrCfg.Device = DEVICE; \
+ ((USRA_ADDRESS *)(&Address))->CsrCfg.Function = Function; \
+ ((USRA_ADDRESS *)(&Address))->CsrCfg.Offset = OFFSET; \
+ ((USRA_ADDRESS *)(&Address))->CsrCfg.High64Split = 0;
+
+ //
+ // Assemble macro for ZERO_USRA ADDRESS
+ //
+#define USRA_ZERO_ADDRESS(Address) \
+ ((UINT32 *)&Address)[3] = (UINT32)0; \
+ ((UINT32 *)&Address)[2] = (UINT32)0; \
+ ((UINT32 *)&Address)[1] = (UINT32)0; \
+ ((UINT32 *)&Address)[0] = (UINT32)0
+
+ //
+ // Assemble macro for ZERO_ADDR_TYPE
+ //
+#define USRA_ZERO_ADDRESS_TYPE(Address, AddressType) \
+ ((UINT32 *)&Address)[3] = (UINT32)0; \
+ ((UINT32 *)&Address)[2] = (UINT32)((AddressType) & 0x0FF); \
+ ((UINT32 *)&Address)[1] = (UINT32)0; \
+ ((UINT32 *)&Address)[0] = (UINT32)0
+
+#define USRA_ADDRESS_COPY(DestAddrPtr, SourceAddrPtr) \
+ ((UINT32 *)DestAddrPtr)[3] = ((UINT32 *)SourceAddrPtr)[3]; \
+ ((UINT32 *)DestAddrPtr)[2] = ((UINT32 *)SourceAddrPtr)[2]; \
+ ((UINT32 *)DestAddrPtr)[1] = ((UINT32 *)SourceAddrPtr)[1]; \
+ ((UINT32 *)DestAddrPtr)[0] = ((UINT32 *)SourceAddrPtr)[0];
+
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h
new file mode 100644
index 0000000000..eb4bd92a1d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h
@@ -0,0 +1,36 @@
+/** @file
+ DataTypes.h
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _datatypes_h
+#define _datatypes_h
+
+#include <Base.h>
+
+typedef struct u64_struct {
+ UINT32 lo;
+ UINT32 hi;
+} UINT64_STRUCT, *PUINT64_STRUCT;
+
+typedef union {
+ struct {
+ UINT32 Low;
+ UINT32 High;
+ } Data32;
+ UINT64 Data;
+} UINT64_DATA;
+
+
+typedef struct u128_struct {
+ UINT32 one;
+ UINT32 two;
+ UINT32 three;
+ UINT32 four;
+} UINT128;
+
+#endif // _datatypes_h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h
new file mode 100644
index 0000000000..8eaea40f72
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h
@@ -0,0 +1,1051 @@
+/** @file
+ MemHost.h
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _memhost_h
+#define _memhost_h
+
+#include <Ppi/MemoryPolicyPpi.h>
+#include "DataTypes.h"
+#include "PlatformHost.h"
+#include "MemRegs.h"
+#include "MemDefaults.h"
+#include "NGNDimmPlatformCfgData.h"
+#include "MrcCommonTypes.h"
+#include "MemHostChipCommon.h"
+#include <MemCommon.h>
+#include <PiPei.h>
+#include <Memory/Ddr4SpdRegisters.h>
+
+#define RESERVED_2 2
+
+typedef struct TrainingStepDoneStruct {
+ UINT8 DramRxEq : 1;
+ UINT8 HostFlyBy : 1;
+ UINT8 TxVref : 1;
+ UINT8 DqSwzDone : 1;
+ UINT8 Reserved : 4;
+} TRAINING_STEP_DONE_STRUCT;
+
+#define CADB_MUX_MAX 4
+
+#define MAX_BITS_IN_BYTE 8 // BITS per byte
+#define MAX_BITS_IN_DWORD 32 // BITS per dword
+#define BITS_PER_NIBBLE 4
+#define MAX_NIBBLES_PER_BYTE 2
+#define INDEX_NIBBLE0 0
+#define INDEX_NIBBLE1 1
+
+//
+// DDR4 DB has 4 DFE coeff taps
+//
+#define DB_DFE_TAP 4
+
+#pragma pack(push, 1)
+
+///
+/// Rand per channel information
+//
+typedef struct RankCh {
+ UINT8 dimm; ///< DIMM this rank belongs to
+ UINT8 rank; ///< Rank on the DIMM (0-3)
+ UINT8 Roundtrip;
+ UINT8 IOLatency;
+} CHANNEL_RANKS;
+
+typedef enum {
+INVALID_BUS,
+SMBUS,
+EMRS,
+CPGC,
+SAD,
+} BUS_TYPE;
+
+//
+// -----------------------------------------------------------------------------
+///
+/// Common DRAM timings
+///
+struct comTime {
+ UINT8 nCL;
+ UINT8 nWR;
+ UINT8 nRCD;
+ UINT8 nAL;
+ UINT8 nRP;
+ UINT8 nRC;
+ UINT8 nWTR;
+ UINT8 nWTR_L;
+ UINT8 nRAS;
+ UINT8 nRTP;
+ UINT8 nFAW;
+ UINT8 nRRD;
+ UINT8 nRRD_L;
+ UINT8 nWL;
+ UINT16 nRFC;
+ UINT32 tCL;
+ UINT16 tRCD;
+ UINT16 tRP;
+ UINT16 tRC;
+ UINT16 tRFC;
+ UINT16 tRRD;
+ UINT16 tRRD_L;
+ UINT16 tRAS;
+ UINT16 tCCD;
+ UINT16 tCCD_WR;
+ UINT16 tCCD_L;
+ UINT16 tCCD_WR_L;
+ UINT64 casSup;
+ UINT8 casSupRange;
+}; //struct comTime
+
+//
+// Only applicable for x16 devices where 2 strobes are within a single DRAM device
+//
+typedef struct _X16_MAPPING {
+ UINT8 PairLogical[MAX_STROBE/2]; ///< Identifies logical strobe within the same DRAM device
+ BOOLEAN IsLow[MAX_STROBE/2]; ///< TRUE: represents the current logical strobe is connected to DQSL
+ ///< FALSE: represents the current logical strobe is connected to DQSU
+} X16_MAPPING;
+
+//
+// Packed bit field structure for storing MR1 RX EQ bits
+//
+typedef struct {
+ UINT32 Strobe0 : 3; //bits 0...2
+ UINT32 Strobe1 : 3; //bits 3...5
+ UINT32 Strobe2 : 3; //bits 6...8
+ UINT32 Strobe3 : 3; //bits 9...11
+ UINT32 Strobe4 : 3; //bits 12..14
+ UINT32 Strobe5 : 3; //bits 15..17
+ UINT32 Strobe6 : 3; //bits 18..20
+ UINT32 Strobe7 : 3; //bits 21..23
+ UINT32 Strobe8 : 3; //bits 24..26
+ UINT32 Rsvd : 5; //bits 27..31
+} Mr1RxEqStruct;
+
+//
+// NVRAM structures for S3 state
+//
+
+///
+/// DIMM rank info
+/// List indexed by rank number
+///
+typedef struct ddrRank {
+ UINT8 enabled; ///< 0 = disabled, 1 = enabled
+ UINT8 rankIndex;
+ UINT8 phyRank; ///< Physical Rank #(3:0)
+ UINT8 logicalRank; ///< Logical Rank number (0 - 7)
+ UINT8 ckIndex; ///< Index to the clock for this rank
+ UINT8 ctlIndex; ///< Index to the control group for this rank
+ UINT8 CKEIndex;
+ UINT8 ODTIndex;
+ UINT8 CSIndex;
+ UINT8 devTagInfo;
+ UINT16 RttWr;
+ UINT16 RttPrk;
+ UINT16 RttNom;
+ UINT16 rankSize; ///< Units of 64 MB
+ UINT16 remSize; ///< Units of 64 MB
+ UINT16 NVrankSize; ///< Units of 64 MB
+
+ UINT8 cmdLeft;
+ UINT8 cmdRight;
+ UINT8 cmdLow;
+ UINT8 cmdHigh;
+
+ UINT8 rxDQLeftSt;
+ UINT8 rxDQRightSt;
+ UINT8 txDQLeftSt;
+ UINT8 txDQRightSt;
+ UINT16 OutDrvImpCtrl;
+ UINT8 DqSwzDdr5[SUB_CH][20];
+ UINT8 faultyParts[MAX_STROBE];
+#ifdef LRDIMM_SUPPORT
+ UINT8 lrbufRxVref[MAX_STROBE]; ///< Actual value of backside RxVref
+ UINT8 lrBuf_FxBC4x5x[MAX_STROBE];
+ UINT8 lrBuf_FxBC8x9x[MAX_STROBE];
+#endif
+ UINT8 lrBuf_FxBC2x3x[MAX_STROBE];
+ UINT8 lrBuf_FxBCAxBx[MAX_STROBE];
+ UINT8 lrBuf_FxBCCxEx[MAX_STROBE/2];
+ UINT8 lrBuf_FxBCDxFx[MAX_STROBE/2];
+ UINT32 lrbufTxVref[MAX_STROBE]; ///< Actual value of backside TxVref
+ //
+ // MR1 per strobe Rx Eq value structure with 9 elements per structure
+ // therefore you need MAX_STROBE/9 structures to store all elements
+ //
+ Mr1RxEqStruct Mr1RxEqSettings[MAX_STROBE/9];
+
+} DDR_RANK_STRUCT; //struct ddrRank
+
+typedef enum {
+ DIMM_RANK_MAP_OUT_UNKNOWN = 0,
+ DIMM_RANK_MAP_OUT_MEM_DECODE,
+ DIMM_RANK_MAP_OUT_POP_POR_VIOLATION,
+ DIMM_RANK_MAP_OUT_RANK_DISABLED,
+ DIMM_RANK_MAP_OUT_ADVMEMTEST_FAILURE,
+ DIMM_RANK_MAP_OUT_MAX
+} DIMM_RANK_MAP_OUT_REASON;
+
+///
+/// DIMM information stored in NVRAM
+//
+typedef struct dimmNvram {
+ UINT8 dimmPresent; ///< 1 = DIMM present in this slot
+ UINT8 mailboxReady;
+ UINT16 lrbufswizzle;
+ INT32 minTCK; ///< minimum tCK for this DIMM (SPD_MIN_TCK)
+ UINT8 ftbTCK; ///< fine offset for tCK
+ UINT32 tCL;
+ UINT16 tRCD;
+ UINT16 tRP;
+ UINT8 ftbTRP; ///< DDR4 fine offset for tRP
+ UINT8 ftbTRCD; ///< DDR4 fine offset for tRCD
+ UINT8 ftbTAA; ///< DDR4 fine offset for tAA
+ UINT8 mapOut[MAX_RANK_DIMM]; ///< 1 = User requested rank made non-Present
+ UINT8 numRanks; ///< Number of logical ranks on this DIMM
+ UINT8 numDramRanks; ///< Number of physical DRAM ranks on this DIMM
+ UINT8 techIndex; ///< Index into DIMM technology table
+ UINT8 aepTechIndex; ///< Index into NVM DIMM technology table
+ UINT8 fmcType; ///< Far Memory Controller Type
+ UINT8 fmcRev; ///< Far Memory Controller Rev Type
+ SPD_AEP_MOD_REVISION_STRUCT FmcModRev; ///< Far Memory Controller Module Rev and Type
+ UINT8 NvmStepping; ///< NVM Device Stepping
+ UINT8 NvmDevDensity; ///< NVM DEV DENSITY
+ UINT8 NvmDevType; ///< NVM DEV TYPE
+ UINT8 SPDRawCard; ///< Raw Card Number
+ UINT8 DimmRevType; ///< RCD Revision
+ UINT8 SPDOtherOptFeatures;///< SDRAM Other Optional features
+ UINT8 SPDAddrMapp; ///< Address Mapping from Edge connector to DRAM
+ UINT8 SPDRegRev; ///< Register Revision
+ UINT8 SPDODCtl; ///< Register Output Drive Strength for Control
+ UINT8 SPDODCk; ///< Register Output Drive Strength for Clock
+#ifdef LRDIMM_SUPPORT
+ UINT16 SPDLrbufVen; ///< LRDIMM Data Buffer Vendor ID
+ UINT8 SPDLrbufDramVrefdqR0; ///< DRAM VrefDQ for Package Rank 0
+ UINT8 SPDLrbufDramVrefdqR1; ///< DRAM VrefDQ for Package Rank 1
+ UINT8 SPDLrbufDramVrefdqR2; ///< DRAM VrefDQ for Package Rank 2
+ UINT8 SPDLrbufDramVrefdqR3; ///< DRAM VrefDQ for Package Rank 3
+ UINT8 SPDLrbufDbVrefdq; ///< LR Data Buffer VrefDQ for DRAM Interface
+ UINT8 SPDLrbufDbDsRttLe1866; ///< LR Data Buffer MDQ Drive Strength and RTT for data rate <= 1866
+ UINT8 SPDLrbufDbDsRttGt1866Le2400; ///< LR Data Buffer MDQ Drive Strength and RTT for data rate > 1866 and <= 2400
+ UINT8 SPDLrbufDbDsRttGt2400Le3200; ///< LR Data Buffer MDQ Drive Strength and RTT for data rate > 2400 and <= 3200
+ UINT8 SPDLrbufDramDs; ///< LR Buffer DRAM Drive Strength (for data rates <1866, 1866 < data rate < 2400, and 2400 < data rate < 3200)
+ UINT8 SPDLrbufDramOdtWrNomLe1866; ///< LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 1866
+ UINT8 SPDLrbufDramOdtWrNomGt1866Le2400; ///< LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate > 1866 and <= 2400
+ UINT8 SPDLrbufDramOdtWrNomGt2400Le3200; ///< LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate > 2400 and <= 3200
+ UINT8 SPDLrbufDramOdtParkLe1866; ///< LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 1866
+ UINT8 SPDLrbufDramOdtParkGt1866Le2400; ///< LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate > 1866 and <= 2400
+ UINT8 SPDLrbufDramOdtParkGt2400Le3200; ///< LR Buffer DRAM ODT (RTT_WR and RTT_NOM) for data rate > 2400 and <= 3200
+ UINT8 rcLrFunc;
+ UINT8 lrBuf_BC00;
+ UINT8 lrBuf_BC01;
+ UINT8 lrBuf_BC02;
+ UINT8 lrBuf_BC03;
+ UINT8 lrBuf_BC04;
+ UINT8 lrBuf_BC05;
+ UINT8 lrBuf_BC1x;
+ UINT8 LrBuf_DFECoef[MAX_BITS_IN_BYTE][DB_DFE_TAP][MAX_STROBE/2]; // JEDEC F3BCCx-Fx coeffcient. 8 DQ x 4 taps x 9 DB
+ UINT8 Dfe_F2BCEX; // JEDEC DB02DFE DQ selection and global enable
+#endif // LRDIMM_SUPPORT
+
+ UINT8 XMPOrg; ///< XMP organization and configuration
+ UINT8 XMPRev;
+ UINT32 XMPChecksum;
+
+ UINT8 x4Present; ///< Set if this is a x4 rank
+ UINT8 keyByte;
+ UINT8 keyByte2; ///< Logical module type (for MRC compat)
+ UINT8 DcpmmPresent; ///< Is an NVM DIMM present?
+ BOOLEAN NvmDimmDisable; ///< 1 = NVMDimm present but got disabled in this slot
+ UINT8 actKeyByte2; ///< Actual module type reported by SPD
+ UINT8 SPDModuleOrg; ///< Logical number of DRAM ranks and device width
+ UINT8 actSPDModuleOrg; ///< Actual number of DRAM ranks and device width
+ UINT8 dramIOWidth; ///< The encoded value of DRAM IO width
+ UINT8 dramIOWidthSecondary; ///< The encoded value of IO width for secondary SDRAM
+ BOOLEAN rankMix; ///< Used to indicate if the target DIMM is asymmetric
+ UINT8 SPDDeviceType; ///< Primary SDRAM Device Type
+ UINT8 SPDSecondaryDeviceType; ///< Secondary SDRAM Device Type
+ UINT8 numBankAddressBits; ///< Number of bank address bits per bank group
+ UINT8 numBankAddressBitsSecondary; ///< Number of bank address bits per bank group of Secondary SDRAM
+ UINT8 numBankGroupBits; ///< Number of bank group bits
+ UINT8 numBankGroupBitsSecondary; ///< Number of bank group bits of Secondary SDRAM
+ UINT8 sdramCapacity; ///< Encoded SDRAM capacity based on DDR4 format
+ UINT8 sdramCapacitySecondary; ///< Encoded SDRAM capacity based on DDR4 format for Secondary SDRAM
+ UINT8 numRowBits; ///< Number of row address bits
+ UINT8 numRowBitsSecondary; ///< Number of row address bits of Secondary SDRAM
+ UINT8 numColBits; ///< Number of column address bits
+ UINT8 numColBitsSecondary; ///< Number of column address bits of Secondary SDRAM
+ UINT8 dieCount; ///< Number of SDRAM dies per package for symmetric DIMMs or Primary SDRAM dies per package for asymmetric DIMMs
+ UINT8 dieCountSecondary; ///< Number of Secondary DRAM dies per package for asymmetric DIMMs
+ UINT8 cidBitMap; ///< SubRanks per chip select per dimm of DDR4 3DS and non3ds_lrdimm
+ UINT8 lrRankMult; ///< Rank multiplication factor
+ UINT8 SPDMemBusWidth; ///< Width of the Primary bus and extension
+ UINT8 dimmTs; ///< Module Thermal Sensor
+ UINT8 dimmAttrib; ///< Module attributes
+ UINT8 mtbDiv; ///< medium time base divisor (SPD_MTB_DIV)
+ UINT8 SPDftb; ///< fine time base (SPD_FTB)
+ UINT32 dimmMemTech; ///< Used to program DIMMMTR
+ UINT16 SPDRegVen; ///< Register Vendor ID
+ UINT16 SPDMMfgId; ///< Module Mfg Id from SPD
+ UINT8 SPDMMfLoc; ///< Module Mfg Location from SPD
+ UINT16 SPDModDate; ///< Module Manufacturing Date
+ UINT16 SPDDramMfgId; ///< DRAM Mfg Id
+ UINT8 SPDDramRev; ///< DRAM Rev Id
+ UINT8 SPDModSN[SPD_MODULE_SERIAL]; ///< Module Serial Number
+ UINT8 SPDModPartDDR4[SPD_MODULE_PART_DDR4]; ///< Module Part Number DDR4
+ UINT8 SPDOptionalFeature; ///< DDR4 optional feature
+ UINT8 AitDramPoll;
+ BOOLEAN NvDimmNPresent; ///< JEDEC NVDIMM-N Type Memory Present
+ UINT16 NvDimmStatus;
+ // Bit Description
+ // 0 NVDIMM controller failure
+ // 1 NVDIMM restore failed
+ // 2 NVDIMM restore retry
+ // 3 NVDIMM backup failed
+ // 4 NVDIMM erase failed
+ // 5 NVDIMM erase retry
+ // 6 NVDIMM arm failed
+ // 7 No backup energy source detected
+ // 8 Backup energy source charge failed
+ // 9 NVDIMM uncorrectable memory error
+ // 10 NVDIMM correctable memory memory error threshold
+ // 11-15 Reserved
+
+ UINT8 lrbufRid; ///< LR Buffer Revision ID (from buffer not SPD)
+ UINT8 lrbufGen; ///< LR Buffer Gen
+ UINT8 SPDIntelSN[5]; ///< Intel DIMM serial number
+ struct ddrRank rankList[MAX_RANK_DIMM];
+ UINT8 SPDmtb; ///< DDR4 medium time base (SPD_TB_DDR4)
+ UINT8 SPDSpecRev; ///< Revision of the SPD spec for this data
+ UINT8 SpdModuleType; ///< SPD Byte 2 (0x002): Key Byte / Host Bus Command Protocol Type
+ UINT8 rcCache[16]; /// DDR4 RCD cache
+ UINT8 rcxCache[16];
+ UINT8 lrDimmPresent;
+ UINT8 rcClk;
+ UINT8 rcCmd;
+ UINT8 rcCtl;
+ UINT16 rcVref;
+ INT16 QxCAClkOffset; ///< RCD QxCA Training Offset
+ UINT8 dqSwz[36];
+ UINT16 rawCap; ///< Raw Capacity
+ UINT16 VendorID; ///< Vendor ID for NVMDIMM Mgmt driver thru Nfit
+ UINT16 DeviceID; ///< Device ID for NVMDIMM Mgmt driver thru Nfit
+ UINT16 RevisionID;
+ UINT16 SubsystemVendorID;
+ UINT16 SubsystemDeviceID;
+ UINT16 SubsystemRevisionID;
+ UINT8 DimmGnt2Erid; ///< DIMM-side Grant-to-ERID (produced by SPD and consumed by FMC; distinct from MC-programmed value)
+ X16_MAPPING LogicalX16Mapping;
+ UINT8 manufacturer[NGN_MAX_MANUFACTURER_STRLEN]; /* Manufacturer */
+ UINT8 serialNumber[NGN_MAX_SERIALNUMBER_STRLEN]; /* Serial Number */
+ UINT8 PartNumber[NGN_MAX_PARTNUMBER_STRLEN]; /* Part Number */
+ UINT16 volCap; /* Volatile Capacity (2LM region) */
+ UINT16 nonVolCap; /* NonVolatile Capacity (PMEM/PMEM$ region + Blk region) */
+ UINT16 perCap; /* Persistent Capcity (PMEM/PMEM$). This size is not obtained from FNV. This is derived data. */
+ UINT16 WbCachePerCap; /* Persistent WB cache Capcity (AD-WB) This size is not obtained from FNV. This is derived data. */
+ UINT32 volRegionDPA; /* DPA start address of 2LM Region */
+ UINT32 perRegionDPA; /* DPA start address of PMEM Region */
+ struct firmwareRev firmwareRevision; /* Firmware Revision */
+ UINT8 dimmSku; /* Dimm SKU info Bit0:MemorymodeEnabled 1: StoragemodeEnabled 2:AppDirectmodeEnabled 3:DieSparingCapable 4:SoftProgrammableSKU 5:MemorymodeEncryptionEnabled 6:AppDirectmodeEncryptionEnabled 7:StoragemodeEncrytionEnabled */
+ UINT16 InterfaceFormatCode;
+ UINT16 VendorIDIdentifyDIMM;
+ UINT16 DeviceIDIdentifyDIMM;
+ UINT32 DdrtDimmBasicTiming;
+ UINT8 Uniqueid[NGN_MAX_UID_STRLEN]; /* Unique ID */
+ DIMM_RANK_MAP_OUT_REASON MapOutReason[MAX_RANK_DIMM];
+ UINT8 VlpRdimmPresent;
+ RDIMM_RDIMM_THERMAL_HEAT_SPREADER_SOLUTION_STRUCT SpdThermalHeatSpreaderSolution; ///< Byte 132 (0x084) (Registered): RDIMM Thermal Heat Spreader Solution
+ UINT8 pad[1]; ///< padding added to eliminate: MemChipDdrio.c(5567): warning C4366: The result of the unary '&' operator may be unaligned. ie: &((*ChannelNvList)[Channel].ddrCRClkControls)
+} DIMM_NVRAM_STRUCT; //struct dimmNvram
+
+#define MAX_CMD_CSR 16
+#define MAX_SIDE 2
+
+///
+/// Channel information stored in NVRAM
+///
+typedef struct channelNvram {
+ UINT8 enabled; ///< 0 = channel disabled, 1 = channel enabled
+ UINT8 mb3trainingfailure;
+ UINT8 features; ///< Bit mask of features to enable or disable
+ UINT8 maxDimm; ///< Number of DIMM
+ UINT8 numRanks; ///< Number of ranks on this channel
+ UINT8 numQuadRanks; ///< Number of QR DIMMs on this channel
+ UINT8 timingMode; ///< Command timing mode(1N, 2N, or 3N) for normal operation
+ UINT8 trainTimingMode; ///< Command timing mode(1N, 2N, or 3N) for training
+ UINT8 ckeMask; ///< CKE signals to assert during IOSAV mode
+ UINT8 chFailed; ///< ddr4 memory in this channel had failed (MFO)
+ UINT8 ngnChFailed; ///< NGN memory in this channel had failed (MFO)
+ struct comTime common; ///< Common timings for this channel
+ struct dimmNvram dimmList[MAX_DIMM];
+ struct RankCh rankPerCh[MAX_RANK_CH];
+ UINT32 dimmVrefControlFnv1;
+ UINT32 dimmVrefControlFnv1Sa; // SA fub
+ UINT32 ddrCrCmdPiCodingFnv;
+ UINT32 ddrCrCmdPiCodingFnv2;
+ UINT8 encodedCSMode;
+ UINT8 cidBitMap;
+ UINT8 txVrefSafe[MAX_RANK_CH];
+ UINT8 dimmRevType;
+ UINT8 lrDimmPresent;
+#ifdef LRDIMM_SUPPORT
+ UINT8 chOneRankTimingModeEnable;
+#endif
+ UINT8 lrRankMultEnabled;
+ UINT8 v110NotSupported;
+ UINT8 v120NotSupported;
+ UINT32 rankErrCountStatus;
+ UINT32 rankErrCountInfo[(MAX_RANK_CH * SUB_CH)/2];
+ UINT32 rankErrThresholdInfo[(MAX_RANK_CH * SUB_CH)/2];
+ UINT8 ddrtEnabled;
+ UINT32 SmiSpareCtlMcMainExt;
+ UINT8 spareInUse;
+ UINT8 spareDimm[MAX_RANK_CH/2];
+ UINT8 spareRank[MAX_RANK_CH/2];
+ UINT16 spareRankSize[MAX_RANK_CH/2];
+ UINT8 spareLogicalRank[MAX_SPARE_RANK];
+ UINT8 sparePhysicalRank[MAX_SPARE_RANK];
+ UINT32 ioLatency1;
+ UINT32 tcrwp; ///< TCRWP_MCDDC_CTL_STRUCT
+ UINT32 tcothp; ///< TCOTHP_MCDDC_CTL_STRUCT
+ UINT32 tcothp2;
+ UINT32 TCMr0Shadow;
+ UINT32 TCMr2Shadow;
+ UINT32 TCMr4Shadow;
+ UINT32 TCMr5Shadow;
+ INT16 normalizationFactor;
+ UINT8 FmcWrCreditLimit;
+ UINT8 FmcRdCreditLimit;
+ UINT8 twoXRefreshSetPerCh; /* Saves the refreshRate value for each channel */
+ UINT8 tCCDAdder;
+ BUS_TYPE fnvAccessMode;
+ UINT32 ddrtDimm0BasicTiming;
+ UINT32 ddrtDimm1BasicTiming;
+ UINT32 cadbMuxPattern[CADB_MUX_MAX];
+ UINT8 EccModeMcMain[(MAX_RANK_CH * SUB_CH)];
+ UINT32 Plus1Failover[(MAX_RANK_CH * SUB_CH)];
+ UINT32 LinkRetryErrLimits;
+ UINT32 LinkLinkFail;
+ UINT32 mtCas2CasDr; /* CNX Change */
+ UINT32 mtCas2CasDd; /* CNX Change */
+ UINT32 mtCas2CasSr; /* CNX Change */
+ UINT32 mtCas2CasSg; /* CNX Change */
+ UINT32 mtCas2CasDs; /* CNX Change */
+ UINT32 tCke; /* CNX Change */
+ UINT32 MemoryTimingsAdj;
+ UINT8 T_rrdr_org; ///< Nvram Variable to store original tRRDR turnaround timing parameter
+ UINT8 T_rrdd_org; ///< Nvram Variable to store original tRRDD turnaround timing parameter
+ UINT8 T_rrdr; ///< Nvram Variable to store current tRRDR turnaround timing parameter
+ UINT8 T_rrdd; ///< Nvram Variable to store current tRRDD turnaround timing parameter
+#ifndef DDRIO_DATA_1S
+ UINT32 dataControl0;
+ UINT32 dataControl1[MAX_STROBE]; ///< need to save for each strobe
+ UINT32 dataControl2[MAX_STROBE];
+ UINT32 dataControl4[MAX_STROBE];
+ UINT32 dataControl3[MAX_STROBE];
+ UINT32 dataOffsetComp[MAX_STROBE];
+ UINT8 DrvStaticLegCfg[MAX_STROBE];
+ UINT8 OdtSegmentEnable[MAX_STROBE];
+ UINT8 DataSegmentEnable[MAX_STROBE];
+ UINT8 RcompCode[MAX_STROBE];
+ UINT32 LegacyRxDfeTxEcho[MAX_STROBE]; //Used to store Legacy RxDfe or TxEcho register values
+ UINT32 ddrCRClkControls;
+ UINT32 DdrCrCmdNControls;
+ UINT32 DdrCrCmdSControls;
+ UINT32 DdrCrCkeControls;
+ UINT32 DdrCrCtlControls;
+ UINT32 clkCsr;
+ INT16 TxDqsDelay[MAX_RANK_CH][MAX_STROBE];
+ UINT32 txGroup0[MAX_RANK_CH][MAX_STROBE];
+ UINT32 txGroup1[MAX_RANK_CH][MAX_STROBE];
+ UINT32 TxEqCoefTap2[MAX_RANK_CH][MAX_STROBE];
+ UINT16 XtalkDeltaN0[MAX_RANK_CH][MAX_STROBE];
+ UINT16 XtalkDeltaN1[MAX_RANK_CH][MAX_STROBE];
+ UINT32 txTco[MAX_RANK_CH][MAX_STROBE];
+ UINT32 rxGroup0[MAX_RANK_CH][MAX_STROBE];
+ UINT32 rxGroup1[MAX_RANK_CH][MAX_STROBE];
+ UINT32 RxDfeCoeff[MAX_STROBE];
+ UINT32 RxDfeControl[MAX_STROBE];
+ UINT32 rxOffset[MAX_RANK_CH][MAX_STROBE];
+ UINT32 rxVrefCtrl[MAX_STROBE];
+ UINT8 txVrefCache[MAX_RANK_CH][MAX_STROBE]; ///< Cached value of txVref (this might not be the programmed value)
+ UINT8 txVref[MAX_RANK_CH][MAX_STROBE]; ///< Actual current value of txVref
+ UINT32 ddrCRCmdTrainingCmdN;
+ UINT32 ddrCRCmdTrainingCmdS;
+ UINT32 ddrCRCtlTraining;
+ UINT32 ddrCRCkeTraining;
+ UINT32 ddrCRClkTraining;
+ UINT32 ddrCRClkRanksUsed;
+ UINT32 dataOffsetTrain[MAX_STROBE];
+ UINT32 DataTrainFeedbackMultiCast;
+ UINT32 ddrCRCmdControls3CmdN;
+ UINT32 ddrCRCmdControls3CmdS;
+ UINT32 ddrCRCmdControls3Ctl;
+ UINT32 ddrCRCmdControls3Cke;
+ UINT32 cmdCsr[MAX_CMD_CSR];
+ UINT32 rxGroup1n[MAX_RANK_CH][MAX_STROBE]; /* CNX Change */
+ UINT32 rxGroup1p[MAX_RANK_CH][MAX_STROBE]; /* CNX Change */
+ UINT32 DdrCrintfDataTiming0;
+ UINT32 TxDqBitClockDelta[MAX_RANK_CH][MAX_STROBE]; ///< Each unit represent 64 ticks
+ ///< [7:0] -> UIs for Bit 0
+ ///< [15:8] -> UIs for Bit 1
+ ///< [23:16] -> UIs for Bit 2
+ ///< [31:24] -> UIs for Bit 3
+ UINT32 EnableRidUnderfillOrg; ///< Nvram Variable to store original EnableRidUnderfill RDB entry
+ UINT32 EnableRidVc2Org; ///< Nvram Variable to store original EnableRidVc2 RDB entry
+ UINT32 EnableRidVc3Org; ///< Nvram Variable to store original EnableRidVC3 RDB entry
+#endif // !DDRIO_DATA_1S
+} CHANNEL_NVRAM_STRUCT, *PCHANNEL_NVRAM_STRUCT;
+
+///
+/// IMC information stored in NVRAM
+///
+typedef struct imcNvram {
+ UINT8 enabled; ///< 0 = imc disabled, 1 = imc enabled
+ UINT32 scrubMask; ///< Scrub mask
+ UINT32 scrubMask2; ///< Scrub mask2
+ UINT8 EmcaLtCtlMcMainExt;
+ UINT32 ExRasConfigHaCfg;
+ UINT32 SmiSpareCtlMcMainExt;
+ UINT8 AppDirectHoleSize;
+ UINT8 imcNodeId; /* System wide socket id for imc */
+ BOOLEAN LaneReversalEn;
+#ifndef DDRIO_DATA_1S
+ UINT32 ddrCRCompCtl0;
+ UINT32 ddrCRCompCtl3; // This is need for silicon workaround 'S1409370801'
+ UINT32 dimmVrefControl1;
+#endif // !DDRIO_DATA_1S
+} IMC_NVRAM_STRUCT; //struct imcNvram
+
+///
+/// Socket information stored in NVRAM
+///
+struct socketNvram {
+ UINT8 enabled;
+ INT32 minTCK; ///< minimum tCK for this DIMM
+ UINT8 ddrFreq; ///< DDR Frequency of this socket
+ UINT16 ddrFreqMHz; ///< DDR Frequency of this socket in MHz
+ UINT16 QCLKps; ///< Qclk period in pS
+ UINT8 cmdClkTrainingDone;
+ UINT8 ddrVoltage; ///< Voltage of this socket
+ UINT8 lrDimmPresent;
+ UINT8 DcpmmPresent;
+ BOOLEAN x16DimmPresent;
+ UINT8 maxDimmPop; ///< Maximum number of DIMM populated on a channel for a socket
+ UINT8 wa; ///< Bit field for workarounds
+ UINT8 ddr4SpdPageEn;
+ struct channelNvram channelList[MAX_CH];
+ struct imcNvram imc[MAX_IMC];
+ UINT64_STRUCT procPpin; ///< Processor PPIN number
+ UINT32 smiCtrlUboxMisc;
+ UINT8 refreshRate;
+ INT8 normalizationFactorEn;
+ UINT16 WdbCacheValidPerChannel; ///< Channel bitmask indicating whether the WDB cache is valid
+ TRAINING_STEP_DONE_STRUCT TrainingStepDone; ///< Indicators of whether a given training step is done
+ UINT8 ddrtFreq;
+ UINT8 cmdVrefTrainingDone;
+ UINT8 mcpPresent;
+ UINT32 FaultyPartsFlag[MAX_CH]; ///< Store faulty strobe info in a channel to NVRAM
+ UINT32 CsrWriteLatency[MAX_CH]; ///< CSR Write Latency from Core-Ubox-iMC[ch] roundtrip
+ UINT32 CsrReadLatency[MAX_CH]; ///< CSR Read Latency from Core-Ubox-iMC[ch] roundtrip
+}; //struct socketNvram
+typedef struct socketNvram SOCKET_NVRAM;
+
+typedef struct memNvram {
+ UINT8 DataGood; ///< Set to one if valid data is present in this structure
+ UINT8 RASmode; ///< RAS mode (lockstep, mirror, sparing)
+ UINT16 RASmodeEx; ///< Extended RAS mode (patrol scrub)
+ UINT8 ratioIndex; ///< Index into the DDR3 ratio table
+ UINT8 eccEn; ///< Set if ECC will be enabled
+ UINT8 dimmTypePresent; ///< Type of DIMMs populated (RDIMM,UDIMM,SODIMM)
+ UINT8 DcpmmPresent; ///< Is an DCPMM present in the system?
+ UINT16 dramType; ///< DDR3 or DDR4 (from keybyte in SPD)
+ UINT32 scrambleSeed; ///< Data scrambling seed
+ UINT32 socketBitMap; ///< CPU present mask
+ UINT8 ExtendedADDDCEn;
+ struct memSetup savedSetupData;
+ struct socketNvram socket[MAX_SOCKET];
+
+ UINT8 XMPProfilesSup;
+ UINT8 XMPProfilesRevision;
+ struct memTiming profileMemTime[2];
+
+ UINT16 Crc16;
+ BOOLEAN FmcCacheDone; ///< Variable to indicate FMC Register caching is finished
+ UINT8 threeDsModeDisabled; ///< Variable to track if 3DS mode is enabled/disabled for CPGC
+ UINT8 volMemMode;
+ UINT8 CacheMemType; ///< Only valid if volMemMode is 2LM
+#ifdef DDRIO_DATA_1S
+ UINT8 DdrioNvdata[DDRIO_DATA_1S * MAX_SOCKET];
+#endif // DDRIO_DATA_1S
+#ifdef DRAM_DATA_1S
+ UINT8 DramNvdata[DRAM_DATA_1S * MAX_SOCKET];
+#endif // DRAM_DATA_1S
+#ifdef RCD_DATA_1S
+ UINT8 RcdNvdata[RCD_DATA_1S * MAX_SOCKET];
+#endif // RCD_DATA_1S
+#ifdef LRDIMM_DB_DATA_1S
+ UINT8 DbNvdata[LRDIMM_DB_DATA_1S * MAX_SOCKET];
+#endif // LRDIMM_DB_DATA_1S
+
+} MEM_NVRAM_STRUCT;
+
+//
+// Max number for FMC cache register and structure
+//
+#define MAX_FMC_CACHE 2
+
+struct FmcCacheSt {
+ UINT8 Status; // Cache status
+ UINT32 Reg; // Register
+ UINT32 Data; // Data
+}; // struct FmcCacheSt
+
+
+///
+/// Rank info
+///
+struct rankDevice {
+ UINT16 MR0; ///< MR0 value for this rank
+ UINT16 MR1; ///< MR1 value for this rank
+ UINT16 MR2; ///< MR2 value for this rank
+ UINT16 MR3; ///< MR3 value for this rank
+ UINT16 MR4; ///< MR4 value for this rank
+ UINT16 MR5; ///< MR5 value for this rank
+ UINT16 MR6[MAX_STROBE]; ///< MR6 value for this rank/dram
+#ifdef LRDIMM_SUPPORT
+ UINT8 CurrentLrdimmTrainingMode;
+ UINT8 CurrentDramMode;
+ UINT16 CurrentMpr0Pattern;
+ UINT8 lrbufRxVrefCache[MAX_STROBE];
+ UINT8 cachedLrBuf_FxBC2x3x[MAX_STROBE];
+ UINT8 cachedLrBuf_FxBC4x5x[MAX_STROBE];
+ UINT8 cachedLrBuf_FxBC8x9x[MAX_STROBE];
+ UINT8 cachedLrBuf_FxBCAxBx[MAX_STROBE];
+ UINT8 cachedLrBuf_FxBCCxEx[MAX_STROBE/2];
+ UINT8 cachedLrBuf_FxBCDxFx[MAX_STROBE/2];
+#endif
+ UINT32 lrbufTxVrefCache[MAX_STROBE];
+}; //struct rankDevice
+
+///
+/// DIMM info
+/// List ordered by proximity to Host (far to near)
+///
+typedef struct dimmDevice {
+ INT32 minTCK; ///< minimum tCK for this DIMM (SPD_MIN_TCK)
+#ifdef DEBUG_CODE_BLOCK
+ UINT32 tCL;
+ UINT16 tRCD;
+ UINT16 tRP;
+#endif // DEBUG_CODE_BLOCK
+ UINT16 NVmemSize;
+ UINT16 memSize; ///< Memory size for this DIMM (64MB granularity)
+ UINT16 UnmappedMemSize;
+ struct rankDevice rankStruct[MAX_RANK_DIMM];
+ struct FmcCacheSt FmcCache[MAX_FMC_CACHE]; ///< FMC cache info/status
+ UINT8 SPDPartitionRatio[MAX_SOCKET * MAX_IMC]; ///< NVM DIMM partitionRatios
+ UINT8 CachedLrBuf_DFECoef[MAX_BITS_IN_BYTE][DB_DFE_TAP][MAX_STROBE/2]; // JEDEC F3BCCx-Fx coeffcient. 8 DQ x 4 taps x 9 DB
+ BOOLEAN FmcWdbFlushFailed; /// < 0 = WDB flush failed on previous boot, 1 = WDB flush completed w/o errors on previous boot
+ BOOLEAN EadrFlushFailed; /// < 0 = Extended ADR flush failed on previous boot, 1 = Extended ADR flush completed w/o errors on previous boot
+} DIMM_DEVICE_INFO_STRUCT; //struct dimmDevice
+
+///
+/// DDRT DIMM info
+///
+typedef struct {
+ UINT16 NgnLogSeqNum[NGN_LOG_TYPE_NUM][NGN_LOG_LEVEL_NUM];
+ UINT16 NgnMaxLogEntries[NGN_LOG_TYPE_NUM][NGN_LOG_LEVEL_NUM];
+ UINT8 NvdimmLinkFailOnPrevBoot : 1, /* Link failure was detected in this boot */
+ NvdimmMediaErrLogged : 1, /* Media error log was detected in this boot */
+ NvdimmTempErrLogged : 1, /* Fatal temperature error log was detected in this boot */
+ NvdimmUnmapped : 1, /* NVDIMM is not to be mapped per memory population POR enforcement or SKU Limit violation. */
+ NvdimmUnmappedReason : 1, /* Reason of NVDIMM is not to be mapped 0 - population POR enforcement, 1 - SKU Limit Violation */
+ NvdimmRemapped : 1, /* NVDIMM is not to be unmapped per memory population POR enforcement. */
+ NvdimmAdModeNotEnabled : 1, /* Indicates whether DIMM SKU reports AD mode enabled or not */
+ Reserved : 1;
+ UINT64_STRUCT NgnBsr; /* NGN NVDIMM Boot Status Register */
+} HOST_DDRT_DIMM_DEVICE_INFO_STRUCT;
+
+typedef struct {
+ UINT8 WdbLine[MRC_WDB_LINE_SIZE];
+} TWdbLine;
+
+///
+/// TT channel info
+///
+typedef struct ddrChannel {
+ UINT8 mcId; ///<Memory controller number
+ UINT8 numDimmSlots; ///<Number of DIMM slots per channel
+ UINT32 memSize; ///<Memory size for this channel (64MB granularity)
+ UINT32 ddr4RemSize; ///<Remaining DDR4 Memory size for this channel
+ UINT32 volSize; ///<Volatile size of the NVM dimms in this channel
+ UINT32 NonVolSize; ///<Non Volatile size of the NVM dimms in this channel
+ UINT32 volRemSize; ///<Remaining Volatile size of the NVM dimms in this channel
+ UINT32 perSize; ///<Pmem size of the NVM dimms in this channel
+ UINT32 perRemSize; ///<Remaining Pmem size of the NVM dimms in this channel
+ UINT32 WbCachePerSize; ///<Persistent WB cache (AD-WB) size of the NVM dimms in this channel
+ UINT32 WbCachePerRemSize; ///<Remaining Persistent WB cache (AD-WB) size of the NVM dimms in this channel
+ UINT32 ctrlSize; ///<Ctrl region size of the NVM dimms in this channel
+ UINT32 ctrlRemSize; ///<Remaining Ctrl region size of the NVM dimms in this channel
+ UINT32 NVmemSize; ///< NVDIMM channel memory size
+ UINT32 NVmemRemSize;
+ UINT32 remSize; ///< Size not yet mapped in units of 64 MB
+ UINT32 DdrCacheSize; ///< Size of DDR memory reserved for 2LM cache (64MB granularity)
+ DIMM_DEVICE_INFO_STRUCT dimmList[MAX_DIMM];
+ HOST_DDRT_DIMM_DEVICE_INFO_STRUCT DdrtDimmList[MAX_DDRT_DIMM_PER_CH];
+ UINT8 CsrUnlock; ///< Whether FMC CSRs are unlocked (accessible/writable)
+ UINT16 FisVersion[MAX_DIMM]; ///< Firmwre Interface Specification version
+} DDR_CHANNEL_STRUCT; //struct ddrChannel
+
+typedef union {
+ struct {
+ UINT8 TrainingPatternMode : 3; // Bits[2:0] - Training Pattern Mode
+ UINT8 QcaUcaTrainingDone : 1; // Bits[3] - QCA training or UDIMM CA training are done or not
+ UINT8 BitIndex : 2; // Bits[5:4] - Used to indicate which bit to test.
+ UINT8 CoarseRdDqDqsTrainingDone : 1; // Bits[6] - Coarse Read Dq/Dqs training are done or not
+ UINT8 Reserved : 1; // Bits[7] - Reserved for future use.
+ } Bits;
+ UINT8 Data;
+} TRAINING_STATUS_STRUCT;
+
+#define MAX_FAIL_RANGE 128
+
+typedef union {
+ struct {
+ UINT32 row : 18; // This field is used for < > comparisons; more significant bits are used for match comparison only
+ UINT32 bankPair : 4;
+ UINT32 logicalSubRank : 3;
+ UINT32 logicalRank : 3;
+ UINT32 upperBgMask : 2; // bit-0 = 1 means failure with upper BG bit = 0; bit-1 = 1 means failure with upper BG = 1
+ UINT32 rfu: 1;
+ UINT32 valid : 1;
+ } Bits;
+ UINT32 Data;
+} ROW_ADDR;
+
+typedef struct {
+ ROW_ADDR addr;
+ UINT32 size;
+ UINT32 mask[3];
+} ROW_FAIL_RANGE;
+
+///
+/// socket info
+///
+typedef struct Socket {
+ UINT8 SocketDieCount; ///< Number of cpu dies present in the socket
+ UINT32 NumMemSs;
+ MRC_MSM MemSsList[MAX_MEM_SS];
+ BOOLEAN ImcPresent[MAX_IMC]; ///< on multi-die, some iMCs might not exist
+ UINT8 imcEnabled[MAX_IMC];
+ UINT8 fatalError;
+ UINT8 majorCode;
+ UINT8 minorCode;
+ UINT8 maxRankDimm; ///< Maximum number or ranks supported per DIMM
+ UINT32 memSize; ///< DDR4 memory size for this socket (64MB granularity)
+ TRAINING_STATUS_STRUCT TrainingStatus;
+ struct ddrChannel channelList[MAX_CH];
+ UINT8 socketSubBootMode;
+ UINT8 hostRefreshStatus;
+ UINT8 firstJEDECDone; ///< Flag to indicate the first JEDEC Init has executed
+ UINT64_STRUCT procPpin;
+ UINT8 cadbMRSMode; ///< Mode of operation (LOAD / EXECUTE / NORMAL)
+ UINT8 cadbMRSIndex[MAX_CH];
+ UINT32 NVmemSize; ///< Memory size for this node
+ UINT32 TotalInterleavedMemSize; ///< DDR4 memory size for this socket (64MB granularity)
+ UINT32 TotalInterleavedNVMemSize;///< Actual NVMEM interleaved.
+ UINT32 volSize; ///< Volatile size of the NVM dimms for this socket (64MB granularity)
+ UINT32 perSize; ///< Persistent size of the NVM dimms for this socket (64MB granularity)
+ UINT32 WbCachePerSize; ///< Persistent WB cache (AD-WB) size of the NVM dimms for this socket (64MB granularity)
+ BOOLEAN TurnaroundInitDone; ///< Turnaround Initialization Done
+ MRC_TT CurrentTestType; ///< Training step currently being executed by this socket
+ SOCKET_CHIP ///< Chip hook to enable Socket fields
+} SOCKET_INFO_STRUCT; // struct Socket
+
+///
+/// Sub-boot state internal to MRC (8-15 are definable). The 2 main boot types and paths through KTI RC/MRC - NormalBoot and S3Resume.
+/// Within NormalBoot and S3Resume, the sub-boot type can be cold, warm, fast warm, fast cold, and ADR resume. These are populated
+/// at the beginning of MRC so they are not applicable for KTI RC.
+///
+typedef enum SubBootMode
+{
+ ColdBoot = 8, // Normal path through MRC with full mem detection, init, training, etc.
+ WarmBoot = 9, // Warm boot path through MRC. Some functionality can be skipped for speed.
+ WarmBootFast = 10, // Fast warm boot path uses the NVRAM structure to skip as much MRC
+ // code as possible to try to get through MRC fast. Should be as close
+ // as possible to the S3 flow.
+ ColdBootFast = 11, // Fast cold boot path uses the NVRAM structure to skip as much MRC
+ // code as possible on a cold boot.
+ AdrResume = 12, // ADR flow can skip most of MRC (i.e. take the S3 path) for DIMMs that
+ // are in self-refresh. But the DIMMs that are not in self-refresh
+ // must go through more of MRC.
+ NvDimmResume = 13 // NvDimm flow is similar to Adr Batterybackup, but the DIMMs need
+ // Rx & Mx registers initialized.
+} SUB_BOOT_MODE;
+
+///
+/// define the Training_Result_UP/DOWN CRs struct.
+///
+struct TrainingResults {
+ UINT32 results[4];
+};
+
+#ifdef LRDIMM_SUPPORT
+struct lrMrecTrainingResults {
+ UINT8 results;
+};
+#endif // LRDIMM_SUPPORT
+
+#define MEM_CHIP_POLICY_DEF(x) Host->var.mem.memChipPolicy.x
+#define MEM_CHIP_POLICY_VALUE(Host, x) Host->var.mem.memChipPolicy.x
+typedef struct {
+ UINT8 maxVrefSettings; // MAX_VREF_SETTINGS
+ UINT8 earlyVrefStepSize; // EARLY_VREF_STEP_SIZE
+ INT16 ctlPiGrp; // CTL_PI_GRP
+ UINT8 minIoLatency; // MIN_IO_LATENCY
+ UINT16 cas2DrvenMaxGap; // CAS2DRVEN_MAXGAP
+ UINT8 mrcRoundTripIoComp; // MRC_ROUND_TRIP_IO_COMPENSATION;
+ UINT8 mrcRoundTripIoCompStart; // MRC_ROUND_TRIP_IO_COMP_START;
+ UINT8 mrcRoundTripMax; // MRC_ROUND_TRIP_MAX_VALUE;
+ UINT32 SrPbspCheckinCsr; // SR_PBSP_CHECKIN_CSR (BIOSNONSTICKYSCRATCHPAD2_UBOX_MISC_REG) // UBOX scratchpad CSR02
+ UINT32 SrBiosSerialDebugCsr; // SR_BIOS_SERIAL_DEBUG_CSR(BIOSSCRATCHPAD6_UBOX_MISC_REG) // UBOX scratchpad CSR6
+ UINT32 SrPostCodeCsr; // SR_POST_CODE_CSR (BIOSNONSTICKYSCRATCHPAD7_UBOX_MISC_REG) // UBOX scratchpad CSR7
+ UINT32 SrErrorCodeCsr; // SR_ERROR_CODE_CSR (BIOSNONSTICKYSCRATCHPAD8_UBOX_MISC_REG) // UBOX scratchpad CSR8
+ UINT32 SrMemoryDataStorageDispatchPipeCsr; // #define SR_MEMORY_DATA_STORAGE_DISPATCH_PIPE_CSR (BIOSNONSTICKYSCRATCHPAD13_UBOX_MISC_REG) // UBOX scratchpad CSR13
+ UINT32 SrMemoryDataStorageCommandPipeCsr; // #define SR_MEMORY_DATA_STORAGE_COMMAND_PIPE_CSR (BIOSNONSTICKYSCRATCHPAD14_UBOX_MISC_REG) // UBOX scratchpad CSR14
+ UINT32 SrMemoryDataStorageDataPipeCsr; // #define SR_MEMORY_DATA_STORAGE_DATA_PIPE_CSR (BIOSNONSTICKYSCRATCHPAD15_UBOX_MISC_REG) // UBOX scratchpad CSR15
+ UINT32 SrBdatStructPtrCsr; // SR_BDAT_STRUCT_PTR_CSR
+ UINT32 BiosStickyScratchPad0; // BIOSSCRATCHPAD0_UBOX_MISC_REG
+ UINT8 PerBitMarginDefault; // PER_BIT_MARGIN_DEFAULT
+ UINT8 RxOdtDefault; // RX_ODT_DEFAULT
+ UINT8 CmdTxEqDefault; // CMD_TX_EQ_DEFAULT
+ UINT8 RxDfeDefault; // RX_DFE_DEFAULT
+ UINT8 TxRiseFallSlewRateDefault; // TX_RF_SLEW_RATE_DEFAULT
+ UINT8 RmtColdFastBootDefault; // RMT_COLD_FAST_BOOT_DEFAULT
+ UINT8 RxVrefTrainingMode; // RX_VREF_TRAINING_MODE
+ UINT8 TxVrefTrainingMode; // TX_VREF_TRAINING_MODE
+ UINT16 MaxPhaseInReadAdjustmentDq; // MAX_PHASE_IN_READ_ADJUSTMENT_DQ
+} MEM_CHIP_POLICY;
+
+struct DimmDeviceTraining {
+ UINT8 oneRankTimingModeLrbuf_FxBC2x3x[MAX_STROBE];
+ UINT8 oneRankTimingModeLrbuf_FxBC4x5x[MAX_STROBE];
+ UINT8 oneRankTimingModeLrbuf_FxBC8x9x[MAX_STROBE];
+ UINT8 oneRankTimingModeLrbuf_FxBCAxBx[MAX_STROBE];
+ UINT8 oneRankTimingModeLrbuf_FxBCCxEx[MAX_STROBE/2];
+ UINT8 oneRankTimingModeLrbuf_FxBCDxFx[MAX_STROBE/2];
+ UINT8 originalRank0Lrbuf_FxBC2x3x[MAX_RANK_DIMM][MAX_STROBE];
+ UINT8 originalRank0Lrbuf_FxBC4x5x[MAX_RANK_DIMM][MAX_STROBE];
+ UINT8 originalRank0Lrbuf_FxBC8x9x[MAX_RANK_DIMM][MAX_STROBE];
+ UINT8 originalRank0Lrbuf_FxBCAxBx[MAX_RANK_DIMM][MAX_STROBE];
+ UINT8 originalRank0Lrbuf_FxBCCxEx[MAX_RANK_DIMM][MAX_STROBE/2];
+ UINT8 originalRank0Lrbuf_FxBCDxFx[MAX_RANK_DIMM][MAX_STROBE/2];
+}; //struct DimmDeviceTraining
+
+/// TT channel info
+///
+struct DdrChannelTraining {
+ TWdbLine WdbLines[MRC_WDB_LINES];
+ struct DimmDeviceTraining dimmList[MAX_DIMM];
+}; //struct DdrChannelTraining
+
+struct TrainingVariable {
+ UINT8 rdVrefLo;
+ UINT8 rdVrefHi;
+ UINT8 wrVrefLo;
+ UINT8 wrVrefHi;
+ UINT8 cmdVrefLo;
+ UINT8 cmdVrefHi;
+ UINT8 DQPat; ///< Global Variables storing the current DQPat REUT Test
+ UINT8 DQPatLC; ///< Global Variables storing the current DQPat Loopcount
+ BOOLEAN EnDumRd; ///< Enable/Disable Logic Analizer
+
+ INT16 TxDqLeft[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 TxDqRight[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 TxVrefLow[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 TxVrefHigh[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 RxDqsLeft[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 RxDqsRight[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 RxVrefLow[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+ INT16 RxVrefHigh[MAX_CH][MAX_RANK_CH][MAX_STROBE];
+
+ struct DdrChannelTraining channelList[MAX_CH];
+}; //struct TrainingVariable
+
+///
+/// Indicates how SPD data should be retrieved:
+/// SpdSmbus Data should be retrieved via SMBUS
+/// SpdInternal Data should be retrieved via internal SPD array
+/// SpdInternalTrace Data should be retrieved via internal SPD array, but the SMBUS transactions should still be
+/// carried out to generate register traces for debugging
+///
+typedef enum {
+ SpdSmbus,
+ SpdInternal,
+ SpdInternalTrace,
+ SpdMax
+} SPD_SOURCE;
+
+//
+// CMI Read and Write credit configuration register defaults
+//
+typedef struct {
+ UINT32 CmiRdCreditConfigN0;
+ UINT32 CmiRdCreditConfigN1;
+ UINT32 CmiWrCreditConfigN0;
+ UINT32 CmiWrCreditConfigN1;
+ BOOLEAN Valid; /// Set to TRUE when structure is updated
+} CMI_CREDIT_CONFIG_DEFAULT;
+
+///
+/// TT Host info
+///
+typedef struct memVar {
+ UINT8 currentSocket; ///< Current socket being initialized
+ UINT8 PostCodeMinor;
+ SUB_BOOT_MODE subBootMode; ///< WarmBoot, WarmBootFast, etc.
+ UINT8 wipeMemory; ///< Write 0 to all memory to clean secrets
+ UINT8 skipMemoryInit; ///< Skip memory init based on certain conditions.
+ UINT8 ddrFreqLimit; ///< Set to limit frequency by the user
+ UINT8 chInter; ///< Number of ways to interleave channels (1,2,3, or 4)
+ UINT8 callingTrngOffstCfgOnce; ///<to prevent looping inside RMT
+ UINT8 earlyCmdClkExecuted;
+ UINT8 checkMappedOutRanks;
+#ifdef DEBUG_CODE_BLOCK
+ UINT8 earlyCtlClkSerialDebugFlag;
+#endif // DEBUG_CODE_BLOCK
+ UINT32 memSize; ///< Total physical memory size
+ UINT32 NVmemSize; ///< Total physical memory size
+ UINT32 TotalInterleavedMemSize; ///< DDR4 memory size for this socket (64MB granularity)
+ UINT32 TotalInterleavedNVMemSize; /// < Actual NVMEM interleaved.
+ UINT32 QCLKPeriod; ///< QCLK Period in pico seconds
+ UINT32 lowMemBase; ///< Mem base in 64MB units for below 4GB mem.
+ UINT32 lowMemSize; ///< Mem size in 64MB units for below 4GB mem.
+ UINT32 highMemBase; ///< Mem base in 64MB units for above 4GB mem.
+ UINT32 highMemSize; ///< Mem size in 64MB units for above 4GB mem.
+ UINT32 initialLFSRSeed;
+ UINT32 piSettingStopFlag[MAX_CH];
+ UINT8 pxcEnabled;
+ struct Socket socket[MAX_SOCKET]; ///< Per socket structure
+ struct TrainingVariable TrainingVar; ///< Local variable for DDR training
+ UINT32 NumValidPprEntries;
+ PPR_ADDR_MRC_SETUP pprAddrSetup[MAX_PPR_ADDR_ENTRIES_SPPR];
+ UINT8 pprStatus[MAX_PPR_ADDR_ENTRIES_SPPR];
+ UINT8 softPprDone[MAX_SOCKET];
+ ///
+ /// Flag to skip RowTestPPR execution, so it wont return false error
+ ///
+ BOOLEAN SkipPprRowTest[MAX_SOCKET];
+ //
+ // Avanced Memtest Failure Range tracking
+ //
+ UINT8 FailRangeInitDone[MAX_SOCKET];
+ ROW_FAIL_RANGE FailRange[MAX_CH][MAX_FAIL_RANGE];
+ UINT32 FailMax[MAX_CH]; // This is initialized to 0 prior to any memtest, indicating no failures
+ INT32 FailIndex[MAX_CH];
+ UINT8 RetryState;
+ ROW_FAIL_RANGE LastFail[MAX_CH];
+ UINT8 PprResourceAvailable[MAX_CH][MAX_DIMM * MAX_RANK_DIMM_3DS * MAX_SUBRANK_3DS][MAX_STROBE]; // Max logical ranks = 16 (2DPC, 3DS 2R-4H), each BG is bit-mapped into UINT8
+ UINT64_STRUCT AdvMemtestErrInjMask;
+ UINT8 InjectErrorMATS[MAX_CH];
+ UINT8 AmtErrInjDone;
+ BOOLEAN IsDdrMemInitDone; ///< Flag indicates if DDR memory init is done.
+
+#ifdef LRDIMM_SUPPORT
+ struct TrainingResults lrTrainRes[MAX_CH][MAX_STROBE];
+ struct lrMrecTrainingResults lrMrecTrainRes[MAX_CH][MAX_STROBE];
+ struct TrainingResults lrMrdTrainRes[MAX_CH][MAX_STROBE];
+ struct TrainingResults lrDwlTrainRes[MAX_CH][MAX_STROBE];
+ struct lrMrecTrainingResults lrCwlTrainRes[MAX_CH][MAX_STROBE];
+ struct TrainingResults lrMwdTrainRes[MAX_CH][MAX_STROBE];
+ UINT8 InPbaWaMode;
+ UINT8 InOvrRttPrkMode;
+#endif // LRDIMM_SUPPORT
+
+ UINT8 maxSubRank;
+ UINT8 currentSubRank;
+ struct TrainingResults trainRes[MAX_CH][MAX_STROBE];
+ BOOLEAN PerformanceTrackerInitialized;
+ UINT8 firstPass;
+ UINT8 previousBootError;
+ UINT8 xoverModeVar; ///< xover mode (1 = xover2:2, 0 = native 1:1)
+ UINT32 Reserved6;
+ UINT8 Reserved7[RESERVED_2];
+ EFI_GUID Reserved8[RESERVED_2];
+ UINT8 Reserved9;
+
+ SPD_SOURCE SpdSource; ///< Determines SPD data source
+ UINT8 SmbMode[MAX_SOCKET][MAX_SMB_INSTANCE]; ///< Stores type of smbus mode: 0 - I2C mode, 1 - I3C mode
+ UINT8 rankInter; ///< 1, 2, 4, or 8 way interleave
+ UINT8 RasStatePrevBoot;
+ UINT32 mccpubusno;
+ UINT32 rtDefaultValue;
+ UINT8 channelEn;
+ UINT8 runningRmt; ///< Flag to check that the RankMarginTool is currently being running
+ UINT32 lastCheckpoint[MAX_SOCKET];
+ UINT8 notRunningFromCT; ///< PostPackageRepairMain called from the CallTable (CT)
+ UINT32 chBitMask;
+ UINT8 FmcMaxCached; ///< Record how many FMC register been cached
+ UINT32 FmcCachedReads; ///< Record the amount of total FMC cache read times
+ MEM_CHIP_POLICY memChipPolicy;
+ BOOLEAN secondPass[MAX_CH][MAX_STROBE];
+ UINT8 volMemMode; ///< 0: 1LM 1:2LM 2:Undefined
+ UINT8 CacheMemType; ///< 0: DDR$DDRT Only valid if volMemMode is 2LM
+
+ UINT8 PmemCaching; // caching contorl for AppDirect
+ UINT8 EadrSupport; // eADR support
+ UINT8 EadrCacheFlushMode;
+
+ UINT8 imcInter; // Number of ways to interleave imc (1 or 2)
+ UINT32 mmiohBase; // MMIOH base in 64MB granularity
+ UINT8 read2tckCL[MAX_CH]; // increases to CL or CWL based on TCLK preamble
+ UINT8 write2tckCWL[MAX_CH];
+ UINT8 memInterleaveGran1LM;
+ struct Reserved168 Reserved168;
+ UINT32 optionsNgn;
+ UINT8 setSecureEraseAllDIMMs;
+ UINT8 setSecureEraseSktCh[MAX_SOCKET][MAX_CH];
+ UINT8 SetSecureEraseSktChHob[MAX_SOCKET][MAX_CH];
+ BOOLEAN AdrStateForPmemModule[MAX_SOCKET][MAX_CH]; // ADR state for Intel PMEM Modules
+ UINT8 AppDirectMemoryHole;
+ UINT8 LsxImplementation;
+ UINT32 NvdimmSmbusMaxAccessTime;
+ UINT32 NvdimmSmbusReleaseDelay;
+ MEMORY_MAP_BLOCK_DECODER_DATA BlockDecoderData; // Block decoder data for memory map
+ UINT8 ExtendedType17;
+
+ BOOLEAN DdrtReadPendingQueueTimedOut[MAX_SOCKET][MAX_CH]; ///< Each element represents whether a given channel has had a DDRT Read Pending Queue (RPQ) timeout
+ BOOLEAN DdrtReadPendingQueueCreditLimitSet[MAX_SOCKET][MAX_CH]; ///< Each element represents whether a given channel has the DDRT Read Pending (RPQ) credit limit enabled
+ BOOLEAN DdrtSkipRpqDrainInCpgcPolling[MAX_SOCKET]; ///< Indicates whether to drain the DDRT RPQ when polling for CPGC done
+ BOOLEAN WrLvlDeNormalizeStatus[MAX_SOCKET][MAX_CH][MAX_DIMM];
+ BOOLEAN EkvPresent; ///< Set if EKV controller on system
+ BOOLEAN BwvPresent; ///< Set if BWV controller on system
+ BOOLEAN FastWarmBootDowngraded; ///On slow boot when FWR is downgrated to SWR NVDIMMS need to do a catastrophic save to prevent data loss
+ BOOLEAN DcpmmWaitMediaReady; ///< Set on Slow Warm boots to indicate that BIOS needs to poll for Media Ready on DCPMM DIMMs after CKE is asserted
+ BOOLEAN WarmBootRequested; ///< Set on Warm boots when is not possible to detect warm boot it via subBootMode (when BIOS internally promoted warm reset to cold reset/fast cold reset)
+ CMI_CREDIT_CONFIG_DEFAULT CmiCreditConfigDefault;
+ UINT16 BiosFisRevision;
+ UINT16 MaxAveragePowerLimit; ///< Max Power limit in mW used for averaged power ( Valid range ends at 15000mW)
+ UINT16 MinAveragePowerLimit; ///< Min Power limit in mW used for averaged power ( Valid range starts from 10000mW)
+ UINT16 CurrAveragePowerLimit; ///< Current Power limit in mW used for average power
+ UINT16 MaxMbbPowerLimit; ///< Max MBB power limit ( Valid range ends at 18000mW).
+ UINT16 MinMbbPowerLimit; ///< Min MBB power limit ( Valid range starts from 15000mW).
+ UINT16 CurrMbbPowerLimit; ///< Current Power limit in mW used for MBB power
+ UINT32 MaxMbbAveragePowerTimeConstant; ///< Max MBB Average Power Time Constant
+ UINT32 MinMbbAveragePowerTimeConstant; ///< Min MBB Average Power Time Constant
+ UINT32 CurrMbbAveragePowerTimeConstant; ///< Current MBB Average POwer Time Constant
+ BOOLEAN RmtMinimumMarginCheckEnable;
+} MEM_VAR_STRUCT; // struct memVar
+
+#pragma pack(pop)
+
+#endif // _memhost_h
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h
new file mode 100644
index 0000000000..aed571f4cd
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h
@@ -0,0 +1,190 @@
+/** @file
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _memhostchipcommon_h
+#define _memhostchipcommon_h
+
+
+#include "SysHostChipCommon.h"
+#include "NGNDimmPlatformCfgData.h"
+#include <MemCommon.h>
+#include <Library/MemTypeLib.h>
+
+#define MAX_MEM_SS 8 // Max Memory Subsystems per socket
+#define MAX_CLUSTERS 4 // Maximum number of clusters supported
+
+#define MC_MAX_NODE (MAX_SOCKET * MAX_IMC) // Max number of memory nodes
+#define MAX_DIMM 2 // Max DIMM per channel
+#define MAX_DDRT_DIMM_PER_CH 1 // Max DDRT DIMM per channel
+#define MAX_UNIQUE_NGN_DIMM_INTERLEAVE 2 // Max number of unique interleaves for NGN DIMM
+
+#define MAX_BITS 72 // Max number of data bits per rank
+#define MAX_TECH 19 // Number of entries in DRAM technology table
+#define MAX_TECH_DDRT 8
+
+#define TAD_RULES 8 // Number of near memory TAD rule registers
+#define FM_TAD_RULES 12 // Number of far memory TAD rule registers
+#define FM_TAD_RULES_10NM 4 // Number of far memory only TAD rule registers in 10nm
+#define MAX_TAD_RULES (TAD_RULES + FM_TAD_RULES) // Number of combined near and far TAD rules
+#define MAX_TAD_RULES_10NM (TAD_RULES + FM_TAD_RULES_10NM) // Number of combined near and far TAD rules in 10nm
+#define MAX_TAD_WAYS 3 // Number of interleave ways for TAD RULES
+#define MAX_RT_WAYS 8 // Max. interleave ways for DDR/DDRT RTs in 256B McChan granularity
+#define MAX_RT 2 // Number of RTs per route table type
+#define MAX_FPGA_REMOTE_SAD_RULES 2 // Maximum FPGA sockets exists on ICX platform
+
+#define MAX_STROBE 18 // Number of strobe groups
+
+#define MAX_RANK_DIMM_3DS 2 // Max physical CS ranks per 3DS DIMM
+#define MAX_SUBRANK_3DS 4 // Max logical C[2:0] subranks per CS in 3DS DIMM
+#define MAX_SPARE_RANK 2 // Max number of spare ranks in a channel
+#define MAX_SUBRANK 2 // Max subranks per logical rank
+#define SPD_MODULE_PART_DDR4 20 // Number of bytes of module part - DDR4
+#define SPD_MODULE_SERIAL 4 // Number of bytes of Module Serial Number
+#define MAX_PARTIAL_MIRROR 4 //Maximum number of partial mirror regions that can be created
+
+#define CONVERT_64MB_TO_4KB_GRAN 14
+#define CONVERT_4KB_TO_64MB_GRAN 14
+#define CONVERT_64MB_TO_GB_GRAN 4
+#define CONVERT_GB_TO_64MB_GRAN 4
+#define CONVERT_64MB_TO_MB_GRAN 6
+#define CONVERT_MB_TO_64MB_GRAN 6
+#define CONVERT_64MB_TO_4GB_GRAN 6
+#define CONVERT_4GB_TO_64MB_GRAN 6
+#define CONVERT_64MB_TO_32GB_GRAN 9
+#define CONVERT_64B_TO_64MB 20
+#define CONVERT_B_TO_MB 20
+#define CONVERT_MB_TO_B 20
+#define CONVERT_B_TO_64MB 26
+#define CONVERT_64MB_TO_B 26
+#define CONVERT_64MB_TO_128MB_GRAN 1
+#define CONVERT_256MB_TO_64MB_GRAN 2
+#define CONVERT_64MB_TO_256MB_GRAN 2
+#define CONVERT_B_TO_256MB_GRAN 28
+
+#define MEM_1GB_AT_64MB_GRAN 0x10
+#define MEM_1GB_AT_4KB_GRAN 0x40000
+
+#define GB_TO_MB_CONVERSION 1024
+
+#define BITMAP_CH0_CH1_CH2 ( ( BIT0 ) | (BIT1 ) | (BIT2) )
+#define BITMAP_CH0_CH1 ( ( BIT0 ) | (BIT1 ) )
+#define BITMAP_CH1_CH2 ( ( BIT1 ) | (BIT2 ) )
+#define BITMAP_CH0_CH2 ( ( BIT0 ) | (BIT2 ) )
+#define BITMAP_CH0 BIT0
+#define BITMAP_CH1 BIT1
+#define BITMAP_CH2 BIT2
+
+#define CONVERT_64MB_TO_BYTE 64 * 1024 * 1024
+
+//
+// Define the WDB line. The WDB line is like the cache line.
+//
+#define MRC_WDB_LINES 32
+#define MRC_WDB_LINE_SIZE 64
+
+#define MAX_PHASE_IN_FINE_ADJUSTMENT 64
+#define MAX_PHASE_IN_READ_ADJ_DQ_RX_DFE 152 // larger range for added DQ 1/16 PI adjustments
+
+#pragma pack(1)
+typedef struct TADTable {
+ UINT8 Enable; // Rule enable
+ UINT8 SADId; // SAD Index
+ UINT8 socketWays; // Socket Interleave ways for TAD
+ UINT8 NmTadIndex; // Index of near memory TAD
+ UINT8 FmTadIndex; // Index of far memory TAD
+ UINT32 Limit; // Limit of the current TAD entry
+ UINT8 TargetGran; // MC granularity of 1LM forward and 2LM forward/reverse address decoding.
+ UINT8 ChGran; // Channel granularity of 1LM forward and 2LM forward/reverse address decoding.
+} TAD_TABLE;
+
+typedef struct SADTable {
+ UINT8 Enable; // Rule enable
+ MEM_TYPE type; // Bit map of memory region types, See defines 'MEM_TYPE_???' above for bit definitions of the ranges.
+ UINT8 granularity; // Interleave granularities for current SAD entry. Possible interleave granularity options depend on the SAD entry type. Note that SAD entry type BLK Window and CSR/Mailbox/Ctrl region do not support any granularity options
+ UINT32 Base; // Base of the current SAD entry
+ UINT32 Limit; // Limit of the current SAD entry
+ UINT8 ways; // Interleave ways for SAD
+ UINT8 channelInterBitmap[MAX_IMC]; //Bit map to denote which DDR4/NM channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
+ UINT8 FMchannelInterBitmap[MAX_IMC]; //Bit map to denote which FM channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
+ UINT8 NmChWays; // Channel Interleave ways for SAD. Represents channelInterBitmap ways for DDR4/NM.
+ UINT8 FmChWays; // Channel Interleave ways for SAD. Represents FMchannelInterBitmap ways for DDRT.
+ UINT8 imcInterBitmap; // Bit map to denote which IMCs are interleaved from this socket.
+ UINT8 NmImcInterBitmap; // Bit map to denote which IMCs are interleaved from this socket as NM (10nm usage only).
+ BOOLEAN local; //0 - Remote 1- Local
+ UINT8 IotEnabled; // To indicate if IOT is enabled
+ UINT8 mirrored; //To Indicate the SAD is mirrored while enabling partial mirroring
+ UINT8 Attr;
+ UINT8 tgtGranularity; // Interleave mode for target list
+ UINT8 Cluster; // SNC cluster, hemisphere, or quadrant index.
+} SAD_TABLE;
+
+typedef struct IMC {
+ UINT8 imcEnabled[MAX_IMC];
+ UINT8 imcNum; // imc Number
+ UINT32 memSize; // DDR4 memory size for this imc (64MB granularity)
+ UINT32 NVmemSize; // NV Memory size of this ha
+ UINT32 volSize; // Volatile size of the NVM dimms for this imc (64MB granularity)
+ UINT32 NonVolSize; // Non-Volatile size of the NVM DIMMs for this iMC (64MB granularity)
+ UINT32 perSize; // Persistent size of the NVM dimms for this imc (64MB granularity)
+ UINT32 WbCachePerSize; // Persistent WB cache (AD-WB) size of the NVM dimms for this imc (64MB granularity)
+ UINT8 TADintList[MAX_TAD_RULES][MAX_TAD_WAYS]; // TAD interleave list for this socket
+ UINT8 TADChnIndex[MAX_TAD_RULES][MAX_TAD_WAYS]; // Corresponding TAD channel indexes (per channel)
+ INT32 TADOffset[MAX_TAD_RULES][MAX_TAD_WAYS]; // Corresponding TAD offsets (per channel)
+ TAD_TABLE TAD[MAX_TAD_RULES]; // TAD table
+ UINT8 imcChannelListStartIndex; // Index in channel list of first channel on this imc
+} IMC_INFO_STRUCT;
+
+typedef struct firmwareRev {
+ UINT8 majorVersion;
+ UINT8 minorVersion;
+ UINT8 hotfixVersion;
+ UINT16 buildVersion;
+} FIRMWARE_REV;
+
+typedef struct Reserved168 {
+ UINT8 Reserved79;
+ UINT8 Reserved80;
+ UINT8 Reserved83;
+ UINT8 Reserved86[MAX_SOCKET * MAX_IMC];
+ UINT8 Reserved89;
+ UINT8 Reserved87;
+ UINT8 Reserved148;
+} MEM_RESERVED_1;
+
+#pragma pack()
+
+#define MAX_SI_SOCKET 8 // Maximum silicon supported socket number
+
+typedef struct {
+ UINT32 BlockDecoderBase; // 64MB unit
+ UINT32 BlockDecoderLimit;
+ UINT8 BlockSocketEnable;
+ UINT8 BlockMcChEn[MAX_SI_SOCKET][MAX_IMC][MAX_MC_CH];
+} MEMORY_MAP_BLOCK_DECODER_DATA;
+
+//
+// Chip specific section of struct Socket
+//
+#define SOCKET_CHIP \
+ struct SADTable SAD[MAX_DRAM_CLUSTERS * MAX_SAD_RULES]; \
+ UINT8 DdrtChRouteTable[MAX_RT][MAX_RT_WAYS]; /* PMEM/BLK memory channel route table 2 for CR protocol */ \
+ UINT8 DdrtTgtRouteTable[MAX_RT][MAX_RT_WAYS]; /* PMEM/BLK memory target route table 2 for CR protocol */ \
+ struct IMC imc[MAX_IMC]; \
+ UINT8 ddrClkData; \
+ UINT8 ddrClkType; \
+ UINT8 ddrFreqCheckFlag; \
+ UINT8 SktSkuValid; \
+ UINT32 SktSkuLimit; \
+ UINT32 SktTotMemMapSPA; \
+ UINT32 SktPmemMapSpa; \
+ UINT32 SktMemSize2LM; \
+ UINT8 maxFreq; \
+ UINT8 clkSwapFixDis; \
+ UINT8 ioInitdone;
+
+#endif // _memhostchipcommon_h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h
new file mode 100644
index 0000000000..3c8abe4dbb
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h
@@ -0,0 +1,25 @@
+/** @file
+ MemRegs.h
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _memregs_h
+#define _memregs_h
+
+//
+// NVM DIMM Reg Structs
+//
+
+typedef union {
+ struct {
+ UINT8 module_type : 4;
+ UINT8 module_revision : 4;
+ } Bits;
+ UINT8 Data;
+} SPD_AEP_MOD_REVISION_STRUCT;
+
+#endif // _memregs_h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h
new file mode 100644
index 0000000000..eba0a14354
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h
@@ -0,0 +1,28 @@
+/** @file
+ MrcCommonTypes.h
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MrcCommonTypes_h_
+#define _MrcCommonTypes_h_
+
+#include "DataTypes.h"
+#include <MemCommon.h>
+
+typedef struct {
+ MRC_MST MemSsType;
+ UINT32 NumDataCh; // Total number of physical data channels in the MemSS
+ UINT32 NumDataIoFubsPerCh; // Total number of IO fubs in a data channel
+ UINT32 NumDataIoFubsPerSubCh; // Total number of IO fubs in a data sub channel
+ UINT32 NumDqLanesPerCh; // Number of active DQ lanes in a data channel (bus width)
+} MRC_MSM;
+
+typedef enum {
+ MrcTtDelim = MAX_INT32
+} MRC_TT;
+
+#endif // _MrcCommonTypes_h_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h
new file mode 100644
index 0000000000..81ea4fc373
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h
@@ -0,0 +1,22 @@
+/** @file
+ NGNDimmPlatformCfgData.h
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _NGN_DIMM_PLATFORM_CONFIG_DATA_H_
+#define _NGN_DIMM_PLATFORM_CONFIG_DATA_H_
+
+#define NGN_MAX_MANUFACTURER_STRLEN 2
+#define NGN_MAX_SERIALNUMBER_STRLEN 4
+#define NGN_MAX_PARTNUMBER_STRLEN 20
+#define NGN_MAX_UID_STRLEN 9
+#define NGN_FW_VER_LEN 4
+
+#define NGN_LOG_TYPE_NUM 2
+#define NGN_LOG_LEVEL_NUM 2
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h
new file mode 100644
index 0000000000..d419edea4a
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h
@@ -0,0 +1,193 @@
+/** @file
+ SysHost.h
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SYS_HOST_H_
+#define _SYS_HOST_H_
+
+#include "SysHostChipCommon.h"
+
+
+
+#define MAX_LINE 256
+
+#define RC_SIM_FASTCADB 0
+
+
+
+typedef struct sysHost SYSHOST, *PSYSHOST;
+
+#include "DataTypes.h"
+#include "SysHostChipCommon.h"
+#include "PlatformHost.h"
+#include "MemHost.h"
+#include <Ppi/MemoryPolicyPpi.h>
+
+///
+/// Enhanced Warning Log Header
+///
+typedef struct {
+ EFI_GUID EwlGuid; /// GUID that uniquely identifies the EWL revision
+ UINT32 Size; /// Total size in bytes including the header and buffer
+ UINT32 FreeOffset; /// Offset of the beginning of the free space from byte 0
+ /// of the buffer immediately following this structure
+ /// Can be used to determine if buffer has sufficient space for next entry
+ UINT32 Crc; /// 32-bit CRC generated over the whole size minus this crc field
+ /// Note: UEFI 32-bit CRC implementation (CalculateCrc32) (References [7])
+ /// Consumers can ignore CRC check if not needed.
+ UINT32 Reserved; /// Reserved for future use, must be initialized to 0
+} EWL_HEADER;
+
+///
+/// Enhanced Warning Log Spec defined data log structure
+///
+typedef struct {
+ EWL_HEADER Header; /// The size will vary by implementation and should not be assumed
+ UINT8 Buffer[4 * 1024]; /// The spec requirement is that the buffer follow the header
+} EWL_PUBLIC_DATA;
+
+///
+/// EWL private data structure. This is going to be implementation dependent
+/// When we separate OEM hooks via a PPI, we can remove this
+///
+typedef struct {
+ UINT32 bufSizeOverflow; // Number of bytes that could not be added to buffer
+ UINT32 numEntries; // Number of entries currently logged
+ EWL_PUBLIC_DATA status; // Spec defined EWL
+} EWL_PRIVATE_DATA;
+
+#pragma pack(1)
+
+///
+/// System NVRAM structure
+//
+struct sysNvram {
+ struct memNvram mem;
+ struct commonNvram common;
+}; //struct sysNvram
+
+#pragma pack()
+
+//
+// -----------------------------------------------------------------------------
+// Variable structures
+//
+
+typedef struct CpuidRegisterInfo {
+ UINT32 Eax;
+ UINT32 Ebx;
+ UINT32 Ecx;
+ UINT32 Edx;
+} CPUID_REGISTER_INFO;
+
+typedef struct processorCommon {
+ UINT32 capid0;
+ UINT32 capid1;
+ UINT32 capid2;
+ UINT32 capid3;
+ UINT32 capid4;
+ UINT32 capid5;
+ UINT32 capid6lo;
+ UINT32 capid6hi;
+ CPUID_REGISTER_INFO ExtCpuid7;
+ CPUID_REGISTER_INFO ExtCpuid1B;
+} PROCESSOR_COMMON;
+
+///
+/// Common variable structure
+///
+struct commonVar {
+ RC_VERSION RcVersion; ///< Version of the reference code last executed
+ UINT32 rcStatus; ///< Non-zero indicates fatal error
+ UINT8 chopType[MAX_SOCKET]; ///< HCC, MCC, LCC, MCC-DE, LCC-DE (HSX family only)
+ UINT8 sbsp; ///< Non-zero value indicates that the socket is System BSP
+ UINT16 pmBase; ///< Power Management Base Address
+ UINT32 tohmLimit;
+ UINT32 JumpBuffer;
+
+#ifdef COMPRESS_RC
+ UINT32 rcSrc; ///< Decompression source code pointer
+ UINT32 rcDest; ///< Decompression destination pointer
+ UINT32 rcDecompressSourceAddr; ///< Decompression routine address of type func(UINT8*Src, UINT8*Dest);
+#endif // #ifdef COMPRESS_RC
+
+ UINT32 heapBase;
+ UINT32 heapSize;
+
+ UINT32 oemVariable;
+ EWL_PRIVATE_DATA ewlPrivateData; // implementation data for EWL
+ struct processorCommon procCom[MAX_SOCKET];
+ UINT32 MicroCodeRev;
+
+#define MAX_PROMOTE_WARN_LIMIT 90
+ UINT32 promoteWarnLimit;
+ UINT16 promoteWarnList[MAX_PROMOTE_WARN_LIMIT];
+ UINT32 printfDepth; ///< handle nested calls to get/releasePrintFControl
+ UINT32 meRequestedSize; /// Size of the memory range requested by ME FW, in MB
+ UINT32 ieRequestedSize; /// Size of the memory range requested by IE FW, in MB
+}; //struct commonVar
+
+///
+/// System Variable structure
+///
+struct sysVar {
+ struct memVar mem;
+ struct commonVar common;
+}; //struct sysVar
+
+// Bit definitions for commonSetup.options
+// ; PROMOTE_WARN_EN enables warnings to be treated as fatal error
+// ; PROMOTE_MRC_WARN_EN enables MRC warnings to be treated as fatal error
+// ; HALT_ON_ERROR_EN enables errors to loop forever
+// ; HALT_ON_ERROR_AUTO auto reset with Maximum Serial port debug message level when fatal error is encountered.
+#define PROMOTE_WARN_EN BIT0
+#define PROMOTE_MRC_WARN_EN BIT1
+#define HALT_ON_ERROR_EN BIT2
+#define HALT_ON_ERROR_AUTO BIT3
+
+typedef union _RMT_FLAGS {
+ UINT8 Data;
+ struct {
+ UINT8 EnableShortFormat :1;
+ UINT8 SkipPerBitMargin :1;
+ UINT8 SkipDisplayPerBitEyes :1;
+ UINT8 SkipDisplayPerBitMargins :1;
+ UINT8 SkipRmtRxDqs :1;
+ UINT8 SkipRmtRxVref :1;
+ UINT8 SkipRmtTxDq :1;
+ UINT8 SkipRmtTxVref :1;
+ } Bits;
+} RMT_FLAGS;
+
+///
+/// System Host (root structure)
+///
+struct sysHost {
+ struct sysVar var; ///< variable, volatile data
+ struct sysNvram nvram; ///< variable, non-volatile data for S3 and fast path
+ UINT8 ChannelModeOperation;
+ UINT32 cpuFlows; ///< Which flows to take
+ UINT32 ktiFlows;
+ UINT32 qpiFlows;
+ UINT32 opioFlows;
+ UINT32 memFlows;
+ UINT32 memFlowsExt;
+ UINT32 memFlowsExt2;
+ UINT32 memFlowsExt3;
+
+
+ UINT32 MrcHooksServicesPpi;
+ UINT32 MrcHooksChipServicesPpi;
+
+ BOOLEAN PrintCsr; // Enable / disable printing CSR
+ BOOLEAN MtrrCheck; // Check number of used MTRR's
+ INT32 DdrioUltSupport;
+ RMT_FLAGS RmtFlags;
+};
+
+#endif // #ifndef _SYS_HOST_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h
new file mode 100644
index 0000000000..a507c4fe23
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h
@@ -0,0 +1,101 @@
+/** @file
+ SysHostChipCommon.h
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SYSHOST_CHIP_COMMON_H_
+#define _SYSHOST_CHIP_COMMON_H_
+
+#include <DataTypes.h>
+#include <RcVersion.h>
+
+//
+// CpuPciAccess
+//
+#define READ_ACCESS 0
+#define WRITE_ACCESS 1
+
+//
+// -----------------------------------------------------------------------------
+// Nvram structures
+//
+#pragma pack(1)
+
+typedef union {
+ struct {
+ UINT32 Bit0:1;
+ UINT32 Bit1:1;
+ UINT32 Bit2:1;
+ UINT32 Bit3:1;
+ UINT32 Bit4:1;
+ UINT32 Bit5:1;
+ UINT32 Bit6:1;
+ UINT32 Bit7:1;
+ UINT32 Bit8:1;
+ UINT32 Bit9:1;
+ UINT32 Bit10:1;
+ UINT32 Bit11:1;
+ UINT32 Bit12:1;
+ UINT32 Bit13:1;
+ UINT32 Bit14:1;
+ UINT32 Bit15:1;
+ UINT32 Bit16:1;
+ UINT32 Bit17:1;
+ UINT32 Bit18:1;
+ UINT32 Bit19:1;
+ UINT32 Bit20:1;
+ UINT32 Bit21:1;
+ UINT32 Bit22:1;
+ UINT32 Bit23:1;
+ UINT32 Bit24:1;
+ UINT32 Bit25:1;
+ UINT32 Bit26:1;
+ UINT32 Bit27:1;
+ UINT32 Bit28:1;
+ UINT32 Bit29:1;
+ UINT32 Bit30:1;
+ UINT32 Bit31:1;
+ } Bits;
+ UINT32 Data;
+} DUMMY_REG;
+
+//
+// -----------------------------------------------------------------------------
+// Nvram structures
+//
+
+struct commonNvram {
+ UINT64_STRUCT cpuFreq;
+ RC_VERSION RcVersion; // Version of the reference code last executed
+ UINT8 platformType;
+ DUMMY_REG TsegBase;
+ DUMMY_REG TsegLimit;
+ DUMMY_REG MeMemLowBaseAddr;
+ DUMMY_REG MeMemHighBaseAddr;
+ DUMMY_REG MeMemLowLimit;
+ DUMMY_REG MeMemHighLimit;
+ DUMMY_REG MeNcMemLowBaseAddr;
+ DUMMY_REG MeNcMemHighBaseAddr;
+ DUMMY_REG MeNcMemLowLimit;
+ DUMMY_REG MeNcMemHighLimit;
+ DUMMY_REG MeNcMemLowRac;
+ DUMMY_REG MeNcMemLowWac;
+ UINT32 IeRequestedSize;
+ DUMMY_REG IeMemLowBaseAddr;
+ DUMMY_REG IeMemHighBaseAddr;
+ DUMMY_REG IeMemLowLimit;
+ DUMMY_REG IeMemHighLimit;
+ DUMMY_REG IeNcMemLowBaseAddr;
+ DUMMY_REG IeNcMemHighBaseAddr;
+ DUMMY_REG IeNcMemLowLimit;
+ DUMMY_REG IeNcMemHighLimit;
+ DUMMY_REG IeNcMemHighRac;
+ DUMMY_REG IeNcMemHighWac;
+};
+#pragma pack()
+
+#endif // _SYSHOST_CHIP_COMMON_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h
new file mode 100644
index 0000000000..68c2f447c9
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h
@@ -0,0 +1,28 @@
+/** @file
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _mem_defaults_h
+#define _mem_defaults_h
+
+//
+// SMBUS Clk Period default set by PcdMrcSmbusSpeedDefault
+//
+#define SMB_CLK_100K 0
+#define SMB_CLK_400K 1
+#define SMB_CLK_700K 2
+#define SMB_CLK_1M 3
+
+#define MAX_PARTIAL_MIRROR 4 //Maximum number of partial mirror regions that can be created
+
+//
+// Limit of channels to be tested by AdvMemTest
+//
+#define ADV_MT_LIST_LIMIT 8
+#define ADV_MT_EMPTY_MASK 0xFFFFFFFF
+
+#endif // _mem_defaults_h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h
new file mode 100644
index 0000000000..aa9b570f63
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h
@@ -0,0 +1,35 @@
+/** @file
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _platformhost_h
+#define _platformhost_h
+
+#include <PlatformInfoTypes.h>
+
+//
+// Maximum number of processor sockets and cores per socket supported by platform.
+//
+#include <MaxSocket.h>
+#include <MaxCore.h>
+
+//
+// Post Package Repair
+//
+
+#define MAX_PPR_ADDR_ENTRIES 20
+#define MAX_PPR_ADDR_ENTRIES_SPPR 40
+
+#if !defined(SILENT_MODE)
+#define DEBUG_CODE_BLOCK 1
+#endif
+
+#define UBIOS_GENERATION_EN BIT22 // flag to enable DfxUbiosGeneration from Simics
+#define HYBRID_SYSTEM_LEVEL_EMULATION_EN BIT23 // flag to enable DfxHybridSystemLevelEmulation from Simics
+
+#endif // _platformhost_h
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c b/Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c
new file mode 100644
index 0000000000..453e409523
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c
@@ -0,0 +1,243 @@
+/** @file
+ Sample to provide FSP wrapper related function.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/DebugLib.h>
+#include <FspmUpd.h>
+#include <Ppi/UpiPolicyPpi.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/HobLib.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Library/MemoryAllocationLib.h>
+
+VOID *
+GetPlatformNvs(
+)
+{
+ EFI_STATUS Status;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *PeiVariable;
+ VOID *DataBuffer;
+ UINT32 DataBufferSize;
+ UINTN VarAttrib;
+ CHAR16 EfiMemoryConfigVariable[] = L"MemoryConfig";
+
+ DEBUG ((EFI_D_INFO, "Start PlatformGetNvs\n"));
+
+ Status = PeiServicesLocatePpi (
+ &gEfiPeiReadOnlyVariable2PpiGuid,
+ 0,
+ NULL,
+ (VOID **) &PeiVariable
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "PlatformGetNvs: PeiServicesLocatePpi not found\n"));
+ ASSERT (FALSE);
+ return NULL;
+ }
+
+ VarAttrib = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ DataBufferSize = 0;
+ DataBuffer = NULL;
+
+ Status = PeiVariable->GetVariable (
+ PeiVariable,
+ EfiMemoryConfigVariable,
+ &gFspNonVolatileStorageHobGuid,
+ (UINT32*)&VarAttrib,
+ &DataBufferSize,
+ NULL
+ );
+ if (Status == EFI_NOT_FOUND) {
+ DEBUG ((EFI_D_ERROR, "PlatformGetNvs: gEfiMemoryConfigDataGuid Variable not found\n"));
+ return NULL;
+ }
+
+ if (Status != EFI_BUFFER_TOO_SMALL) {
+ DEBUG ((EFI_D_ERROR, "PlatformGetNvs: gEfiMemoryConfigDataGuid Get Error %r\n", Status));
+ ASSERT (FALSE);
+ }
+
+ DataBuffer = AllocateZeroPool(DataBufferSize);
+ Status = PeiVariable->GetVariable (
+ PeiVariable,
+ EfiMemoryConfigVariable,
+ &gFspNonVolatileStorageHobGuid,
+ (UINT32*)&VarAttrib,
+ &DataBufferSize,
+ DataBuffer
+ );
+ if (EFI_ERROR(Status)) {
+ DEBUG ((EFI_D_ERROR, "PlatformGetNvs: gEfiMemoryConfigDataGuid Variable Error %r\n", Status));
+ return NULL;
+ }
+ DEBUG ((EFI_D_INFO, "PlatformGetNvs: GetNVS %x %x\n", DataBuffer, DataBufferSize));
+ return DataBuffer;
+}
+
+VOID
+EFIAPI
+UpdateFspmUpdData (
+ IN OUT VOID *FspUpdRgnPtr
+ )
+{
+ FSPM_UPD *FspmUpd;
+ EFI_STATUS Status;
+ UPI_POLICY_PPI *UpiPolicyPpi;
+ KTI_HOST_IN *Upi;
+ UINTN Index;
+ VOID *FSPTempMem;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+
+ Status = PeiServicesLocatePpi (&gUpiSiPolicyPpiGuid, 0, NULL, &UpiPolicyPpi);
+ ASSERT_EFI_ERROR(Status);
+
+ Upi = &UpiPolicyPpi->Upi;
+ FspmUpd = (FSPM_UPD*)FspUpdRgnPtr;
+
+ FSPTempMem = (VOID *)(UINTN)(PcdGet32(PcdTemporaryRamBase) + PcdGet32(PcdPeiTemporaryRamRcHeapSize));;
+ if (FSPTempMem != NULL) {
+ FspmUpd->FspmArchUpd.StackBase = (VOID*)(((UINTN)FSPTempMem) & (~0xFFF));
+ FspmUpd->FspmArchUpd.StackSize = PcdGet32(PcdFspTemporaryRamSize);
+ }
+
+ for (Index = 0; Index < MAX_SOCKET; Index ++) {
+ FspmUpd->FspmConfig.BusRatio[Index] = Upi->BusRatio[Index];
+ FspmUpd->FspmConfig.KtiFpgaEnable[Index] = Upi->KtiFpgaEnable[Index];
+ }
+
+ FspmUpd->FspmConfig.D2KCreditConfig = Upi->D2KCreditConfig;
+ FspmUpd->FspmConfig.SnoopThrottleConfig = Upi->SnoopThrottleConfig;
+ FspmUpd->FspmConfig.LegacyVgaSoc = Upi->LegacyVgaSoc;
+ FspmUpd->FspmConfig.LegacyVgaStack = Upi->LegacyVgaStack;
+ FspmUpd->FspmConfig.P2pRelaxedOrdering = Upi->P2pRelaxedOrdering;
+ FspmUpd->FspmConfig.SncEn = Upi->SncEn;
+ FspmUpd->FspmConfig.UmaClustering = Upi->UmaClustering;
+ FspmUpd->FspmConfig.IoDcMode = Upi->IoDcMode;
+ FspmUpd->FspmConfig.DegradePrecedence = Upi->DegradePrecedence;
+ FspmUpd->FspmConfig.Degrade4SPreference = Upi->Degrade4SPreference;
+ FspmUpd->FspmConfig.DirectoryModeEn = Upi->DirectoryModeEn;
+ FspmUpd->FspmConfig.XptPrefetchEn = Upi->XptPrefetchEn;
+ FspmUpd->FspmConfig.KtiPrefetchEn = Upi->KtiPrefetchEn;
+ FspmUpd->FspmConfig.XptRemotePrefetchEn = Upi->XptRemotePrefetchEn;
+ FspmUpd->FspmConfig.DdrtQosMode = Upi->DdrtQosMode;
+ FspmUpd->FspmConfig.KtiLinkSpeedMode = Upi->KtiLinkSpeedMode;
+ FspmUpd->FspmConfig.KtiLinkSpeed = Upi->KtiLinkSpeed;
+ FspmUpd->FspmConfig.KtiLinkL0pEn = Upi->KtiLinkL0pEn;
+ FspmUpd->FspmConfig.KtiLinkL1En = Upi->KtiLinkL1En;
+ FspmUpd->FspmConfig.KtiFailoverEn = Upi->KtiFailoverEn;
+ FspmUpd->FspmConfig.KtiLbEn = Upi->KtiLbEn;
+ FspmUpd->FspmConfig.KtiCrcMode = Upi->KtiCrcMode;
+ FspmUpd->FspmConfig.KtiCpuSktHotPlugEn = Upi->KtiCpuSktHotPlugEn;
+ FspmUpd->FspmConfig.KtiCpuSktHotPlugTopology = Upi->KtiCpuSktHotPlugTopology;
+ FspmUpd->FspmConfig.KtiSkuMismatchCheck = Upi->KtiSkuMismatchCheck;
+ FspmUpd->FspmConfig.IrqThreshold = Upi->IrqThreshold;
+ FspmUpd->FspmConfig.TorThresLoctoremNorm = Upi->TorThresLoctoremNorm;
+ FspmUpd->FspmConfig.TorThresLoctoremEmpty = Upi->TorThresLoctoremEmpty;
+ FspmUpd->FspmConfig.MbeBwCal = Upi->MbeBwCal;
+ FspmUpd->FspmConfig.TscSyncEn = Upi->TscSyncEn;
+ FspmUpd->FspmConfig.StaleAtoSOptEn = Upi->StaleAtoSOptEn;
+ FspmUpd->FspmConfig.LLCDeadLineAlloc = Upi->LLCDeadLineAlloc;
+ FspmUpd->FspmConfig.SplitLock = Upi->SplitLock;
+ FspmUpd->FspmConfig.mmCfgBase = Upi->mmCfgBase;
+ FspmUpd->FspmConfig.mmCfgSize = Upi->mmCfgSize;
+ FspmUpd->FspmConfig.mmiohBase = Upi->mmiohBase;
+ FspmUpd->FspmConfig.CpuPaLimit = Upi->CpuPaLimit;
+ FspmUpd->FspmConfig.highGap = Upi->highGap;
+ FspmUpd->FspmConfig.mmiohSize = Upi->mmiohSize;
+ FspmUpd->FspmConfig.isocEn = Upi->isocEn;
+ FspmUpd->FspmConfig.dcaEn = Upi->dcaEn;
+ FspmUpd->FspmConfig.BoardTypeBitmask = Upi->BoardTypeBitmask;
+ FspmUpd->FspmConfig.AllLanesPtr = Upi->AllLanesPtr;
+ FspmUpd->FspmConfig.PerLanePtr = Upi->PerLanePtr;
+ FspmUpd->FspmConfig.AllLanesSizeOfTable = Upi->AllLanesSizeOfTable;
+ FspmUpd->FspmConfig.PerLaneSizeOfTable = Upi->PerLaneSizeOfTable;
+ FspmUpd->FspmConfig.WaitTimeForPSBP = Upi->WaitTimeForPSBP;
+ FspmUpd->FspmConfig.IsKtiNvramDataReady = Upi->IsKtiNvramDataReady;
+ FspmUpd->FspmConfig.WaSerializationEn = Upi->WaSerializationEn;
+ FspmUpd->FspmConfig.KtiInEnableMktme = Upi->KtiInEnableMktme;
+ FspmUpd->FspmConfig.BoardId = PlatformInfo->BoardId;
+ FspmUpd->FspmArchUpd.NvsBufferPtr = GetPlatformNvs();
+}
+
+/**
+ This function overrides the default configurations in the FSP-S UPD data region.
+
+ @param[in,out] FspUpdRgnPtr A pointer to the UPD data region data strcture.
+
+**/
+VOID
+EFIAPI
+UpdateFspsUpdData (
+ IN OUT VOID *FspUpdRgnPtr
+ )
+{
+}
+
+/**
+ Update TempRamExit parameter.
+
+ @note At this point, memory is ready, PeiServices are available to use.
+
+ @return TempRamExit parameter.
+**/
+VOID *
+EFIAPI
+UpdateTempRamExitParam (
+ VOID
+ )
+{
+ return NULL;
+}
+
+/**
+ Get S3 PEI memory information.
+
+ @note At this point, memory is ready, and PeiServices are available to use.
+ Platform can get some data from SMRAM directly.
+
+ @param[out] S3PeiMemSize PEI memory size to be installed in S3 phase.
+ @param[out] S3PeiMemBase PEI memory base to be installed in S3 phase.
+
+ @return If S3 PEI memory information is got successfully.
+**/
+EFI_STATUS
+EFIAPI
+GetS3MemoryInfo (
+ OUT UINT64 *S3PeiMemSize,
+ OUT EFI_PHYSICAL_ADDRESS *S3PeiMemBase
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Perform platform related reset in FSP wrapper.
+
+ This function will reset the system with requested ResetType.
+
+ @param[in] FspStatusResetType The type of reset the platform has to perform.
+**/
+VOID
+EFIAPI
+CallFspWrapperResetSystem (
+ IN UINT32 FspStatusResetType
+ )
+{
+ //
+ // Perform reset according to the type.
+ //
+
+ CpuDeadLoop();
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf b/Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
new file mode 100644
index 0000000000..625337c453
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
@@ -0,0 +1,71 @@
+## @file
+# Sample to provide FSP wrapper platform related function.
+#
+# @copyright
+# Copyright 2014 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BaseFspWrapperPlatformLibSample
+ FILE_GUID = 12F38E73-B34D-4559-99E5-AE2DCD002156
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = FspWrapperPlatformLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+################################################################################
+#
+# Sources Section - list of files that are required for the build to succeed.
+#
+################################################################################
+
+[Sources]
+ FspWrapperPlatformLib.c
+
+
+################################################################################
+#
+# Package Dependency Section - list of Package files that are required for
+# this module.
+#
+################################################################################
+
+[Packages]
+ MdePkg/MdePkg.dec
+ IntelFsp2Pkg/IntelFsp2Pkg.dec
+ IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ CedarIslandFspBinPkg/CedarIslandFspBinPkg.dec
+
+[Ppis]
+ gUpiSiPolicyPpiGuid
+ gEfiPeiReadOnlyVariable2PpiGuid
+
+[Guids]
+ gEfiPlatformInfoGuid
+ gFspNonVolatileStorageHobGuid
+
+[LibraryClasses]
+ PeiServicesLib
+
+[Pcd]
+ gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamBase ## CONSUMES
+ gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamSize
+ gIntelFsp2PkgTokenSpaceGuid.PcdFspTemporaryRamSize
+ gEfiCpRcPkgTokenSpaceGuid.PcdPeiTemporaryRamRcHeapSize ## CONSUMES
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c
new file mode 100644
index 0000000000..b06342c12a
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c
@@ -0,0 +1,259 @@
+/** @file
+ Library functions for SetupLib.
+ This library instance provides methods to access Setup option.
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <SetupLibInternal.h>
+#include <Library/IoLib.h>
+
+/**
+ Gets the data and size of a variable.
+
+ Read the EFI variable (VendorGuid/Name) and return a dynamically allocated
+ buffer, and the size of the buffer. If failure return NULL.
+
+ @param Name String part of EFI variable name
+ @param VendorGuid GUID part of EFI variable name
+ @param VariableSize Returns the size of the EFI variable that was
+ read
+
+ @return Dynamically allocated memory that contains a copy of the EFI variable.
+ Caller is responsible freeing the buffer via FreePages.
+
+ @retval NULL Variable was not read
+
+**/
+VOID *
+EFIAPI
+GetVariableAndSize (
+ IN CHAR16 *Name,
+ IN EFI_GUID *Guid,
+ IN UINTN BufferSize
+ )
+{
+ EFI_STATUS Status;
+ VOID *Buffer = NULL;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *PeiVariable;
+ CONST EFI_PEI_SERVICES **PeiServices;
+
+ PeiServices = GetPeiServicesTablePointer ();
+ (**PeiServices).LocatePpi (
+ PeiServices,
+ &gEfiPeiReadOnlyVariable2PpiGuid,
+ 0,
+ NULL,
+ &PeiVariable
+ );
+
+ Buffer = AllocatePages (EFI_SIZE_TO_PAGES (BufferSize));
+ if (Buffer == NULL) {
+ return NULL;
+ }
+ //
+ // Read variable into the allocated buffer.
+ //
+ Status = PeiVariable->GetVariable (PeiVariable, Name, Guid, NULL, &BufferSize, Buffer);
+ ASSERT_EFI_ERROR (Status);
+
+ return Buffer;
+}
+
+/**
+ Retrieves the specified group space.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates which namespace
+ to set a value from.
+ @reture GroupInfo The found group space. NULL will return if not found.
+**/
+UINTN
+InternalGetGroupInfo (
+ IN EFI_GUID *Guid
+ )
+{
+ UINTN Index;
+
+ if (Guid == NULL) {
+ return MAX_ADDRESS;
+ }
+
+ //
+ // Find the matched GUID space.
+ //
+ for (Index = 0; mSetupInfo[Index].GuidValue != NULL; Index ++) {
+ if (CompareGuid (mSetupInfo[Index].GuidValue, Guid)) {
+ break;
+ }
+ }
+
+ //
+ // No matched GUID space
+ //
+ if (mSetupInfo[Index].GuidValue == NULL) {
+ return MAX_ADDRESS;
+ }
+
+ return Index;
+}
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by OptionNumber and Guid.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] OptionNumber The option number to retrieve a current value for.
+ @param[out] DataType A pointer to basic data type of the retrieved data.
+ It is optional. It could be NULL.
+ @param[in, out] Data A pointer to the buffer to be retrieved.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid is NULL or DataSize is NULL or OptionNumber is invalid.
+ @retval EFI_BUFFER_TOO_SMALL Input data buffer is not enough.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN OUT VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ UINTN GroupIndex;
+ VOID *Variable = NULL;
+
+ if (Guid == NULL || DataSize == 0) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ GroupIndex = InternalGetGroupInfo (Guid);
+ if (GroupIndex == MAX_ADDRESS) {
+ return EFI_NOT_FOUND;
+ }
+
+ Variable = GetVariableAndSize (
+ mSetupInfo[GroupIndex].SetupName,
+ Guid,
+ mSetupInfo[GroupIndex].VariableSize
+ );
+ if (Variable == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ CopyMem (Data, (UINT8 *)Variable + OptionNumber, DataSize);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Get all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+GetEntireConfig (
+ IN OUT SETUP_DATA *SetupData
+ )
+{
+ VOID *Variable;
+ UINTN Index;
+ UINT8 *SetupDataPtr;
+
+ if (SetupData == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ SetupDataPtr = (UINT8 *)SetupData;
+ ZeroMem (SetupDataPtr, sizeof (SETUP_DATA));
+
+ for (Index = 0; mSetupInfo[Index].GuidValue != NULL; Index ++) {
+
+ Variable = NULL;
+ Variable = GetVariableAndSize (
+ mSetupInfo[Index].SetupName,
+ mSetupInfo[Index].GuidValue,
+ mSetupInfo[Index].VariableSize
+ );
+ ASSERT (Variable != NULL);
+ if (Variable == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ CopyMem (SetupDataPtr, Variable, mSetupInfo[Index].VariableSize);
+ SetupDataPtr = SetupDataPtr + mSetupInfo[Index].VariableSize;
+
+ FreePages (Variable, EFI_SIZE_TO_PAGES (mSetupInfo[Index].VariableSize));
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by OptionNumber and Guid.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] Variable Pointer to data location where variable is stored.
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid is NULL or DataSize is NULL or OptionNumber is invalid.
+ @retval EFI_BUFFER_TOO_SMALL Input data buffer is not enough.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ OUT VOID *Variable
+ )
+{
+ EFI_STATUS Status;
+ UINTN GroupIndex;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *PeiVariable;
+ CONST EFI_PEI_SERVICES **PeiServices;
+
+ if ((Guid == NULL) || (Variable == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+ GroupIndex = InternalGetGroupInfo (Guid);
+ if (GroupIndex == MAX_ADDRESS) {
+ return EFI_NOT_FOUND;
+ }
+ PeiServices = GetPeiServicesTablePointer ();
+ (**PeiServices).LocatePpi (
+ PeiServices,
+ &gEfiPeiReadOnlyVariable2PpiGuid,
+ 0,
+ NULL,
+ &PeiVariable
+ );
+
+ Status = PeiVariable->GetVariable (PeiVariable, mSetupInfo[GroupIndex].SetupName, mSetupInfo[GroupIndex].GuidValue, NULL, &mSetupInfo[GroupIndex].VariableSize, Variable);
+
+ return Status;
+}
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf
new file mode 100644
index 0000000000..b9d96f66fe
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf
@@ -0,0 +1,55 @@
+## @file
+#
+# @copyright
+# Copyright 2009 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PeiSetupLib
+ FILE_GUID = C27D6383-F718-490c-8959-CB8370263329
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SetupLib | PEIM
+
+
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources.common]
+ PeiSetupLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ ServerPlatformPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ DebugLib
+ BaseMemoryLib
+ MemoryAllocationLib
+
+[Guids]
+ gEfiSocketIioVariableGuid
+ gEfiSocketCommonRcVariableGuid
+ gEfiSocketMpLinkVariableGuid
+ gEfiSocketMemoryVariableGuid
+ gEfiSocketPowermanagementVarGuid
+ gEfiSocketProcessorCoreVarGuid
+ gEfiSetupVariableGuid
+ gPchSetupVariableGuid
+ gEfiMeRcVariableGuid
+ gEfiIeRcVariableGuid
+ gFpgaSocketVariableGuid
+ gMemBootHealthGuid
+
+[Ppis]
+ gEfiPeiReadOnlyVariable2PpiGuid
+
+[Pcd.common]
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c
new file mode 100644
index 0000000000..ba7f86732d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c
@@ -0,0 +1,253 @@
+/** @file
+ Library functions for SetupLib.
+ This library instance provides methods to access Setup option.
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi/UefiBaseType.h>
+#include <SetupTable.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/BaseLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by OptionNumber and Guid.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] OptionNumber The option number to retrieve a current value for.
+ @param[in, out] Data A pointer to the buffer to be retrieved.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid is NULL or DataSize is NULL or OptionNumber is invalid.
+ @retval EFI_BUFFER_TOO_SMALL Input data buffer is not enough.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN OUT VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ SETUP_DATA *SetupData = NULL;
+
+ if (Guid == NULL || DataSize == 0) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Retrieve the variable from PCD
+ //
+ if (CompareGuid (&gEfiSocketIioVariableGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSocketIioConfig);
+ } else if (CompareGuid (&gEfiSocketCommonRcVariableGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSocketCommonRcConfig);
+ } else if (CompareGuid (&gEfiSocketMpLinkVariableGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSocketMpLinkConfig);
+ } else if (CompareGuid (&gEfiSocketMemoryVariableGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSocketMemoryConfig);
+ } else if (CompareGuid (&gEfiSocketPowermanagementVarGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSocketPowerManagementConfig);
+ } else if (CompareGuid (&gEfiSocketProcessorCoreVarGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSocketProcessorCoreConfig);
+ } else if (CompareGuid (&gEfiSetupVariableGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdSetup);
+ } else if (CompareGuid (&gPchSetupVariableGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdPchSetup);
+ } else if (CompareGuid (&gMemBootHealthGuid, Guid)) {
+ SetupData = (SETUP_DATA*) PcdGetPtr (PcdMemBootHealthConfig);
+ }
+
+ //
+ // Grab the data from the offset
+ //
+ if (SetupData != NULL) {
+ CopyMem (Data, (UINT8*) SetupData + OptionNumber, DataSize);
+ return EFI_SUCCESS;
+ }
+
+ DEBUG ((DEBUG_ERROR, "ERROR: Unknown GetOptionData requested\n"));
+ ASSERT_EFI_ERROR (EFI_NOT_FOUND);
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function provides a means by which to set a value for a given option number.
+
+ Sets a buffer for the token specified by OptionNumber to the value specified by
+ Data and DataSize.
+ If DataSize is greater than the maximum size support by OptionNumber,
+ then set DataSize to the maximum size supported by OptionNumber.
+
+ @param[in] Guid Pointer to a 128-bit unique value that
+ designates which namespace to set a value from.
+ @param[in] OptionNumber The option number to set a current value for.
+ @param[in] Data A pointer to the buffer to set.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully updated.
+ @retval EFI_INVALID_PARAMETER OptionNumber is invalid, Guid is NULL, or Data is NULL, or DataSize is NULL.
+ @retval EFI_NOT_FOUND The given option is not found.
+ @retval EFI_UNSUPPORTED Set action is not supported.
+**/
+EFI_STATUS
+EFIAPI
+SetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ DEBUG ((DEBUG_ERROR, "ERROR: SetOptionData not implemented\n"));
+ ASSERT_EFI_ERROR (EFI_NOT_FOUND);
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Get all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+GetEntireConfig (
+ OUT SETUP_DATA *SetupData
+ )
+{
+ ZeroMem(SetupData, sizeof(SETUP_DATA) );
+
+ CopyMem (&SetupData->SocketConfig.IioConfig, PcdGetPtr (PcdSocketIioConfig), sizeof(SOCKET_IIO_CONFIGURATION));
+ CopyMem (&SetupData->SocketConfig.CommonRcConfig, PcdGetPtr (PcdSocketCommonRcConfig), sizeof(SOCKET_COMMONRC_CONFIGURATION));
+ CopyMem (&SetupData->SocketConfig.UpiConfig, PcdGetPtr (PcdSocketMpLinkConfig), sizeof(SOCKET_MP_LINK_CONFIGURATION));
+ CopyMem (&SetupData->SocketConfig.MemoryConfig, PcdGetPtr (PcdSocketMemoryConfig), sizeof(SOCKET_MEMORY_CONFIGURATION));
+ CopyMem (&SetupData->SocketConfig.PowerManagementConfig, PcdGetPtr (PcdSocketPowerManagementConfig), sizeof(SOCKET_POWERMANAGEMENT_CONFIGURATION));
+ CopyMem (&SetupData->SocketConfig.SocketProcessorCoreConfiguration, PcdGetPtr (PcdSocketProcessorCoreConfig), sizeof(SOCKET_PROCESSORCORE_CONFIGURATION));
+ CopyMem (&SetupData->SystemConfig, PcdGetPtr (PcdSetup), sizeof(SYSTEM_CONFIGURATION));
+ CopyMem (&SetupData->PchSetup, PcdGetPtr (PcdPchSetup), sizeof(PCH_SETUP));
+ CopyMem (&SetupData->MemBootHealthConfig, PcdGetPtr (PcdMemBootHealthConfig), sizeof(MEM_BOOT_HEALTH_CONFIG));
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Set all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+SetEntireConfig (
+ IN SETUP_DATA *SetupData
+ )
+{
+ DEBUG ((DEBUG_ERROR, "ERROR: SetEntireConfig not implemented\n"));
+ ASSERT_EFI_ERROR (EFI_NOT_FOUND);
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by OptionNumber and Guid.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] Variable Pointer to data location where variable is stored.
+
+ @retval EFI_SUCCESS Data is successfully retrieved.
+ @retval EFI_INVALID_PARAMETER Guid or Variable is null.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ OUT VOID *Variable
+ )
+{
+ if ((Guid == NULL) || (Variable == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (CompareGuid (&gEfiSocketIioVariableGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSocketIioConfig), sizeof(SOCKET_IIO_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gEfiSocketCommonRcVariableGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSocketCommonRcConfig), sizeof(SOCKET_COMMONRC_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gEfiSocketMpLinkVariableGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSocketMpLinkConfig), sizeof(SOCKET_MP_LINK_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gEfiSocketMemoryVariableGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSocketMemoryConfig), sizeof(SOCKET_MEMORY_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gEfiSocketPowermanagementVarGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSocketPowerManagementConfig), sizeof(SOCKET_POWERMANAGEMENT_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gEfiSocketProcessorCoreVarGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSocketProcessorCoreConfig), sizeof(SOCKET_PROCESSORCORE_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gEfiSetupVariableGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdSetup), sizeof(SYSTEM_CONFIGURATION));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gPchSetupVariableGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdPchSetup), sizeof(PCH_SETUP));
+ return EFI_SUCCESS;
+ } else if (CompareGuid (&gMemBootHealthGuid, Guid)) {
+ CopyMem (Variable, PcdGetPtr (PcdMemBootHealthConfig), sizeof(MEM_BOOT_HEALTH_CONFIG));
+ return EFI_SUCCESS;
+ }
+
+ DEBUG ((DEBUG_ERROR, "ERROR: Unknown GetSpecificConfigGuid requested\n"));
+ ASSERT_EFI_ERROR (EFI_NOT_FOUND);
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function provides a means by which to set a value for a given option number.
+
+ Sets a buffer for the token specified by OptionNumber to the value specified by
+ Data and DataSize.
+ If DataSize is greater than the maximum size support by OptionNumber,
+ then set DataSize to the maximum size supported by OptionNumber.
+
+ @param[in] Guid Pointer to a 128-bit unique value that
+ designates which namespace to set a value from.
+ @param[in] Variable Pointer to data location where variable is stored.
+
+ @retval EFI_SUCCESS Data is successfully updated.
+ @retval EFI_INVALID_PARAMETER OptionNumber is invalid, Guid is NULL, or Data is NULL, or DataSize is NULL.
+ @retval EFI_NOT_FOUND The given option is not found.
+ @retval EFI_UNSUPPORTED Set action is not supported.
+**/
+EFI_STATUS
+EFIAPI
+SetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ IN VOID *Variable
+ )
+{
+ DEBUG ((DEBUG_ERROR, "ERROR: SetSpecificConfigGuid not implemented\n"));
+ ASSERT_EFI_ERROR (EFI_NOT_FOUND);
+ return EFI_NOT_FOUND;
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
new file mode 100644
index 0000000000..c66eb07629
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
@@ -0,0 +1,59 @@
+## @file
+# Status Code Handler Driver which produces general handlers and hook them
+# onto the status code router.
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SetupLib
+ FILE_GUID = 699ECE4C-8146-4C44-97D9-D1FFC5BCDC11
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SetupLib | PEIM DXE_DRIVER DXE_SMM_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER
+
+[Sources]
+ SetupLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ DebugLib
+
+[Guids]
+ gEfiSocketIioVariableGuid # CONSUMES
+ gEfiSocketCommonRcVariableGuid # CONSUMES
+ gEfiSocketMpLinkVariableGuid # CONSUMES
+ gEfiSocketMemoryVariableGuid # CONSUMES
+ gEfiSocketPowermanagementVarGuid # CONSUMES
+ gEfiSocketProcessorCoreVarGuid # CONSUMES
+ gEfiSetupVariableGuid # CONSUMES
+ gPchSetupVariableGuid # CONSUMES
+ gMemBootHealthGuid # CONSUMES
+
+[Pcd]
+ gStructPcdTokenSpaceGuid.PcdSocketIioConfig
+ gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig
+ gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig
+ gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig
+ gStructPcdTokenSpaceGuid.PcdSetup
+ gStructPcdTokenSpaceGuid.PcdPchSetup
+ gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig
+ gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig
+
+[FixedPcd]
+
+
+[Depex]
+ TRUE
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c
new file mode 100644
index 0000000000..f55657ff67
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c
@@ -0,0 +1,159 @@
+/** @file
+ Library functions for SetupLib.
+ This library instance provides methods to access Setup option.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi/UefiBaseType.h>
+#include <SetupTable.h>
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by OptionNumber and Guid.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] OptionNumber The option number to retrieve a current value for.
+ @param[in, out] Data A pointer to the buffer to be retrieved.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid is NULL or DataSize is NULL or OptionNumber is invalid.
+ @retval EFI_BUFFER_TOO_SMALL Input data buffer is not enough.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN OUT VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function provides a means by which to set a value for a given option number.
+
+ Sets a buffer for the token specified by OptionNumber to the value specified by
+ Data and DataSize.
+ If DataSize is greater than the maximum size support by OptionNumber,
+ then set DataSize to the maximum size supported by OptionNumber.
+
+ @param[in] Guid Pointer to a 128-bit unique value that
+ designates which namespace to set a value from.
+ @param[in] OptionNumber The option number to set a current value for.
+ @param[in] Data A pointer to the buffer to set.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully updated.
+ @retval EFI_INVALID_PARAMETER OptionNumber is invalid, Guid is NULL, or Data is NULL, or DataSize is NULL.
+ @retval EFI_NOT_FOUND The given option is not found.
+ @retval EFI_UNSUPPORTED Set action is not supported.
+**/
+EFI_STATUS
+EFIAPI
+SetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Get all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+GetEntireConfig (
+ OUT SETUP_DATA *SetupData
+ )
+{
+ return EFI_NOT_FOUND;
+}
+
+
+/**
+ Set all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+SetEntireConfig (
+ IN SETUP_DATA *SetupData
+ )
+{
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by OptionNumber and Guid.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] Variable Pointer to data location where variable is stored.
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid or Variable is null.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ OUT VOID *Variable
+ )
+{
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function provides a means by which to set a value for a given option number.
+
+ Sets a buffer for the token specified by OptionNumber to the value specified by
+ Data and DataSize.
+ If DataSize is greater than the maximum size support by OptionNumber,
+ then set DataSize to the maximum size supported by OptionNumber.
+
+ @param[in] Guid Pointer to a 128-bit unique value that
+ designates which namespace to set a value from.
+ @param[in] Variable Pointer to data location where variable is stored.
+
+ @retval EFI_SUCCESS Data is successfully updated.
+ @retval EFI_INVALID_PARAMETER OptionNumber is invalid, Guid is NULL, or Data is NULL, or DataSize is NULL.
+ @retval EFI_NOT_FOUND The given option is not found.
+ @retval EFI_UNSUPPORTED Set action is not supported.
+**/
+EFI_STATUS
+EFIAPI
+SetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ IN VOID *Variable
+ )
+{
+ return EFI_NOT_FOUND;
+}
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf
new file mode 100644
index 0000000000..45792c88cc
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf
@@ -0,0 +1,46 @@
+## @file
+# Status Code Handler Driver which produces general handlers and hook them
+# onto the status code router.
+#
+# @copyright
+# Copyright 2006 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SetupLibNull
+ FILE_GUID = E92E7B25-7CE3-489e-B985-DC9ED7BF2091
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SetupLib | PEIM DXE_DRIVER DXE_SMM_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER
+
+[Sources]
+ SetupLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+
+[LibraryClasses]
+ DebugLib
+
+
+[Protocols]
+
+
+[Guids]
+
+
+[Pcd]
+
+[FixedPcd]
+
+
+[Depex]
+ TRUE
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c
new file mode 100644
index 0000000000..a1c7fb0f67
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c
@@ -0,0 +1,104 @@
+/** @file
+
+Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiPei.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/DebugLib.h>
+#include <Library/SiliconPolicyInitLib.h>
+#include <Guid/SiliconPolicyInitLibInterface.h>
+
+VOID *
+EFIAPI
+SiliconPolicyInitPreMem (
+ IN VOID *Policy
+ )
+{
+ RETURN_STATUS Status = RETURN_SUCCESS;
+ SILICON_POLICY_INIT_LIB_PPI *SiliconPolicyInitLibPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gSiliconPolicyInitLibInterfaceGuid, 0, NULL, &SiliconPolicyInitLibPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return NULL;
+ }
+
+ return SiliconPolicyInitLibPpi->SiliconPolicyInitPreMem (Policy);
+}
+
+RETURN_STATUS
+EFIAPI
+SiliconPolicyDonePreMem (
+ IN VOID *Policy
+ )
+{
+ RETURN_STATUS Status = RETURN_SUCCESS;
+ SILICON_POLICY_INIT_LIB_PPI *SiliconPolicyInitLibPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gSiliconPolicyInitLibInterfaceGuid, 0, NULL, &SiliconPolicyInitLibPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ return SiliconPolicyInitLibPpi->SiliconPolicyDonePreMem (Policy);
+}
+
+VOID *
+EFIAPI
+SiliconPolicyInitPostMem (
+ IN VOID *Policy
+ )
+{
+ RETURN_STATUS Status = RETURN_SUCCESS;
+ SILICON_POLICY_INIT_LIB_PPI *SiliconPolicyInitLibPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gSiliconPolicyInitLibInterfaceGuid, 0, NULL, &SiliconPolicyInitLibPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return NULL;
+ }
+
+ return SiliconPolicyInitLibPpi->SiliconPolicyInitPostMem (Policy);
+}
+
+RETURN_STATUS
+EFIAPI
+SiliconPolicyDonePostMem (
+ IN VOID *Policy
+ )
+{
+ RETURN_STATUS Status = RETURN_SUCCESS;
+ SILICON_POLICY_INIT_LIB_PPI *SiliconPolicyInitLibPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gSiliconPolicyInitLibInterfaceGuid, 0, NULL, &SiliconPolicyInitLibPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ return SiliconPolicyInitLibPpi->SiliconPolicyDonePostMem (Policy);
+}
+
+VOID *
+EFIAPI
+SiliconPolicyInitLate (
+ IN VOID *Policy
+ )
+{
+ ASSERT_EFI_ERROR (RETURN_UNSUPPORTED);
+ return NULL;
+}
+
+RETURN_STATUS
+EFIAPI
+SiliconPolicyDoneLate (
+ IN VOID *Policy
+ )
+{
+ ASSERT_EFI_ERROR (RETURN_UNSUPPORTED);
+ return RETURN_SUCCESS;
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
new file mode 100644
index 0000000000..3579cc5922
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
@@ -0,0 +1,38 @@
+## @file
+# Component information file for Silicon Init Library Shim instance
+#
+# This library provides a "shim" between the library and PPI or protocols implementing the library services.
+# This allows the silicon initialization specifics to be abstracted behind binaries.
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SiliconPolicyInitLibShim
+ FILE_GUID = 3af20aaa-ed5d-4d82-bfd4-db7cc85d4188
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SiliconPolicyInitLib | PEIM DXE_DRIVER
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ PeiServicesLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+
+[Sources]
+ SiliconPolicyInitLibShim.c
+
+[Guids]
+ gSiliconPolicyInitLibInterfaceGuid ## ALWAYS CONSUMES
+
+[Depex]
+ gSiliconPolicyInitLibInterfaceGuid
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c
new file mode 100644
index 0000000000..9602cb2ac0
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c
@@ -0,0 +1,38 @@
+/** @file
+ Silicon workaround library.
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include <Library/SiliconWorkaroundLib.h>
+#include <Library/BaseLib.h>
+
+
+/**
+ Return whether the workaround is enabled.
+
+ This function returns a boolean that determines whether the workaround is enabled
+ given a workaround name.
+
+ @param[in] WorkaroundName An ASCII string that represents the workaround name.
+ This workaround name should correspond to an entry
+ in the silicon workarounds table(s).
+
+ @retval TRUE The workaround is enabled.
+ @retval FALSE The workaround is not found in the table(s) and therefore disabled.
+
+**/
+BOOLEAN
+EFIAPI
+IsSiliconWorkaroundEnabled (
+ IN CONST CHAR8 *WorkaroundName
+ )
+{
+ return FALSE;
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
new file mode 100644
index 0000000000..a5b8151f6e
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
@@ -0,0 +1,50 @@
+## @file
+#
+# @copyright
+# Copyright 2008 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SiliconWorkaroundLib
+ FILE_GUID = 85650F6E-9B35-40C0-9F84-B6C8285D1837
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SiliconWorkaroundLib
+
+################################################################################
+#
+# Sources Section - list of files that are required for the build to succeed.
+#
+################################################################################
+
+[Sources]
+ SiliconWorkaroundLibNull.c
+
+################################################################################
+#
+# Package Dependency Section - list of Package files that are required for
+# this module.
+#
+################################################################################
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ UefiCpuPkg/UefiCpuPkg.dec
+
+[LibraryClasses]
+ DebugLib
+ EmulationConfigurationLib
+ PreSiliconEnvDetectLib
+ CpuAndRevisionLib
+ SiliconWorkaroundHelperLib
+
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 03/17] WhitleySiliconPkg: Add Cpu Includes
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 01/17] WhitleySiliconPkg: Add DEC and DSC files Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 02/17] WhitleySiliconPkg: Add Includes and Libraries Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 04/17] WhitleySiliconPkg: Add Me Includes Nate DeSimone
` (15 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec | 101 ++++++
.../Cpu/Include/CpuDataStruct.h | 27 ++
.../Cpu/Include/CpuPolicyPeiDxeCommon.h | 58 ++++
.../Cpu/Include/Guid/CpuNvramData.h | 34 ++
.../Cpu/Include/Library/CpuConfigLib.h | 30 ++
.../Cpu/Include/Library/CpuEarlyDataLib.h | 41 +++
.../Cpu/Include/Library/CpuPpmLib.h | 16 +
.../Cpu/Include/PpmPolicyPeiDxeCommon.h | 320 ++++++++++++++++++
.../Cpu/Include/ProcessorPpmSetup.h | 14 +
.../Cpu/Include/Protocol/CpuPolicyProtocol.h | 31 ++
.../Cpu/Include/Protocol/PpmPolicyProtocol.h | 16 +
11 files changed, 688 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec b/Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec
new file mode 100644
index 0000000000..f30558b5d8
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec
@@ -0,0 +1,101 @@
+## @file
+# Package for support of CPU RC
+# This package supports IA32 family processors, with CPU DXE module, CPU PEIM, CPU S3 module,
+# SMM modules, related libraries, and corresponding definitions.
+#
+# @copyright
+# Copyright 2017 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ DEC_SPECIFICATION = 0x00010005
+ PACKAGE_NAME = CpuRcPkg
+ PACKAGE_GUID = 6F855AF8-759E-4834-9AA4-05EC977A51BB
+ PACKAGE_VERSION = 0.5
+
+[Includes]
+ Include
+
+[LibraryClasses]
+ CpuConfigLib|Include/Library/CpuConfigLib.h
+ CpuS3MsrLib|Include/Library/CpuS3MsrLib.h
+ CpuPpmLib|Include/Library/CpuPpmLib.h
+ CpuIpLib|Include/Library/CpuIpLib.h
+ CpuEarlyDataLib|Include/Library/CpuEarlyDataLib.h
+ CpuInitLib|Include/Library/CpuInitLib.h
+ PeiCpuLatePolicyLib|Include/Library/PeiCpuLatePolicyLib.h
+ CpuPolicyLib|Include/Library/CpuPolicyLib.h
+
+[Guids]
+ gCpuPkgTokenSpaceGuid = { 0x513876ac, 0x4f71, 0x4543, { 0x8a, 0xf7, 0x27, 0xb, 0x19, 0x2b, 0xed, 0x3c }}
+ gEfiCpuNvramDataGuid = { 0x184220a2, 0xe14c, 0x4497, { 0x85, 0xbb, 0x14, 0x90, 0xa9, 0xa1, 0xf0, 0xd3 }}
+ gEfiPmSsdtTableStorageGuid = { 0x1d33f981, 0x43f0, 0x4a09, { 0xab, 0x3b, 0x2f, 0xf4, 0xf7, 0x11, 0x99, 0x9a }}
+
+[Ppis]
+ gPpmPolicyPpiGuid = { 0xd86e33b4, 0x414f, 0x4941, { 0xb2, 0x84, 0x31, 0xe0, 0x3b, 0x3f, 0xc0, 0xf7 }}
+ gPeiCpuLatePolicyPpiGuid = { 0x97415556, 0x8c58, 0x4e12, { 0x8e, 0xaf, 0x1, 0x98, 0x65, 0x50, 0xc5, 0xaa }}
+
+[Protocols]
+ gEfiCpuPolicyProtocolGuid = { 0xec7c60b4, 0xa82c, 0x42a5, { 0xbe, 0x76, 0x87, 0xfc, 0xb5, 0x81, 0xa9, 0x1b }}
+ gPpmPolicyProtocolGuid = { 0xd1b6a52c, 0x6810, 0x4957, { 0xa5, 0xfb, 0x85, 0x7b, 0xb2, 0xb5, 0xa3, 0xda }}
+ gEfiCpuPpmProtocolGuid = { 0x7e6a6cf5, 0xc89c, 0x492f, { 0xac, 0x37, 0x23, 0x07, 0x84, 0x9c, 0x3a, 0xd5 }}
+ ## This protocol indicates CPU config context data is ready.
+ gCpuConfigContextReadyProtocolGuid = { 0x63a25a21, 0xeb79, 0x4835, { 0xaf, 0x76, 0x75, 0x32, 0x7, 0xa1, 0x31, 0xed }}
+
+[PcdsFeatureFlag]
+ gCpuPkgTokenSpaceGuid.PcdCpuSkylakeFamilyFlag|FALSE|BOOLEAN|0x10000036
+ gCpuPkgTokenSpaceGuid.PcdCpuIcelakeFamilyFlag|FALSE|BOOLEAN|0x10000038
+ gCpuPkgTokenSpaceGuid.PcdCpuSelectLfpAsBspFlag|FALSE|BOOLEAN|0x1000000F
+
+[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
+
+ ## Indicates the platform type: desktop, mobile or server.<BR><BR>
+ # 0 - desktop<BR>
+ # 1 - mobile<BR>
+ # 2 - server<BR>
+ # @Prompt Platform type.
+ # @ValidRange 0x80000001 | 0 - 2
+ gCpuPkgTokenSpaceGuid.PcdPlatformType|0|UINT8|0x60000003
+ gCpuPkgTokenSpaceGuid.PcdPlatformCpuMaxCoreFrequency|0x0|UINT32|0x60000004
+
+ ## Indicates if Intel Enhanced Debug (IED) will be enabled.
+ # Note that for some processors, IED is optional, but for others, IED is required.<BR><BR>
+ # TRUE - IED will be enabled.<BR>
+ # FALSE - IED will be disabled.<BR>
+ # @Prompt Enable IED.
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDEnabled|FALSE|BOOLEAN|0x6000000B
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDRamSize|0x20000|UINT32|0x6000000C
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDRamBase|0x0|UINT32|0x6000001D
+
+ ## Specifies the Energy efficiency policy when Energy Performance Bias feature is enabled.
+ # 0 - indicates preference to highest performance.
+ # 15 - indicates preference to maximize energy saving.
+ # @Prompt The Energy efficiency policy.
+ # @ValidRange 0x80000001 | 0 - 15
+ gCpuPkgTokenSpaceGuid.PcdCpuEnergyPolicy|0x0|UINT8|0x60008000
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmMsrSaveStateEnable|FALSE|BOOLEAN|0x60000014
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmSmrr2Base|0|UINT32|0x60000015
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmSmrr2Size|0|UINT32|0x60000016
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmSmrr2CacheType|5|UINT8|0x60000017
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmUseDelayIndication|TRUE|BOOLEAN|0x60000018
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmUseBlockIndication|TRUE|BOOLEAN|0x60000019
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmProtectedModeEnable|FALSE|BOOLEAN|0x6000001C
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmRuntimeCtlHooks|FALSE|BOOLEAN|0x60000021
+
+ ## Specifies the register table entry maximum count for every processor in the CPU config context buffer.
+ # @Prompt CPU Config Register Table Entry Maximum Count.
+ gCpuPkgTokenSpaceGuid.PcdCpuConfigRegTblEntryMaxCount|0x64|UINT16|0x60000022
+
+[PcdsDynamic, PcdsDynamicEx]
+ gCpuPkgTokenSpaceGuid.PcdCpuConfigContextBuffer|0x0|UINT64|0x50000001
+
+ gCpuPkgTokenSpaceGuid.PcdPlatformCpuSocketCount|0x0|UINT32|0x60000012
+
+ ## Contains the pointer to a buffer where new socket IDs to be assigned are stored.
+ # @Prompt The pointer to a new socket ID buffer.
+ gCpuPkgTokenSpaceGuid.PcdCpuSocketId|{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x3,0x0,0x0,0x0}|VOID*|0x60008007
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h
new file mode 100644
index 0000000000..aaabf032f9
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h
@@ -0,0 +1,27 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPU_DATA_STRUCT_H
+#define _CPU_DATA_STRUCT_H
+
+#define inline __inline
+
+#ifndef MAX_SOCKET
+#define MAX_SOCKET (FixedPcdGet32 (PcdMaxCpuSocketCount))
+#endif
+
+#ifndef MAX_CORE
+#define MAX_CORE (FixedPcdGet32 (PcdMaxCpuCoreCount))
+#endif
+
+//
+// Total TDP levels for Config TDP + Speed Select (ISS/SST)
+//
+#define CONFIG_TDP_TOTAL_LEVEL 5
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h
new file mode 100644
index 0000000000..6e84e0f7a6
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h
@@ -0,0 +1,58 @@
+/** @file
+ Intel CPU PPM policy common structures and macros for both
+ CPU late policy PPI and CPU policy protocol.
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __CPU_POLICY_PEI_DXE_COMMON_HEADER__
+#define __CPU_POLICY_PEI_DXE_COMMON_HEADER__
+
+typedef struct {
+ BOOLEAN CpuTStateEnable;
+ UINT8 CpuClockModulationDutyCycle;
+ BOOLEAN CpuAesEnable;
+ BOOLEAN CpuFastStringEnable;
+ BOOLEAN CpuMaxCpuidValueLimitEnable;
+ BOOLEAN CpuMachineCheckEnable;
+ BOOLEAN CpuMonitorMwaitEnable;
+ BOOLEAN CpuVtEnable;
+ BOOLEAN CpuLtEnable;
+ BOOLEAN CpuX2ApicEnable;
+ BOOLEAN CpuEistEnable;
+ BOOLEAN CpuTurboModeEnable;
+ BOOLEAN CpuHwCoordinationEnable;
+ UINT8 CpuBootPState;
+ BOOLEAN CpuPpinControlEnable;
+ BOOLEAN CpuPeciDownstreamWriteEnable;
+ BOOLEAN CpuL1NextPagePrefetcherDisable;
+ BOOLEAN CpuDcuPrefetcherEnable;
+ BOOLEAN CpuIpPrefetcherEnable;
+ BOOLEAN CpuMlcStreamerPrefetecherEnable;
+ BOOLEAN CpuMlcSpatialPrefetcherEnable;
+ BOOLEAN CpuAmpPrefetchEnable;
+ BOOLEAN CpuThreeStrikeCounterEnable;
+ BOOLEAN CpuCStateEnable;
+ UINT8 CpuPackageCStateLimit;
+ BOOLEAN CpuC1AutoDemotionEnable;
+ BOOLEAN CpuC1AutoUndemotionEnable;
+ UINT8 CpuCoreCStateValue;
+ UINT16 CpuAcpiLvl2Addr;
+ BOOLEAN CpuThermalManagementEnable;
+ UINT8 CpuTccActivationOffset;
+ BOOLEAN CpuDbpfEnable;
+ BOOLEAN CpuEnergyPerformanceBiasEnable;
+ UINT32 CpuIioLlcWaysBitMask;
+ UINT32 CpuExpandedIioLlcWaysBitMask;
+ UINT32 CpuRemoteWaysBitMask;
+ UINT32 CpuRrqCountThreshold;
+ UINT8 CpuMtoIWa;
+ BOOLEAN RunCpuPpmInPei;
+ BOOLEAN AcExceptionOnSplitLockEnable;
+ BOOLEAN CpuCrashLogGprs;
+} CPU_POLICY_COMMON;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h
new file mode 100644
index 0000000000..f033114d16
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h
@@ -0,0 +1,34 @@
+/** @file
+ GUID used for Cpu Nvram Data entries in the HOB list.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPU_NVRAM_DATA_GUID_H_
+#define _CPU_NVRAM_DATA_GUID_H_
+
+#include <CpuDataStruct.h>
+
+#define EFI_CPU_NVRAM_DATA_GUID \
+ { \
+ 0x184220a2, 0xe14c, 0x4497, { 0x85, 0xbb, 0x14, 0x90, 0xa9, 0xa1, 0xf0, 0xd3 }\
+ }
+
+#define EFI_CPU_NVRAM_DATA_VARIABLE_NAME L"CpuNvramData"
+
+//
+// CPU_NVRAM
+// Data that need to be saved in NVRAM for S3 resume
+//
+typedef struct { // data that need to be saved in NVRAM for S3 resume
+ UINT32 flexRatioCsr; // Common for all sockets
+ UINT64 DesiredCoresCsr[MAX_SOCKET]; // One per socket 64bits
+ UINT32 DesiredCoresCfg2Csr[MAX_SOCKET]; // One per socket
+} CPU_NVRAM;
+
+extern EFI_GUID gEfiCpuNvramDataGuid;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h
new file mode 100644
index 0000000000..298fe08624
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h
@@ -0,0 +1,30 @@
+/** @file
+ Public include file for the CPU Configuration Library
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPU_CONFIG_LIB_H_
+#define _CPU_CONFIG_LIB_H_
+
+#include <Protocol/MpService.h>
+#include <AcpiCpuData.h>
+#include <CpuDataStruct.h>
+
+
+// CPU C State Settings
+#define C0_ENABLE 0x00
+#define C6_ENABLE 0x03
+
+//
+// Structure conveying socket ID configuration information.
+//
+typedef struct {
+ UINT32 DefaultSocketId;
+ UINT32 NewSocketId;
+} CPU_SOCKET_ID_INFO;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h
new file mode 100644
index 0000000000..7dbc55f765
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h
@@ -0,0 +1,41 @@
+/** @file
+ Interface of CPU early data library.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __CPU_EARLY_DATA_LIB_H__
+#define __CPU_EARLY_DATA_LIB_H__
+
+#include <CpuDataStruct.h>
+
+typedef struct {
+ UINT64 FusedCores[MAX_SOCKET]; // Fused Core Mask in the package 64bits
+ UINT64 ActiveCores[MAX_SOCKET]; // Active Core Mask in the package 64bits
+ UINT8 MaxCoreToBusRatio[MAX_SOCKET]; // Package Max Non-turbo Ratio (per socket)
+ UINT8 MinCoreToBusRatio[MAX_SOCKET]; // Package Maximum Efficiency Ratio (per socket)
+ UINT32 PackageBspApicID[MAX_SOCKET];
+ UINT8 IssCapableSystem; // 1 = All sockets config TDP / ISS capable
+ UINT8 ConfigTdpCapableSystem; // 1 = All sockets config TDP capable
+ UINT8 IssConfigTdpMaxLevel; // B2P CONFIG_TDP_GET_LEVELS_INFO
+ UINT8 IssConfigTdpCurrentLevel; // B2P CONFIG_TDP_GET_LEVELS_INFO
+ UINT8 IssConfigTdpRatio[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_TDP_INFO
+ UINT16 IssConfigTdpPower[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_TDP_INFO
+ UINT32 IssConfigTdpPowerMinMax[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_POWER_INFO
+ UINT8 IssConfigTdpTjmax[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_ICCP_TJMAX_INFO
+ UINT8 IssConfigTdpCoreCount[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_CORE_MASK
+ UINT64 IssConfigTdpEnabledCoreMask[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_CORE_MASK
+ UINT8 PbfCapableSystem; // 1 = All sockets PBF Capable
+ UINT8 PbfCapable[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P GET_CONFIG_TDP_CONTROL PBF_SUPPORT Bit[1]
+ UINT64 PbfP1HiCoreMap[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P PBF_GET_CORE_MASK_INFO Bits
+ UINT8 PbfP1HighRatio[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P PBF_GET_P1HI_P1LO_INFO P1_HI
+ UINT8 PbfP1LowRatio[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P PBF_GET_P1HI_P1LO_INFO P1_LO
+ UINT32 SstCpSystemStatus;
+ UINT8 UncoreP0Ratio[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_RATIO_INFO
+ UINT8 UncorePnRatio[MAX_SOCKET][CONFIG_TDP_TOTAL_LEVEL]; // B2P CONFIG_TDP_GET_RATIO_INFO
+} CPU_VAR_DATA;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h
new file mode 100644
index 0000000000..400cd52080
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h
@@ -0,0 +1,16 @@
+/** @file
+ This is an implementation of the BootScript at run time.
+
+ @copyright
+ Copyright 2009 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPU_PPM_LIB_H_
+#define _CPU_PPM_LIB_H_
+
+//CSR_PKG_CST_ENTRY_CRITERIA_MASK bit definition (For SKX)
+#define SET_PCIEx_MASK 0xF
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h
new file mode 100644
index 0000000000..86c9f4179f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h
@@ -0,0 +1,320 @@
+/** @file
+ Intel CPU PPM policy common structures and macros for both PPM policy PPI and
+ policy protocol.
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __PPM_POLICY_PEI_DXE_COMMON_HEADER__
+#define __PPM_POLICY_PEI_DXE_COMMON_HEADER__
+
+
+/*===============================================================
+
+ !!! Keep this file common for both PEI and DXE use !!!
+
+===============================================================*/
+
+
+#include <CpuDataStruct.h>
+
+
+#define NUM_CST_LAT_MSR 3
+#define NUM_TURBO_RATIO_GROUP 8
+
+//
+// Hardware P States Modes
+//
+typedef enum {
+ HWP_MODE_DISABLED = 0, // also known as legacy P states
+ HWP_MODE_NATIVE = 1, // native with legacy support
+ HWP_MODE_OOB = 2, // out of band
+ HWP_MODE_NATIVE_NO_LEGACY = 3 // native w/o legacy support
+} HWP_MODES;
+
+//
+// Power Perf Tuning options
+//
+// HWP is disabled : OS, BIOS and PECI control all available. OS control is the default
+// HWP native mode : OS, BIOS and PECI control all available. OS control is the default
+// HWP is OOB : BIOS and PECI control available. PECI control is the default
+// HWP is native w/o legacy: BIOS and PECI control available. BIOS control is the default
+//
+// On CPX, PECI is not available
+//
+typedef enum {
+ PWR_PERF_TUNING_OS_CONTROL = 0,
+ PWR_PERF_TUNING_BIOS_CONTROL = 1,
+ PWR_PERF_TUNING_PECI_CONTROL = 2
+} POWER_PERF_TUNING_CONTROL;
+
+#pragma pack(1)
+
+
+typedef struct {
+ UINT8 PkgCstEntryValCtl;
+ UINT8 SapmctlValCtl;
+ UINT8 SkipPkgCstEntry;
+ UINT8 SwLtrOvrdCtl;
+ UINT8 PriPlnCurrCfgCtl;
+ UINT8 CurrentConfig;
+ UINT8 MsrLock;
+ UINT8 MsrPkgCstConfigControlLock;
+ UINT8 MpllOffEnaAuto;
+ UINT8 DynamicL1Disable;
+ UINT8 VccsaVccioDisable;
+ UINT8 PcodeWdogTimerEn;
+ UINT8 DramRaplPwrLimitLockCsr;
+ UINT8 EnableLowerLatencyMode;
+} ADV_PWR_CTL;
+
+typedef struct {
+ UINT8 BidirProchotEnable;
+ UINT8 C1eEnable;
+ UINT8 EeTurboDisable;
+ UINT8 ProchotOutputDisable;
+ UINT8 SapmControl;
+ UINT8 PwrPerfSwitch;
+ POWER_PERF_TUNING_CONTROL PwrPerfTuning;
+ UINT8 ProchotLock;
+ UINT8 LtrSwInput;
+ UINT8 PkgCLatNeg;
+ UINT8 SetvidDecayDisable;
+} POWER_CTL;
+
+typedef struct {
+ UINT16 PowerLimit1Power;
+ UINT8 PowerLimit1En;
+ UINT16 PowerLimit1Time;
+ UINT8 PkgClmpLim1;
+ UINT16 PowerLimit2Power;
+ UINT8 PkgClmpLim2;
+ UINT8 PowerLimit2En;
+ UINT16 PowerLimit2Time;
+ UINT8 TurboPowerLimitLock;
+ UINT8 TurboLimitCsrLock;
+} TURBO_POWRER_LIMIT;
+
+typedef struct {
+ UINT16 CurrentLimit;
+ UINT8 PpcccLock;
+} PPO_CURRENT_CFG;
+
+typedef struct {
+ UINT8 WorkLdConfig;
+ UINT8 AltEngPerfBIAS;
+ UINT8 P0TtlTimeHigh1;
+ UINT8 P0TtlTimeLow1;
+ UINT16 EngAvgTimeWdw1;
+} PERF_BIAS_CONFIG;
+
+typedef struct {
+ UINT8 PmaxDetector;
+ UINT8 PmaxAutoAdjustment;
+ UINT8 PmaxLoadLine;
+ UINT8 PmaxSign;
+ UINT8 PmaxOffset;
+ UINT8 PmaxOffsetNegative;
+ UINT8 PmaxTriggerSetup;
+ UINT16 BasePackageTdp[MAX_SOCKET];
+ UINT8 EnhancedPmaxDetector;
+} PMAX_CONFIG;
+
+typedef struct {
+ UINT8 Iio0PkgcClkGateDis;
+ UINT8 Iio1PkgcClkGateDis;
+ UINT8 Iio2PkgcClkGateDis;
+ UINT8 Kti01PkgcClkGateDis;
+ UINT8 Kti23PkgcClkGateDis;
+ UINT8 Kti45PkgcClkGateDis;
+ UINT8 Mc0PkgcClkGateDis;
+ UINT8 Mc1PkgcClkGateDis;
+ UINT8 P0pllOffEna;
+ UINT8 P1pllOffEna;
+ UINT8 P2pllOffEna;
+ UINT8 Kti01pllOffEna;
+ UINT8 Kti23pllOffEna;
+ UINT8 Kti45pllOffEna;
+ UINT8 Mc0pllOffEna;
+ UINT8 Mc1pllOffEna;
+ UINT8 Mc0PkgcIoVolRedDis;
+ UINT8 Mc1PkgcIoVolRedDis;
+ UINT8 Mc0PkgcDigVolRedDis;
+ UINT8 Mc1PkgcDigVolRedDis;
+ UINT8 SetvidDecayDisable;
+ UINT8 SapmCtlLock;
+} SAPM_CTL;
+
+typedef struct {
+ UINT8 PerfPLimitEn;
+ UINT8 PerfPLmtThshld;
+ UINT8 PerfPLimitClipC;
+ UINT8 PerfPlimitDifferential;
+} PERF_PLIMIT_CTL;
+
+typedef struct {
+ UINT8 KtiApmOvrdEn;
+ UINT8 IomApmOvrdEn;
+ UINT8 IoBwPlmtOvrdEn;
+ UINT8 EetOverrideEn;
+ UINT8 UncrPerfPlmtOvrdEn;
+} DYNAMIC_PER_POWER_CTL;
+
+typedef struct {
+ UINT16 NonSnpLatVal;
+ UINT8 NonSnpLatMult;
+ UINT8 NonSnpLatOvrd;
+ UINT16 NonSnpLatVld;
+ UINT16 SnpLatVal;
+ UINT8 SnpLatMult;
+ UINT8 SnpLatOvrd;
+ UINT8 SnpLatVld;
+} PCIE_ILTR_OVRD;
+
+typedef struct {
+ UINT16 Value;
+ UINT8 Multiplier;
+ UINT8 Valid;
+} CST_LATENCY_CTL;
+
+
+typedef struct {
+ BOOLEAN C1e;
+
+ UINT32 PkgCstEntryCriteriaMaskKti[MAX_SOCKET];
+ UINT32 PkgCstEntryCriteriaMaskPcie[MAX_SOCKET];
+ CST_LATENCY_CTL LatencyCtrl[NUM_CST_LAT_MSR];
+} PPM_CSTATE_STRUCT;
+
+typedef struct {
+ BOOLEAN Enable;
+ UINT32 Voltage;
+ UINT16 RatioLimit[MAX_CORE];
+} PPM_XE_STRUCT;
+
+typedef struct {
+ UINT8 RatioLimitRatio[NUM_TURBO_RATIO_GROUP];
+ UINT8 RatioLimitRatioMask[NUM_TURBO_RATIO_GROUP];
+ UINT8 RatioLimitCores[NUM_TURBO_RATIO_GROUP];
+ UINT8 RatioLimitCoresMask[NUM_TURBO_RATIO_GROUP];
+} TURBO_RATIO_LIMIT;
+
+typedef struct {
+ HWP_MODES HWPMEnable;
+ UINT8 HWPMNative;
+ UINT8 HWPMOOB;
+ UINT8 HWPMInterrupt;
+ UINT8 EPPEnable;
+ UINT8 EPPProfile;
+ UINT8 APSrocketing;
+ UINT8 Scalability;
+ UINT8 PPOTarget;
+ UINT8 RaplPrioritization;
+ UINT32 SstCpSystemStatus;
+ UINT8 OutofBandAlternateEPB;
+ UINT8 ConfigurePbf;
+ UINT64 PbfHighPriCoreMap[MAX_SOCKET]; // PBF High Priority Cores Bitmap
+ UINT8 PbfP1HighRatio[MAX_SOCKET]; // PBF P1_High Ratio
+ UINT8 PbfP1LowRatio[MAX_SOCKET]; // PBF P1_Low Ratio
+} PPM_HWPM_STRUCT;
+
+typedef struct {
+ UINT8 EnablePkgcCriteria;
+ UINT8 EnablePkgCCriteriaKti[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaRlink[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaFxr[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaMcddr[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaHbm[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaIio[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaHqm[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaNac[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaTip[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaMdfs[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaHcx[MAX_SOCKET];
+ UINT8 EnablePkgCCriteriaDino[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpType[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpTypeMcddr[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpTypeHbm[MAX_SOCKET];
+ UINT8 PkgCCriteriaLogicalIpTypeIio[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoKti[MAX_SOCKET];
+ UINT8 EnableLinkInL1Kti[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoRlink[MAX_SOCKET];
+ UINT8 EnableLinkInL1Rlink[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoFxr[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskFxr[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskFxr[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoMcddr[MAX_SOCKET];
+ UINT8 PkgcCriteriaPsOptionMcddr[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoHbm[MAX_SOCKET];
+ UINT8 PkgcCriteriaPsOptionHbm[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoIio[MAX_SOCKET];
+ UINT8 EnableLinkInL1Iio[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoHqm[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskHqm[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskHqm[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoNac[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskNac[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskNac[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoTip[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskTip[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskTip[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoMdfs[MAX_SOCKET];
+ UINT8 AllowLpStateMdfs[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoHcx[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskHcx[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskHcx[MAX_SOCKET];
+ UINT8 PkgCCriteriaInstanceNoDino[MAX_SOCKET];
+ UINT8 PkgcCriteraPsMaskDino[MAX_SOCKET];
+ UINT8 PkgCCriteriaAllowedPsMaskDino[MAX_SOCKET];
+} PKGC_SA_PS_CRITERIA_STRUCT;
+
+typedef struct {
+ UINT8 ThermalMonitorStatusFilter;
+ UINT8 ThermalMonitorStatusFilterTimeWindow;
+} TM_STATUS_Filter;
+
+typedef struct {
+ UINT8 IssCapableSystem;
+ UINT8 DynamicIss;
+ UINT8 ConfigTDPLevel;
+ UINT8 ConfigTDPLock;
+ UINT16 CurrentPackageTdp[MAX_SOCKET];
+ UINT8 FastRaplDutyCycle;
+ UINT32 ProchotRatio;
+ UINT8 OverclockingLock;
+ UINT32 C2C3TT;
+ UINT8 AvxSupport;
+ UINT8 AvxLicensePreGrant;
+ UINT8 AvxIccpLevel;
+ UINT8 GpssTimer;
+
+ ADV_PWR_CTL AdvPwrMgtCtl;
+ POWER_CTL PowerCtl;
+ TURBO_POWRER_LIMIT TurboPowerLimit;
+ PPO_CURRENT_CFG PpoCurrentCfg;
+ PERF_BIAS_CONFIG PerfBiasConfig;
+ PMAX_CONFIG PmaxConfig;
+ TM_STATUS_Filter ThermalReport;
+ SAPM_CTL SapmCtl[MAX_SOCKET];
+ PERF_PLIMIT_CTL PerPLimitCtl;
+ DYNAMIC_PER_POWER_CTL DynamicPerPowerCtl;
+ PCIE_ILTR_OVRD PcieIltrOvrd;
+
+ PPM_CSTATE_STRUCT PpmCst;
+ PPM_XE_STRUCT PpmXe;
+ PPM_HWPM_STRUCT Hwpm;
+ TURBO_RATIO_LIMIT TurboRatioLimit;
+
+ PKGC_SA_PS_CRITERIA_STRUCT PkgcCriteria;
+
+ UINT8 CpuThermalManagement;
+ UINT8 RunCpuPpmInPei;
+} PPM_POLICY_CONFIGURATION;
+
+
+#pragma pack()
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h
new file mode 100644
index 0000000000..8623ca5fd9
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h
@@ -0,0 +1,14 @@
+/** @file
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PROCESSOR_PPM_SETUP_H
+#define _PROCESSOR_PPM_SETUP_H
+
+#define PPM_AUTO 0xFF
+
+#endif // _PROCESSOR_PPM_SETUP_H
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h
new file mode 100644
index 0000000000..955136139c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h
@@ -0,0 +1,31 @@
+/** @file
+ Intel CPU policy protocol should be installed after CPU related setting
+ are set by platform driver. CPU driver only could get CPU policy data after this
+ protocol installed.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _CPU_POLICY_PROTOCOL_H_
+#define _CPU_POLICY_PROTOCOL_H_
+
+#include <CpuPolicyPeiDxeCommon.h>
+
+#define CPU_POLICY_PROTOCOL_GUID \
+ { \
+ 0xec7c60b4, 0xa82c, 0x42a5, { 0xbe, 0x76, 0x87, 0xfc, 0xb5, 0x81, 0xa9, 0x1b } \
+ }
+
+typedef struct {
+ UINT64 PlatformCpuSocketNames;
+ UINT64 PlatformCpuAssetTags;
+ UINT8 SbspSelection;
+ CPU_POLICY_COMMON Policy;
+} CPU_POLICY_CONFIGURATION;
+
+extern EFI_GUID gEfiCpuPolicyProtocolGuid;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h
new file mode 100644
index 0000000000..5534a345de
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h
@@ -0,0 +1,16 @@
+/** @file
+ Intel CPU PPM policy protocol should be installed after CPU related setting
+ are set by platform driver.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PPM_POLICY_PROTOCOL_H_
+#define _PPM_POLICY_PROTOCOL_H_
+
+#include <PpmPolicyPeiDxeCommon.h>
+
+#endif
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 04/17] WhitleySiliconPkg: Add Me Includes
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (2 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 03/17] WhitleySiliconPkg: Add Cpu Includes Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 05/17] WhitleySiliconPkg: Add PCH Register Includes Nate DeSimone
` (14 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Me/MeSps.4/Include/Library/SpsPeiLib.h | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h b/Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h
new file mode 100644
index 0000000000..1c5c00aacf
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h
@@ -0,0 +1,22 @@
+/** @file
+ Definitions for Sps Pei Library
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SPS_PEI_LIB_H
+#define _SPS_PEI_LIB_H
+
+// Available clocking modes
+typedef enum _CLOCKING_MODES {
+ InternalStandard = 0,
+ InternalAlternate,
+ HybridStandard,
+ HybridAlternate,
+ External
+} CLOCKING_MODES;
+
+#endif // _SPS_PEI_LIB_H
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 05/17] WhitleySiliconPkg: Add PCH Register Includes
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (3 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 04/17] WhitleySiliconPkg: Add Me Includes Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 06/17] WhitleySiliconPkg: Add PCH Includes Nate DeSimone
` (13 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Include/Register/PchRegsDci.h | 44 ++
.../Include/Register/PchRegsDmi.h | 302 ++++++++
.../Include/Register/PchRegsEva.h | 124 +++
.../Include/Register/PchRegsFia.h | 106 +++
.../Include/Register/PchRegsGpio.h | 531 +++++++++++++
.../Include/Register/PchRegsHda.h | 271 +++++++
.../Include/Register/PchRegsHsio.h | 190 +++++
.../Include/Register/PchRegsItss.h | 90 +++
.../Include/Register/PchRegsLan.h | 156 ++++
.../Include/Register/PchRegsLpc.h | 490 ++++++++++++
.../Include/Register/PchRegsP2sb.h | 132 ++++
.../Include/Register/PchRegsPcie.h | 620 +++++++++++++++
.../Include/Register/PchRegsPcr.h | 177 +++++
.../Include/Register/PchRegsPmc.h | 731 ++++++++++++++++++
.../Include/Register/PchRegsPsf.h | 304 ++++++++
.../Include/Register/PchRegsPsth.h | 66 ++
.../Include/Register/PchRegsSata.h | 713 +++++++++++++++++
.../Include/Register/PchRegsSmbus.h | 157 ++++
.../Include/Register/PchRegsSpi.h | 354 +++++++++
.../Include/Register/PchRegsThermal.h | 113 +++
.../Include/Register/PchRegsTraceHub.h | 147 ++++
.../Include/Register/PchRegsUsb.h | 529 +++++++++++++
22 files changed, 6347 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h
new file mode 100644
index 0000000000..c2ced719cc
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h
@@ -0,0 +1,44 @@
+/** @file
+ Register names for PCH DCI device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_DCI_H_
+#define _PCH_REGS_DCI_H_
+
+//
+// DCI PCR Registers
+//
+#define R_PCH_PCR_DCI_ECTRL 0x04 ///< DCI Control Register
+#define B_PCH_PCR_DCI_ECTRL_HDCILOCK BIT0 ///< Host DCI lock
+#define B_PCH_PCR_DCI_ECTRL_HDCIEN BIT4 ///< Host DCI enable
+#define R_PCH_PCR_DCI_ECKPWRCTL 0x08 ///< DCI Power Control
+#define R_PCH_PCR_DCI_PCE 0x30 ///< DCI Power Control Enable Register
+#define B_PCH_PCR_DCI_PCE_HAE BIT5 ///< Hardware Autonomous Enable
+#define B_PCH_PCR_DCI_PCE_D3HE BIT2 ///< D3-Hot Enable
+#define B_PCH_PCR_DCI_PCE_I3E BIT1 ///< I3 Enable
+#define B_PCH_PCR_DCI_PCE_PMCRE BIT0 ///< PMC Request Enable
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h
new file mode 100644
index 0000000000..4f42debf91
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h
@@ -0,0 +1,302 @@
+/** @file
+ Register names for DMI and OP-DMI
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_DMI_H_
+#define _PCH_REGS_DMI_H_
+
+//
+// DMI Chipset Configuration Registers (PID:DMI)
+//
+
+//
+// VC Configuration (Common)
+//
+#define R_PCH_DMI_PCR_V0CTL 0x2014 ///< Virtual channel 0 resource control
+#define B_PCH_DMI_PCR_V0CTL_EN BIT31
+#define B_PCH_DMI_PCR_V0CTL_ID (7 << 24) ///< Bit[26:24]
+#define N_PCH_DMI_PCR_V0CTL_ID 24
+#define V_PCH_DMI_PCR_V0CTL_ETVM_MASK 0xFC00
+#define V_PCH_DMI_PCR_V0CTL_TVM_MASK 0x7E
+#define R_PCH_DMI_PCR_V0STS 0x201A ///< Virtual channel 0 status
+#define B_PCH_DMI_PCR_V0STS_NP BIT1
+#define R_PCH_DMI_PCR_V1CTL 0x2020 ///< Virtual channel 1 resource control
+#define B_PCH_DMI_PCR_V1CTL_EN BIT31
+#define B_PCH_DMI_PCR_V1CTL_ID (0x0F << 24) ///< Bit[27:24]
+#define N_PCH_DMI_PCR_V1CTL_ID 24
+#define V_PCH_DMI_PCR_V1CTL_ETVM_MASK 0xFC00
+#define V_PCH_DMI_PCR_V1CTL_TVM_MASK 0xFE
+#define R_PCH_DMI_PCR_V1STS 0x2026 ///< Virtual channel 1 status
+#define B_PCH_DMI_PCR_V1STS_NP BIT1
+#define R_PCH_DMI_PCR_VMCTL 0x2040 ///< ME Virtual Channel (VCm) resource control
+#define R_PCH_DMI_PCR_VMSTS 0x2046 ///< ME Virtual Channel Resource Status
+#define R_PCH_DMI_PCR_IOSFC1TC 0x2054 ///< Offset of credits for VC1 register
+#define R_PCH_DMI_PCR_IOSFC2TC 0x2058 ///< Offset of credits for VCm register
+#define V_PCH_DMI_PCR_IOSFC1TC_ICX 0x00021002 ///< Credits for VC1 - values for ICX
+#define V_PCH_DMI_PCR_IOSFC2TC_ICX 0x00082005 ///< Credits for VCm - values for ICX
+#define R_PCH_DMI_PCR_UEM 0x2088 ///< Uncorrectable Error Mask
+#define R_PCH_DMI_PCR_REC 0x20AC ///< Root Error Command
+
+//
+// DMI Error Reporting
+//
+#define R_PCH_DMI_PCR_UES 0x2084 ///< Uncorrectable Error Status
+#define R_PCH_DMI_PCR_UEM 0x2088 ///< Uncorrectable Error Mask
+#define B_PCH_DMI_UE_DLPE BIT4 // Data Link Protocol Error
+#define B_PCH_DMI_UE_PT BIT12 // Poisoned TLP
+#define B_PCH_DMI_UE_CA BIT15 // Completer Abort
+#define B_PCH_DMI_UE_RO BIT17 // Receiver Overflow
+#define B_PCH_DMI_UE_MT BIT18 // Malformed TLP
+#define R_PCH_DMI_PCR_CES 0x2090 ///< Correctable Error Status
+#define R_PCH_DMI_PCR_CEM 0x2094 ///< Correctable Error Mask
+#define B_PCH_DMI_CE_RE BIT0 // Indicates a receiver error
+#define B_PCH_DMI_CE_BT BIT6 // Bad TLP
+#define B_PCH_DMI_CE_BD BIT7 // Bad DLLP
+#define B_PCH_DMI_CE_RNR BIT8 // Replay Number Rollover
+#define R_PCH_DMI_PCR_RES 0x20B0 ///< Root Error Status
+#define B_PCH_DMI_RES_CR BIT0 // correctable error message is received or an internal correctable error is detected
+#define B_PCH_DMI_RES_ENR BIT2 // either afatal or a non-fatal error message is received or an internal fatal error is detected
+
+//
+// Internal Link Configuration (DMI Only)
+//
+#define R_PCH_DMI_PCR_LCAP 0x21A4 ///< Link Capabilities
+#define B_PCH_DMI_PCR_LCAP_EL1 (BIT17 | BIT16 | BIT15)
+#define B_PCH_DMI_PCR_LCAP_EL0 (BIT14 | BIT13 | BIT12)
+#define B_PCH_DMI_PCR_LCAP_APMS (BIT11 | BIT10) ///< L0 is supported on DMI
+#define B_PCH_DMI_PCR_LCAP_MLW 0x000003F0
+#define B_PCH_DMI_PCR_LCAP_MLS 0x0000000F
+
+#define R_PCH_DMI_PCR_LCTL 0x21A8 ///< Link Control
+#define B_PCH_DMI_PCR_LCTL_ES BIT7
+#define B_PCH_DMI_PCR_LCTL_ASPM (BIT1 | BIT0) ///< Link ASPM
+#define R_PCH_DMI_PCR_LSTS 0x21AA ///< Link Status
+
+#define R_PCH_DMI_PCR_LCAP2 0x21AC ///< Link Control 2
+typedef union {
+ UINT32 Dword;
+ struct {
+ UINT32 Rsrvd0 : 1,
+ SLSV : 7, // Supported Link Speed Vector
+ CS : 1, // Crosslink Supported
+ LSOSGSSV : 7, // Lower SKP OS Generation Supported Speeds Vector
+ LSOSRSS : 7, // Lower SKP OS Reception Supported Speeds Vector
+ Rsrvd1 : 9;
+ } Bits;
+} PCH_DMI_PCR_LCAP2;
+
+#define R_PCH_DMI_PCR_LCTL2 0x21B0 ///< Link Control 2
+typedef union {
+ UINT32 Dword;
+ struct {
+ UINT32 TLS : 4, // 0:3 Target Link Speed
+ EC : 1, // 4 Enter Compliance
+ HASD : 1, // 5 Hardware Autonomous Speed Disable
+ SD : 1, // 6 Selectable De-emphasis
+ TM : 3, // 9:7 Transmit Margin
+ EMC : 1, // 10 Enter Modified Compliance
+ CSOS : 1, // 11 Compliance SOS
+ CD : 4, // 15:12 Compliance Preset/De-emphasis
+ CDL : 1, // 16 Current De-emphasis Level
+ EqC : 1, // 17 Equalization Complete
+ EQP1S : 1, // 18 Equalization Phase 1 Successful
+ EQP2S : 1, // 19 Equalization Phase 2 Successful
+ EQP3S : 1, // 20 Equalization Phase 3 Successful
+ LER : 1, // 21 Link Equalization Request
+ Rsrvd0 :10; // 31:22
+ } Bits;
+} PCH_DMI_PCR_LCTL2;
+
+#define R_PCH_DMI_PCR_LSTS2 0x21B2 ///< Link Status 2
+#define R_PCH_PCR_DMI_L01EC 0x21BC ///< Lane 0 and Lane 1 Equalization Control
+#define R_PCH_PCR_DMI_L23EC 0x21C0 ///< Lane 2 and Lane 3 Equalization Control
+#define B_PCH_PCR_DMI_UPL13RPH 0x0F000000 ///< Upstream Port Lane 1/3 Transmitter Preset Hint mask
+#define N_PCH_PCR_DMI_UPL13RPH 24 ///< Upstream Port Lane 1/3 Transmitter Preset Hint value offset
+#define B_PCH_PCR_DMI_UPL02RPH 0x000000F0 ///< Upstream Port Lane 0/2 Transmitter Preset Hint mask
+#define N_PCH_PCR_DMI_UPL02RPH 8 ///< Upstream Port Lane 0/2 Transmitter Preset Hint value offset
+#define V_PCH_PCR_DMI_UPL0RPH 7 ///< Upstream Port Lane 0 Transmitter Preset Hint value
+#define V_PCH_PCR_DMI_UPL1RPH 7 ///< Upstream Port Lane 1 Transmitter Preset Hint value
+#define V_PCH_PCR_DMI_UPL2RPH 7 ///< Upstream Port Lane 2 Transmitter Preset Hint value
+#define V_PCH_PCR_DMI_UPL3RPH 7 ///< Upstream Port Lane 3 Transmitter Preset Hint value
+
+
+//
+// North Port Error Injection Configuration (DMI Only)
+//
+#define R_PCH_DMI_PCR_DMIEN 0x2230 ///< DMI Error Injection Enable
+
+//
+// DMI Control
+//
+#define R_PCH_DMI_PCR_DMIC 0x2234 ///< DMI Control
+#define B_PCH_DMI_PCR_DMIC_SRL BIT31 ///< Secured register lock
+#define B_PCH_DMI_PCR_DMIC_ORCE (BIT25 | BIT24) ///< Offset Re-Calibration Enable
+#define N_PCH_DMI_PCR_DMIC_ORCE 24
+#define V_PCH_DMI_PCR_DMIC_ORCE_EN_GEN2_GEN3 1 ///< Enable offset re-calibration for Gen 2 and Gen 3 data rate only.
+#define B_PCH_DMI_PCR_DMIC_DMICGEN (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) ///< DMI Clock Gate Enable
+#define R_PCH_DMI_PCR_DMIHWAWC 0x2238 ///< DMI HW Autonomus Width Control
+#define R_PCH_DMI_PCR_IOSFSBCS 0x223E ///< IOSF Sideband Control and Status
+#define B_PCH_DMI_PCR_IOSFSBCS_DMICGEN (BIT6 | BIT5 | BIT3 | BIT2) ///< DMI Clock Gate Enable
+#define B_PCH_PCR_DMI_DMIC_DNPRL BIT19
+
+#define R_PCH_DMI_PCR_2300 0x2300
+#define R_PCH_DMI_PCR_2304 0x2304
+#define R_PCH_DMI_PCR_2310 0x2310
+#define B_PCH_PCR_DMI_2310_HALEP BIT22
+#define R_PCH_DMI_PCR_2314 0x2314
+#define R_PCH_DMI_PCR_2320 0x2320
+#define R_PCH_DMI_PCR_2324 0x2324
+#define R_PCH_DMI_PCR_232C 0x232C
+#define R_PCH_DMI_PCR_2334 0x2334
+#define R_PCH_DMI_PCR_2338 0x2338
+#define R_PCH_DMI_PCR_2340 0x2340
+#define R_PCH_DMI_PCR_2344 0x2344
+#define R_PCH_DMI_PCR_2348 0x2348
+#define R_PCH_PCR_DMI_234C 0x234C
+
+//
+// Port Configuration Extension(DMI Only)
+//
+#define R_PCH_DMI_PCR_EQCFG1 0x2450
+#define B_PCH_DMI_PCR_EQCFG1_RTLEPCEB BIT16
+#define B_PCH_PCR_DMI_EQCFG1_RTPCOE BIT15 ///< Remote Transmitter Preset Coefficient Override Enable
+
+#define R_PCH_PCR_DMI_RTPCL1 0x2454 ///< Remote Transmitter Preset Coefficient List 1
+
+#define N_PCH_PCR_DMI_RTPCL1_RTPRECL2PL4 24
+#define N_PCH_PCR_DMI_RTPCL1_RTPOSTCL1PL3 18
+#define N_PCH_PCR_DMI_RTPCL1_RTPRECL1PL2 12
+#define N_PCH_PCR_DMI_RTPCL1_RTPOSTCL0PL1 6
+#define N_PCH_PCR_DMI_RTPCL1_RTPRECL0PL0 0
+
+#define B_PCH_PCR_DMI_RTPCL1_PCM BIT31
+#define B_PCH_PCR_DMI_RTPCL1_RTPRECL2PL4 (0X3F << N_PCH_PCR_DMI_RTPCL1_RTPRECL2PL4)
+#define B_PCH_PCR_DMI_RTPCL1_RTPOSTCL1PL3 (0X3F << N_PCH_PCR_DMI_RTPCL1_RTPOSTCL1PL3)
+#define B_PCH_PCR_DMI_RTPCL1_RTPRECL1PL2 (0X3F << N_PCH_PCR_DMI_RTPCL1_RTPRECL1PL2)
+#define B_PCH_PCR_DMI_RTPCL1_RTPOSTCL0PL1 (0X3F << N_PCH_PCR_DMI_RTPCL1_RTPOSTCL0PL1)
+#define B_PCH_PCR_DMI_RTPCL1_RTPRECL0PL0 (0X3F << N_PCH_PCR_DMI_RTPCL1_RTPRECL0PL0)
+#define R_PCH_PCR_DMI_RTPCL2 0x2458 ///< Remote Transmitter Preset Coefficient List 2
+
+#define N_PCH_PCR_DMI_RTPCL2_RTPOSTCL4PL9 24
+#define N_PCH_PCR_DMI_RTPCL2_RTPRECL4PL8 18
+#define N_PCH_PCR_DMI_RTPCL2_RTPOSTCL3PL7 12
+#define N_PCH_PCR_DMI_RTPCL2_RTPRECL3PL6 6
+#define N_PCH_PCR_DMI_RTPCL2_RTPOSTCL2PL5 0
+
+#define B_PCH_PCR_DMI_RTPCL2_RTPOSTCL4PL9 (0X3F << N_PCH_PCR_DMI_RTPCL2_RTPOSTCL4PL9)
+#define B_PCH_PCR_DMI_RTPCL2_RTPRECL4PL8 (0X3F << N_PCH_PCR_DMI_RTPCL2_RTPRECL4PL8)
+#define B_PCH_PCR_DMI_RTPCL2_RTPOSTCL3PL7 (0X3F << N_PCH_PCR_DMI_RTPCL2_RTPOSTCL3PL7)
+#define B_PCH_PCR_DMI_RTPCL2_RTPRECL3PL6 (0X3F << N_PCH_PCR_DMI_RTPCL2_RTPRECL3PL6)
+#define B_PCH_PCR_DMI_RTPCL2_RTPOSTCL2PL5 (0X3F << N_PCH_PCR_DMI_RTPCL2_RTPOSTCL2PL5)
+
+
+#define R_PCH_DMI_PCR_LTCO1 0x2470 ///< Local Transmitter Coefficient Override 1
+#define R_PCH_DMI_PCR_LTCO2 0x2474 ///< Local Transmitter Coefficient Override 2
+#define B_PCH_DMI_PCR_L13TCOE BIT25 ///< Lane 1/3 Transmitter Coefficient Override Enable
+#define B_PCH_DMI_PCR_L02TCOE BIT24 ///< Lane 0/2 Transmitter Coefficient Override Enable
+#define B_PCH_DMI_PCR_L13TPOSTCO 0x00fc0000 ///< Lane 1/3 Transmitter Post-Cursor Coefficient Override mask
+#define N_PCH_DMI_PCR_L13TPOSTCO 18 ///< Lane 1/3 Transmitter Post-Cursor Coefficient Override value offset
+#define B_PCH_DMI_PCR_L13TPRECO 0x0003f000 ///< Lane 1/3 Transmitter Pre-Cursor Coefficient Override mask
+#define N_PCH_DMI_PCR_L13TPRECO 12 ///< Lane 1/3 Transmitter Pre-Cursor Coefficient Override value offset
+#define B_PCH_DMI_PCR_L02TPOSTCO 0x00000fc0 ///< Lane 0/2 Transmitter Post-Cursor Coefficient Override mask
+#define N_PCH_DMI_PCR_L02TPOSTCO 6 ///< Lane 0/2 Transmitter Post-Cursor Coefficient Override value offset
+#define B_PCH_DMI_PCR_L02TPRECO 0x0000003f ///< Lane 0/2 Transmitter Pre-Cursor Coefficient Override mask
+#define N_PCH_DMI_PCR_L02TPRECO 0 ///< Lane 0/2 Transmitter Pre-Cursor Coefficient Override value offset
+#define R_PCH_DMI_PCR_G3L0SCTL 0x2478 ///< GEN3 L0s Control
+
+//
+// OP-DMI Specific Registers (OP-DMI Only)
+//
+#define R_PCH_OPDMI_PCR_LCTL 0x2600 ///< Link Control
+#define R_PCH_OPDMI_PCR_STC 0x260C ///< Sideband Timing Control
+#define R_PCH_OPDMI_PCR_LPMC 0x2614 ///< Link Power Management Control
+#define R_PCH_OPDMI_PCR_LCFG 0x2618 ///< Link Configuration
+
+//
+// DMI Source Decode PCRs (Common)
+//
+#define R_PCH_DMI_PCR_PCIEPAR1E 0x2700 ///< PCIE Port IOxAPIC Range 1 Enable
+#define R_PCH_DMI_PCR_PCIEPAR2E 0x2704 ///< PCIE Port IOxAPIC Range 2 Enable
+#define R_PCH_DMI_PCR_PCIEPAR3E 0x2708 ///< PCIE Port IOxAPIC Range 3 Enable
+#define R_PCH_DMI_PCR_PCIEPAR4E 0x270C ///< PCIE Port IOxAPIC Range 4 Enable
+#define R_PCH_DMI_PCR_PCIEPAR1DID 0x2710 ///< PCIE Port IOxAPIC Range 1 Destination ID
+#define R_PCH_DMI_PCR_PCIEPAR2DID 0x2714 ///< PCIE Port IOxAPIC Range 2 Destination ID
+#define R_PCH_DMI_PCR_PCIEPAR3DID 0x2718 ///< PCIE Port IOxAPIC Range 3 Destination ID
+#define R_PCH_DMI_PCR_PCIEPAR4DID 0x271C ///< PCIE Port IOxAPIC Range 4 Destination ID
+#define R_PCH_DMI_PCR_P2SBIOR 0x2720 ///< P2SB IO Range
+#define R_PCH_DMI_PCR_TTTBARB 0x2724 ///< Thermal Throttling BIOS Assigned Thermal Base Address
+#define R_PCH_DMI_PCR_TTTBARBH 0x2728 ///< Thermal Throttling BIOS Assigned Thermal Base High Address
+#define R_PCH_DMI_PCR_LPCLGIR1 0x2730 ///< LPC Generic I/O Range 1
+#define R_PCH_DMI_PCR_LPCLGIR2 0x2734 ///< LPC Generic I/O Range 2
+#define R_PCH_DMI_PCR_LPCLGIR3 0x2738 ///< LPC Generic I/O Range 3
+#define R_PCH_DMI_PCR_LPCLGIR4 0x273C ///< LPC Generic I/O Range 4
+#define R_PCH_DMI_PCR_LPCGMR 0x2740 ///< LPC Generic Memory Range
+#define R_PCH_DMI_PCR_LPCBDE 0x2744 ///< LPC BIOS Decode Enable
+#define R_PCH_DMI_PCR_UCPR 0x2748 ///< uCode Patch Region
+#define B_PCH_DMI_PCR_UCPR_UPRE BIT0 ///< uCode Patch Region Enable
+#define R_PCH_DMI_PCR_GCS 0x274C ///< Generic Control and Status
+#define B_PCH_DMI_PCR_RPRDID 0xFFFF0000 ///< RPR Destination ID
+#define B_PCH_DMI_PCR_BBS BIT10 ///< Boot BIOS Strap
+#define B_PCH_DMI_PCR_RPR BIT11 ///< Reserved Page Route
+#define B_PCH_DMI_PCR_BILD BIT0 ///< BIOS Interface Lock-Down
+#define R_PCH_DMI_PCR_IOT1 0x2750 ///< I/O Trap Register 1
+#define R_PCH_DMI_PCR_IOT2 0x2758 ///< I/O Trap Register 2
+#define R_PCH_DMI_PCR_IOT3 0x2760 ///< I/O Trap Register 3
+#define R_PCH_DMI_PCR_IOT4 0x2768 ///< I/O Trap Register 4
+#define R_PCH_DMI_PCR_LPCIOD 0x2770 ///< LPC I/O Decode Ranges
+#define R_PCH_DMI_PCR_LPCIOE 0x2774 ///< LPC I/O Enables
+#define R_PCH_DMI_PCR_TCOBASE 0x2778 ///< TCO Base Address
+#define B_PCH_DMI_PCR_TCOBASE_TCOBA 0xFFE0 ///< TCO Base Address Mask
+#define R_PCH_DMI_PCR_GPMR1 0x277C ///< General Purpose Memory Range 1
+#define R_PCH_DMI_PCR_GPMR1DID 0x2780 ///< General Purpose Memory Range 1 Destination ID
+#define R_PCH_DMI_PCR_GPMR2 0x2784 ///< General Purpose Memory Range 2
+#define R_PCH_DMI_PCR_GPMR2DID 0x2788 ///< General Purpose Memory Range 2 Destination ID
+#define R_PCH_DMI_PCR_GPMR3 0x278C ///< General Purpose Memory Range 3
+#define R_PCH_DMI_PCR_GPMR3DID 0x2790 ///< General Purpose Memory Range 3 Destination ID
+#define R_PCH_DMI_PCR_GPIOR1 0x2794 ///< General Purpose I/O Range 1
+#define R_PCH_DMI_PCR_GPIOR1DID 0x2798 ///< General Purpose I/O Range 1 Destination ID
+#define R_PCH_DMI_PCR_GPIOR2 0x279C ///< General Purpose I/O Range 2
+#define R_PCH_DMI_PCR_GPIOR2DID 0x27A0 ///< General Purpose I/O Range 2 Destination ID
+#define R_PCH_DMI_PCR_GPIOR3 0x27A4 ///< General Purpose I/O Range 3
+#define R_PCH_DMI_PCR_GPIOR3DID 0x27A8 ///< General Purpose I/O Range 3 Destination ID
+#define R_PCH_PCR_DMI_PMBASEA 0x27AC ///< PM Base Address
+#define R_PCH_PCR_DMI_PMBASEC 0x27B0 ///< PM Base Control
+#define R_PCH_PCR_DMI_ACPIBA 0x27B4 ///< ACPI Base Address
+#define R_PCH_PCR_DMI_ACPIBDID 0x27B8 ///< ACPI Base Destination ID
+#define R_PCH_DMI_PCR_SEGMR 0x27C0 ///< Second eSPI Generic Memory Range
+#define R_PCH_DMI_PCR_SEGIR 0x27BC ///< Second eSPI Generic I/O Range
+
+//
+// Opi PHY registers
+//
+#define R_PCH_OPIPHY_PCR_0110 0x0110
+#define R_PCH_OPIPHY_PCR_0118 0x0118
+#define R_PCH_OPIPHY_PCR_011C 0x011C
+#define R_PCH_OPIPHY_PCR_0354 0x0354
+#define R_PCH_OPIPHY_PCR_B104 0xB104
+#define R_PCH_OPIPHY_PCR_B10C 0xB10C
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h
new file mode 100644
index 0000000000..77ec6284a5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h
@@ -0,0 +1,124 @@
+/** @file
+ Register names for PCH Eva devices.
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values of bits within the registers
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_<generation_name>_" in register/bit names. e.g., "_PCH_LPT_"
+ Registers / bits that are different between SKUs are denoted by "_<SKU_name>"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without <generation_name> inserted.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_EVA_H_
+#define _PCH_REGS_EVA_H_
+
+#define PCI_DEVICE_NUMBER_EVA 17
+#define PCI_FUNCTION_NUMBER_EVA_MROM0 0
+#define PCI_FUNCTION_NUMBER_EVA_MROM1 1
+#define PCI_FUNCTION_NUMBER_EVA_SSATA 5
+
+///
+/// Lewisburg SKUs
+///
+#define LBG_SKU_G 1
+#define LBG_SKU_X 2
+#define LBG_SKU_A 3
+
+#define PCI_DEVICE_NUMBER_PCH_SSATA 17
+#define PCI_FUNCTION_NUMBER_PCH_SSATA 5
+
+#define R_PCH_LBG_SSATA_DEVICE_ID 0x02
+
+///
+/// LBG Production sSATA Controller DID definition
+///
+#define V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_AHCI 0xA1D2 // LBG Production Server Secondary AHCI Mode (Ports 0-4)
+#define V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_RAID 0xA1D4 // LBG Production Server RAID 0/1/5/10 - NOT premium
+#define V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_RAID_PREMIUM 0xA1D6 // LBG Production Server RAID 0/1/5/10 - premium
+#define V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_RAID1 0xA1DE // LBG Production Server RAID 1/RRT
+
+///
+/// LBG Production (PRQ) MSUint SMBUS DID definition
+///
+#define V_PCH_LBG_PROD_MROM_DEVICE_ID_0 0xA1F0 // LBG MS Unit MROM 0 PRQ DID
+#define V_PCH_LBG_PROD_MROM_DEVICE_ID_1 0xA1F1 // LBG MS Unit MROM 1 PRQ DID
+
+
+///
+/// LBG SSX (Super SKUs and Pre Production) sSATA Controller DID definition
+///
+#define V_PCH_LBG_SSATA_DEVICE_ID_D_AHCI 0xA252 // LBG SSX Server Secondary AHCI Mode (Ports 0-4)
+#define V_PCH_LBG_SSATA_DEVICE_ID_D_RAID 0xA254 // LBG SSX Server RAID 0/1/5/10 - NOT premium
+#define V_PCH_LBG_SSATA_DEVICE_ID_D_RAID_PREMIUM 0xA256 // LBG SSX Server RAID 0/1/5/10 - premium
+#define V_PCH_LBG_SSATA_DEVICE_ID_D_RAID1 0xA25E // LBG SSX Server RAID 1/RRT
+
+#define V_PCH_LBG_SSATA_DEVICE_ID_D_RAID_PREMIUM_DSEL0 0x2823 // Server RAID 0/1/5/10 - premium - Alternate ID for RST
+#define V_PCH_LBG_SSATA_DEVICE_ID_D_RAID_PREMIUM_DSEL1 0x2827 // Server RAID 0/1/5/10 - premium - Alternate ID for RSTe
+
+///
+/// LBG Super SKU (SSX) MSUint DID definition
+///
+#define V_PCH_LBG_MROM_DEVICE_ID_0 0xA270 // LBG NS MS Unit MROM 0 Super SKU DID
+#define V_PCH_LBG_MROM_DEVICE_ID_1 0xA271 // LBG NS MS Unit MROM 1 Super SKU DID
+
+#define R_PCH_LBG_MROM_DEVCLKGCTL 0xE4
+
+#define R_PCH_LBG_MROM_PLKCTL 0xE8
+#define B_PCH_LBG_MROM_PLKCTL_CL BIT0
+
+#define ADR_TMR_HELD_OFF_SETUP_OPTION 2
+#define R_PCH_LBG_MROM_ADRTIMERCTRL 0x180
+#define B_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_MASK (BIT27|BIT26|BIT25|BIT24)
+#define N_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT 24
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_1 0x0
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_8 0x1
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_24 0x2
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_40 0x3
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_56 0x4
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_64 0x5
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_72 0x6
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_80 0x7
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_88 0x8
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_96 0x9
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_MAX (V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_MULT_96)
+#define ADR_MULT_SETUP_DEFAULT_POR 99
+#define B_PCH_LBG_MROM_ADRTIMERCTRL_ADR_DBG_DIS BIT28
+#define B_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_DIS BIT29
+#define B_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_MASK (BIT30|BIT31)
+#define N_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR 30
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_25US 0x0
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_50US 0x1
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_100US 0x2
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_0US 0x3
+#define V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_MAX (V_PCH_LBG_MROM_ADRTIMERCTRL_ADR_TMR_0US)
+#define ADR_TMR_SETUP_DEFAULT_POR 4
+
+///
+/// MS Unit Hide Control Register
+///
+#define PCH_LBG_MSUINT_FUNCS 3
+#define R_PCH_LBG_MSUINT_MSDEVFUNCHIDE 0xD4
+#define B_PCH_LBG_MSUINT_MSDEVFUNCHIDE_RSVD (BIT30|BIT29|BIT28|BIT27|BIT26|BIT25|BIT24|\
+ BIT23|BIT22|BIT21|BIT20|BIT19|BIT18|BIT17|\
+ BIT16|BIT15|BIT14|BIT13|BIT12|BIT11|BIT10|\
+ BIT9|BIT8|BIT7|BIT6|BIT4|BIT3|BIT2)
+
+#define B_PCH_EVA_MSUNIT_MSDEVFUNCHIDE_SSATA (BIT5)
+
+#define B_PCH_EVA_MSUNIT_MSDEVFUNCHIDE_MROM1 BIT1
+#define B_PCH_EVA_MSUNIT_MSDEVFUNCHIDE_MROM0 BIT0
+#define B_PCH_EVA_MSUNIT_MSDEVFUNCHIDE_REGLOCK BIT31
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h
new file mode 100644
index 0000000000..c66de3404b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h
@@ -0,0 +1,106 @@
+/** @file
+ Register definition for FIA component
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_FIA_H_
+#define _PCH_REGS_FIA_H_
+
+
+//
+// Private chipset regsiter (Memory space) offset definition
+// The PCR register defines is used for PCR MMIO programming and PCH SBI programming as well.
+//
+
+//
+// PID:FIA
+//
+#define PCH_MAX_PCI_SATA_COMBO_PORT 14
+#define PCH_MAX_FIA_DRCRM 3
+#define R_PCH_PCR_FIA_CC 0
+#define B_PCH_PCR_FIA_CC_SRL BIT31
+#define B_PCH_PCR_FIA_CC_PTOCGE BIT17
+#define B_PCH_PCR_FIA_CC_OSCDCGE BIT16
+#define B_PCH_PCR_FIA_CC_SCPTCGE BIT15
+
+#define R_PCH_PCR_FIA_PLLCTL 0x20
+#define R_PCH_PCR_FIA_DRCRM1 0x100
+#define R_PCH_PCR_FIA_DRCRM2 0x104
+#define R_PCH_PCR_FIA_DRCRM3 0x108
+#define N_PCH_PCR_FIA_DRCRM3_GBEPCKRQM 28
+#define S_PCH_PCR_FIA_DRCRM 4
+#define R_PCH_PCR_FIA_STRPFUSECFG1_REG_BASE 0x200
+#define B_PCH_PCR_FIA_STRPFUSECFG1_GBE_PCIE_PEN BIT31
+#define B_PCH_PCR_FIA_STRPFUSECFG1_GBE_PCIEPORTSEL (BIT30 | BIT29 | BIT28)
+#define N_PCH_PCR_FIA_STRPFUSECFG1_GBE_PCIEPORTSEL 28
+#define R_PCH_PCR_FIA_PCIESATA_FUSECFG_REG_BASE 0x204
+#define R_PCH_PCR_FIA_PCIESATA_STRPCFG_REG_BASE 0x208
+#define R_PCH_PCR_FIA_PCIEUSB3_STRPFUSECFG_REG_BASE 0x20C
+#define R_PCH_PCR_FIA_EXP_FUSECFG_REG_BASE 0x210
+#define R_PCH_PCR_FIA_USB3SSIC_STRPFUSECFG_REG_BASE 0x214
+#define R_PCH_PCR_FIA_CSI3_STRPFUSECFG_REG_BASE 0x218
+#define R_PCH_PCR_FIA_USB3SATA_STRPFUSECFG_REG_BASE 0x21C
+#define R_PCH_PCR_FIA_UFS_STRPFUSECFG_REG_BASE 0x220
+#define R_PCH_PCR_FIA_PCIEUDL_STRPFUSECFG_REG_BASE 0x224
+#define R_PCH_PCR_FIA_LOS1_REG_BASE 0x250
+#define R_PCH_PCR_FIA_LOS2_REG_BASE 0x254
+#define R_PCH_PCR_FIA_LOS3_REG_BASE 0x258
+#define R_PCH_PCR_FIA_LOS4_REG_BASE 0x25C
+#define V_PCH_PCR_FIA_LANE_OWN_PCIEDMI 0x0
+#define V_PCH_PCR_FIA_LANE_OWN_USB3 0x1
+#define V_PCH_PCR_FIA_LANE_OWN_SATA 0x2
+#define V_PCH_PCR_FIA_LANE_OWN_GBE 0x3
+#define V_PCH_PCR_FIA_LANE_OWN_SSIC 0x5
+
+#define V_PCH_PCR_FIA_LANE_OWN_UX8 0x8
+
+#define B_PCH_PCR_FIA_L0O (BIT3 | BIT2 | BIT1 | BIT0)
+#define B_PCH_PCR_FIA_L1O (BIT7 | BIT6 | BIT5 | BIT4)
+#define B_PCH_PCR_FIA_L2O (BIT11 | BIT10 | BIT9 | BIT8)
+#define B_PCH_PCR_FIA_L3O (BIT15 | BIT14 | BIT13 | BIT12)
+#define B_PCH_PCR_FIA_L4O (BIT19 | BIT18 | BIT17 | BIT16)
+#define B_PCH_PCR_FIA_L5O (BIT23 | BIT22 | BIT21 | BIT20)
+#define B_PCH_PCR_FIA_L6O (BIT27 | BIT26 | BIT25 | BIT24)
+#define B_PCH_PCR_FIA_L7O (BIT31 | BIT30 | BIT29 | BIT28)
+#define B_PCH_PCR_FIA_L8O (BIT3 | BIT2 | BIT1 | BIT0)
+#define B_PCH_PCR_FIA_L9O (BIT7 | BIT6 | BIT5 | BIT4)
+#define B_PCH_PCR_FIA_L10O (BIT11 | BIT10 | BIT9 | BIT8)
+#define B_PCH_PCR_FIA_L11O (BIT15 | BIT14 | BIT13 | BIT12)
+#define B_PCH_PCR_FIA_L12O (BIT19 | BIT18 | BIT17 | BIT16)
+#define B_PCH_PCR_FIA_L13O (BIT23 | BIT22 | BIT21 | BIT20)
+#define B_PCH_PCR_FIA_L14O (BIT27 | BIT26 | BIT25 | BIT24)
+#define B_PCH_PCR_FIA_L15O (BIT31 | BIT30 | BIT29 | BIT28)
+#define B_PCH_PCR_FIA_L16O (BIT3 | BIT2 | BIT1 | BIT0)
+#define B_PCH_PCR_FIA_L17O (BIT7 | BIT6 | BIT5 | BIT4)
+#define B_PCH_PCR_FIA_L18O (BIT11 | BIT10 | BIT9 | BIT8)
+#define B_PCH_PCR_FIA_L19O (BIT15 | BIT14 | BIT13 | BIT12)
+#define B_PCH_PCR_FIA_L20O (BIT19 | BIT18 | BIT17 | BIT16)
+#define B_PCH_PCR_FIA_L21O (BIT23 | BIT22 | BIT21 | BIT20)
+#define B_PCH_PCR_FIA_L22O (BIT27 | BIT26 | BIT25 | BIT24)
+#define B_PCH_PCR_FIA_L23O (BIT31 | BIT30 | BIT29 | BIT28)
+#define B_PCH_PCR_FIA_L24O (BIT3 | BIT2 | BIT1 | BIT0)
+#define B_PCH_PCR_FIA_L25O (BIT7 | BIT6 | BIT5 | BIT4)
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h
new file mode 100644
index 0000000000..bbf4df90ae
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h
@@ -0,0 +1,531 @@
+/** @file
+ Register names for PCH GPIO
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_GPIO_H_
+#define _PCH_REGS_GPIO_H_
+
+#define V_PCH_GPIO_GPP_A_PAD_MAX 24
+#define V_PCH_GPIO_GPP_B_PAD_MAX 24
+#define V_PCH_GPIO_GPP_C_PAD_MAX 24
+#define V_PCH_GPIO_GPP_D_PAD_MAX 24
+#define V_PCH_LP_GPIO_GPP_E_PAD_MAX 24
+#define V_PCH_H_GPIO_GPP_E_PAD_MAX 13
+#define V_PCH_GPIO_GPP_F_PAD_MAX 24
+#define V_PCH_LP_GPIO_GPP_G_PAD_MAX 8
+#define V_PCH_H_GPIO_GPP_G_PAD_MAX 24
+#define V_PCH_H_GPIO_GPP_H_PAD_MAX 24
+#define V_PCH_H_GPIO_GPP_J_PAD_MAX 24
+#define V_PCH_H_GPIO_GPP_K_PAD_MAX 11
+#define V_PCH_H_GPIO_GPP_L_PAD_MAX 20
+#define V_PCH_H_GPIO_GPP_I_PAD_MAX 11
+
+#define V_PCH_GPIO_GPD_PAD_MAX 12
+
+#define V_PCH_GPIO_GROUP_MAX 13
+#define V_PCH_H_GPIO_GROUP_MAX V_PCH_GPIO_GROUP_MAX
+#define V_PCH_LP_GPIO_GROUP_MAX 8
+#define PCH_GPIO_NUM_SUPPORTED_GPIS 261
+#define S_GPIO_PCR_GP_SMI_EN 4
+#define S_GPIO_PCR_GP_SMI_STS 4
+
+///
+/// Groups mapped to 2-tier General Purpose Event will all be under
+/// one master GPE_111 (0x6F)
+///
+#define PCH_GPIO_2_TIER_MASTER_GPE_NUMBER 0x6F
+
+
+//
+// GPIO Common Private Configuration Registers
+//
+#define R_GPIO_PCR_REV_ID 0x00
+#define R_GPIO_PCR_CAP_LIST 0x04
+#define R_GPIO_PCR_FAMBAR 0x08
+#define R_GPIO_PCR_PADBAR 0x0C
+#define B_GPIO_PCR_PADBAR 0x0000FFFF
+#define R_GPIO_PCR_MISCCFG 0x10
+#define B_GPIO_PCR_MISCCFG_GPE0_DW2 (BIT19 | BIT18 | BIT17 | BIT16)
+#define N_GPIO_PCR_MISCCFG_GPE0_DW2 16
+#define B_GPIO_PCR_MISCCFG_GPE0_DW1 (BIT15 | BIT14 | BIT13 | BIT12)
+#define N_GPIO_PCR_MISCCFG_GPE0_DW1 12
+#define B_GPIO_PCR_MISCCFG_GPE0_DW0 (BIT11 | BIT10 | BIT9 | BIT8)
+#define N_GPIO_PCR_MISCCFG_GPE0_DW0 8
+#define B_PCH_PCR_GPIO_MISCCFG_IRQ_ROUTE BIT3
+#define N_PCH_PCR_GPIO_MISCCFG_IRQ_ROUTE 3
+#define B_GPIO_PCR_MISCCFG_GPDPCGEN BIT1
+#define B_GPIO_PCR_MISCCFG_GPDLCGEN BIT0
+// SKL PCH-H:
+#define R_PCH_H_PCR_GPIO_MISCSECCFG 0x14
+
+//
+// GPIO Community 0 Private Configuration Registers
+//
+// SKL PCH-LP
+#define R_PCH_LP_PCR_GPIO_GPP_A_PAD_OWN 0x20
+#define R_PCH_LP_PCR_GPIO_GPP_B_PAD_OWN 0x30
+#define R_PCH_LP_PCR_GPIO_GPP_A_GPI_VWM_EN 0x80
+#define R_PCH_LP_PCR_GPIO_GPP_B_GPI_VWM_EN 0x84
+#define R_PCH_LP_PCR_GPIO_GPP_A_PADCFGLOCK 0xA0
+#define R_PCH_LP_PCR_GPIO_GPP_A_PADCFGLOCKTX 0xA4
+#define R_PCH_LP_PCR_GPIO_GPP_B_PADCFGLOCK 0xA8
+#define R_PCH_LP_PCR_GPIO_GPP_B_PADCFGLOCKTX 0xAC
+// SKX Server PCH
+#define R_PCH_H_PCR_GPIO_GPP_A_PAD_OWN 0x20
+#define R_PCH_H_PCR_GPIO_GPP_B_PAD_OWN 0x2C
+#define R_PCH_H_PCR_GPIO_GPP_F_PAD_OWN 0x38
+#define R_PCH_H_PCR_GPIO_GPP_A_GPI_VWM_EN 0x50
+#define R_PCH_H_PCR_GPIO_GPP_B_GPI_VWM_EN 0x54
+#define R_PCH_H_PCR_GPIO_GPP_F_GPI_VWM_EN 0x58
+#define R_PCH_H_PCR_GPIO_GPP_A_PADCFGLOCK 0x60
+#define R_PCH_H_PCR_GPIO_GPP_A_PADCFGLOCKTX 0x64
+#define R_PCH_H_PCR_GPIO_GPP_B_PADCFGLOCK 0x68
+#define R_PCH_H_PCR_GPIO_GPP_B_PADCFGLOCKTX 0x6C
+#define R_PCH_H_PCR_GPIO_GPP_F_PADCFGLOCK 0x70
+#define R_PCH_H_PCR_GPIO_GPP_F_PADCFGLOCKTX 0x74
+#define R_PCH_H_PCR_GPIO_GPP_F_HOSTSW_OWN 0x88
+#define R_PCH_H_PCR_GPIO_GPP_F_GPI_IS 0x0108
+#define R_PCH_H_PCR_GPIO_GPP_F_GPI_IE 0x0118
+#define R_PCH_H_PCR_GPIO_GPP_F_GPI_GPE_STS 0x0128
+#define R_PCH_H_PCR_GPIO_GPP_F_GPI_GPE_EN 0x0138
+#define R_PCH_H_PCR_GPIO_GPP_F_PADCFG_OFFSET 0x580
+
+// Common
+#define R_PCH_PCR_GPIO_GPP_A_HOSTSW_OWN 0x80
+#define R_PCH_PCR_GPIO_GPP_B_HOSTSW_OWN 0x84
+#define R_PCH_PCR_GPIO_GPP_A_GPI_IS 0x0100
+#define R_PCH_PCR_GPIO_GPP_B_GPI_IS 0x0104
+#define R_PCH_PCR_GPIO_GPP_A_GPI_IE 0x0110
+#define R_PCH_PCR_GPIO_GPP_B_GPI_IE 0x0114
+#define R_PCH_PCR_GPIO_GPP_A_GPI_GPE_STS 0x0120
+#define R_PCH_PCR_GPIO_GPP_B_GPI_GPE_STS 0x0124
+#define R_PCH_PCR_GPIO_GPP_A_GPI_GPE_EN 0x0130
+#define R_PCH_PCR_GPIO_GPP_B_GPI_GPE_EN 0x0134
+#define R_PCH_PCR_GPIO_GPP_B_SMI_STS 0x0144
+#define R_PCH_PCR_GPIO_GPP_B_SMI_EN 0x0154
+#define R_PCH_PCR_GPIO_GPP_B_NMI_STS 0x0164
+#define R_PCH_PCR_GPIO_GPP_B_NMI_EN 0x0174
+#define R_PCH_PCR_GPIO_GPP_A_PADCFG_OFFSET 0x400
+#define R_PCH_PCR_GPIO_GPP_B_PADCFG_OFFSET 0x4C0
+
+//
+// GPIO Community 1 Private Configuration Registers
+//
+//SKL PCH-LP:
+#define R_PCH_LP_PCR_GPIO_GPP_C_PAD_OWN 0x20
+#define R_PCH_LP_PCR_GPIO_GPP_D_PAD_OWN 0x30
+#define R_PCH_LP_PCR_GPIO_GPP_E_PAD_OWN 0x40
+#define R_PCH_LP_PCR_GPIO_GPP_C_GPI_VWM_EN 0x80
+#define R_PCH_LP_PCR_GPIO_GPP_D_GPI_VWM_EN 0x84
+#define R_PCH_LP_PCR_GPIO_GPP_E_GPI_VWM_EN 0x88
+#define R_PCH_LP_PCR_GPIO_GPP_C_PADCFGLOCK 0xA0
+#define R_PCH_LP_PCR_GPIO_GPP_C_PADCFGLOCKTX 0xA4
+#define R_PCH_LP_PCR_GPIO_GPP_D_PADCFGLOCK 0xA8
+#define R_PCH_LP_PCR_GPIO_GPP_D_PADCFGLOCKTX 0xAC
+#define R_PCH_LP_PCR_GPIO_GPP_E_PADCFGLOCK 0xB0
+#define R_PCH_LP_PCR_GPIO_GPP_E_PADCFGLOCKTX 0xB4
+//SKL PCH-H:
+#define R_PCH_H_PCR_GPIO_GPP_C_PAD_OWN 0x20
+#define R_PCH_H_PCR_GPIO_GPP_D_PAD_OWN 0x2C
+#define R_PCH_H_PCR_GPIO_GPP_E_PAD_OWN 0x38
+// Server SKX PCH
+#define R_PCH_H_PCR_GPIO_GPP_C_GPI_VWM_EN 0x50
+#define R_PCH_H_PCR_GPIO_GPP_D_GPI_VWM_EN 0x54
+#define R_PCH_H_PCR_GPIO_GPP_E_GPI_VWM_EN 0x58
+#define R_PCH_H_PCR_GPIO_GPP_C_PADCFGLOCK 0x60
+#define R_PCH_H_PCR_GPIO_GPP_C_PADCFGLOCKTX 0x64
+#define R_PCH_H_PCR_GPIO_GPP_D_PADCFGLOCK 0x68
+#define R_PCH_H_PCR_GPIO_GPP_D_PADCFGLOCKTX 0x6C
+#define R_PCH_H_PCR_GPIO_GPP_E_PADCFGLOCK 0x70
+#define R_PCH_H_PCR_GPIO_GPP_E_PADCFGLOCKTX 0x74
+// Common
+#define R_PCH_PCR_GPIO_GPP_C_HOSTSW_OWN 0x80
+#define R_PCH_PCR_GPIO_GPP_D_HOSTSW_OWN 0x84
+#define R_PCH_PCR_GPIO_GPP_E_HOSTSW_OWN 0x88
+#define R_PCH_PCR_GPIO_GPP_C_GPI_IS 0x0100
+#define R_PCH_PCR_GPIO_GPP_D_GPI_IS 0x0104
+#define R_PCH_PCR_GPIO_GPP_E_GPI_IS 0x0108
+#define R_PCH_PCR_GPIO_GPP_C_GPI_IE 0x0110
+#define R_PCH_PCR_GPIO_GPP_D_GPI_IE 0x0114
+#define R_PCH_PCR_GPIO_GPP_E_GPI_IE 0x0114
+#define R_PCH_PCR_GPIO_GPP_C_GPI_GPE_STS 0x0120
+#define R_PCH_PCR_GPIO_GPP_D_GPI_GPE_STS 0x0124
+#define R_PCH_PCR_GPIO_GPP_E_GPI_GPE_STS 0x0128
+#define R_PCH_PCR_GPIO_GPP_C_GPI_GPE_EN 0x0130
+#define R_PCH_PCR_GPIO_GPP_D_GPI_GPE_EN 0x0134
+#define R_PCH_PCR_GPIO_GPP_E_GPI_GPE_EN 0x0138
+#define R_PCH_PCR_GPIO_GPP_C_SMI_STS 0x0140
+#define R_PCH_PCR_GPIO_GPP_D_SMI_STS 0x0144
+#define R_PCH_PCR_GPIO_GPP_E_SMI_STS 0x0148
+#define R_PCH_PCR_GPIO_GPP_C_SMI_EN 0x0150
+#define R_PCH_PCR_GPIO_GPP_D_SMI_EN 0x0154
+#define R_PCH_PCR_GPIO_GPP_E_SMI_EN 0x0158
+#define R_PCH_PCR_GPIO_GPP_C_NMI_STS 0x0160
+#define R_PCH_PCR_GPIO_GPP_D_NMI_STS 0x0164
+#define R_PCH_PCR_GPIO_GPP_E_NMI_STS 0x0168
+#define R_PCH_PCR_GPIO_GPP_C_NMI_EN 0x0170
+#define R_PCH_PCR_GPIO_GPP_D_NMI_EN 0x0174
+#define R_PCH_PCR_GPIO_GPP_E_NMI_EN 0x0178
+
+
+// Common:
+#define R_GPIO_PCR_CAP_LIST_1_PWM 0x0200
+#define R_GPIO_PCR_PWMC 0x0204
+#define R_GPIO_PCR_CAP_LIST_2_SER_BLINK 0x0208
+#define R_GPIO_PCR_GP_SER_BLINK 0x020C
+#define B_GPIO_PCR_GP_SER_BLINK 0x1F
+#define R_GPIO_PCR_GP_SER_CMDSTS 0x0210
+#define B_GPIO_PCR_GP_SER_CMDSTS_DLS (BIT23 | BIT22)
+#define N_GPIO_PCR_GP_SER_CMDSTS_DLS 22
+#define B_GPIO_PCR_GP_SER_CMDSTS_DRS 0x003F0000
+#define N_GPIO_PCR_GP_SER_CMDSTS_DRS 16
+#define B_GPIO_PCR_GP_SER_CMDSTS_BUSY BIT8
+#define B_GPIO_PCR_GP_SER_CMDSTS_GO BIT0
+#define R_GPIO_PCR_GP_SER_DATA 0x0210
+// Common:
+#define R_PCH_PCR_GPIO_GPP_C_PADCFG_OFFSET 0x400
+#define R_PCH_PCR_GPIO_GPP_D_PADCFG_OFFSET 0x4C0
+#define R_PCH_PCR_GPIO_GPP_E_PADCFG_OFFSET 0x580
+
+//
+// GPIO Community 2 Private Configuration Registers
+//
+// SKL PCH-LP
+#define R_PCH_LP_PCR_GPIO_GPD_PAD_OWN 0x20
+#define R_PCH_LP_PCR_GPIO_GPD_GPI_VWM_EN 0x80
+#define R_PCH_LP_PCR_GPIO_GPD_PADCFGLOCK 0xA0
+#define R_PCH_LP_PCR_GPIO_GPD_PADCFGLOCKTX 0xA4
+// SKX Server PCH
+#define R_PCH_H_PCR_GPIO_GPD_PAD_OWN 0x20
+#define R_PCH_H_PCR_GPIO_GPD_GPI_VWM_EN 0x50
+#define R_PCH_H_PCR_GPIO_GPD_PADCFGLOCK 0x60
+#define R_PCH_H_PCR_GPIO_GPD_PADCFGLOCKTX 0x64
+// Common
+#define R_PCH_PCR_GPIO_GPD_HOSTSW_OWN 0x80
+#define R_PCH_PCR_GPIO_GPD_GPI_IS 0x0100
+#define R_PCH_PCR_GPIO_GPD_GPI_IE 0x0110
+#define R_PCH_PCR_GPIO_GPD_GPI_GPE_STS 0x0120
+#define R_PCH_PCR_GPIO_GPD_GPI_GPE_EN 0x0130
+#define R_PCH_PCR_GPIO_GPD_PADCFG_OFFSET 0x400
+
+//
+// GPIO Community 3 Private Configuration Registers
+//
+// SKL PCH-LP:
+#define R_PCH_LP_PCR_GPIO_GPP_F_PAD_OWN 0x20
+#define R_PCH_LP_PCR_GPIO_GPP_G_PAD_OWN 0x30
+#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_VWM_EN 0x80
+#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_VWM_EN 0x84
+#define R_PCH_LP_PCR_GPIO_GPP_F_PADCFGLOCK 0xA0
+#define R_PCH_LP_PCR_GPIO_GPP_F_PADCFGLOCKTX 0xA4
+#define R_PCH_LP_PCR_GPIO_GPP_G_PADCFGLOCK 0xA8
+#define R_PCH_LP_PCR_GPIO_GPP_G_PADCFGLOCKTX 0xAC
+#define R_PCH_LP_PCR_GPIO_GPP_F_HOSTSW_OWN 0xD0
+#define R_PCH_LP_PCR_GPIO_GPP_G_HOSTSW_OWN 0xD4
+#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_IS 0x0100
+#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_IS 0x0104
+#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_IE 0x0120
+#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_IE 0x0124
+#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_GPE_STS 0x0140
+#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_GPE_STS 0x0144
+#define R_PCH_LP_PCR_GPIO_GPP_F_GPI_GPE_EN 0x0160
+#define R_PCH_LP_PCR_GPIO_GPP_G_GPI_GPE_EN 0x0164
+#define R_PCH_LP_PCR_GPIO_GPP_F_PADCFG_OFFSET 0x400
+#define R_PCH_LP_PCR_GPIO_GPP_G_PADCFG_OFFSET 0x4C0
+
+// SKX Server PCH
+#define R_PCH_H_PCR_GPIO_GPP_I_PAD_OWN 0x20
+#define R_PCH_H_PCR_GPIO_GPP_I_GPI_VWM_EN 0x50
+#define R_PCH_H_PCR_GPIO_GPP_I_PADCFGLOCK 0x60
+#define R_PCH_H_PCR_GPIO_GPP_I_PADCFGLOCKTX 0x64
+#define R_PCH_H_PCR_GPIO_GPP_I_HOSTSW_OWN 0x80
+#define R_PCH_H_PCR_GPIO_GPP_I_GPI_IS 0x0100
+#define R_PCH_H_PCR_GPIO_GPP_I_GPI_IE 0x0110
+#define R_PCH_H_PCR_GPIO_GPP_I_GPI_GPE_STS 0x0120
+#define R_PCH_H_PCR_GPIO_GPP_I_GPI_GPE_EN 0x0130
+#define R_PCH_H_PCR_GPIO_GPP_I_SMI_STS 0x0140
+#define R_PCH_H_PCR_GPIO_GPP_I_SMI_EN 0x0150
+#define R_PCH_H_PCR_GPIO_GPP_I_NMI_STS 0x0160
+#define R_PCH_H_PCR_GPIO_GPP_I_NMI_EN 0x0170
+#define R_PCH_H_PCR_GPIO_GPP_I_PADCFG_OFFSET 0x400
+
+//
+// GPIO Community 4 Private Configuration Registers
+//
+
+// SKX Server PCH
+#define R_PCH_H_PCR_GPIO_GPP_J_PAD_OWN 0x20
+#define R_PCH_H_PCR_GPIO_GPP_K_PAD_OWN 0x2C
+#define R_PCH_H_PCR_GPIO_GPP_J_GPI_VWM_EN 0x50
+#define R_PCH_H_PCR_GPIO_GPP_K_GPI_VWM_EN 0x54
+#define R_PCH_H_PCR_GPIO_GPP_J_PADCFGLOCK 0x60
+#define R_PCH_H_PCR_GPIO_GPP_J_PADCFGLOCKTX 0x64
+#define R_PCH_H_PCR_GPIO_GPP_K_PADCFGLOCK 0x68
+#define R_PCH_H_PCR_GPIO_GPP_K_PADCFGLOCKTX 0x6C
+#define R_PCH_H_PCR_GPIO_GPP_J_HOSTSW_OWN 0x80
+#define R_PCH_H_PCR_GPIO_GPP_K_HOSTSW_OWN 0x84
+#define R_PCH_H_PCR_GPIO_GPP_J_GPI_IS 0x0100
+#define R_PCH_H_PCR_GPIO_GPP_K_GPI_IS 0x0104
+#define R_PCH_H_PCR_GPIO_GPP_J_GPI_IE 0x0110
+#define R_PCH_H_PCR_GPIO_GPP_K_GPI_IE 0x0114
+#define R_PCH_H_PCR_GPIO_GPP_J_GPI_GPE_STS 0x0120
+#define R_PCH_H_PCR_GPIO_GPP_K_GPI_GPE_STS 0x0124
+#define R_PCH_H_PCR_GPIO_GPP_J_GPI_GPE_EN 0x0130
+#define R_PCH_H_PCR_GPIO_GPP_K_GPI_GPE_EN 0x0134
+#define R_PCH_H_PCR_GPIO_GPP_J_PADCFG_OFFSET 0x400
+#define R_PCH_H_PCR_GPIO_GPP_K_PADCFG_OFFSET 0x4C0
+
+//
+// GPIO Community 5 Private Configuration Registers
+//
+
+// SKX Server PCH
+#define R_PCH_H_PCR_GPIO_GPP_G_PAD_OWN 0x20
+#define R_PCH_H_PCR_GPIO_GPP_H_PAD_OWN 0x2C
+#define R_PCH_H_PCR_GPIO_GPP_L_PAD_OWN 0x38
+#define R_PCH_H_PCR_GPIO_GPP_G_GPI_VWM_EN 0x50
+#define R_PCH_H_PCR_GPIO_GPP_H_GPI_VWM_EN 0x54
+#define R_PCH_H_PCR_GPIO_GPP_L_GPI_VWM_EN 0x58
+#define R_PCH_H_PCR_GPIO_GPP_G_PADCFGLOCK 0x60
+#define R_PCH_H_PCR_GPIO_GPP_G_PADCFGLOCKTX 0x64
+#define R_PCH_H_PCR_GPIO_GPP_H_PADCFGLOCK 0x68
+#define R_PCH_H_PCR_GPIO_GPP_H_PADCFGLOCKTX 0x6C
+#define R_PCH_H_PCR_GPIO_GPP_L_PADCFGLOCK 0x70
+#define R_PCH_H_PCR_GPIO_GPP_L_PADCFGLOCKTX 0x74
+#define R_PCH_H_PCR_GPIO_GPP_G_HOSTSW_OWN 0x80
+#define R_PCH_H_PCR_GPIO_GPP_H_HOSTSW_OWN 0x84
+#define R_PCH_H_PCR_GPIO_GPP_L_HOSTSW_OWN 0x88
+#define R_PCH_H_PCR_GPIO_GPP_G_GPI_IS 0x0100
+#define R_PCH_H_PCR_GPIO_GPP_H_GPI_IS 0x0104
+#define R_PCH_H_PCR_GPIO_GPP_L_GPI_IS 0x0108
+#define R_PCH_H_PCR_GPIO_GPP_G_GPI_IE 0x0110
+#define R_PCH_H_PCR_GPIO_GPP_H_GPI_IE 0x0114
+#define R_PCH_H_PCR_GPIO_GPP_L_GPI_IE 0x0118
+#define R_PCH_H_PCR_GPIO_GPP_G_GPI_GPE_STS 0x0120
+#define R_PCH_H_PCR_GPIO_GPP_H_GPI_GPE_STS 0x0124
+#define R_PCH_H_PCR_GPIO_GPP_L_GPI_GPE_STS 0x0128
+#define R_PCH_H_PCR_GPIO_GPP_G_GPI_GPE_EN 0x0130
+#define R_PCH_H_PCR_GPIO_GPP_H_GPI_GPE_EN 0x0134
+#define R_PCH_H_PCR_GPIO_GPP_L_GPI_GPE_EN 0x0138
+#define R_PCH_H_PCR_GPIO_GPP_G_PADCFG_OFFSET 0x400
+#define R_PCH_H_PCR_GPIO_GPP_H_PADCFG_OFFSET 0x4C0
+#define R_PCH_H_PCR_GPIO_GPP_L_PADCFG_OFFSET 0x580
+
+
+
+
+//
+// Define Pad Number
+//
+#define V_GPIO_PAD0 0
+#define V_GPIO_PAD1 1
+#define V_GPIO_PAD2 2
+#define V_GPIO_PAD3 3
+#define V_GPIO_PAD4 4
+#define V_GPIO_PAD5 5
+#define V_GPIO_PAD6 6
+#define V_GPIO_PAD7 7
+#define V_GPIO_PAD8 8
+#define V_GPIO_PAD9 9
+#define V_GPIO_PAD10 10
+#define V_GPIO_PAD11 11
+#define V_GPIO_PAD12 12
+#define V_GPIO_PAD13 13
+#define V_GPIO_PAD14 14
+#define V_GPIO_PAD15 15
+#define V_GPIO_PAD16 16
+#define V_GPIO_PAD17 17
+#define V_GPIO_PAD18 18
+#define V_GPIO_PAD19 19
+#define V_GPIO_PAD20 20
+#define V_GPIO_PAD21 21
+#define V_GPIO_PAD22 22
+#define V_GPIO_PAD23 23
+
+//
+// Host Software Pad Ownership modes
+//
+#define V_GPIO_PCR_HOSTSW_OWN_ACPI 0x00
+#define V_GPIO_PCR_HOSTSW_OWN_GPIO 0x01
+
+//
+// Pad Ownership modes
+//
+#define V_GPIO_PCR_PAD_OWN_HOST 0x00
+#define V_GPIO_PCR_PAD_OWN_CSME 0x01
+#define V_GPIO_PCR_PAD_OWN_ISH 0x02
+
+//
+// Pad Configuration Register DW0
+//
+
+//Pad Reset Config
+#define B_GPIO_PCR_RST_CONF (BIT31 | BIT30)
+#define N_GPIO_PCR_RST_CONF 30
+#define V_GPIO_PCR_RST_CONF_POW_GOOD 0x00
+#define V_GPIO_PCR_RST_CONF_DEEP_RST 0x01
+#define V_GPIO_PCR_RST_CONF_GPIO_RST 0x02
+#define V_GPIO_PCR_RST_CONF_RESUME_RST 0x03 // Only for GPD Group
+
+//RX Pad State Select
+#define B_GPIO_PCR_RX_PAD_STATE BIT29
+#define N_GPIO_PCR_RX_PAD_STATE 29
+#define V_GPIO_PCR_RX_PAD_STATE_RAW 0x00
+#define V_GPIO_PCR_RX_PAD_STATE_INT 0x01
+
+//RX Raw Overrride to 1
+#define B_GPIO_PCR_RX_RAW1 BIT28
+#define N_GPIO_PCR_RX_RAW1 28
+#define V_GPIO_PCR_RX_RAW1_DIS 0x00
+#define V_GPIO_PCR_RX_RAW1_EN 0x01
+
+//RX Level/Edge Configuration
+#define B_GPIO_PCR_RX_LVL_EDG (BIT26 | BIT25)
+#define N_GPIO_PCR_RX_LVL_EDG 25
+#define V_GPIO_PCR_RX_LVL_EDG_LVL 0x00
+#define V_GPIO_PCR_RX_LVL_EDG_EDG 0x01
+#define V_GPIO_PCR_RX_LVL_EDG_0 0x02
+#define V_GPIO_PCR_RX_LVL_EDG_RIS_FAL 0x03
+
+//RX Invert
+#define B_GPIO_PCR_RXINV BIT23
+#define N_GPIO_PCR_RXINV 23
+#define V_GPIO_PCR_RXINV_NO 0x00
+#define V_GPIO_PCR_RXINV_YES 0x01
+
+//GPIO Input Route IOxAPIC
+#define B_GPIO_PCR_RX_APIC_ROUTE BIT20
+#define N_GPIO_PCR_RX_APIC_ROUTE 20
+#define V_GPIO_PCR_RX_APIC_ROUTE_DIS 0x00
+#define V_GPIO_PCR_RX_APIC_ROUTE_EN 0x01
+
+//GPIO Input Route SCI
+#define B_GPIO_PCR_RX_SCI_ROUTE BIT19
+#define N_GPIO_PCR_RX_SCI_ROUTE 19
+#define V_GPIO_PCR_RX_SCI_ROUTE_DIS 0x00
+#define V_GPIO_PCR_RX_SCI_ROUTE_EN 0x01
+
+//GPIO Input Route SMI
+#define B_GPIO_PCR_RX_SMI_ROUTE BIT18
+#define N_GPIO_PCR_RX_SMI_ROUTE 18
+#define V_GPIO_PCR_RX_SMI_ROUTE_DIS 0x00
+#define V_GPIO_PCR_RX_SMI_ROUTE_EN 0x01
+
+//GPIO Input Route NMI
+#define B_GPIO_PCR_RX_NMI_ROUTE BIT17
+#define N_GPIO_PCR_RX_NMI_ROUTE 17
+#define V_GPIO_PCR_RX_NMI_ROUTE_DIS 0x00
+#define V_GPIO_PCR_RX_NMI_ROUTE_EN 0x01
+
+//GPIO Pad Mode
+#define B_GPIO_PCR_PAD_MODE (BIT12 | BIT11 | BIT10)
+#define N_GPIO_PCR_PAD_MODE 10
+#define V_GPIO_PCR_PAD_MODE_GPIO 0
+#define V_GPIO_PCR_PAD_MODE_NAT_1 1
+#define V_GPIO_PCR_PAD_MODE_NAT_2 2
+#define V_GPIO_PCR_PAD_MODE_NAT_3 3
+#define V_GPIO_PCR_PAD_MODE_NAT_4 4 // SPT-H only
+
+//GPIO RX Disable
+#define B_GPIO_PCR_RXDIS BIT9
+#define N_GPIO_PCR_RXDIS 9
+#define V_GPIO_PCR_RXDIS_EN 0x00
+#define V_GPIO_PCR_RXDIS_DIS 0x01
+
+//GPIO TX Disable
+#define B_GPIO_PCR_TXDIS BIT8
+#define N_GPIO_PCR_TXDIS 8
+#define V_GPIO_PCR_TXDIS_EN 0x00
+#define V_GPIO_PCR_TXDIS_DIS 0x01
+
+//GPIO RX State
+#define B_GPIO_PCR_RX_STATE BIT1
+#define N_GPIO_PCR_RX_STATE 1
+#define V_GPIO_PCR_RX_STATE_LOW 0x00
+#define V_GPIO_PCR_RX_STATE_HIGH 0x01
+
+//GPIO TX State
+#define B_GPIO_PCR_TX_STATE BIT0
+#define N_GPIO_PCR_TX_STATE 0
+#define V_GPIO_PCR_TX_STATE_LOW 0x00
+#define V_GPIO_PCR_TX_STATE_HIGH 0x01
+
+//
+// Pad Configuration Register DW1
+//
+
+//Padtol
+#define B_GPIO_PCR_PADTOL BIT25
+#define N_GPIO_PCR_PADTOL 25
+#define V_GPIO_PCR_PADTOL_NONE 0x00
+#define V_GPIO_PCR_PADTOL_CLEAR 0x00
+#define V_GPIO_PCR_PADTOL_SET 0x01
+
+//Termination
+#define B_GPIO_PCR_TERM (BIT13 | BIT12 | BIT11 | BIT10)
+#define N_GPIO_PCR_TERM 10
+#define V_GPIO_PCR_TERM_WPD_NONE 0x00
+#define V_GPIO_PCR_TERM_WPD_5K 0x02
+#define V_GPIO_PCR_TERM_WPD_20K 0x04
+#define V_GPIO_PCR_TERM_WPU_NONE 0x08
+#define V_GPIO_PCR_TERM_WPU_1K 0x09
+#define V_GPIO_PCR_TERM_WPU_2K 0x0B
+#define V_GPIO_PCR_TERM_WPU_5K 0x0A
+#define V_GPIO_PCR_TERM_WPU_20K 0x0C
+#define V_GPIO_PCR_TERM_WPU_1K_2K 0x0D
+#define V_GPIO_PCR_TERM_NATIVE 0x0F
+
+//Interrupt number
+#define B_GPIO_PCR_INTSEL 0x7F
+#define N_GPIO_PCR_INTSEL 0
+
+//
+// Ownership
+//
+#define V_GPIO_PCR_OWN_GPIO 0x01
+#define V_GPIO_PCR_OWN_ACPI 0x00
+
+//
+// GPE
+//
+#define V_GPIO_PCR_GPE_EN 0x01
+#define V_GPIO_PCR_GPE_DIS 0x00
+//
+// SMI
+//
+#define V_GPIO_PCR_SMI_EN 0x01
+#define V_GPIO_PCR_SMI_DIS 0x00
+//
+// NMI
+//
+#define V_GPIO_PCR_NMI_EN 0x01
+#define V_GPIO_PCR_NMI_DIS 0x00
+//
+// Reserved: RSVD1
+//
+#define V_PCH_GPIO_RSVD1 0x00
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h
new file mode 100644
index 0000000000..b7c737be42
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h
@@ -0,0 +1,271 @@
+/** @file
+ Register names for PCH High Definition Audio device.
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_HDA_H_
+#define _PCH_REGS_HDA_H_
+
+//
+// HD-A Controller Registers (D31:F3)
+//
+// PCI Configuration Space Registers
+//
+#define PCI_DEVICE_NUMBER_PCH_HDA 31
+#define PCI_FUNCTION_NUMBER_PCH_HDA 3
+
+#define V_PCH_HDA_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_LP_HDA_DEVICE_ID_0 0x9D70
+#define V_PCH_LP_HDA_DEVICE_ID_1 0x9D71
+#define V_PCH_LP_HDA_DEVICE_ID_2 0x9D72
+#define V_PCH_LP_HDA_DEVICE_ID_3 0x9D73
+#define V_PCH_LP_HDA_DEVICE_ID_4 0x9D74
+#define V_PCH_LP_HDA_DEVICE_ID_5 0x9D75
+#define V_PCH_LP_HDA_DEVICE_ID_6 0x9D76
+#define V_PCH_LP_HDA_DEVICE_ID_7 0x9D77
+#define V_PCH_H_HDA_DEVICE_ID_0 0xA170
+#define V_PCH_H_HDA_DEVICE_ID_1 0xA171
+#define V_PCH_H_HDA_DEVICE_ID_2 0xA172
+#define V_PCH_H_HDA_DEVICE_ID_3 0xA173
+#define V_PCH_H_HDA_DEVICE_ID_4 0xA174
+#define V_PCH_H_HDA_DEVICE_ID_5 0xA175
+#define V_PCH_H_HDA_DEVICE_ID_6 0xA176
+#define V_PCH_H_HDA_DEVICE_ID_7 0xA177
+//
+// LBG SSX (Super SKU) DIDs
+//
+#define V_PCH_LBG_HDA_DEVICE_ID_0 0xA270
+#define V_PCH_LBG_HDA_DEVICE_ID_1 0xA271
+#define V_PCH_LBG_HDA_DEVICE_ID_2 0xA272
+#define V_PCH_LBG_HDA_DEVICE_ID_3 0xA273
+#define V_PCH_LBG_HDA_DEVICE_ID_4 0xA274
+#define V_PCH_LBG_HDA_DEVICE_ID_5 0xA275
+#define V_PCH_LBG_HDA_DEVICE_ID_6 0xA276
+#define V_PCH_LBG_HDA_DEVICE_ID_7 0xA277
+//
+// LBG PRODUCTION (PRQ) DIDs
+//
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_0 0xA1F0
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_1 0xA1F1
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_2 0xA1F2
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_3 0xA1F3
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_4 0xA1F4
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_5 0xA1F5
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_6 0xA1F6
+#define V_PCH_LBG_PROD_HDA_DEVICE_ID_7 0xA1F7
+
+
+#define R_PCH_HDA_PI 0x09
+#define V_PCH_HDA_PI_ADSP_UAA 0x80
+#define R_PCH_HDA_SCC 0x0A
+#define V_PCH_HDA_SCC_ADSP 0x01
+#define R_PCH_HDA_HDALBA 0x10
+#define B_PCH_HDA_HDALBA_LBA 0xFFFFC000
+#define V_PCH_HDA_HDBAR_SIZE (1 << 14)
+#define R_PCH_HDA_HDAUBA 0x14
+#define B_PCH_HDA_HDAUBA_UBA 0xFFFFFFFF
+#define R_PCH_HDA_CGCTL 0x48
+#define B_PCH_HDA_CGCTL_MEMDCGE BIT0
+#define B_PCH_HDA_CGCTL_ADSPDCGE BIT1
+#define B_PCH_HDA_CGCTL_GPDMADCGE BIT2
+#define B_PCH_HDA_CGCTL_HDALDCGE BIT3
+#define B_PCH_HDA_CGCTL_MISCBDCGE BIT6
+#define B_PCH_HDA_CGCTL_ODMABDCGE BIT4
+#define B_PCH_HDA_CGCTL_IDMABDCGE BIT5
+#define B_PCH_HDA_CGCTL_IOSFBDCGE BIT7
+#define B_PCH_HDA_CGCTL_IOSFSDCGE BIT8
+#define B_PCH_HDA_CGCTL_DMICDCGE BIT10
+#define B_PCH_HDA_CGCTL_I2SDCGE BIT11
+#define B_PCH_HDA_CGCTL_APTCGE BIT16
+#define B_PCH_HDA_CGCTL_XOTCGE BIT17
+#define B_PCH_HDA_CGCTL_SROTCGE BIT18
+#define B_PCH_HDA_CGCTL_IOSFBTCGE BIT19
+#define B_PCH_HDA_CGCTL_IOSFSTCGE BIT20
+#define B_PCH_HDA_CGCTL_FROTCGE BIT21
+#define B_PCH_HDA_CGCTL_APLLSE BIT31
+#define V_PCH_HDA_CGCTL_CGEN (B_PCH_HDA_CGCTL_MEMDCGE | \
+ B_PCH_HDA_CGCTL_ADSPDCGE | \
+ B_PCH_HDA_CGCTL_GPDMADCGE | \
+ B_PCH_HDA_CGCTL_HDALDCGE | \
+ B_PCH_HDA_CGCTL_MISCBDCGE | \
+ B_PCH_HDA_CGCTL_ODMABDCGE | \
+ B_PCH_HDA_CGCTL_IDMABDCGE | \
+ B_PCH_HDA_CGCTL_IOSFBDCGE | \
+ B_PCH_HDA_CGCTL_IOSFSDCGE | \
+ B_PCH_HDA_CGCTL_DMICDCGE | \
+ B_PCH_HDA_CGCTL_I2SDCGE | \
+ B_PCH_HDA_CGCTL_APTCGE | \
+ B_PCH_HDA_CGCTL_XOTCGE | \
+ B_PCH_HDA_CGCTL_SROTCGE | \
+ B_PCH_HDA_CGCTL_IOSFBTCGE | \
+ B_PCH_HDA_CGCTL_IOSFSTCGE | \
+ B_PCH_HDA_CGCTL_FROTCGE | \
+ B_PCH_HDA_CGCTL_APLLSE )
+#define R_PCH_HDA_CGCTL 0x48
+#define B_PCH_HDA_CGCTL_MISCBDCGE BIT6
+#define R_PCH_HDA_PC 0x52
+#define V_PCH_HDA_PC_PMES 0x18
+#define N_PCH_HDA_PC_PMES 11
+#define R_PCH_HDA_PCS 0x54
+#define B_PCH_HDA_PCS_PMES BIT15
+#define B_PCH_HDA_PCS_PMEE BIT8
+#define B_PCH_HDA_PCS_PS (BIT1 | BIT0)
+#define R_PCH_HDA_MMC 0x62
+#define B_PCH_HDA_MMC_ME BIT0
+#define R_PCH_HDA_DEVC 0x78
+#define B_PCH_HDA_DEVC_NSNPEN BIT11
+#define R_PCH_HDA_SEM1 0xC0
+#define B_PCH_HDA_SEM1_LFLCS BIT24
+#define B_PCH_HDA_SEM1_BLKC3DIS BIT17
+#define B_PCH_HDA_SEM1_TMODE BIT12
+#define B_PCH_HDA_SEM1_FIFORDYSEL (BIT10 | BIT9)
+#define R_PCH_HDA_SEM2 0xC4
+#define B_PCH_HDA_SEM2_BSMT (BIT27 | BIT26)
+#define V_PCH_HDA_SEM2_BSMT 0x1
+#define N_PCH_HDA_SEM2_BSMT 26
+#define B_PCH_HDA_SEM2_VC0PSNR BIT24
+#define R_PCH_HDA_SEM3L 0xC8
+#define B_PCH_HDA_SEM3L_ISL1EXT2 (BIT21 | BIT20)
+#define V_PCH_HDA_SEM3L_ISL1EXT2 0x2
+#define N_PCH_HDA_SEM3L_ISL1EXT2 20
+#define R_PCH_HDA_SEM4L 0xD0
+#define B_PCH_HDA_SEM4L_OSL1EXT2 (BIT21 | BIT20)
+#define V_PCH_HDA_SEM4L_OSL1EXT2 0x3
+#define N_PCH_HDA_SEM4L_OSL1EXT2 20
+
+//
+// Memory Space Registers
+//
+//
+// Resides in 'HD Audio Global Registers' (0000h)
+//
+#define R_PCH_HDABA_GCAP 0x00
+#define R_PCH_HDABA_GCTL 0x08
+#define B_PCH_HDABA_GCTL_CRST BIT0
+
+#define R_PCH_HDABA_OUTPAY 0x04
+#define R_PCH_HDABA_INPAY 0x06
+#define V_PCH_HDABA_INPAY_DEFAULT 0x1C
+
+#define R_PCH_HDABA_WAKEEN 0x0C
+#define B_PCH_HDABA_WAKEEN_SDI_3 BIT3
+#define B_PCH_HDABA_WAKEEN_SDI_2 BIT2
+#define B_PCH_HDABA_WAKEEN_SDI_1 BIT1
+#define B_PCH_HDABA_WAKEEN_SDI_0 BIT0
+
+#define R_PCH_HDABA_WAKESTS 0x0E
+#define B_PCH_HDABA_WAKESTS_SDIN3 BIT3
+#define B_PCH_HDABA_WAKESTS_SDIN2 BIT2
+#define B_PCH_HDABA_WAKESTS_SDIN1 BIT1
+#define B_PCH_HDABA_WAKESTS_SDIN0 BIT0
+
+//
+// Resides in 'HD Audio Controller Registers' (0030h)
+//
+#define R_PCH_HDABA_IC 0x60
+#define R_PCH_HDABA_IR 0x64
+#define R_PCH_HDABA_ICS 0x68
+#define B_PCH_HDABA_ICS_IRV BIT1
+#define B_PCH_HDABA_ICS_ICB BIT0
+
+//
+// Resides in 'HD Audio Processing Pipe Capability Structure' (0800h)
+//
+#define R_PCH_HDABA_PPC 0x0800 // Processing Pipe Capability Structure (Memory Space, offset 0800h)
+#define R_PCH_HDABA_PPCTL (R_PCH_HDABA_PPC + 0x04)
+#define B_PCH_HDABA_PPCTL_GPROCEN BIT30
+
+//
+// Resides in 'HD Audio Multiple Links Capability Structure' (0C00h)
+//
+#define V_PCH_HDA_HDALINK_INDEX 0
+#define V_PCH_HDA_IDISPLINK_INDEX 1
+
+#define R_PCH_HDABA_MLC 0x0C00 // Multiple Links Capability Structure (Memory Space, offset 0C00h)
+#define R_PCH_HDABA_LCTLX(x) (R_PCH_HDABA_MLC + (0x40 + (0x40 * (x)) + 0x04)) // x - Link index: 0 - HDA Link, 1 - iDisp Link
+#define B_PCH_HDABA_LCTLX_CPA BIT23
+#define B_PCH_HDABA_LCTLX_SPA BIT16
+#define N_PCH_HDABA_LCTLX_SCF 0
+#define V_PCH_HDABA_LCTLX_SCF_6MHZ 0x0
+#define V_PCH_HDABA_LCTLX_SCF_12MHZ 0x1
+#define V_PCH_HDABA_LCTLX_SCF_24MHZ 0x2
+#define V_PCH_HDABA_LCTLX_SCF_48MHZ 0x3
+#define V_PCH_HDABA_LCTLX_SCF_96MHZ 0x4
+
+//
+// Resides in 'HD Audio Vendor Specific Registers' (1000h)
+//
+#define R_PCH_HDABA_LTRC 0x1048
+#define V_PCH_HDABA_LTRC_GB 0x29
+#define N_PCH_HDABA_LTRC_GB 0
+#define R_PCH_HDABA_PCE 0x104B
+#define B_PCH_HDABA_PCE_D3HE BIT2
+
+//
+// Private Configuration Space Registers
+//
+//
+// Resides in IOSF & Fabric Configuration Registers (000h)
+//
+#define R_PCH_PCR_HDA_TTCCFG 0xE4
+#define B_PCH_PCR_HDA_TTCCFG_HCDT BIT1
+
+//
+// Resides in PCI & Codec Configuration Registers (500h)
+//
+#define R_PCH_PCR_HDA_PCICDCCFG 0x500 // PCI & Codec Configuration Registers (PCR, offset 500h)
+#define B_PCH_PCR_HDA_PCICDCCFG_ACPIIN 0x0000FF00
+#define N_PCH_PCR_HDA_PCICDCCFG_ACPIIN 8
+#define R_PCH_PCR_HDA_FNCFG (R_PCH_PCR_HDA_PCICDCCFG + 0x30)
+#define B_PCH_PCR_HDA_FNCFG_PGD BIT5
+#define B_PCH_PCR_HDA_FNCFG_BCLD BIT4
+#define B_PCH_PCR_HDA_FNCFG_CGD BIT3
+#define B_PCH_PCR_HDA_FNCFG_ADSPD BIT2
+
+#define B_PCH_PCR_HDA_FNCFG_HDASPCID BIT1
+
+#define B_PCH_PCR_HDA_FNCFG_HDASD BIT0
+#define R_PCH_PCR_HDA_CDCCFG (R_PCH_PCR_HDA_PCICDCCFG + 0x34)
+#define B_PCH_PCR_HDA_CDCCFG_DIS_SDIN2 BIT2
+
+//
+// Resides in Power Management & EBB Configuration Registers (600h)
+//
+#define R_PCH_PCR_HDA_PWRMANCFG 0x600 // Power Management & EBB Configuration Registers (PCR, offset 600h)
+#define R_PCH_PCR_HDA_APLLP0 (R_PCH_PCR_HDA_PWRMANCFG + 0x10)
+#define V_PCH_PCR_HDA_APLLP0 0xFC1E0000
+#define R_PCH_PCR_HDA_APLLP1 (R_PCH_PCR_HDA_PWRMANCFG + 0x14)
+#define V_PCH_PCR_HDA_APLLP1 0x00003F00
+#define R_PCH_PCR_HDA_APLLP2 (R_PCH_PCR_HDA_PWRMANCFG + 0x18)
+#define V_PCH_PCR_HDA_APLLP2 0x0000011D
+#define R_PCH_PCR_HDA_IOBCTL (R_PCH_PCR_HDA_PWRMANCFG + 0x1C)
+#define B_PCH_PCR_HDA_IOBCTL_OSEL (BIT9 | BIT8)
+#define V_PCH_PCR_HDA_IOBCTL_OSEL_HDALINK 0
+#define V_PCH_PCR_HDA_IOBCTL_OSEL_HDALINK_I2S 1
+#define V_PCH_PCR_HDA_IOBCTL_OSEL_I2S 3
+#define N_PCH_PCR_HDA_IOBCTL_OSEL 8
+#define B_PCH_PCR_HDA_IOBCTL_VSEL BIT1
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h
new file mode 100644
index 0000000000..52a27fccf5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h
@@ -0,0 +1,190 @@
+/** @file
+ Register definition for HSIO
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_HSIO_H_
+#define _PCH_REGS_HSIO_H_
+
+#define B_HSIO_PCR_ACCESS_TYPE (BIT15 | BIT14)
+#define N_HSIO_PCR_ACCESS_TYPE 14
+#define V_HSIO_PCR_ACCESS_TYPE_BDCAST (BIT15 | BIT14)
+#define V_HSIO_PCR_ACCESS_TYPE_MULCAST BIT15
+#define B_HSIO_PCR_LANE_GROUP_NO (BIT13 | BIT12 | BIT11 | BIT10 | BIT9)
+#define B_HSIO_PCR_FUNCTION_NO (BIT8 | BIT7)
+#define N_HSIO_PCR_FUNCTION_NO 7
+#define B_HSIO_PCR_REG_OFFSET (BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0)
+
+#define V_HSIO_PCR_ACCESS_TYPE_BCAST 0x03
+#define V_HSIO_PCR_ACCESS_TYPE_MCAST 0x02
+#define V_HSIO_PCR_ACCESS_TYPE_UCAST 0x00
+
+#define V_HSIO_PCR_LANE_GROUP_NO_CMN_LANE 0x00
+
+#define V_HSIO_PCR_FUNCTION_NO_PCS 0x00
+#define V_HSIO_PCR_FUNCTION_NO_TX 0x01
+#define V_HSIO_PCR_FUNCTION_NO_RX 0x02
+
+#define V_HSIO_PCR_FUNCTION_NO_CMNDIG 0x00
+#define V_HSIO_PCR_FUNCTION_NO_CMNANA 0x01
+#define V_HSIO_PCR_FUNCTION_NO_PLL 0x02
+
+#define R_HSIO_PCR_PCS_DWORD4 0x10
+
+#define R_HSIO_PCR_PCS_DWORD8 0x20
+#define B_HSIO_PCR_PCS_DWORD8_CRI_RXEB_PTR_INIT_4_0 0x1F000000
+#define B_HSIO_PCR_PCS_DWORD8_CRI_RXEB_LOWATER_4_0 0x001F0000
+#define N_HSIO_PCR_PCS_DWORD8_CRI_RXEB_LOWATER_4_0 16
+#define B_HSIO_PCR_PCS_DWORD8_CRI_RXEB_HIWATER_4_0 0x00001F00
+#define N_HSIO_PCR_PCS_DWORD8_CRI_RXEB_HIWATER_4_0 8
+
+#define R_HSIO_PCR_PCS_DWORD9 0x24
+#define B_HSIO_PCR_PCS_DWORD9_REG_ENABLE_PWR_GATING BIT29
+
+#define R_HSIO_PCR_RX_DWORD8 0x120
+#define B_HSIO_PCR_RX_DWORD8_ICFGDFETAP3_EN BIT10
+
+#define R_HSIO_PCR_RX_DWORD9 0x124
+#define B_HSIO_PCR_RX_DWORD9_CFGDFETAP4_OVERRIDE_EN BIT24
+#define B_HSIO_PCR_RX_DWORD9_CFGDFETAP3_OVERRIDE_EN BIT26
+#define B_HSIO_PCR_RX_DWORD9_CFGDFETAP2_OVERRIDE_EN BIT28
+#define B_HSIO_PCR_RX_DWORD9_CFGDFETAP1_OVERRIDE_EN BIT30
+
+#define R_HSIO_PCR_RX_DWORD12 0x130
+#define B_HSIO_PCR_RX_DWORD12_O_CFGEWMARGINSEL BIT14
+
+#define R_HSIO_PCR_RX_DWORD20 0x150
+#define B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0 (BIT29 | BIT28 | BIT27 | BIT26 | BIT25 | BIT24)
+#define N_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0 24
+
+#define R_HSIO_PCR_RX_DWORD21 0x154
+#define B_HSIO_PCR_RX_DWORD21_ICFGCTLEDATATAP_QUATRATE_5_0 (BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8)
+#define N_HSIO_PCR_RX_DWORD21_ICFGCTLEDATATAP_QUATRATE_5_0 8
+#define B_HSIO_PCR_RX_DWORD21_ICFGCTLEDATATAP_HALFRATE_5_0 (BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0)
+#define N_HSIO_PCR_RX_DWORD21_ICFGCTLEDATATAP_HALFRATE_5_0 0
+
+#define R_HSIO_PCR_RX_DWORD23 0x15C
+#define B_HSIO_PCR_RX_DWORD23_ICFGVGABLWTAP_OVERRIDE_EN BIT2
+#define B_HSIO_PCR_RX_DWORD23_CFGVGATAP_ADAPT_OVERRIDE_EN BIT4
+
+#define R_HSIO_PCR_RX_DWORD25 0x164
+#define B_HSIO_PCR_RX_DWORD25_RX_TAP_CFG_CTRL BIT3
+#define B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0 0x1F0000
+#define N_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0 16
+
+#define R_HSIO_PCR_RX_DWORD26 0x168
+#define B_HSIO_PCR_RX_DWORD26_SATA_EQ_DIS BIT16
+
+#define R_HSIO_PCR_RX_DWORD34 0x188
+#define B_HSIO_PCR_RX_DWORD34_MM_PH_OFC_SCALE_2_0 (BIT14 | BIT13 | BIT12)
+#define N_HSIO_PCR_RX_DWORD34_MM_PH_OFC_SCALE_2_0 12
+
+#define R_HSIO_PCR_RX_DWORD44 0x1B0
+#define B_HSIO_PCR_RX_DWORD44_0_DFE_DATASUMCAL0_7_0 0xFF0000
+#define N_HSIO_PCR_RX_DWORD44_0_DFE_DATASUMCAL0_7_0 16
+
+#define R_HSIO_PCR_RX_DWORD39 0x19C
+#define B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0 0x7C0000
+#define N_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0 18
+
+#define R_HSIO_PCR_RX_DWORD40 0x1A0
+#define B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP 0xFF000000
+#define N_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP 24
+
+#define R_HSIO_PCR_RX_DWORD41 0x1A4
+#define B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS 0xFFFFFF
+#define N_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS 0
+
+#define R_HSIO_PCR_RX_DWORD7 0x11C
+#define B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL 0xF8000000
+#define N_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL 27
+
+
+#define R_HSIO_PCR_RX_DWORD56 0x1E0
+#define B_HSIO_PCR_RX_DWORD56_ICFGPIDACCFGVALID BIT16
+
+#define R_HSIO_PCR_RX_DWORD57 0x1E4
+#define B_HSIO_PCR_RX_DWORD57_JIM_COURSE BIT30
+#define B_HSIO_PCR_RX_DWORD57_JIM_ENABLE BIT29
+#define B_HSIO_PCR_RX_DWORD57_JIMMODE BIT28
+#define B_HSIO_PCR_RX_DWORD57_JIMNUMCYCLES_3_0 0x0F000000
+#define N_HSIO_PCR_RX_DWORD57_JIMNUMCYCLES_3_0 24
+#define B_HSIO_PCR_RX_DWORD57_ICFGMARGINEN BIT0
+
+#define R_HSIO_PCR_RX_DWORD59 0x1EC
+#define R_HSIO_PCR_RX_DWORD60 0x1F0
+
+#define R_HSIO_PCR_TX_DWORD5 0x94
+#define B_HSIO_PCR_TX_DWORD5_OW2TAPGEN2DEEMPH3P5_5_0 (BIT21 | BIT20 | BIT19 | BIT18 | BIT17 | BIT16)
+#define N_HSIO_PCR_TX_DWORD5_OW2TAPGEN2DEEMPH3P5_5_0 16
+#define B_HSIO_PCR_TX_DWORD5_OW2TAPGEN1DEEMPH3P5_5_0 (BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8)
+#define N_HSIO_PCR_TX_DWORD5_OW2TAPGEN1DEEMPH3P5_5_0 8
+
+#define R_HSIO_PCR_TX_DWORD6 0x98
+#define B_HSIO_PCR_TX_DWORD6_OW2TAPGEN3DEEMPH6P0_5_0 (BIT21 | BIT20 | BIT19 | BIT18 | BIT17 | BIT16)
+#define N_HSIO_PCR_TX_DWORD6_OW2TAPGEN3DEEMPH6P0_5_0 16
+#define B_HSIO_PCR_TX_DWORD6_OW2TAPGEN2DEEMPH6P0_5_0 (BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8)
+#define N_HSIO_PCR_TX_DWORD6_OW2TAPGEN2DEEMPH6P0_5_0 8
+#define B_HSIO_PCR_TX_DWORD6_OW2TAPGEN1DEEMPH6P0_5_0 (BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0)
+
+#define R_HSIO_PCR_TX_DWORD8 0xA0
+#define B_HSIO_PCR_TX_DWORD8_ORATE10MARGIN_5_0 (BIT29 | BIT28 | BIT27 | BIT26 | BIT25 | BIT24)
+#define N_HSIO_PCR_TX_DWORD8_ORATE10MARGIN_5_0 24
+#define B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0 (BIT21 | BIT20 | BIT19 | BIT18 | BIT17 | BIT16)
+#define N_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0 16
+#define B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0 (BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8)
+#define N_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0 8
+
+#define R_HSIO_PCR_TX_DWORD19 0xCC
+
+#define R_PCH_LP_HSIO_LANE10_PCS_DWORD8 0x020
+#define R_PCH_LP_HSIO_LANE11_PCS_DWORD8 0x220
+#define R_PCH_LP_HSIO_LANE14_PCS_DWORD8 0x820
+#define R_PCH_LP_HSIO_LANE15_PCS_DWORD8 0xA20
+#define R_PCH_H_HSIO_LANE18_PCS_DWORD8 0x820
+#define R_PCH_H_HSIO_LANE19_PCS_DWORD8 0xA20
+#define R_PCH_H_HSIO_LANE22_PCS_DWORD8 0x020
+#define R_PCH_H_HSIO_LANE23_PCS_DWORD8 0x220
+#define R_PCH_H_HSIO_LANE24_PCS_DWORD8 0x420
+#define R_PCH_H_HSIO_LANE25_PCS_DWORD8 0x620
+#define R_PCH_H_HSIO_LANE26_PCS_DWORD8 0x820
+#define R_PCH_H_HSIO_LANE27_PCS_DWORD8 0xA20
+#define R_PCH_H_HSIO_LANE28_PCS_DWORD8 0xC20
+#define R_PCH_H_HSIO_LANE29_PCS_DWORD8 0xE20
+
+#define R_HSIO_PCR_CLANE0_CMN_ANA_DWORD2 0x8088
+#define B_HSIO_PCR_CLANE0_CMN_ANA_DWORD2_O_DTPLL1_lC_PLLEN_H_OVRDEN BIT5
+#define B_HSIO_PCR_CLANE0_CMN_ANA_DWORD2_O_DTPLL1_lC_FULLCALRESET_L_OVERDEN BIT3
+
+#define R_HSIO_PCR_PLL_SSC_DWORD2 0x8108
+#define B_HSIO_PCR_PLL_SSC_DWORD2_SSCSTEPSIZE_7_0 (BIT23 | BIT22 | BIT21 | BIT20 | BIT19 | BIT18 | BIT17 | BIT16)
+#define N_HSIO_PCR_PLL_SSC_DWORD2_SSCSTEPSIZE_7_0 16
+#define B_HSIO_PCR_PLL_SSC_DWORD2_SSCSEN BIT10
+#define N_HSIO_PCR_PLL_SSC_DWORD2_SSCSEN 10
+
+#define R_HSIO_PCR_PLL_SSC_DWORD3 0x810C
+#define B_HSIO_PCR_PLL_SSC_DWORD3_SSC_PROPAGATE BIT0
+
+#define R_PCH_PCR_MODPHY0_COM0_CMN_DIG_DWORD12 0x8030
+#define B_PCH_PCR_MODPHY0_COM0_CMN_DIG_DWORD12_O_CFG_PWR_GATING_CTRL BIT0
+
+//
+// xHCI SSIC Private Configuration Register, but with opcode 4/5 for read/write access
+//
+#define R_PCH_PCR_MMP0_LANE_0_OFFSET 0x0
+#define R_PCH_PCR_MMP0_LANE_1_OFFSET 0x2000
+#define R_PCH_PCR_MMP0_IMPREG21 0x1050
+#define R_PCH_PCR_MMP0_IMPREG22 0x1054
+#define R_PCH_PCR_MMP0_IMPREG23 0x1058
+#define R_PCH_PCR_MMP0_IMPREG24 0x105C
+#define R_PCH_PCR_MMP0_IMPREG25 0x1060
+#define R_PCH_PCR_MMP0_CMNREG4 0xF00C
+#define R_PCH_PCR_MMP0_CMNREG15 0xF038
+#define R_PCH_PCR_MMP0_CMNREG16 0xF03C
+
+#endif //_PCH_REGS_HSIO_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h
new file mode 100644
index 0000000000..fecfe22c5c
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h
@@ -0,0 +1,90 @@
+/** @file
+ Register names for ITSS
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_ITSS_H_
+#define _PCH_REGS_ITSS_H_
+
+//
+// ITSS PCRs (PID:ITSS)
+//
+#define R_ITSS_PCR_PIRQA_ROUT 0x3100 ///< PIRQA Routing Control register
+#define R_ITSS_PCR_PIRQB_ROUT 0x3101 ///< PIRQB Routing Control register
+#define R_ITSS_PCR_PIRQC_ROUT 0x3102 ///< PIRQC Routing Control register
+#define R_ITSS_PCR_PIRQD_ROUT 0x3103 ///< PIRQD Routing Control register
+#define R_ITSS_PCR_PIRQE_ROUT 0x3104 ///< PIRQE Routing Control register
+#define R_ITSS_PCR_PIRQF_ROUT 0x3105 ///< PIRQF Routing Control register
+#define R_ITSS_PCR_PIRQG_ROUT 0x3106 ///< PIRQG Routing Control register
+#define R_ITSS_PCR_PIRQH_ROUT 0x3107 ///< PIRQH Routing Control register
+#define B_ITSS_PCR_PIRQX_ROUT_REN 0x80 ///< Interrupt Routing Enable
+#define B_ITSS_PCR_PIRQX_ROUT_IR 0x0F ///< IRQ Routng
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_3 0x03 ///< Route PIRQx to IRQ3
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_4 0x04 ///< Route PIRQx to IRQ4
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_5 0x05 ///< Route PIRQx to IRQ5
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_6 0x06 ///< Route PIRQx to IRQ6
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_7 0x07 ///< Route PIRQx to IRQ7
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_9 0x09 ///< Route PIRQx to IRQ9
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_10 0x0A ///< Route PIRQx to IRQ10
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_11 0x0B ///< Route PIRQx to IRQ11
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_12 0x0C ///< Route PIRQx to IRQ12
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_14 0x0E ///< Route PIRQx to IRQ14
+#define V_ITSS_PCR_PIRQX_ROUT_IRQ_15 0x0F ///< Route PIRQx to IRQ15
+
+#define R_ITSS_PCR_PIR0 0x3140 ///< PCI Interrupt Route 0
+#define R_ITSS_PCR_PIR1 0x3142 ///< PCI Interrupt Route 1
+#define R_ITSS_PCR_PIR2 0x3144 ///< PCI Interrupt Route 2
+#define R_ITSS_PCR_PIR3 0x3146 ///< PCI Interrupt Route 3
+#define R_ITSS_PCR_PIR4 0x3148 ///< PCI Interrupt Route 4
+#define R_ITSS_PCR_PIR5 0x314A ///< PCI Interrupt Route 5
+#define R_ITSS_PCR_PIR6 0x314C ///< PCI Interrupt Route 6
+#define R_ITSS_PCR_PIR7 0x314E ///< PCI Interrupt Route 7
+#define R_ITSS_PCR_PIR8 0x3150 ///< PCI Interrupt Route 8
+#define R_ITSS_PCR_PIR9 0x3152 ///< PCI Interrupt Route 9
+#define R_ITSS_PCR_PIR10 0x3154 ///< PCI Interrupt Route 10
+#define R_ITSS_PCR_PIR11 0x3156 ///< PCI Interrupt Route 11
+#define R_ITSS_PCR_PIR12 0x3158 ///< PCI Interrupt Route 12
+
+#define R_ITSS_PCR_GIC 0x31FC ///< General Interrupt Control
+#define B_ITSS_PCR_GIC_MAX_IRQ_24 BIT9 ///< Max IRQ entry size, 1 = 24 entry size, 0 = 120 entry size
+#define B_ITSS_PCR_GIC_SERM BIT8 ///< Server Error Reporting Mode
+#define B_ITSS_PCR_GIC_AME BIT17 ///< Alternate Access Mode Enable
+#define B_ITSS_PCR_GIC_SPS BIT16 ///< Shutdown Policy Select
+#define N_ITSS_PCR_GIC_SPS 16 ///< Shutdown Policy Select bit shift
+#define R_ITSS_PCR_IPC0 0x3200 ///< Interrupt Polarity Control 0
+#define R_ITSS_PCR_IPC1 0x3204 ///< Interrupt Polarity Control 1
+#define R_ITSS_PCR_IPC2 0x3208 ///< Interrupt Polarity Control 2
+#define R_ITSS_PCR_IPC3 0x320C ///< Interrupt Polarity Control 3
+#define R_ITSS_PCR_ITSSPRC 0x3300 ///< ITSS Power Reduction Control
+#define B_ITSS_PCR_ITSSPRC_PGCBDCGE BIT4 ///< PGCB Dynamic Clock Gating Enable
+#define B_ITSS_PCR_ITSSPRC_HPETDCGE BIT3 ///< HPET Dynamic Clock Gating Enable
+#define B_ITSS_PCR_ITSSPRC_8254CGE BIT2 ///< 8254 Static Clock Gating Enable
+#define B_ITSS_PCR_ITSSPRC_IOSFICGE BIT1 ///< IOSF-Sideband Interface Clock Gating Enable
+#define B_ITSS_PCR_ITSSPRC_ITSSCGE BIT0 ///< ITSS Clock Gate Enable
+
+#define R_ITSS_PCR_MMC 0x3334 ///< Master Message Control
+#define B_ITSS_PCR_MMC_MSTRMSG_EN BIT0 ///< Master Message Enable
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h
new file mode 100644
index 0000000000..d298e2ad66
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h
@@ -0,0 +1,156 @@
+/** @file
+ Register names for PCH LAN device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_LAN_H_
+#define _PCH_REGS_LAN_H_
+
+//
+// Gigabit LAN Controller configuration registers (D31:F6)
+//
+#define PCI_DEVICE_NUMBER_PCH_LAN 31
+#define PCI_FUNCTION_NUMBER_PCH_LAN 6
+
+#define V_PCH_LAN_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_H_LAN_DEVICE_ID 0x156F
+
+//
+// LBG Production Gigabit LAN Controller Device ID
+//
+#define V_PCH_LBG_PROD_LAN_DEVICE_ID 0xA1A5
+//
+// LBG SSX (Super SKU) Gigabit LAN Controller Device ID
+//
+#define V_PCH_LBG_LAN_DEVICE_ID 0xA225
+
+#define V_PCH_LP_LAN_DEVICE_ID 0x156F
+#define R_PCH_LAN_MBARA 0x10
+#define B_PCH_LAN_MBARA_BA 0xFFFE0000
+#define N_PCH_LAN_MBARA_ALIGN 17
+#define R_PCH_LAN_LTR_CAP 0xA8
+#define R_PCH_LAN_CLIST1 0xC8
+#define B_PCH_LAN_CLIST1_NEXT 0xFF00
+#define B_PCH_LAN_CLIST1_CID 0x00FF
+#define R_PCH_LAN_PMC 0xCA
+#define B_PCH_LAN_PMC_PMES 0xF800
+#define B_PCH_LAN_PMC_D2S BIT10
+#define B_PCH_LAN_PMC_D1S BIT9
+#define B_PCH_LAN_PMC_AC (BIT8 | BIT7 | BIT6)
+#define B_PCH_LAN_PMC_DSI BIT5
+#define B_PCH_LAN_PMC_PMEC BIT3
+#define B_PCH_LAN_PMC_VS (BIT2 | BIT1 | BIT0)
+#define R_PCH_LAN_PMCS 0xCC
+#define B_PCH_LAN_PMCS_PMES BIT15
+#define B_PCH_LAN_PMCS_DSC (BIT14 | BIT13)
+#define B_PCH_LAN_PMCS_DSL 0x1E00
+#define V_PCH_LAN_PMCS_DSL0 0x0000
+#define V_PCH_LAN_PMCS_DSL3 0x0600
+#define V_PCH_LAN_PMCS_DSL4 0x0800
+#define V_PCH_LAN_PMCS_DSL7 0x0E00
+#define V_PCH_LAN_PMCS_DSL8 0x1000
+#define B_PCH_LAN_PMCS_PMEE BIT8
+#define B_PCH_LAN_PMCS_PS (BIT1 | BIT0)
+#define V_PCH_LAN_PMCS_PS0 0x00
+#define V_PCH_LAN_PMCS_PS3 0x03
+#define R_PCH_LAN_DR 0xCF
+#define B_PCH_LAN_DR 0xFF
+#define R_PCH_LAN_CLIST2 0xD0
+#define B_PCH_LAN_CLIST2_NEXT 0xFF00
+#define B_PCH_LAN_CLIST2_CID 0x00FF
+#define R_PCH_LAN_MCTL 0xD2
+#define B_PCH_LAN_MCTL_CID BIT7
+#define B_PCH_LAN_MCTL_MME (BIT6 | BIT5 | BIT4)
+#define B_PCH_LAN_MCTL_MMC (BIT3 | BIT2 | BIT1)
+#define B_PCH_LAN_MCTL_MSIE BIT0
+#define R_PCH_LAN_MADDL 0xD4
+#define B_PCH_LAN_MADDL 0xFFFFFFFF
+#define R_PCH_LAN_MADDH 0xD8
+#define B_PCH_LAN_MADDH 0xFFFFFFFF
+#define R_PCH_LAN_MDAT 0xDC
+#define B_PCH_LAN_MDAT 0xFFFFFFFF
+#define R_PCH_LAN_FLRCAP 0xE0
+#define B_PCH_LAN_FLRCAP_NEXT 0xFF00
+#define B_PCH_LAN_FLRCAP_CID 0x00FF
+#define V_PCH_LAN_FLRCAP_CID_SSEL0 0x13
+#define V_PCH_LAN_FLRCAP_CID_SSEL1 0x09
+#define R_PCH_LAN_FLRCLV 0xE2
+#define B_PCH_LAN_FLRCLV_FLRC_SSEL0 BIT9
+#define B_PCH_LAN_FLRCLV_TXP_SSEL0 BIT8
+#define B_PCH_LAN_FLRCLV_VSCID_SSEL1 0xF000
+#define B_PCH_LAN_FLRCLV_CAPVER_SSEL1 0x0F00
+#define B_PCH_LAN_FLRCLV_CAPLNG 0x00FF
+#define R_PCH_LAN_DEVCTRL 0xE4
+#define B_PCH_LAN_DEVCTRL BIT0
+#define R_PCH_LAN_CPCE 0x80
+#define B_PCH_LAN_CPCE_HAE BIT5
+#define B_PCH_LAN_CPCE_SE BIT3
+#define B_PCH_LAN_CPCE_D3HE BIT2
+#define B_PCH_LAN_CPCE_I3E BIT1
+#define B_PCH_LAN_CPCE_PCMCRE BIT0
+#define R_PCH_LAN_CD0I3 0x84
+#define B_PCH_LAN_CD0I3_RR BIT3
+#define B_PCH_LAN_CD0I3_D0I3 BIT2
+#define R_PCH_LAN_CLCTL 0x94
+#define R_PCH_LAN_LANDISCTRL 0xA0
+#define B_PCH_LAN_LANDISCTRL_DISABLE BIT0
+#define R_PCH_LAN_LOCKLANDIS 0xA4
+#define B_PCH_LAN_LOCKLANDIS_LOCK BIT0
+//
+// Gigabit LAN Capabilities and Status Registers (Memory space)
+//
+#define R_PCH_LAN_CSR_CTRL 0
+#define B_PCH_LAN_CSR_CTRL_MEHE BIT19
+#define R_PCH_LAN_CSR_STRAP 0x000C
+#define B_PCH_LAN_CSR_STRAP_NVM_VALID BIT11
+#define R_PCH_LAN_CSR_FEXTNVM6 0x0010
+#define R_PCH_LAN_CSR_CTRL_EXT 0x0018
+#define B_PCH_LAN_CSR_CTRL_EXT_CGEN BIT19
+#define B_PCH_LAN_CSR_CTRL_EXT_FORCE_SMB BIT11
+#define R_PCH_LAN_CSR_MDIC 0x0020
+#define B_PCH_LAN_CSR_MDIC_RB BIT28
+#define B_PCH_LAN_CSR_MDIC_DATA 0xFFFF
+#define R_PCH_LAN_CSR_FEXT 0x002C
+#define B_PCH_LAN_CSR_FEXT_WOL BIT30
+#define B_PCH_LAN_CSR_FEXT_WOL_VALID BIT31
+#define R_PCH_LAN_CSR_EXTCNF_CTRL 0x0F00
+#define B_PCH_LAN_CSR_EXTCNF_CTRL_SWFLAG BIT5
+#define B_PCH_LAN_CSR_EXTCNF_K1OFF_EN BIT8
+#define R_PCH_LAN_CSR_PHY_CTRL 0x0F10
+#define B_PCH_LAN_CSR_PHY_CTRL_GGD BIT6
+#define B_PCH_LAN_CSR_PHY_CTRL_GBEDIS BIT3
+#define B_PCH_LAN_CSR_PHY_CTRL_LPLUND BIT2
+#define B_PCH_LAN_CSR_PHY_CTRL_LPLUD BIT1
+#define R_PCH_LAN_CSR_F18 0x0F18
+#define B_PCH_LAN_CSR_F18_K1OFF_EN BIT31
+#define R_PCH_LAN_CSR_PBECCSTS 0x100C
+#define B_PCH_LAN_CSR_PBECCSTS_ECC_EN BIT16
+#define R_PCH_LAN_CSR_RAL 0x5400
+#define R_PCH_LAN_CSR_RAH 0x5404
+#define B_PCH_LAN_CSR_RAH_RAH 0x0000FFFF
+#define R_PCH_LAN_CSR_WUC 0x5800
+#define B_PCH_LAN_CSR_WUC_APME BIT0
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h
new file mode 100644
index 0000000000..356cc05f96
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h
@@ -0,0 +1,490 @@
+/** @file
+ Register names for PCH LPC/eSPI device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_LPC_H_
+#define _PCH_REGS_LPC_H_
+
+#include <PchLimits.h>
+//
+// PCI to LPC Bridge Registers (D31:F0)
+//
+#define PCI_DEVICE_NUMBER_PCH_LPC 31
+#define PCI_FUNCTION_NUMBER_PCH_LPC 0
+
+typedef enum {
+ PchHA0 = 0x00,
+ PchHB0 = 0x01,
+ PchHC0,
+ PchHD0,
+ PchHD1,
+#ifdef SIMICS_FLAG
+ PchLpA0 = 0x20,
+#endif
+ PchLpB0 = 0x23,
+ PchLpB1,
+ PchLpC0,
+ PchLpC1,
+ LbgA0 = LBG_A0,
+ LbgB0,
+ LbgB1,
+ LbgB2,
+ LbgB3,
+ LbgS0,
+ LbgS1,
+ LbgS2,
+ PchMiniA0,
+ PchSteppingMax
+} PCH_STEPPING;
+
+#define PCH_H_MIN_SUPPORTED_STEPPING PchHA0
+#define PCH_LP_MIN_SUPPORTED_STEPPING PchLpB0
+
+#define PCH_LBG_MIN_SUPPORTED_STEPPING LbgA0
+#define R_PCH_LPC_VENDOR_ID 0x00
+#define R_PCH_LPC_DEVICE_ID 0x02
+
+//
+//
+// SKL PCH Server/WS LPC Device IDs
+//
+#define V_PCH_H_LPC_DEVICE_ID_SVR_0 0xA149 ///< Server SKU Intel C236 Chipset
+#define V_PCH_H_LPC_DEVICE_ID_SVR_1 0xA14A ///< Server SKU Intel C232 Chipset
+#define V_PCH_H_LPC_DEVICE_ID_SVR_2 0xA150 ///< Server SKU Intel CM236 Chipset
+#define V_PCH_H_LPC_DEVICE_ID_A14B 0xA14B ///< Super SKU Unlocked
+
+//
+// SKL PCH-H Desktop LPC Device IDs
+//
+#define V_PCH_H_LPC_DEVICE_ID_DT_SUPER_SKU 0xA141 ///< PCH H Desktop Super SKU unlocked
+#define V_PCH_H_LPC_DEVICE_ID_DT_0 0xA142 ///< PCH H Desktop Super SKU locked
+#define V_PCH_H_LPC_DEVICE_ID_DT_1 0xA143 ///< PCH H Desktop H110
+#define V_PCH_H_LPC_DEVICE_ID_DT_2 0xA144 ///< PCH H Desktop H170
+#define V_PCH_H_LPC_DEVICE_ID_DT_3 0xA145 ///< PCH H Desktop Z170
+#define V_PCH_H_LPC_DEVICE_ID_DT_4 0xA146 ///< PCH H Desktop Q170
+#define V_PCH_H_LPC_DEVICE_ID_DT_5 0xA147 ///< PCH H Desktop Q150
+#define V_PCH_H_LPC_DEVICE_ID_DT_6 0xA148 ///< PCH H Desktop B150
+#define V_PCH_H_LPC_DEVICE_ID_UNFUSE 0xA140 ///< PCH-H Unfuse
+//
+// PCH-H Mobile LPC Device IDs
+//
+#define V_PCH_H_LPC_DEVICE_ID_MB_SUPER_SKU 0xA141 ///< PCH H Mobile Super SKU unlocked
+#define V_PCH_H_LPC_DEVICE_ID_MB_0 0xA14D ///< PCH H Mobile QM170
+#define V_PCH_H_LPC_DEVICE_ID_MB_1 0xA14E ///< PCH H Mobile HM170
+#define V_PCH_H_LPC_DEVICE_ID_MB_2 0xA14F ///< PCH H Mobile QMS170 (SFF)
+//
+// PCH-LP LPC Device IDs
+//
+#define V_PCH_LP_LPC_DEVICE_ID_MB_SUPER_SKU 0x9D41 ///< PCH LP Mobile Super SKU unlocked
+#define V_PCH_LP_LPC_DEVICE_ID_MB_0 0x9D42 ///< PCH LP Mobile Super SKU locked
+#define V_PCH_LP_LPC_DEVICE_ID_MB_1 0x9D43 ///< PCH LP Mobile (U) Base SKU
+#define V_PCH_LP_LPC_DEVICE_ID_MB_2 0x9D46 ///< PCH LP Mobile (Y) Premium SKU
+#define V_PCH_LP_LPC_DEVICE_ID_MB_3 0x9D48 ///< PCH LP Mobile (U) Premium SKU
+#define V_PCH_LP_LPC_DEVICE_ID_UNFUSE 0x9D40 ///< PCH LP Unfuse
+
+//
+// Lewisburg Production LPC Device ID's
+//
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_0 0xA1C0 ///< LBG PRQ Unfused LBG 0 SKU
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_1G 0xA1C1 ///< LBG PRQ Fused LBG 1G
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_2 0xA1C2 ///< LBG PRQ Fused LBG 2
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_4 0xA1C3 ///< LBG PRQ Fused LBG 4
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_E 0xA1C4 ///< LBG PRQ Fused LBG E
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_M 0xA1C5 ///< LBG PRQ Fused LBG M
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_T 0xA1C6 ///< LBG PRQ Fused LBG T (both uplinks SKU - NS)
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_LP 0xA1C7 ///< LBG PRQ Fused LBG LP
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_C 0xA1CA ///< LBG PRQ Fused LBG C
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_C621A 0xA1CB ///< LBG-R PRQ Fused LBG C621A
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_C627A 0xA1CC ///< LBG-R PRQ Fused LBG C627A
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_C629A 0xA1CD ///< LBG-R PRQ Fused LBG C629A
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_ADG 0xA1CE ///< LBG-R PRQ Fused LBG ADG
+
+#define V_PCH_LBG_PROD_LPC_DEVICE_ID_RESERVED_MAX 0xA1CF ///< 0xA1CF reserved for future QS/PRQ SKUs
+
+//
+// Lewisburg SSX (Super SKUs and pre production) LPC Device ID's
+//
+#define V_PCH_LBG_LPC_DEVICE_ID_UNFUSED 0xA240 ///< LBG SSX Unfused SKU
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_0 0xA241 ///< LBG SSX Super SKU 0
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_4_SD 0xA242 ///< LBG SSX Super SKU 4/SD
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_T80_NS 0xA243 ///< LBG SSX Super SKU T80/NS
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_1G 0xA244 ///< LBG SSX Super SKU 1G
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_T 0xA245 ///< LBG Super SKU - T
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_L 0xA246 ///< LBG Super SKU - L
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_C621A 0xA24A ///< LBG-R Super SKU - C621A
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_C627A 0xA24B ///< LBG-R Super SKU - C627A
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_C629A 0xA24C ///< LBG-R Super SKU - C629A
+#define V_PCH_LBG_LPC_DEVICE_ID_SS_ADG 0xA24E ///< LBG-R Super SKU - ADG
+
+#define V_PCH_LBG_LPC_DEVICE_ID_RESERVED_SS_MAX 0xA24F ///< 0xA24D, 0xA24F Super SKU reserved
+
+
+#define V_PCH_LBG_LPC_RID_0 0x00 ///< A0 stepping
+#define V_PCH_LBG_LPC_RID_1 0x01 ///< A1 stepping
+#define V_PCH_LBG_LPC_RID_2 0x02 ///< B0 stepping
+#define V_PCH_LBG_LPC_RID_3 0x03 ///< B1 stepping
+#define V_PCH_LBG_LPC_RID_4 0x04 ///< B2 stepping
+#define V_PCH_LBG_LPC_RID_5 0x05 ///< C0 stepping
+#define V_PCH_LBG_LPC_RID_8 0x08 ///< S0 stepping
+#define V_PCH_LBG_LPC_RID_9 0x09 ///< S1 stepping
+#define V_PCH_LBG_LPC_RID_A 0x0A ///< T0 stepping
+
+#define V_PCH_MINI_LPC_RID_0 0xC0 ///< FPGA PCH stepping
+
+#define V_LPC_CFG_RID_0 0x00
+#define V_LPC_CFG_RID_1 0x01
+#define V_LPC_CFG_RID_9 0x09
+#define V_LPC_CFG_RID_10 0x10
+#define V_LPC_CFG_RID_11 0x11
+#define V_LPC_CFG_RID_20 0x20
+#define V_LPC_CFG_RID_21 0x21
+#define V_LPC_CFG_RID_30 0x30
+#define V_LPC_CFG_RID_31 0x31
+#define R_LPC_CFG_SERIRQ_CNT 0x64
+#define B_LPC_CFG_SERIRQ_CNT_SIRQEN 0x80
+#define B_LPC_CFG_SERIRQ_CNT_SIRQMD 0x40
+#define B_LPC_CFG_SERIRQ_CNT_SIRQSZ 0x3C
+#define N_LPC_CFG_SERIRQ_CNT_SIRQSZ 2
+#define B_LPC_CFG_SERIRQ_CNT_SFPW 0x03
+#define N_LPC_CFG_SERIRQ_CNT_SFPW 0
+#define V_LPC_CFG_SERIRQ_CNT_SFPW_4CLK 0x00
+#define V_LPC_CFG_SERIRQ_CNT_SFPW_6CLK 0x01
+#define V_LPC_CFG_SERIRQ_CNT_SFPW_8CLK 0x02
+#define R_LPC_CFG_IOD 0x80
+#define B_LPC_CFG_IOD_FDD 0x1000
+#define N_LPC_CFG_IOD_FDD 12
+#define V_LPC_CFG_IOD_FDD_3F0 0
+#define V_LPC_CFG_IOD_FDD_370 1
+#define B_LPC_CFG_IOD_LPT 0x0300
+#define N_LPC_CFG_IOD_LPT 8
+#define V_LPC_CFG_IOD_LPT_378 0
+#define V_LPC_CFG_IOD_LPT_278 1
+#define V_LPC_CFG_IOD_LPT_3BC 2
+#define B_LPC_CFG_IOD_COMB 0x0070
+#define N_LPC_CFG_IOD_COMB 4
+#define V_LPC_CFG_IOD_COMB_3F8 0
+#define V_LPC_CFG_IOD_COMB_2F8 1
+#define V_LPC_CFG_IOD_COMB_220 2
+#define V_LPC_CFG_IOD_COMB_228 3
+#define V_LPC_CFG_IOD_COMB_238 4
+#define V_LPC_CFG_IOD_COMB_2E8 5
+#define V_LPC_CFG_IOD_COMB_338 6
+#define V_LPC_CFG_IOD_COMB_3E8 7
+#define B_LPC_CFG_IOD_COMA 0x0007
+#define N_LPC_CFG_IOD_COMA 0
+#define V_LPC_CFG_IOD_COMA_3F8 0
+#define V_LPC_CFG_IOD_COMA_2F8 1
+#define V_LPC_CFG_IOD_COMA_220 2
+#define V_LPC_CFG_IOD_COMA_228 3
+#define V_LPC_CFG_IOD_COMA_238 4
+#define V_LPC_CFG_IOD_COMA_2E8 5
+#define V_LPC_CFG_IOD_COMA_338 6
+#define V_LPC_CFG_IOD_COMA_3E8 7
+#define R_LPC_CFG_IOE 0x82
+#define B_LPC_CFG_IOE_ME2 BIT13 ///< Microcontroller Enable #2, Enables decoding of I/O locations 4Eh and 4Fh to LPC
+#define B_LPC_CFG_IOE_SE BIT12 ///< Super I/O Enable, Enables decoding of I/O locations 2Eh and 2Fh to LPC.
+#define B_LPC_CFG_IOE_ME1 BIT11 ///< Microcontroller Enable #1, Enables decoding of I/O locations 62h and 66h to LPC.
+#define B_LPC_CFG_IOE_KE BIT10 ///< Keyboard Enable, Enables decoding of the keyboard I/O locations 60h and 64h to LPC.
+#define B_LPC_CFG_IOE_HGE BIT9 ///< High Gameport Enable, Enables decoding of the I/O locations 208h to 20Fh to LPC.
+#define B_LPC_CFG_IOE_LGE BIT8 ///< Low Gameport Enable, Enables decoding of the I/O locations 200h to 207h to LPC.
+#define B_LPC_CFG_IOE_FDE BIT3 ///< Floppy Drive Enable, Enables decoding of the FDD range to LPC. Range is selected by LIOD.FDE
+#define B_LPC_CFG_IOE_PPE BIT2 ///< Parallel Port Enable, Enables decoding of the LPT range to LPC. Range is selected by LIOD.LPT.
+#define B_LPC_CFG_IOE_CBE BIT1 ///< Com Port B Enable, Enables decoding of the COMB range to LPC. Range is selected LIOD.CB.
+#define B_LPC_CFG_IOE_CAE BIT0 ///< Com Port A Enable, Enables decoding of the COMA range to LPC. Range is selected LIOD.CA.
+#define R_LPC_CFG_GEN1_DEC 0x84
+#define R_LPC_CFG_GEN2_DEC 0x88
+#define R_LPC_CFG_GEN3_DEC 0x8C
+#define R_LPC_CFG_GEN4_DEC 0x90
+#define B_LPC_CFG_GENX_DEC_IODRA 0x00FC0000
+#define B_LPC_CFG_GENX_DEC_IOBAR 0x0000FFFC
+#define B_LPC_CFG_GENX_DEC_EN 0x00000001
+#define R_LPC_CFG_ULKMC 0x94
+#define B_LPC_CFG_ULKMC_SMIBYENDPS BIT15
+#define B_LPC_CFG_ULKMC_TRAPBY64W BIT11
+#define B_LPC_CFG_ULKMC_TRAPBY64R BIT10
+#define B_LPC_CFG_ULKMC_TRAPBY60W BIT9
+#define B_LPC_CFG_ULKMC_TRAPBY60R BIT8
+#define B_LPC_CFG_ULKMC_SMIATENDPS BIT7
+#define B_LPC_CFG_ULKMC_PSTATE BIT6
+#define B_LPC_CFG_ULKMC_A20PASSEN BIT5
+#define B_LPC_CFG_ULKMC_USBSMIEN BIT4
+#define B_LPC_CFG_ULKMC_64WEN BIT3
+#define B_LPC_CFG_ULKMC_64REN BIT2
+#define B_LPC_CFG_ULKMC_60WEN BIT1
+#define B_LPC_CFG_ULKMC_60REN BIT0
+#define R_LPC_CFG_LGMR 0x98
+#define B_LPC_CFG_LGMR_MA 0xFFFF0000
+#define B_LPC_CFG_LGMR_LMRD_EN BIT0
+#define R_LPC_CFG_PCCS1IORE 0xA0
+#define R_LPC_CFG_PCCS1GIR1 0xA4
+#define R_LPC_CFG_PCCS1GMR1 0xA8
+#define R_ESPI_CFG_CS1IORE 0xA0
+#define R_ESPI_CFG_CS1IORE_DPCS1RE BIT14
+#define R_ESPI_CFG_CS1GIR1 0xA4
+#define R_ESPI_CFG_CS1GMR1 0xA8
+
+#define R_LPC_CFG_FWH_BIOS_SEL 0xD0
+#define B_LPC_CFG_FWH_BIOS_SEL_F8 0xF0000000
+#define B_LPC_CFG_FWH_BIOS_SEL_F0 0x0F000000
+#define B_LPC_CFG_FWH_BIOS_SEL_E8 0x00F00000
+#define B_LPC_CFG_FWH_BIOS_SEL_E0 0x000F0000
+#define B_LPC_CFG_FWH_BIOS_SEL_D8 0x0000F000
+#define B_LPC_CFG_FWH_BIOS_SEL_D0 0x00000F00
+#define B_LPC_CFG_FWH_BIOS_SEL_C8 0x000000F0
+#define B_LPC_CFG_FWH_BIOS_SEL_C0 0x0000000F
+#define R_LPC_CFG_FWH_BIOS_SEL2 0xD4
+#define B_LPC_CFG_FWH_BIOS_SEL2_70 0xF000
+#define B_LPC_CFG_FWH_BIOS_SEL2_60 0x0F00
+#define B_LPC_CFG_FWH_BIOS_SEL2_50 0x00F0
+#define B_LPC_CFG_FWH_BIOS_SEL2_40 0x000F
+#define R_LPC_CFG_BDE 0xD8 ///< BIOS decode enable
+#define B_LPC_CFG_BDE_F8 0x8000
+#define B_LPC_CFG_BDE_F0 0x4000
+#define B_LPC_CFG_BDE_E8 0x2000
+#define B_LPC_CFG_BDE_E0 0x1000
+#define B_LPC_CFG_BDE_D8 0x0800
+#define B_LPC_CFG_BDE_D0 0x0400
+#define B_LPC_CFG_BDE_C8 0x0200
+#define B_LPC_CFG_BDE_C0 0x0100
+#define B_LPC_CFG_BDE_LEG_F 0x0080
+#define B_LPC_CFG_BDE_LEG_E 0x0040
+#define B_LPC_CFG_BDE_70 0x0008
+#define B_LPC_CFG_BDE_60 0x0004
+#define B_LPC_CFG_BDE_50 0x0002
+#define B_LPC_CFG_BDE_40 0x0001
+#define R_LPC_CFG_PCC 0xE0
+#define B_LPC_CFG_PCC_CLKRUN_EN 0x0001
+#define B_LPC_CFG_FVEC0_USB_PORT_CAP 0x00000C00
+#define V_LPC_CFG_FVEC0_USB_14_PORT 0x00000000
+#define V_LPC_CFG_FVEC0_USB_12_PORT 0x00000400
+#define V_LPC_CFG_FVEC0_USB_10_PORT 0x00000800
+#define B_LPC_CFG_FVEC0_SATA_RAID_CAP 0x00000080
+#define B_LPC_CFG_FVEC0_SATA_PORT23_CAP 0x00000040
+#define B_LPC_CFG_FVEC0_SATA_PORT1_6GB_CAP 0x00000008
+#define B_LPC_CFG_FVEC0_SATA_PORT0_6GB_CAP 0x00000004
+#define B_LPC_CFG_FVEC0_PCI_CAP 0x00000002
+#define R_LPC_CFG_FVEC1 0x01
+#define B_LPC_CFG_FVEC1_USB_R_CAP 0x00400000
+#define R_LPC_CFG_FVEC2 0x02
+#define B_PCH_LPC_FVEC2_IATT_CAP 0x00400000 ///< Intel Anti-Theft Technology Capability
+#define V_LPC_CFG_FVEC2_PCIE_PORT78_CAP 0x00200000
+#define V_LPC_CFG_FVEC2_PCH_IG_SUPPORT_CAP 0x00020000 ///< PCH Integrated Graphics Support Capability
+#define R_LPC_CFG_FVEC3 0x03
+#define B_LPC_CFG_FVEC3_DCMI_CAP 0x00002000 ///< Data Center Manageability Interface (DCMI) Capability
+#define B_LPC_CFG_FVEC3_NM_CAP 0x00001000 ///< Node Manager Capability
+
+#define R_LPC_CFG_MDAP 0xC0
+#define B_LPC_CFG_MDAP_POLICY_EN BIT31
+#define B_LPC_CFG_MDAP_PDMA_EN BIT30
+#define B_LPC_CFG_MDAP_VALUE 0x0001FFFF
+
+//
+// APM Registers
+//
+#define R_PCH_IO_APM_CNT 0xB2
+#define R_PCH_IO_APM_STS 0xB3
+
+#define R_LPC_CFG_BC 0xDC ///< Bios Control
+#define S_LPC_CFG_BC 1
+#define B_LPC_CFG_BC_BILD BIT7 ///< BIOS Interface Lock-Down
+#define B_LPC_CFG_BC_BBS BIT6 ///< Boot BIOS strap
+#define N_LPC_CFG_BC_BBS 6
+#define V_LPC_CFG_BC_BBS_SPI 0 ///< Boot BIOS strapped to SPI
+#define V_LPC_CFG_BC_BBS_LPC 1 ///< Boot BIOS strapped to LPC
+#define B_LPC_CFG_BC_EISS BIT5 ///< Enable InSMM.STS
+#define B_LPC_CFG_BC_TS BIT4 ///< Top Swap
+#define B_LPC_CFG_BC_LE BIT1 ///< Lock Enable
+#define N_LPC_CFG_BC_LE 1
+#define B_LPC_CFG_BC_WPD BIT0 ///< Write Protect Disable
+
+#define R_ESPI_CFG_PCBC 0xDC ///< Peripheral Channel BIOS Control
+#define S_ESPI_CFG_PCBC 4 ///< Peripheral Channel BIOS Control register size
+#define B_ESPI_CFG_PCBC_BWRE BIT11 ///< BIOS Write Report Enable
+#define N_ESPI_CFG_PCBC_BWRE 11 ///< BIOS Write Report Enable bit position
+#define B_ESPI_CFG_PCBC_BWRS BIT10 ///< BIOS Write Report Status
+#define N_ESPI_CFG_PCBC_BWRS 10 ///< BIOS Write Report Status bit position
+#define B_ESPI_CFG_PCBC_BWPDS BIT8 ///< BIOS Write Protect Disable Status
+#define N_ESPI_CFG_PCBC_BWPDS 8 ///< BIOS Write Protect Disable Status bit position
+#define B_ESPI_CFG_PCBC_ESPI_EN BIT2 ///< eSPI Enable Pin Strap
+#define B_ESPI_CFG_PCBC_LE BIT1 ///< Lock Enable
+
+//
+// Processor interface registers
+//
+#define R_PCH_IO_NMI_SC 0x61
+#define B_PCH_IO_NMI_SC_SERR_NMI_STS BIT7
+#define B_PCH_IO_NMI_SC_IOCHK_NMI_STS BIT6
+#define B_PCH_IO_NMI_SC_TMR2_OUT_STS BIT5
+#define B_PCH_IO_NMI_SC_REF_TOGGLE BIT4
+#define B_PCH_IO_NMI_SC_IOCHK_NMI_EN BIT3
+#define B_PCH_IO_NMI_SC_PCI_SERR_EN BIT2
+#define B_PCH_IO_NMI_SC_SPKR_DAT_EN BIT1
+#define B_PCH_IO_NMI_SC_TIM_CNT2_EN BIT0
+#define R_PCH_IO_NMI_EN 0x70
+#define B_PCH_IO_NMI_EN_NMI_EN BIT7
+
+//
+// Reset Generator I/O Port
+//
+#define R_PCH_IO_RST_CNT 0xCF9
+#define B_PCH_IO_RST_CNT_FULL_RST BIT3
+#define B_PCH_IO_RST_CNT_RST_CPU BIT2
+#define B_PCH_IO_RST_CNT_SYS_RST BIT1
+#define V_PCH_IO_RST_CNT_FULLRESET 0x0E
+#define V_PCH_IO_RST_CNT_HARDRESET 0x06
+#define V_PCH_IO_RST_CNT_SOFTRESET 0x04
+#define V_PCH_IO_RST_CNT_HARDSTARTSTATE 0x02
+#define V_PCH_IO_RST_CNT_SOFTSTARTSTATE 0x00
+
+//
+// RTC register
+//
+#define R_RTC_IO_INDEX 0x70
+#define R_RTC_IO_TARGET 0x71
+#define R_RTC_IO_EXT_INDEX 0x72
+#define R_RTC_IO_EXT_TARGET 0x73
+#define R_RTC_IO_INDEX_ALT 0x74
+#define R_RTC_IO_TARGET_ALT 0x75
+#define R_RTC_IO_EXT_INDEX_ALT 0x76
+#define R_RTC_IO_EXT_TARGET_ALT 0x77
+#define R_RTC_IO_REGA 0x0A
+#define B_RTC_IO_REGA_UIP 0x80
+#define R_RTC_IO_REGB 0x0B
+#define B_RTC_IO_REGB_SET 0x80
+#define B_RTC_IO_REGB_PIE 0x40
+#define B_RTC_IO_REGB_AIE 0x20
+#define B_RTC_IO_REGB_UIE 0x10
+#define B_RTC_IO_REGB_DM 0x04
+#define B_RTC_IO_REGB_HOURFORM 0x02
+#define R_RTC_IO_REGC 0x0C
+#define R_RTC_IO_REGD 0x0D
+
+//
+// Private Configuration Register
+// RTC PCRs (PID:RTC)
+//
+#define R_RTC_PCR_CONF 0x3400 ///< RTC Configuration register
+#define S_PCH_PCR_RTC_CONF 4
+#define B_RTC_PCR_CONF_UCMOS_LOCK BIT4
+#define B_RTC_PCR_CONF_LCMOS_LOCK BIT3
+#define B_PCH_PCR_RTC_CONF_RESERVED BIT31
+#define B_RTC_PCR_CONF_UCMOS_EN BIT2 ///< Upper CMOS bank enable
+#define R_RTC_PCR_BUC 0x3414 ///< Backed Up Control
+#define B_RTC_PCR_BUC_TS BIT0 ///< Top Swap
+#define B_RTC_PCR_BUC_NMFLUSH BIT3
+#define R_RTC_PCR_RTCDCG 0x3418 ///< RTC Dynamic Clock Gating Control
+#define R_RTC_PCR_RTCDCG_RTCPCICLKDCGEN BIT1 ///< ipciclk_clk (24 MHz) Dynamic Clock Gate Enable
+#define R_RTC_PCR_RTCDCG_RTCROSIDEDCGEN BIT0 ///< rosc_side_clk (120 MHz) Dynamic Clock Gate Enable
+#define R_RTC_PCR_3F00 0x3F00
+#define R_RTC_PCR_UIPSMI 0x3F04 ///< RTC Update In Progress SMI Control
+
+//
+// LPC PCR Registers
+//
+#define R_LPC_PCR_HVMTCTL 0x3410
+#define R_LPC_PCR_GCFD 0x3418
+#define R_PCH_PCR_LPC_CCE 0x341C
+#define B_PCH_PCR_LPC_CCE_LCG BIT0
+#define B_PCH_PCR_LPC_CCE_ISBICGEN BIT1
+#define B_PCH_PCR_LPC_CCE_IPICGEN BIT2
+#define B_PCH_PCR_LPC_CCE_PGCBCGEN BIT3
+#define V_PCH_PCR_LPC_CCE_CGEN (B_PCH_PCR_LPC_CCE_LCG | \
+ B_PCH_PCR_LPC_CCE_ISBICGEN | \
+ B_PCH_PCR_LPC_CCE_IPICGEN | \
+ B_PCH_PCR_LPC_CCE_PGCBCGEN )
+#define R_LPC_PCR_PCT 0x3420
+#define R_LPC_PCR_SCT 0x3424
+#define R_LPC_PCR_LPCCT 0x3428
+#define R_LPC_PCR_ULTOR 0x3500
+
+//
+// eSPI PCR Registers
+//
+#define R_ESPI_PCR_SLV_CFG_REG_CTL 0x4000 ///< Slave Configuration Register and Link Control
+#define B_ESPI_PCR_SLV_CFG_REG_CTL_SCRE BIT31 ///< Slave Configuration Register Access Enable
+#define B_ESPI_PCR_SLV_CFG_REG_CTL_SCRS (BIT30 | BIT29 | BIT28) ///< Slave Configuration Register Access Status
+#define N_ESPI_PCR_SLV_CFG_REG_CTL_SCRS 28 ///< Slave Configuration Register Access Status bit position
+#define B_ESPI_PCR_SLV_CFG_REG_CTL_SBLCL BIT27 ///< IOSF-SB eSPI Link Configuration Lock
+#define V_ESPI_PCR_SLV_CFG_REG_CTL_SCRS_NOERR 7 ///< No errors (transaction completed successfully)
+#define B_ESPI_PCR_SLV_CFG_REG_CTL_SID (BIT20 | BIT19) ///< Slave ID
+#define N_ESPI_PCR_SLV_CFG_REG_CTL_SID 19 ///< Slave ID bit position
+#define B_ESPI_PCR_SLV_CFG_REG_CTL_SCRT (BIT17 | BIT16) ///< Slave Configuration Register Access Type
+#define N_ESPI_PCR_SLV_CFG_REG_CTL_SCRT 16 ///< Slave Configuration Register Access Type bit position
+#define V_ESPI_PCR_SLV_CFG_REG_CTL_SCRT_RD 0 ///< Slave Configuration register read from address SCRA[11:0]
+#define V_ESPI_PCR_SLV_CFG_REG_CTL_SCRT_WR 1 ///< Slave Configuration register write to address SCRA[11:0]
+#define V_ESPI_PCR_SLV_CFG_REG_CTL_SCRT_STS 2 ///< Slave Status register read
+#define V_ESPI_PCR_SLV_CFG_REG_CTL_SCRT_RS 3 ///< In-Band reset
+#define B_ESPI_PCR_SLV_CFG_REG_CTL_SCRA 0x00000FFF ///< Slave Configuration Register Address
+#define R_ESPI_PCR_SLV_CFG_REG_DATA 0x4004 ///< Slave Configuration Register Data
+
+#define R_ESPI_PCR_PCERR_SLV0 0x4020 ///< Peripheral Channel Error for Slave 0
+#define S_ESPI_PCR_PCERR_SLV0 4 ///< Peripheral Channel Error register size
+#define B_ESPI_PCR_PCERR_PCFES BIT4 ///< Peripheral Channel Error Fatal Error Status bit
+#define R_ESPI_PCR_PCERR_SLV1 0x4024 ///< Peripheral Channel Error for Slave 1
+#define R_ESPI_PCR_VWERR_SLV0 0x4030 ///< Virtual Wire Channel Error for Slave 0
+#define S_ESPI_PCR_VWERR_SLV0 4 ///< Virtual Wire Channel Error register size
+#define B_ESPI_PCR_VWERR_VWFES BIT4 ///< Virtual Wire Channel Error Fatal Error status bit
+#define R_ESPI_PCR_VWERR_SLV1 0x4034 ///< Virtual Wire Channel Error for Slave 1
+#define R_ESPI_PCR_FCERR_SLV0 0x4040 ///< Flash Access Channel Error for Slave 0
+#define B_ESPI_PCR_FCERR_FCNFES BIT12 ///< Flash Access Channel Non-Fatal Error Status
+#define B_ESPI_PCR_PCERR_FCNFEC (BIT11 | BIT10 | BIT9 | BIT8) ///< Non-Fatal Error Cause bits
+#define N_ESPI_PCR_PCERR_FCNFEC 8 ///< Flash Access Channel Error for Slave 0 bit position
+#define V_ESPI_PCR_PCERR_FCNFEC_SRC_NFE 1 ///< Slave Response Code: NONFATAL_ERROR
+#define V_ESPI_PCR_PCERR_FCNFEC_SCR_UC 2 ///< Slave Response Code: Unsuccessful Completion
+#define V_ESPI_PCR_PCERR_FCNFEC_UCT 4 ///< Unsupported Cycle Type
+#define V_ESPI_PCR_PCERR_FCNFEC_UA 6 ///< Unsupported Address
+#define B_ESPI_PCR_FCERR_FCFES BIT4 ///< Flash Access Channel Fatal Error status bit
+#define B_ESPI_PCR_XERR_XNFEE (BIT14 | BIT13) ///< Non-Fatal Error Reporting Enable bits
+#define N_ESPI_PCR_XERR_XNFEE 13 ///< Non-Fatal Error Reporting Enable bit position
+#define V_ESPI_PCR_XERR_XNFEE_SMI 3 ///< Enable Non-Fatal Error Reporting as SMI
+#define B_ESPI_PCR_XERR_XNFES BIT12 ///< Fatal Error Status
+#define B_ESPI_PCR_XERR_XFEE (BIT6 | BIT5) ///< Fatal Error Reporting Enable bits
+#define N_ESPI_PCR_XERR_XFEE 5 ///< Fatal Error Reporting Enable bit position
+#define V_ESPI_PCR_XERR_XFEE_SMI 3 ///< Enable Fatal Error Reporting as SMI
+#define B_ESPI_PCR_XERR_XFES BIT4 ///< Fatal Error Status
+#define B_ESPI_PCR_PCERR_SLV0_PCURD BIT24 ///< Peripheral Channel Unsupported Request Detected
+#define R_ESPI_PCR_LNKERR_SLV0 0x4050 ///< Link Error for Slave 0
+#define S_ESPI_PCR_LNKERR_SLV0 4 ///< Link Error for Slave 0 register size
+#define B_ESPI_PCR_LNKERR_SLV0_SLCRR BIT31 ///< eSPI Link and Slave Channel Recovery Required
+#define B_ESPI_PCR_LNKERR_SLV0_LFET1E (BIT22 | BIT21) ///< Fatal Error Type 1 Reporting Enable
+#define N_ESPI_PCR_LNKERR_SLV0_LFET1E 21 ///< Fatal Error Type 1 Reporting Enable bit position
+#define V_ESPI_PCR_LNKERR_SLV0_LFET1E_SMI 3 ///< Enable Fatal Error Type 1 Reporting as SMI
+#define B_ESPI_PCR_LNKERR_SLV0_LFET1S BIT20 ///< Link Fatal Error Type 1 Status
+#define R_ESPI_PCR_LNKERR_SLV1 0x4054 ///< Link Error for Slave 1
+
+#define R_ESPI_PCR_SOFTSTRAPS 0xC210 ///< eSPI Sofstraps Register 0
+#define R_ESPI_PCR_SOFTSTRAPS_CS1_EN BIT12 ///< CS1# Enable
+
+//
+// eSPI Slave registers
+//
+#define R_ESPI_PCR_SLAVE_PCREG 0x10 ///< Slave Channel 1 Capabilities and Configurations register (Peripheral Channel)
+#define R_ESPI_PCR_SLAVE_VWREG 0x20 ///< Slave Channel 2 Capabilities and Configurations register (Virtual Wire Channel)
+#define R_ESPI_PCR_SLAVE_FCREG 0x40 ///< Slave Channel 4 Capabilities and Configurations register (Flash Access Channel)
+#define B_ESPI_PCR_SLAVE_CHEN BIT0 ///< Slave Channel enable bit
+#define B_ESPI_PCR_SLAVE_CHRDY BIT1 ///< Slave Channel ready bit
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h
new file mode 100644
index 0000000000..f74fd5800b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h
@@ -0,0 +1,132 @@
+/** @file
+ Register names for PCH P2SB device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_P2SB_H_
+#define _PCH_REGS_P2SB_H_
+
+//
+// PCI to P2SB Bridge Registers (D31:F1)
+//
+#define PCI_DEVICE_NUMBER_PCH_P2SB 31
+#define PCI_FUNCTION_NUMBER_PCH_P2SB 1
+
+#define V_PCH_P2SB_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define R_P2SB_CFG_SBREG_BAR 0x10
+#define B_PCH_P2SB_SBREG_RBA 0xFF000000
+#define R_PCH_P2SB_SBREG_BARH 0x14
+#define B_PCH_P2SB_SBREG_RBAH 0xFFFFFFFF
+#define R_PCH_P2SB_VBDF 0x50
+#define B_PCH_P2SB_VBDF_BUF 0xFF00
+#define B_PCH_P2SB_VBDF_DEV 0x00F8
+#define B_PCH_P2SB_VBDF_FUNC 0x0007
+#define R_PCH_P2SB_ESMBDF 0x52
+#define B_PCH_P2SB_ESMBDF_BUF 0xFF00
+#define B_PCH_P2SB_ESMBDF_DEV 0x00F8
+#define B_PCH_P2SB_ESMBDF_FUNC 0x0007
+#define R_PCH_P2SB_RCFG 0x54
+#define B_PCH_P2SB_RCFG_RPRID 0x0000FF00
+#define B_PCH_P2SB_RCFG_RSE BIT0
+#define R_PCH_P2SB_HPTC 0x60
+#define B_PCH_P2SB_HPTC_AE BIT7
+#define B_PCH_P2SB_HPTC_AS 0x0003
+#define N_PCH_HPET_ADDR_ASEL 12
+#define V_PCH_HPET_BASE0 0xFED00000
+#define V_PCH_HPET_BASE1 0xFED01000
+#define V_PCH_HPET_BASE2 0xFED02000
+#define V_PCH_HPET_BASE3 0xFED03000
+#define R_PCH_P2SB_IOAC 0x64
+#define B_PCH_P2SB_IOAC_AE BIT8
+#define B_PCH_P2SB_IOAC_ASEL 0x00FF
+#define N_PCH_IO_APIC_ASEL 12
+#define R_PCH_IO_APIC_INDEX 0xFEC00000
+#define R_PCH_IO_APIC_DATA 0xFEC00010
+#define R_PCH_IO_APIC_EOI 0xFEC00040
+#define R_PCH_P2SB_IBDF 0x6C
+#define B_PCH_P2SB_IBDF_BUF 0xFF00
+#define B_PCH_P2SB_IBDF_DEV 0x00F8
+#define B_PCH_P2SB_IBDF_FUNC 0x0007
+#define R_PCH_P2SB_HBDF 0x70
+#define B_PCH_P2SB_HBDF_BUF 0xFF00
+#define B_PCH_P2SB_HBDF_DEV 0x00F8
+#define B_PCH_P2SB_HBDF_FUNC 0x0007
+#define R_PCH_P2SB_80 0x80
+#define R_PCH_P2SB_84 0x84
+#define R_PCH_P2SB_88 0x88
+#define R_PCH_P2SB_8C 0x8C
+#define R_PCH_P2SB_90 0x90
+#define R_PCH_P2SB_94 0x94
+#define R_PCH_P2SB_98 0x98
+#define R_PCH_P2SB_9C 0x9C
+#define R_PCH_P2SB_DISPBDF 0xA0
+#define B_PCH_P2SB_DISPBDF_DTBLK 0x00070000
+#define B_PCH_P2SB_DISPBDF_BUF 0x0000FF00
+#define B_PCH_P2SB_DISPBDF_DEV 0x000000F8
+#define B_PCH_P2SB_DISPBDF_FUNC 0x00000007
+#define R_PCH_P2SB_ICCOS 0xA4
+#define B_PCH_P2SB_ICCOS_MODBASE 0xFF00
+#define B_PCH_P2SB_ICCOS_BUFBASE 0x00FF
+#define R_PCH_P2SB_EPMASK0 0x220
+#define R_PCH_P2SB_EPMASK1 0x224
+#define R_PCH_P2SB_EPMASK2 0x228
+#define R_PCH_P2SB_EPMASK3 0x22C
+#define R_PCH_P2SB_EPMASK4 0x230
+#define R_PCH_P2SB_EPMASK5 0x234
+#define R_PCH_P2SB_EPMASK6 0x238
+#define R_PCH_P2SB_EPMASK7 0x23C
+#define B_PCH_P2SB_MASKLOCK BIT17
+//
+// Definition for SBI
+//
+#define R_PCH_P2SB_SBIADDR 0xD0
+#define B_PCH_P2SB_SBIADDR_DESTID 0xFF000000
+#define B_PCH_P2SB_SBIADDR_RS 0x000F0000
+#define B_PCH_P2SB_SBIADDR_OFFSET 0x0000FFFF
+#define R_PCH_P2SB_SBIDATA 0xD4
+#define B_PCH_P2SB_SBIDATA_DATA 0xFFFFFFFF
+#define R_PCH_P2SB_SBISTAT 0xD8
+#define B_PCH_P2SB_SBISTAT_OPCODE 0xFF00
+#define B_PCH_P2SB_SBISTAT_POSTED BIT7
+#define B_PCH_P2SB_SBISTAT_RESPONSE 0x0006
+#define N_PCH_P2SB_SBISTAT_RESPONSE 1
+#define B_PCH_P2SB_SBISTAT_INITRDY BIT0
+#define R_PCH_P2SB_SBIRID 0xDA
+#define B_PCH_P2SB_SBIRID_FBE 0xF000
+#define B_PCH_P2SB_SBIRID_BAR 0x0700
+#define B_PCH_P2SB_SBIRID_FID 0x00FF
+#define R_PCH_P2SB_SBIEXTADDR 0xDC
+#define B_PCH_P2SB_SBIEXTADDR_ADDR 0xFFFFFFFF
+
+//
+// Others
+//
+#define R_PCH_P2SB_E0 0xE0
+#define R_PCH_P2SB_PCE 0xE4
+#define R_PCH_P2SB_PCE_HAE BIT5
+#define R_PCH_P2SB_PCE_PMCRE BIT0
+
+#define R_PCH_P2SB_F4 0xF4
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h
new file mode 100644
index 0000000000..0d10c9dbeb
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h
@@ -0,0 +1,620 @@
+/** @file
+ Register names for PCH PCI-E root port devices
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_PCIE_H_
+#define _PCH_REGS_PCIE_H_
+
+#define PCI_INVALID_VALUE_16BIT 0xFFFF
+#define PCI_INVALID_VALUE_32BIT 0xFFFFFFFF
+
+//
+// PCH PCI Express Root Ports (D28:F0~7 & D29:F0~3)
+//
+#define PCI_DEVICE_NUMBER_PCH_PCIE_DEVICE_1 28
+#define PCI_DEVICE_NUMBER_PCH_PCIE_DEVICE_2 29
+#define PCI_DEVICE_NUMBER_PCH_PCIE_DEVICE_3 27
+#define PCI_DEVICE_NUMBER_PCH_PCIE_ROOT_PORTS 28
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_1 0
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_2 1
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_3 2
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_4 3
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_5 4
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_6 5
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_7 6
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_8 7
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_9 0
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_10 1
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_11 2
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_12 3
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_13 4
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_14 5
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_15 6
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_16 7
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_17 0
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_18 1
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_19 2
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_20 3
+
+#define V_PCH_PCIE_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+
+#define V_PCH_H_PCIE_DEVICE_ID_PORT1 0xA110 ///< PCI Express Root Port #1, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT2 0xA111 ///< PCI Express Root Port #2, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT3 0xA112 ///< PCI Express Root Port #3, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT4 0xA113 ///< PCI Express Root Port #4, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT5 0xA114 ///< PCI Express Root Port #5, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT6 0xA115 ///< PCI Express Root Port #6, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT7 0xA116 ///< PCI Express Root Port #7, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT8 0xA117 ///< PCI Express Root Port #8, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT9 0xA118 ///< PCI Express Root Port #9, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT10 0xA119 ///< PCI Express Root Port #10, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT11 0xA11A ///< PCI Express Root Port #11, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT12 0xA11B ///< PCI Express Root Port #12, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT13 0xA11C ///< PCI Express Root Port #13, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT14 0xA11D ///< PCI Express Root Port #14, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT15 0xA11E ///< PCI Express Root Port #15, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT16 0xA11F ///< PCI Express Root Port #16, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT17 0xA167 ///< PCI Express Root Port #17, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT18 0xA168 ///< PCI Express Root Port #18, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT19 0xA169 ///< PCI Express Root Port #19, SKL PCH H
+#define V_PCH_H_PCIE_DEVICE_ID_PORT20 0xA16A ///< PCI Express Root Port #20, SKL PCH H
+
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT1 0x9D10 ///< PCI Express Root Port #1, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT2 0x9D11 ///< PCI Express Root Port #2, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT3 0x9D12 ///< PCI Express Root Port #3, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT4 0x9D13 ///< PCI Express Root Port #4, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT5 0x9D14 ///< PCI Express Root Port #5, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT6 0x9D15 ///< PCI Express Root Port #6, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT7 0x9D16 ///< PCI Express Root Port #7, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT8 0x9D17 ///< PCI Express Root Port #8, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT9 0x9D18 ///< PCI Express Root Port #9, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT10 0x9D19 ///< PCI Express Root Port #10, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT11 0x9D1A ///< PCI Express Root Port #11, SKL PCH LP PCIe Device ID
+#define V_PCH_LP_PCIE_DEVICE_ID_PORT12 0x9D1B ///< PCI Express Root Port #12, SKL PCH LP PCIe Device ID
+
+#define V_PCH_QAT_DEVICE_ID 0x37c8 ///< PCH QAT Device ID
+
+//
+// LBG Production (PRQ) PCI Express Root Ports Device ID's
+//
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT1 0xA190 ///< PCI Express Root Port #1, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT2 0xA191 ///< PCI Express Root Port #2, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT3 0xA192 ///< PCI Express Root Port #3, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT4 0xA193 ///< PCI Express Root Port #4, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT5 0xA194 ///< PCI Express Root Port #5, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT6 0xA195 ///< PCI Express Root Port #6, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT7 0xA196 ///< PCI Express Root Port #7, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT8 0xA197 ///< PCI Express Root Port #8, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT9 0xA198 ///< PCI Express Root Port #9, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT10 0xA199 ///< PCI Express Root Port #10, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT11 0xA19A ///< PCI Express Root Port #11, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT12 0xA19B ///< PCI Express Root Port #12, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT13 0xA19C ///< PCI Express Root Port #13, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT14 0xA19D ///< PCI Express Root Port #14, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT15 0xA19E ///< PCI Express Root Port #15, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT16 0xA19F ///< PCI Express Root Port #16, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT17 0xA1E7 ///< PCI Express Root Port #17, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT18 0xA1E8 ///< PCI Express Root Port #18, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT19 0xA1E9 ///< PCI Express Root Port #19, LBG PRQ
+#define V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT20 0xA1EA ///< PCI Express Root Port #20, LBG PRQ
+//
+// LBG Super SKU (SSX) PCI Express Root Ports Device ID's
+//
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT1 0xA210 ///< PCI Express Root Port #1, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT2 0xA211 ///< PCI Express Root Port #2, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT3 0xA212 ///< PCI Express Root Port #3, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT4 0xA213 ///< PCI Express Root Port #4, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT5 0xA214 ///< PCI Express Root Port #5, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT6 0xA215 ///< PCI Express Root Port #6, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT7 0xA216 ///< PCI Express Root Port #7, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT8 0xA217 ///< PCI Express Root Port #8, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT9 0xA218 ///< PCI Express Root Port #9, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT10 0xA219 ///< PCI Express Root Port #10, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT11 0xA21A ///< PCI Express Root Port #11, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT12 0xA21B ///< PCI Express Root Port #12, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT13 0xA21C ///< PCI Express Root Port #13, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT14 0xA21D ///< PCI Express Root Port #14, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT15 0xA21E ///< PCI Express Root Port #15, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT16 0xA21F ///< PCI Express Root Port #16, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT17 0xA267 ///< PCI Express Root Port #17, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT18 0xA268 ///< PCI Express Root Port #18, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT19 0xA269 ///< PCI Express Root Port #19, LBG SSKU
+#define V_PCH_LBG_PCIE_DEVICE_ID_PORT20 0xA26A ///< PCI Express Root Port #20, LBG SSKU
+typedef enum {
+ PCIE_SPA,
+ PCIE_SPB,
+ PCIE_SPC,
+ PCIE_SPD,
+ PCIE_SPE
+} PCIE_CONTROLLER_INDEX;
+
+#define R_PCH_PCIE_PCISTS 0x06
+#define B_PCH_PCIE_PCISTS_CAP_LST BIT4
+#define B_PCH_PCIE_XCAP_CV 0x000F
+#define B_PCH_PCIE_XCAP_DT (BIT7 | BIT6 | BIT5 | BIT4)
+
+#define R_PCH_PCIE_CLIST 0x40
+#define R_PCH_PCIE_XCAP (R_PCH_PCIE_CLIST + R_PCIE_XCAP_OFFSET)
+#define R_PCH_PCIE_CFG_DEVCAP (R_PCH_PCIE_CLIST + R_PCIE_DCAP_OFFSET)
+#define R_PCH_PCIE_DCTL (R_PCH_PCIE_CLIST + R_PCIE_DCTL_OFFSET)
+#define R_PCH_PCIE_DSTS (R_PCH_PCIE_CLIST + R_PCIE_DSTS_OFFSET)
+#define R_PCH_PCIE_LCAP (R_PCH_PCIE_CLIST + R_PCIE_LCAP_OFFSET)
+#define B_PCH_PCIE_LCAP_PN 0xFF000000
+#define N_PCH_PCIE_LCAP_PN 24
+#define R_PCH_PCIE_LCTL (R_PCH_PCIE_CLIST + R_PCIE_LCTL_OFFSET)
+#define R_PCH_PCIE_LSTS (R_PCH_PCIE_CLIST + R_PCIE_LSTS_OFFSET)
+#define R_PCH_PCIE_CFG_LINKSTS (R_PCH_PCIE_CLIST + R_PCIE_LSTS_OFFSET)
+#define R_PCH_PCIE_SLCAP (R_PCH_PCIE_CLIST + R_PCIE_SLCAP_OFFSET)
+#define R_PCH_PCIE_SLCTL (R_PCH_PCIE_CLIST + R_PCIE_SLCTL_OFFSET)
+#define R_PCH_PCIE_SLSTS (R_PCH_PCIE_CLIST + R_PCIE_SLSTS_OFFSET)
+#define R_PCH_PCIE_CFG_ROOTCTL (R_PCH_PCIE_CLIST + R_PCIE_RCTL_OFFSET)
+#define R_PCH_PCIE_RSTS (R_PCH_PCIE_CLIST + R_PCIE_RSTS_OFFSET)
+#define R_PCH_PCIE_CFG_DCAP2 (R_PCH_PCIE_CLIST + R_PCIE_DCAP2_OFFSET)
+#define R_PCH_PCIE_DCTL2 (R_PCH_PCIE_CLIST + R_PCIE_DCTL2_OFFSET)
+#define R_PCH_PCIE_LCTL2 (R_PCH_PCIE_CLIST + R_PCIE_LCTL2_OFFSET)
+#define R_PCH_PCIE_LSTS2 (R_PCH_PCIE_CLIST + R_PCIE_LSTS2_OFFSET)
+
+
+#define R_PCH_PCIE_MID 0x80
+#define S_PCH_PCIE_MID 2
+#define R_PCH_PCIE_MC 0x82
+#define S_PCH_PCIE_MC 2
+#define R_PCH_PCIE_MA 0x84
+#define S_PCH_PCIE_MA 4
+#define R_PCH_PCIE_MD 0x88
+#define S_PCH_PCIE_MD 2
+
+#define R_PCH_PCIE_SVCAP 0x90
+#define S_PCH_PCIE_SVCAP 2
+#define R_PCH_PCIE_SSVID 0x94
+#define S_PCH_PCIE_SSVID 4
+
+#define R_PCH_PCIE_PMCAP 0xA0
+#define R_PCH_PCIE_PMCS (R_PCH_PCIE_PMCAP + R_PCIE_PMCS_OFFST)
+
+#define R_PCH_PCIE_CCFG 0xD0
+#define B_PCH_PCIE_CCFG_UPMWPD BIT25
+#define B_PCH_PCIE_CCFG_UPSD BIT24
+#define B_PCH_PCIE_CCFG_UNSD BIT23
+#define B_PCH_PCIE_CCFG_NPAP BIT16
+#define B_PCH_PCIE_CCFG_DCGEISMA BIT15
+#define B_PCH_PCIE_CCFG_UNRD (BIT13 | BIT12)
+#define N_PCH_PCIE_CCFG_UNRD 12
+#define B_PCH_PCIE_CCFG_UNRS (BIT6 | BIT5 | BIT4)
+#define N_PCH_PCIE_CCFG_UNRS 4
+#define V_PCH_PCIE_CCFG_UNRS_128B 0
+#define V_PCH_PCIE_CCFG_UNRS_256B 1
+#define B_PCH_PCIE_CCFG_UPRS (BIT2 | BIT1 | BIT0)
+#define N_PCH_PCIE_CCFG_UPRS 0
+#define V_PCH_PCIE_CCFG_UPRS_128B 0
+#define V_PCH_PCIE_CCFG_UPRS_256B 1
+
+#define R_PCH_PCIE_MPC2 0xD4
+#define S_PCH_PCIE_MPC2 4
+#define B_PCH_PCIE_MPC2_PTNFAE BIT12
+#define B_PCH_PCIE_MPC2_LSTP BIT6
+#define B_PCH_PCIE_MPC2_IEIME BIT5
+#define B_PCH_PCIE_MPC2_ASPMCOEN BIT4
+#define B_PCH_PCIE_MPC2_ASPMCO (BIT3 | BIT2)
+#define V_PCH_PCIE_MPC2_ASPMCO_DISABLED 0
+#define V_PCH_PCIE_MPC2_ASPMCO_L0S (1 << 2)
+#define V_PCH_PCIE_MPC2_ASPMCO_L1 (2 << 2)
+#define V_PCH_PCIE_MPC2_ASPMCO_L0S_L1 (3 << 2)
+#define B_PCH_PCIE_MPC2_EOIFD BIT1
+
+#define R_PCH_PCIE_MPC 0xD8
+#define S_PCH_PCIE_MPC 4
+#define B_PCH_PCIE_MPC_PMCE BIT31
+#define B_PCH_PCIE_MPC_HPCE BIT30
+#define B_PCH_PCIE_MPC_MMBNCE BIT27
+#define B_PCH_PCIE_MPC_P8XDE BIT26
+#define B_PCH_PCIE_MPC_IRRCE BIT25
+#define B_PCH_PCIE_MPC_SRL BIT23
+#define B_PCH_PCIE_MPC_UCEL (BIT20 | BIT19 | BIT18)
+#define N_PCH_PCIE_MPC_UCEL 18
+#define B_PCH_PCIE_MPC_CCEL (BIT17 | BIT16 | BIT15)
+#define N_PCH_PCIE_MPC_CCEL 15
+#define B_PCH_PCIE_MPC_PCIESD (BIT14 | BIT13)
+#define N_PCH_PCIE_MPC_PCIESD 13
+#define V_PCH_PCIE_MPC_PCIESD_GEN1 1
+#define V_PCH_PCIE_MPC_PCIESD_GEN2 2
+#define B_PCH_PCIE_MPC_MCTPSE BIT3
+#define B_PCH_PCIE_MPC_HPME BIT1
+#define N_PCH_PCIE_MPC_HPME 1
+#define B_PCH_PCIE_MPC_PMME BIT0
+
+#define R_PCH_PCIE_SMSCS 0xDC
+#define S_PCH_PCIE_SMSCS 4
+#define N_PCH_PCIE_SMSCS_LERSMIS 5
+#define N_PCH_PCIE_SMSCS_HPLAS 4
+#define N_PCH_PCIE_SMSCS_HPPDM 1
+
+#define R_PCH_PCIE_RPDCGEN 0xE1
+#define S_PCH_PCIE_RPDCGEN 1
+#define B_PCH_PCIE_RPDCGEN_RPSCGEN BIT7
+#define B_PCH_PCIE_RPDCGEN_PTOCGE BIT6
+#define B_PCH_PCIE_RPDCGEN_LCLKREQEN BIT5
+#define B_PCH_PCIE_RPDCGEN_BBCLKREQEN BIT4
+#define B_PCH_PCIE_RPDCGEN_SRDBCGEN BIT2
+#define B_PCH_PCIE_RPDCGEN_RPDLCGEN BIT1
+#define B_PCH_PCIE_RPDCGEN_RPDBCGEN BIT0
+
+#define R_PCH_PCIE_RPPGEN 0xE2
+#define B_PCH_PCIE_RPPGEN_PTOTOP BIT6
+#define B_PCH_PCIE_RPPGEN_SEOSCGE BIT4
+
+#define R_PCH_PCIE_PWRCTL 0xE8
+#define B_PCH_PCIE_PWRCTL_LTSSMRTC BIT20
+#define B_PCH_PCIE_PWRCTL_WPDMPGEP BIT17
+#define B_PCH_PCIE_PWRCTL_DBUPI BIT15
+#define B_PCH_PCIE_PWRCTL_TXSWING BIT13
+#define B_PCH_PCIE_PWRCTL_RPL1SQPOL BIT1
+#define B_PCH_PCIE_PWRCTL_RPDTSQPOL BIT0
+
+#define R_PCH_PCIE_DC 0xEC
+#define B_PCH_PCIE_DC_PCIBEM BIT2
+
+#define R_PCH_PCIE_PHYCTL2 0xF5
+#define B_PCH_PCIE_PHYCTL2_TDFT (BIT7 | BIT6)
+#define B_PCH_PCIE_PHYCTL2_TXCFGCHGWAIT (BIT5 | BIT4)
+#define N_PCH_PCIE_PHYCTL2_TXCFGCHGWAIT 4
+#define B_PCH_PCIE_PHYCTL2_PXPG3PLLOFFEN BIT1
+#define B_PCH_PCIE_PHYCTL2_PXPG2PLLOFFEN BIT0
+
+#define R_PCH_PCIE_IOSFSBCS 0xF7
+#define B_PCH_PCIE_IOSFSBCS_SCPTCGE BIT6
+#define B_PCH_PCIE_IOSFSBCS_SIID (BIT3 | BIT2)
+
+#define R_PCH_PCIE_STRPFUSECFG 0xFC
+#define B_PCH_PCIE_STRPFUSECFG_SERM BIT29
+#define B_PCH_PCIE_STRPFUSECFG_PXIP (BIT27 | BIT26 | BIT25 | BIT24)
+#define N_PCH_PCIE_STRPFUSECFG_PXIP 24
+#define B_PCH_PCIE_STRPFUSECFG_RPC (BIT15 | BIT14)
+#define V_PCH_PCIE_STRPFUSECFG_RPC_1_1_1_1 0
+#define V_PCH_PCIE_STRPFUSECFG_RPC_2_1_1 1
+#define V_PCH_PCIE_STRPFUSECFG_RPC_2_2 2
+#define V_PCH_PCIE_STRPFUSECFG_RPC_4 3
+#define N_PCH_PCIE_STRPFUSECFG_RPC 14
+#define B_PCH_PCIE_STRPFUSECFG_MODPHYIOPMDIS BIT9
+#define B_PCH_PCIE_STRPFUSECFG_PLLSHTDWNDIS BIT8
+#define B_PCH_PCIE_STRPFUSECFG_STPGATEDIS BIT7
+#define B_PCH_PCIE_STRPFUSECFG_ASPMDIS BIT6
+#define B_PCH_PCIE_STRPFUSECFG_LDCGDIS BIT5
+#define B_PCH_PCIE_STRPFUSECFG_LTCGDIS BIT4
+#define B_PCH_PCIE_STRPFUSECFG_CDCGDIS BIT3
+#define B_PCH_PCIE_STRPFUSECFG_DESKTOPMOB BIT2
+
+//
+//PCI Express Extended Capability Registers
+//
+
+#define R_PCH_PCIE_EXCAP_OFFSET 0x100
+
+#define R_PCH_PCIE_CFG_ROOTERRSTS 0x130
+#define S_PCH_PCIE_CFG_ROOTERRSTS 4
+#define B_PCH_PCIE_CFG_ROOTERRSTS_AEMN 0xF8000000
+#define B_PCH_PCIE_CFG_ROOTERRSTS_FEMR BIT6
+#define B_PCH_PCIE_CFG_ROOTERRSTS_NFEMR BIT5
+#define B_PCH_PCIE_CFG_ROOTERRSTS_FUF BIT4
+#define B_PCH_PCIE_CFG_ROOTERRSTS_MEFR BIT3
+#define B_PCH_PCIE_CFG_ROOTERRSTS_EFR BIT2
+#define B_PCH_PCIE_CFG_ROOTERRSTS_MCER BIT1
+#define B_PCH_PCIE_CFG_ROOTERRSTS_CER BIT0
+
+#define R_PCH_PCIE_EX_AECH 0x100 ///< Advanced Error Reporting Capability Header
+#define V_PCH_PCIE_EX_AEC_CV 0x1
+#define R_PCH_PCIE_EX_UEM (R_PCH_PCIE_EX_AECH + R_PCIE_EX_UEM_OFFSET)
+#define R_PCH_PCIE_EX_REC 0x12C ///< Root Error Command
+#define B_PCH_PCIE_EX_REC_FERE BIT2 ///< Root Error Command Fatal Error Reporting Enable
+#define B_PCH_PCIE_EX_REC_NERE BIT1 ///< Root Error Command Non-fatal Error Reporting Enable
+#define B_PCH_PCIE_EX_REC_CERE BIT0 ///< Root Error Command Correctable Error Reporting Enable
+
+#define R_PCH_PCIE_EX_CES 0x110 ///< Correctable Error Status
+#define B_PCH_PCIE_EX_CES_BD BIT7 ///< Bad DLLP Status
+#define B_PCH_PCIE_EX_CES_BT BIT6 ///< Bad TLP Status
+#define B_PCH_PCIE_EX_CES_RE BIT0 ///< Receiver Error Status
+
+
+//CES.RE, CES.BT, CES.BD
+
+#define R_PCH_PCIE_EX_ACSECH 0x140 ///< ACS Extended Capability Header
+#define V_PCH_PCIE_EX_ACS_CV 0x1
+#define R_PCH_PCIE_EX_ACSCAPR (R_PCH_PCIE_EX_ACSECH + R_PCIE_EX_ACSCAPR_OFFSET)
+
+#define R_PCH_PCIE_EX_L1SECH 0x200 ///< L1 Sub-States Extended Capability Header
+#define V_PCH_PCIE_EX_L1S_CV 0x1
+#define R_PCH_PCIE_EX_L1SCAP (R_PCH_PCIE_EX_L1SECH + R_PCIE_EX_L1SCAP_OFFSET)
+#define R_PCH_PCIE_EX_L1SCTL1 (R_PCH_PCIE_EX_L1SECH + R_PCIE_EX_L1SCTL1_OFFSET)
+#define R_PCH_PCIE_EX_L1SCTL2 (R_PCH_PCIE_EX_L1SECH + R_PCIE_EX_L1SCTL2_OFFSET)
+
+#define R_PCH_PCIE_EX_SPEECH 0x220 ///< Secondary PCI Express Extended Capability Header
+#define V_PCH_PCIE_EX_SPEECH_CV 0x1
+
+#define R_PCH_PCIE_EX_LCTL3 (R_PCH_PCIE_EX_SPEECH + R_PCIE_EX_LCTL3_OFFSET)
+#define R_PCH_PCIE_EX_LES (R_PCH_PCIE_EX_SPEECH + R_PCIE_EX_LES_OFFSET)
+#define R_PCH_PCIE_EX_LECTL (R_PCH_PCIE_EX_SPEECH + R_PCIE_EX_L01EC_OFFSET)
+#define B_PCH_PCIE_EX_LECTL_UPTPH (BIT14 | BIT13 | BIT12)
+#define N_PCH_PCIE_EX_LECTL_UPTPH 12
+#define B_PCH_PCIE_EX_LECTL_UPTP 0x0F00
+#define N_PCH_PCIE_EX_LECTL_UPTP 8
+#define B_PCH_PCIE_EX_LECTL_DPTPH (BIT6 | BIT5 | BIT4)
+#define N_PCH_PCIE_EX_LECTL_DPTPH 4
+#define B_PCH_PCIE_EX_LECTL_DPTP 0x000F
+#define N_PCH_PCIE_EX_LECTL_DPTP 0
+
+#define R_PCH_PCIE_EX_L01EC (R_PCH_PCIE_EX_SPEECH + R_PCIE_EX_L01EC_OFFSET)
+#define R_PCH_PCIE_EX_L23EC (R_PCH_PCIE_EX_SPEECH + R_PCIE_EX_L23EC_OFFSET)
+
+#define R_PCH_PCIE_PCIERTP1 0x300
+#define R_PCH_PCIE_PCIERTP2 0x304
+#define R_PCH_PCIE_PCIENFTS 0x314
+#define R_PCH_PCIE_PCIEL0SC 0x318
+
+#define R_PCH_PCIE_PCIECFG2 0x320
+#define B_PCH_PCIE_PCIECFG2_LBWSSTE BIT30
+#define B_PCH_PCIE_PCIECFG2_RLLG3R BIT27
+#define B_PCH_PCIE_PCIECFG2_CROAOV BIT24
+#define B_PCH_PCIE_PCIECFG2_CROAOE BIT23
+#define B_PCH_PCIE_PCIECFG2_CRSREN BIT22
+#define B_PCH_PCIE_PCIECFG2_PMET (BIT21 | BIT20)
+#define V_PCH_PCIE_PCIECFG2_PMET 1
+#define N_PCH_PCIE_PCIECFG2_PMET 20
+
+#define R_PCH_PCIE_PCIEDBG 0x324
+#define B_PCH_PCIE_PCIEDBG_USSP (BIT27 | BIT26)
+#define B_PCH_PCIE_PCIEDBG_LGCLKSQEXITDBTIMERS (BIT25 | BIT24)
+#define B_PCH_PCIE_PCIEDBG_CTONFAE BIT14
+#define B_PCH_PCIE_PCIEDBG_SQOL0 BIT7
+#define B_PCH_PCIE_PCIEDBG_SPCE BIT5
+#define B_PCH_PCIE_PCIEDBG_LR BIT4
+#define B_PCH_PCIE_DMIL1EDM BIT3
+
+#define R_PCH_PCIE_PCIESTS1 0x328
+#define B_PCH_PCIE_PCIESTS1_LTSMSTATE 0xFF000000
+#define N_PCH_PCIE_PCIESTS1_LTSMSTATE 24
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_DETRDY 0x01
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_DETRDYECINP1CG 0x0E
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_L0 0x33
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_DISWAIT 0x5E
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_DISWAITPG 0x60
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_RECOVERYSPEEDREADY 0x6C
+#define V_PCH_PCIE_PCIESTS1_LTSMSTATE_RECOVERYLNK2DETECT 0x6F
+
+
+#define B_PCH_PCIE_PCIESTS1_LNKSTAT (BIT22 | BIT21 | BIT20 | BIT19)
+#define N_PCH_PCIE_PCIESTS1_LNKSTAT 19
+#define V_PCH_PCIE_PCIESTS1_LNKSTAT_L0 0x7
+
+#define R_PCH_PCIE_PCIESTS2 0x32C
+#define B_PCH_PCIE_PCIESTS2_P4PNCCWSSCMES BIT31
+#define B_PCH_PCIE_PCIESTS2_P3PNCCWSSCMES BIT30
+#define B_PCH_PCIE_PCIESTS2_P2PNCCWSSCMES BIT29
+#define B_PCH_PCIE_PCIESTS2_P1PNCCWSSCMES BIT28
+#define B_PCH_PCIE_PCIESTS2_CLRE 0x0000F000
+#define N_PCH_PCIE_PCIESTS2_CLRE 12
+
+#define R_PCH_PCIE_PCIEALC 0x338
+#define B_PCH_PCIE_PCIEALC_ITLRCLD BIT29
+#define B_PCH_PCIE_PCIEALC_ILLRCLD BIT28
+#define B_PCH_PCIE_PCIEALC_BLKDQDA BIT26
+
+#define R_PCH_PCIE_LTROVR 0x400
+
+#define R_PCH_PCIE_LTROVR2 0x404
+
+#define R_PCH_PCIE_PHYCTL4 0x408
+#define B_PCH_PCIE_PHYCTL4_SQDIS BIT27
+
+
+#define R_PCH_PCIE_PCIEPMECTL 0x420
+#define B_PCH_PCIE_PCIEPMECTL_FDPPGE BIT31
+#define B_PCH_PCIE_PCIEPMECTL_DLSULPPGE BIT30
+#define B_PCH_PCIE_PCIEPMECTL_DLSULDLSD BIT29
+#define B_PCH_PCIE_PCIEPMECTL_L1LE BIT17
+#define B_PCH_PCIE_PCIEPMECTL_L1LTRTLV (BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8 | BIT7 | BIT6 | BIT5 | BIT4)
+#define N_PCH_PCIE_PCIEPMECTL_L1LTRTLV 4
+#define V_PCH_PCIE_PCIEPMECTL_L1LTRTLV 0x32
+#define B_PCH_PCIE_PCIEPMECTL_L1FSOE BIT0
+
+#define R_PCH_PCIE_PCIEPMECTL2 0x424
+#define B_PCH_PCIE_PCIEPMECTL2_PHYCLPGE BIT11
+#define B_PCH_PCIE_PCIEPMECTL2_FDCPGE BIT8
+#define B_PCH_PCIE_PCIEPMECTL2_DETSCPGE BIT7
+#define B_PCH_PCIE_PCIEPMECTL2_L23RDYSCPGE BIT6
+#define B_PCH_PCIE_PCIEPMECTL2_DISSCPGE BIT5
+#define B_PCH_PCIE_PCIEPMECTL2_L1SCPGE BIT4
+
+#define R_PCH_PCIE_PCE 0x428
+#define B_PCH_PCIE_PCE_HAE BIT5
+#define B_PCH_PCIE_PCE_PMCRE BIT0
+
+#define R_PCH_PCIE_EQCFG1 0x450
+#define S_PCH_PCIE_EQCFG1 4
+#define B_PCH_PCIE_EQCFG1_REC 0xFF000000
+#define N_PCH_PCIE_EQCFG1_REC 24
+#define B_PCH_PCIE_EQCFG1_REIFECE BIT23
+#define N_PCH_PCIE_EQCFG1_LERSMIE 21
+#define B_PCH_PCIE_EQCFG1_LEP23B BIT18
+#define B_PCH_PCIE_EQCFG1_LEP3B BIT17
+#define B_PCH_PCIE_EQCFG1_RTLEPCEB BIT16
+#define B_PCH_PCIE_EQCFG1_RTPCOE BIT15
+#define B_PCH_PCIE_EQCFG1_HPCMQE BIT13
+#define B_PCH_PCIE_EQCFG1_HAED BIT12
+#define B_PCH_PCIE_EQCFG1_EQTS2IRRC BIT7
+#define B_PCH_PCIE_EQCFG1_TUPP BIT1
+
+#define R_PCH_PCIE_RTPCL1 0x454
+#define B_PCH_PCIE_RTPCL1_PCM BIT31
+#define B_PCH_PCIE_RTPCL1_RTPRECL2PL4 0x3F000000
+#define B_PCH_PCIE_RTPCL1_RTPOSTCL1PL3 0xFC0000
+#define B_PCH_PCIE_RTPCL1_RTPRECL1PL2 0x3F000
+#define B_PCH_PCIE_RTPCL1_RTPOSTCL0PL1 0xFC0
+#define B_PCH_PCIE_RTPCL1_RTPRECL0PL0 0x3F
+
+#define R_PCH_PCIE_RTPCL2 0x458
+#define B_PCH_PCIE_RTPCL2_RTPOSTCL3PL 0x3F000
+#define B_PCH_PCIE_RTPCL2_RTPRECL3PL6 0xFC0
+#define B_PCH_PCIE_RTPCL2_RTPOSTCL2PL5 0x3F
+
+#define R_PCH_PCIE_RTPCL3 0x45C
+#define B_PCH_PCIE_RTPCL3_RTPRECL7 0x3F000000
+#define B_PCH_PCIE_RTPCL3_RTPOSTCL6 0xFC0000
+#define B_PCH_PCIE_RTPCL3_RTPRECL6 0x3F000
+#define B_PCH_PCIE_RTPCL3_RTPOSTCL5 0xFC0
+#define B_PCH_PCIE_RTPCL3_RTPRECL5PL10 0x3F
+
+#define R_PCH_PCIE_RTPCL4 0x460
+#define B_PCH_PCIE_RTPCL4_RTPOSTCL9 0x3F000000
+#define B_PCH_PCIE_RTPCL4_RTPRECL9 0xFC0000
+#define B_PCH_PCIE_RTPCL4_RTPOSTCL8 0x3F000
+#define B_PCH_PCIE_RTPCL4_RTPRECL8 0xFC0
+#define B_PCH_PCIE_RTPCL4_RTPOSTCL7 0x3F
+
+#define R_PCH_PCIE_FOMS 0x464
+#define B_PCH_PCIE_FOMS_I (BIT30 | BIT29)
+#define N_PCH_PCIE_FOMS_I 29
+#define B_PCH_PCIE_FOMS_LN 0x1F000000
+#define N_PCH_PCIE_FOMS_LN 24
+#define B_PCH_PCIE_FOMS_FOMSV 0x00FFFFFF
+#define B_PCH_PCIE_FOMS_FOMSV0 0x000000FF
+#define N_PCH_PCIE_FOMS_FOMSV0 0
+#define B_PCH_PCIE_FOMS_FOMSV1 0x0000FF00
+#define N_PCH_PCIE_FOMS_FOMSV1 8
+#define B_PCH_PCIE_FOMS_FOMSV2 0x00FF0000
+#define N_PCH_PCIE_FOMS_FOMSV2 16
+
+#define R_PCH_PCIE_HAEQ 0x468
+#define B_PCH_PCIE_HAEQ_HAPCCPI (BIT31 | BIT30 | BIT29 | BIT28)
+#define N_PCH_PCIE_HAEQ_HAPCCPI 28
+#define B_PCH_PCIE_HAEQ_MACFOMC BIT19
+
+#define R_PCH_PCIE_LTCO1 0x470
+#define B_PCH_PCIE_LTCO1_L1TCOE BIT25
+#define B_PCH_PCIE_LTCO1_L0TCOE BIT24
+#define B_PCH_PCIE_LTCO1_L1TPOSTCO 0xFC0000
+#define N_PCH_PCIE_LTCO1_L1TPOSTCO 18
+#define B_PCH_PCIE_LTCO1_L1TPRECO 0x3F000
+#define N_PCH_PCIE_LTCO1_L1TPRECO 12
+#define B_PCH_PCIE_LTCO1_L0TPOSTCO 0xFC0
+#define N_PCH_PCIE_LTCO1_L0TPOSTCO 6
+#define B_PCH_PCIE_LTCO1_L0TPRECO 0x3F
+#define N_PCH_PCIE_LTCO1_L0TPRECO 0
+
+#define R_PCH_PCIE_LTCO2 0x474
+#define B_PCH_PCIE_LTCO2_L3TCOE BIT25
+#define B_PCH_PCIE_LTCO2_L2TCOE BIT24
+#define B_PCH_PCIE_LTCO2_L3TPOSTCO 0xFC0000
+#define B_PCH_PCIE_LTCO2_L3TPRECO 0x3F000
+#define B_PCH_PCIE_LTCO2_L2TPOSTCO 0xFC0
+#define B_PCH_PCIE_LTCO2_L2TPRECO 0x3F
+
+#define R_PCH_PCIE_G3L0SCTL 0x478
+#define B_PCH_PCIE_G3L0SCTL_G3UCNFTS 0x0000FF00
+#define B_PCH_PCIE_G3L0SCTL_G3CCNFTS 0x000000FF
+
+#define R_PCH_PCIE_EQCFG2 0x47C
+#define B_PCH_PCIE_EQCFG2_NTIC 0xFF000000
+#define B_PCH_PCIE_EQCFG2_EMD BIT23
+#define B_PCH_PCIE_EQCFG2_NTSS (BIT22 | BIT21 | BIT20)
+#define B_PCH_PCIE_EQCFG2_PCET (BIT19 | BIT18 | BIT17 | BIT16)
+#define N_PCH_PCIE_EQCFG2_PCET 16
+#define B_PCH_PCIE_EQCFG2_HAPCSB (BIT15 | BIT14 | BIT13 | BIT12)
+#define N_PCH_PCIE_EQCFG2_HAPCSB 12
+#define B_PCH_PCIE_EQCFG2_NTEME BIT11
+#define B_PCH_PCIE_EQCFG2_MPEME BIT10
+#define B_PCH_PCIE_EQCFG2_REWMETM (BIT9 | BIT8)
+#define B_PCH_PCIE_EQCFG2_REWMET 0xFF
+
+#define R_PCH_PCIE_MM 0x480
+#define B_PCH_PCIE_MM_MSST 0xFFFFFF00
+#define N_PCH_PCIE_MM_MSST 8
+#define B_PCH_PCIE_MM_MSS 0xFF
+
+//
+//PCI Express Extended End Point Capability Registers
+//
+
+#define R_PCH_PCIE_LTRECH_OFFSET 0
+#define R_PCH_PCIE_LTRECH_CID 0x0018
+#define R_PCH_PCIE_LTRECH_MSLR_OFFSET 0x04
+#define R_PCH_PCIE_LTRECH_MNSLR_OFFSET 0x06
+
+//
+// Pcie Uplink ports related registers and defines
+//
+#define PCI_DEVICE_NUMBER_PCH_PCIE_UX16 0
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_UX16 0
+#define PCI_DEVICE_NUMBER_PCH_PCIE_UX8 0
+#define PCI_FUNCTION_NUMBER_PCH_PCIE_UX8 0
+#define V_PCH_LBG_PCIE_DEVICE_ID_UX16 0x37C0 ///< PCI Express Uplink x16 Device ID
+#define V_PCH_LBG_NS_PCIE_DEVICE_ID_UX8 0x37C1 ///< PCI Express Uplink x8 Device ID, LBG-NS
+
+
+
+//
+// PCIE PCRs (PID:SPA SPB SPC SPD SPE)
+//
+#define R_PCH_PCR_SPX_PCD 0 ///< Port configuration and disable
+#define B_PCH_PCR_SPX_PCD_RP1FN (BIT2 | BIT1 | BIT0) ///< Port 1 Function Number
+#define B_PCH_PCR_SPX_PCD_RP1CH BIT3 ///< Port 1 config hide
+#define B_PCH_PCR_SPX_PCD_RP2FN (BIT6 | BIT5 | BIT4) ///< Port 2 Function Number
+#define B_PCH_PCR_SPX_PCD_RP2CH BIT7 ///< Port 2 config hide
+#define B_PCH_PCR_SPX_PCD_RP3FN (BIT10 | BIT9 | BIT8) ///< Port 3 Function Number
+#define B_PCH_PCR_SPX_PCD_RP3CH BIT11 ///< Port 3 config hide
+#define B_PCH_PCR_SPX_PCD_RP4FN (BIT14 | BIT13 | BIT12) ///< Port 4 Function Number
+#define B_PCH_PCR_SPX_PCD_RP4CH BIT15 ///< Port 4 config hide
+#define S_PCH_PCR_SPX_PCD_RP_FIELD 4 ///< 4 bits for each RP FN
+#define B_PCH_PCR_SPX_PCD_P1D BIT16 ///< Port 1 disable
+#define B_PCH_PCR_SPX_PCD_P2D BIT17 ///< Port 2 disable
+#define B_PCH_PCR_SPX_PCD_P3D BIT18 ///< Port 3 disable
+#define B_PCH_PCR_SPX_PCD_P4D BIT19 ///< Port 4 disable
+#define B_PCH_PCR_SPX_PCD_SRL BIT31 ///< Secured Register Lock
+
+#define R_PCH_PCR_SPX_PCIEHBP 0x0004 ///< PCI Express high-speed bypass
+#define B_PCH_PCR_SPX_PCIEHBP_PCIEHBPME BIT0 ///< PCIe HBP mode enable
+#define B_PCH_PCR_SPX_PCIEHBP_PCIEGMO (BIT2 | BIT1) ///< PCIe gen mode override
+#define B_PCH_PCR_SPX_PCIEHBP_PCIETIL0O BIT3 ///< PCIe transmitter-in-L0 override
+#define B_PCH_PCR_SPX_PCIEHBP_PCIERIL0O BIT4 ///< PCIe receiver-in-L0 override
+#define B_PCH_PCR_SPX_PCIEHBP_PCIELRO BIT5 ///< PCIe link recovery override
+#define B_PCH_PCR_SPX_PCIEHBP_PCIELDO BIT6 ///< PCIe link down override
+#define B_PCH_PCR_SPX_PCIEHBP_PCIESSM BIT7 ///< PCIe SKP suppression mode
+#define B_PCH_PCR_SPX_PCIEHBP_PCIESST BIT8 ///< PCIe suppress SKP transmission
+#define B_PCH_PCR_SPX_PCIEHBP_PCIEHBPPS (BIT13 | BIT12) ///< PCIe HBP port select
+#define B_PCH_PCR_SPX_PCIEHBP_CRCSEL (BIT15 | BIT14) ///< CRC select
+#define B_PCH_PCR_SPX_PCIEHBP_PCIEHBPCRC 0xFFFF0000 ///< PCIe HBP CRC
+
+
+//
+// ICC PCR (PID: ICC)
+//
+#define R_PCH_PCR_ICC_TMCSRCCLK 0x1000 ///< Timing Control SRC Clock Register
+#define R_PCH_PCR_ICC_TMCSRCCLK2 0x1004 ///< Timing Control SRC Clock Register 2
+
+
+#define R_PCH_VSPX_ERRCORSTS 0x0110 //< Correctable Error Status Register
+#define B_PCH_VSPX_ERRCORSTS_ANFE BIT13
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h
new file mode 100644
index 0000000000..ad0d54342f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h
@@ -0,0 +1,177 @@
+/** @file
+ Register names for PCH private chipset register
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_PCR_H_
+#define _PCH_REGS_PCR_H_
+
+///
+/// Definition for PCR base address (defined in PchReservedResources.h)
+///
+//#define PCH_PCR_BASE_ADDRESS 0xFD000000
+//#define PCH_PCR_MMIO_SIZE 0x01000000
+/**
+ Definition for PCR address
+ The PCR address is used to the PCR MMIO programming
+**/
+#define PCH_PCR_ADDRESS(Pid, Offset) (PCH_PCR_BASE_ADDRESS | ((UINT8) (Pid) << 16) | (UINT16) (Offset))
+#define PCH_PCR_ADDRESS_BASE(PcrBaseAddress, Pid, Offset) ((UINTN) (PcrBaseAddress) | ((UINT8) (Pid) << 16) | (UINT16) (Offset))
+
+/**
+ Definition for SBI PID
+ The PCH_SBI_PID defines the PID for PCR MMIO programming and PCH SBI programming as well.
+**/
+
+#define PID_BROADCAST1 0xFF
+#define PID_BROADCAST2 0xFE
+//Rsv = 0xFD-0xF0,
+#define PID_DMI 0xEF
+#define PID_ESPISPI 0xEE
+#define PID_ICLK 0xED
+#define PID_MODPHY4 0xEB
+#define PID_MODPHY5 0x10
+#define PID_MODPHY1 0xE9
+#define PID_PMC 0xE8
+//Rsv = 0xE7,
+#define PID_XHCI 0xE6
+#define PID_OTG 0xE5
+#define PID_SPE 0xE4 // Reserved in SKL PCH LP
+#define PID_SPD 0xE3 // Reserved in SKL PCH LP
+#define PID_SPC 0xE2
+#define PID_SPB 0xE1
+#define PID_SPA 0xE0
+#define PID_UPSX8 0x06
+#define PID_UPSX16 0x07
+#define PID_TAP2IOSFSB1 0xDF
+#define PID_TRSB 0xDD
+#define PID_ICC 0xDC
+#define PID_GBE 0xDB
+//Rsv = 0xDA,
+#define PID_SATA 0xD9
+#define PID_SSATA 0x0F
+#define PID_LDO 0x14
+//Rsv = 0xD8,
+#define PID_DSP 0xD7
+//Rsv = 0xD6,
+#define PID_FUSE 0xD5
+#define PID_FSPROX0 0xD4
+#define PID_DRNG 0xD2
+//Rsv = 0xD1,
+#define PID_FIA 0xCF
+#define PID_FIAWM26 0x13
+//Rsv = 0xCE-0xCC,
+#define PID_USB2 0xCA
+//Rsv = 0xC8
+#define PID_LPC 0xC7
+#define PID_SMB 0xC6
+#define PID_P2S 0xC5
+#define PID_ITSS 0xC4
+#define PID_RTC_HOST 0xC3
+//Rsv = 0xC2-0xC1,
+#define PID_PSF5 0x8F
+#define PID_PSF6 0x70
+#define PID_PSF7 0x01
+#define PID_PSF8 0x29
+#define PID_PSF9 0x21
+#define PID_PSF10 0x36
+#define PID_PSF4 0xBD
+#define PID_PSF3 0xBC
+#define PID_PSF2 0xBB
+#define PID_PSF1 0xBA
+#define PID_HOTHARM 0xB9
+#define PID_DCI 0xB8
+#define PID_DFXAGG 0xB7
+#define PID_NPK 0xB6
+//Rsv = 0xB5-0xB1,
+#define PID_MMP0 0xB0
+#define PID_GPIOCOM0 0xAF
+#define PID_GPIOCOM1 0xAE
+#define PID_GPIOCOM2 0xAD
+#define PID_GPIOCOM3 0xAC
+#define PID_GPIOCOM4 0xAB
+#define PID_GPIOCOM5 0x11
+#define PID_MODPHY2 0xA9
+#define PID_MODPHY3 0xA8
+//Rsv = 0xA7-0xA6,
+#define PID_PNCRC 0xA5
+#define PID_PNCRB 0xA4
+#define PID_PNCRA 0xA3
+#define PID_PNCR0 0xA2
+#define PID_CSME15 0x9F // SMS2
+#define PID_CSME14 0x9E // SMS1
+#define PID_CSME13 0x9D // PMT
+#define PID_CSME12 0x9C // PTIO
+#define PID_CSME11 0x9B // PECI
+#define PID_CSME9 0x99 // SMT6
+#define PID_CSME8 0x98 // SMT5
+#define PID_CSME7 0x97 // SMT4
+#define PID_CSME6 0x96 // SMT3
+#define PID_CSME5 0x95 // SMT2
+#define PID_CSME4 0x94 // SMT1 (SMBus Message Transport 1)
+#define PID_CSME3 0x93 // FSC
+#define PID_CSME2 0x92 // USB-R SAI
+#define PID_CSME0 0x90 // CSE
+#define PID_CSME_PSF 0x8F // ME PSF
+//Rsv = 0x88-0x30,
+//#define PID_EVA 0x2F-0x00
+#define PID_CSMERTC 0x8E
+#define PID_IEUART 0x80
+#define PID_IEHOTHAM 0x7F
+#define PID_IEPMT 0x7E
+#define PID_IESSTPECI 0x7D
+#define PID_IEFSC 0x7C
+#define PID_IESMT5 0x7B
+#define PID_IESMT4 0x7A
+#define PID_IESMT3 0x79
+#define PID_IESMT2 0x78
+#define PID_IESMT1 0x77
+#define PID_IESMT0 0x76
+#define PID_IEUSBR 0x74
+#define PID_IEPTIO 0x73
+#define PID_IEIOSFGASKET 0x72
+#define PID_IEPSF 0x70
+#define PID_FPK 0x0A
+#define PID_MP0KR 0x3C
+#define PID_MP1KR 0x3E
+#define PID_RUAUX 0x0B
+#define PID_RUMAIN 0x3B
+#define PID_EC 0x20
+#define PID_CPM2 0x38
+#define PID_CPM1 0x37
+#define PID_CPM0 0x0C
+#define PID_VSPTHERM 0x25
+#define PID_VSPP2SB 0x24
+#define PID_VSPFPK 0x22
+#define PID_VSPCPM2 0x35
+#define PID_VSPCPM1 0x34
+#define PID_VSPCPM0 0x33
+#define PID_MSMROM 0x08
+#define PID_PSTH 0x89
+
+typedef UINT8 PCH_SBI_PID;
+
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h
new file mode 100644
index 0000000000..83a18f92c5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h
@@ -0,0 +1,731 @@
+/** @file
+ Register names for PCH PMC device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_PMC_H_
+#define _PCH_REGS_PMC_H_
+
+//
+//PMC Registers (D31:F2)
+//
+#define PCI_DEVICE_NUMBER_PCH_PMC 31
+#define PCI_FUNCTION_NUMBER_PCH_PMC 2
+
+#define V_PCH_PMC_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_H_PMC_DEVICE_ID 0x9D21
+//
+// LBG Production (PRQ) PMC Device ID
+//
+#define V_PCH_LBG_PROD_PMC_DEVICE_ID 0xA1A1
+//
+// LBG Super SKU (SSX) PMC Device ID
+//
+#define V_PCH_LBG_PMC_DEVICE_ID 0xA221
+
+#define R_PCH_PMC_BM_CX_CNF 0xA8
+#define V_PCH_LP_PMC_DEVICE_ID 0x9D21
+#define R_PCH_PMC_PM_DATA_BAR 0x10
+#define B_PCH_PMC_PM_DATA_BAR 0xFFFFC000
+#define R_PCH_PMC_ACPI_BASE 0x40
+#define B_PCH_PMC_ACPI_BASE_BAR 0xFFFC
+#define R_PCH_PMC_ACPI_CNT 0x44
+#define B_PCH_PMC_ACPI_CNT_PWRM_EN BIT8 ///< PWRM enable
+#define B_PCH_PMC_ACPI_CNT_ACPI_EN BIT7 ///< ACPI eanble
+#define B_PCH_PMC_ACPI_CNT_SCIS (BIT2 | BIT1 | BIT0) ///< SCI IRQ select
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ9 0
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ10 1
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ11 2
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ20 4
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ21 5
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ22 6
+#define V_PCH_PMC_ACPI_CNT_SCIS_IRQ23 7
+#define R_PCH_PMC_PWRM_BASE 0x48
+#define B_PCH_PMC_PWRM_BASE_BAR 0xFFFF0000 ///< PWRM must be 64KB alignment to align the source decode.
+#define R_PCH_PMC_GEN_PMCON_A 0xA0
+#define B_PCH_PMC_GEN_PMCON_A_DC_PP_DIS BIT30
+#define B_PCH_PMC_GEN_PMCON_A_DSX_PP_DIS BIT29
+#define B_PCH_PMC_GEN_PMCON_A_AG3_PP_EN BIT28
+#define B_PCH_PMC_GEN_PMCON_A_SX_PP_EN BIT27
+#define B_PCH_PMC_GEN_PMCON_A_DISB BIT23
+#define B_PCH_PMC_GEN_PMCON_A_MEM_SR BIT21
+#define B_PCH_PMC_GEN_PMCON_A_MS4V BIT18
+#define B_PCH_PMC_GEN_PMCON_A_GBL_RST_STS BIT16
+#define B_PCH_PMC_GEN_PMCON_A_ALLOW_PLL_SD_INC0 BIT13
+#define B_PCH_PMC_GEN_PMCON_A_ALLOW_SPXB_CG_INC0 BIT12
+#define B_PCH_PMC_GEN_PMCON_A_BIOS_PCI_EXP_EN BIT10
+#define B_PCH_PMC_GEN_PMCON_A_PWRBTN_LVL BIT9
+#define B_PCH_PMC_GEN_PMCON_A_ALLOW_L1LOW_C0 BIT7
+#define B_PCH_PMC_GEN_PMCON_A_ALLOW_L1LOW_OPI_ON BIT6
+#define B_PCH_PMC_GEN_PMCON_A_ALLOW_L1LOW_BCLKREQ_ON BIT5
+#define B_PCH_PMC_GEN_PMCON_A_SMI_LOCK BIT4
+#define B_PCH_PMC_GEN_PMCON_A_ESPI_SMI_LOCK BIT3 ///< ESPI SMI lock
+#define B_PCH_PMC_GEN_PMCON_A_PER_SMI_SEL 0x0003
+#define V_PCH_PMC_GEN_PMCON_A_PER_SMI_64S 0x0000
+#define V_PCH_PMC_GEN_PMCON_A_PER_SMI_32S 0x0001
+#define V_PCH_PMC_GEN_PMCON_A_PER_SMI_16S 0x0002
+#define V_PCH_PMC_GEN_PMCON_A_PER_SMI_8S 0x0003
+#define R_PCH_PMC_GEN_PMCON_B 0xA4
+#define B_PCH_PMC_GEN_PMCON_B_SLPSX_STR_POL_LOCK BIT18 ///< Lock down SLP_S3/SLP_S4 Minimum Assertion width
+#define B_PCH_PMC_GEN_PMCON_B_ACPI_BASE_LOCK BIT17 ///< Lock ACPI BASE at 0x40, only cleared by reset when set
+#define B_PCH_PMC_GEN_PMCON_B_PM_DATA_BAR_DIS BIT16
+#define B_PCH_PMC_GEN_PMCON_B_PME_B0_S5_DIS BIT15
+#define B_PCH_PMC_GEN_PMCON_B_SUS_PWR_FLR BIT14
+#define B_PCH_PMC_GEN_PMCON_B_WOL_EN_OVRD BIT13
+#define B_PCH_PMC_GEN_PMCON_B_DISABLE_SX_STRETCH BIT12
+#define B_PCH_PMC_GEN_PMCON_B_SLP_S3_MAW 0xC00
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S3_MAW_60US 0x000
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S3_MAW_1MS 0x400
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S3_MAW_50MS 0x800
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S3_MAW_2S 0xC00
+#define B_PCH_PMC_GEN_PMCON_B_HOST_RST_STS BIT9
+#define B_PCH_PMC_GEN_PMCON_B_SWSMI_RTSL 0xC0
+#define V_PCH_PMC_GEN_PMCON_B_SWSMI_RTSL_64MS 0xC0
+#define V_PCH_PMC_GEN_PMCON_B_SWSMI_RTSL_32MS 0x80
+#define V_PCH_PMC_GEN_PMCON_B_SWSMI_RTSL_16MS 0x40
+#define V_PCH_PMC_GEN_PMCON_B_SWSMI_RTSL_1_5MS 0x00
+#define B_PCH_PMC_GEN_PMCON_B_SLP_S4_MAW 0x30
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S4_MAW_1S 0x30
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S4_MAW_2S 0x20
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S4_MAW_3S 0x10
+#define V_PCH_PMC_GEN_PMCON_B_SLP_S4_MAW_4S 0x00
+#define B_PCH_PMC_GEN_PMCON_B_SLP_S4_ASE BIT3
+#define B_PCH_PMC_GEN_PMCON_B_RTC_PWR_STS BIT2
+#define B_PCH_PMC_GEN_PMCON_B_PWR_FLR BIT1
+#define B_PCH_PMC_GEN_PMCON_B_AFTERG3_EN BIT0
+#define R_PCH_PMC_BM_CX_CNF 0xA8
+#define B_PCH_PMC_BM_CX_CNF_STORAGE_BREAK_EN BIT31
+#define B_PCH_PMC_BM_CX_CNF_PCIE_BREAK_EN BIT30
+#define B_PCH_PMC_BM_CX_CNF_EHCI_BREAK_EN BIT26
+#define B_PCH_PMC_BM_CX_CNF_AZ_BREAK_EN BIT24
+#define B_PCH_PMC_BM_CX_CNF_DPSN_BREAK_EN BIT19
+#define B_PCH_PMC_BM_CX_CNF_XHCI_BREAK_EN BIT17
+#define B_PCH_PMC_BM_CX_CNF_SATA3_BREAK_EN BIT16
+#define B_PCH_PMC_BM_CX_CNF_SCRATCHPAD BIT15
+#define B_PCH_PMC_BM_CX_CNF_PHOLD_BM_STS_BLOCK BIT14
+#define B_PCH_PMC_BM_CX_CNF_MASK_CF BIT11
+#define B_PCH_PMC_BM_CX_CNF_BM_STS_ZERO_EN BIT10
+#define B_PCH_PMC_BM_CX_CNF_PM_SYNC_MSG_MODE BIT9
+#define R_PCH_PMC_ETR3 0xAC
+#define B_PCH_PMC_ETR3_CF9LOCK BIT31 ///< CF9h Lockdown
+#define B_PCH_PMC_ETR3_USB_CACHE_DIS BIT21
+#define B_PCH_PMC_ETR3_CF9GR BIT20 ///< CF9h Global Reset
+#define B_PCH_PMC_ETR3_SKIP_HOST_RST_HS BIT19
+#define B_PCH_PMC_ETR3_CWORWRE BIT18
+#define R_PCH_PMC_PMC_THROT_1 0xB0
+#define B_PCH_PMC_PMC_PMC_THROT_LOCK BIT15
+#define B_PCH_PMC_PMC_THROT_1_VRALERT_EN BIT0
+#define R_PCH_PMC_MDAP 0xC0
+#define B_PCH_PMC_MDAP_MDAP_POLICY_EN BIT31
+#define B_PCH_PMC_MDAP_PDMA_EN BIT30
+#define B_PCH_PMC_MDAP_AUTO_POLICY_CTL BIT29
+#define V_PCH_PMC_MDAP_MDAP_VALUE 0x1FFFF
+#define R_PCH_PMC_MANID 0xF8
+
+//
+// ACPI and legacy I/O register offsets from ACPIBASE
+//
+#define R_ACPI_IO_PM1_STS 0x00
+#define S_ACPI_IO_PM1_STS 2
+#define B_ACPI_IO_PM1_STS_WAK 0x8000
+#define B_ACPI_IO_PM1_STS_PRBTNOR 0x0800
+#define B_ACPI_IO_PM1_STS_RTC 0x0400
+#define B_ACPI_IO_PM1_STS_PWRBTN 0x0100
+#define B_ACPI_IO_PM1_STS_GBL 0x0020
+#define B_ACPI_IO_PM1_STS_BM 0x0010
+#define B_ACPI_IO_PM1_STS_TMROF 0x0001
+#define N_ACPI_IO_PM1_STS_WAK 15
+#define N_ACPI_IO_PM1_STS_PRBTNOR 11
+#define N_ACPI_IO_PM1_STS_RTC 10
+#define N_ACPI_IO_PM1_STS_PWRBTN 8
+#define N_ACPI_IO_PM1_STS_GBL 5
+#define N_ACPI_IO_PM1_STS_BM 4
+#define N_ACPI_IO_PM1_STS_TMROF 0
+
+#define R_ACPI_IO_PM1_EN 0x02
+#define S_ACPI_IO_PM1_EN 2
+#define B_ACPI_IO_PM1_EN_PCIEXP_WAKE_DIS 0x4000
+#define B_ACPI_IO_PM1_EN_RTC 0x0400
+#define B_ACPI_IO_PM1_EN_PWRBTN 0x0100
+#define B_ACPI_IO_PM1_EN_GBL 0x0020
+#define B_ACPI_IO_PM1_EN_TMROF 0x0001
+#define N_ACPI_IO_PM1_EN_RTC 10
+#define N_ACPI_IO_PM1_EN_PWRBTN 8
+#define N_ACPI_IO_PM1_EN_GBL 5
+#define N_ACPI_IO_PM1_EN_TMROF 0
+
+#define R_ACPI_IO_PM1_CNT 0x04
+#define S_ACPI_IO_PM1_CNT 4
+#define B_ACPI_IO_PM1_CNT_SLP_EN 0x00002000
+#define B_ACPI_IO_PM1_CNT_SLP_TYP 0x00001C00
+#define V_ACPI_IO_PM1_CNT_S0 0x00000000
+#define V_ACPI_IO_PM1_CNT_S1 0x00000400
+#define V_ACPI_IO_PM1_CNT_S3 0x00001400
+#define V_ACPI_IO_PM1_CNT_S4 0x00001800
+#define V_ACPI_IO_PM1_CNT_S5 0x00001C00
+#define B_ACPI_IO_PM1_CNT_GBL_RLS 0x00000004
+#define B_ACPI_IO_PM1_CNT_BM_RLD 0x00000002
+#define B_ACPI_IO_PM1_CNT_SCI_EN 0x00000001
+
+#define R_ACPI_IO_PM1_TMR 0x08
+#define V_ACPI_IO_TMR_FREQUENCY 3579545
+#define B_ACPI_IO_PM1_TMR_VAL 0xFFFFFF
+#define V_ACPI_IO_PM1_TMR_MAX_VAL 0x1000000 ///< The timer is 24 bit overflow
+
+#define R_ACPI_IO_SMI_EN 0x30
+#define S_ACPI_IO_SMI_EN 4
+#define B_ACPI_IO_SMI_EN_LEGACY_USB3 BIT31
+#define B_ACPI_IO_SMI_EN_GPIO_UNLOCK_SMI BIT27
+#define B_ACPI_IO_SMI_EN_IE_SMI BIT23
+#define B_ACPI_IO_SMI_EN_INTEL_USB2 BIT18
+#define B_ACPI_IO_SMI_EN_LEGACY_USB2 BIT17
+#define B_ACPI_IO_SMI_EN_PERIODIC BIT14
+#define B_ACPI_IO_SMI_EN_TCO BIT13
+#define B_ACPI_IO_SMI_EN_MCSMI BIT11
+#define B_ACPI_IO_SMI_EN_BIOS_RLS BIT7
+#define B_ACPI_IO_SMI_EN_SWSMI_TMR BIT6
+#define B_ACPI_IO_SMI_EN_APMC BIT5
+#define B_ACPI_IO_SMI_EN_ON_SLP_EN BIT4
+#define B_ACPI_IO_SMI_EN_LEGACY_USB BIT3
+#define B_ACPI_IO_SMI_EN_BIOS BIT2
+#define B_ACPI_IO_SMI_EN_EOS BIT1
+#define B_ACPI_IO_SMI_EN_GBL_SMI BIT0
+#define N_ACPI_IO_SMI_EN_LEGACY_USB3 31
+#define N_ACPI_IO_SMI_EN_ESPI 28
+#define N_ACPI_IO_SMI_EN_GPIO_UNLOCK 27
+#define N_ACPI_IO_SMI_EN_INTEL_USB2 18
+#define N_ACPI_IO_SMI_EN_LEGACY_USB2 17
+#define N_ACPI_IO_SMI_EN_PERIODIC 14
+#define N_ACPI_IO_SMI_EN_TCO 13
+#define N_ACPI_IO_SMI_EN_MCSMI 11
+#define N_ACPI_IO_SMI_EN_BIOS_RLS 7
+#define N_ACPI_IO_SMI_EN_SWSMI_TMR 6
+#define N_ACPI_IO_SMI_EN_APMC 5
+#define N_ACPI_IO_SMI_EN_ON_SLP_EN 4
+#define N_ACPI_IO_SMI_EN_LEGACY_USB 3
+#define N_ACPI_IO_SMI_EN_BIOS 2
+#define N_ACPI_IO_SMI_EN_EOS 1
+#define N_ACPI_IO_SMI_EN_GBL_SMI 0
+
+#define R_ACPI_IO_SMI_STS 0x34
+#define S_ACPI_IO_SMI_STS 4
+#define B_ACPI_IO_SMI_STS_LEGACY_USB3 BIT31
+#define B_ACPI_IO_SMI_STS_GPIO_UNLOCK BIT27
+#define B_ACPI_IO_SMI_STS_SPI BIT26
+#define B_ACPI_IO_SMI_STS_IE_SMI BIT23
+#define B_ACPI_IO_SMI_STS_MONITOR BIT21
+#define B_ACPI_IO_SMI_STS_PCI_EXP BIT20
+#define B_ACPI_IO_SMI_STS_PATCH BIT19
+#define B_ACPI_IO_SMI_STS_INTEL_USB2 BIT18
+#define B_ACPI_IO_SMI_STS_LEGACY_USB2 BIT17
+#define B_ACPI_IO_SMI_STS_SMBUS BIT16
+#define B_ACPI_IO_SMI_STS_SERIRQ BIT15
+#define B_ACPI_IO_SMI_STS_PERIODIC BIT14
+#define B_ACPI_IO_SMI_STS_TCO BIT13
+#define B_ACPI_IO_SMI_STS_DEVMON BIT12
+#define B_ACPI_IO_SMI_STS_MCSMI BIT11
+#define B_ACPI_IO_SMI_STS_GPIO_SMI BIT10
+#define B_ACPI_IO_SMI_STS_GPE1 BIT10
+#define B_ACPI_IO_SMI_STS_GPE0 BIT9
+#define B_ACPI_IO_SMI_STS_PM1_STS_REG BIT8
+#define B_ACPI_IO_SMI_STS_SWSMI_TMR BIT6
+#define B_ACPI_IO_SMI_STS_APM BIT5
+#define B_ACPI_IO_SMI_STS_ON_SLP_EN BIT4
+#define B_ACPI_IO_SMI_STS_LEGACY_USB BIT3
+#define B_ACPI_IO_SMI_STS_BIOS BIT2
+#define N_ACPI_IO_SMI_STS_LEGACY_USB3 31
+#define N_ACPI_IO_SMI_STS_ESPI 28
+#define N_ACPI_IO_SMI_STS_GPIO_UNLOCK 27
+#define N_ACPI_IO_SMI_STS_SPI 26
+#define N_ACPI_IO_SMI_STS_MONITOR 21
+#define N_ACPI_IO_SMI_STS_PCI_EXP 20
+#define N_ACPI_IO_SMI_STS_PATCH 19
+#define N_ACPI_IO_SMI_STS_INTEL_USB2 18
+#define N_ACPI_IO_SMI_STS_LEGACY_USB2 17
+#define N_ACPI_IO_SMI_STS_SMBUS 16
+#define N_ACPI_IO_SMI_STS_SERIRQ 15
+#define N_ACPI_IO_SMI_STS_PERIODIC 14
+#define N_ACPI_IO_SMI_STS_TCO 13
+#define N_ACPI_IO_SMI_STS_DEVMON 12
+#define N_ACPI_IO_SMI_STS_MCSMI 11
+#define N_ACPI_IO_SMI_STS_GPIO_SMI 10
+#define N_ACPI_IO_SMI_STS_GPE0 9
+#define N_ACPI_IO_SMI_STS_PM1_STS_REG 8
+#define N_ACPI_IO_SMI_STS_SWSMI_TMR 6
+#define N_ACPI_IO_SMI_STS_APM 5
+#define N_ACPI_IO_SMI_STS_ON_SLP_EN 4
+#define N_ACPI_IO_SMI_STS_LEGACY_USB 3
+#define N_ACPI_IO_SMI_STS_BIOS 2
+
+#define R_ACPI_IO_GPE_CNTL 0x40
+#define B_ACPI_IO_GPE_CNTL_SWGPE_CTRL BIT17
+
+#define R_ACPI_IO_DEVACT_STS 0x44
+#define S_ACPI_IO_DEVACT_STS 2
+#define B_ACPI_IO_DEVACT_STS_MASK 0x13E1
+#define B_ACPI_IO_DEVACT_STS_KBC 0x1000
+#define B_ACPI_IO_DEVACT_STS_PIRQDH 0x0200
+#define B_ACPI_IO_DEVACT_STS_PIRQCG 0x0100
+#define B_ACPI_IO_DEVACT_STS_PIRQBF 0x0080
+#define B_ACPI_IO_DEVACT_STS_PIRQAE 0x0040
+#define B_ACPI_IO_DEVACT_STS_D0_TRP 0x0001
+#define N_ACPI_IO_DEVACT_STS_KBC 12
+#define N_ACPI_IO_DEVACT_STS_PIRQDH 9
+#define N_ACPI_IO_DEVACT_STS_PIRQCG 8
+#define N_ACPI_IO_DEVACT_STS_PIRQBF 7
+#define N_ACPI_IO_DEVACT_STS_PIRQAE 6
+
+#define R_ACPI_IO_PM2_CNT 0x50
+#define B_ACPI_IO_PM2_CNT_ARB_DIS 0x01
+
+#define R_ACPI_IO_OC_WDT_CTL 0x54
+#define B_ACPI_IO_OC_WDT_CTL_RLD BIT31
+#define B_ACPI_IO_OC_WDT_CTL_ICCSURV_STS BIT25
+#define B_ACPI_IO_OC_WDT_CTL_NO_ICCSURV_STS BIT24
+#define B_ACPI_IO_OC_WDT_CTL_FORCE_ALL BIT15
+#define B_ACPI_IO_OC_WDT_CTL_EN BIT14
+#define B_ACPI_IO_OC_WDT_CTL_ICCSURV BIT13
+#define B_ACPI_IO_OC_WDT_CTL_LCK BIT12
+#define B_ACPI_IO_OC_WDT_CTL_TOV_MASK 0x3FF
+#define B_ACPI_IO_OC_WDT_CTL_FAILURE_STS BIT23
+#define B_ACPI_IO_OC_WDT_CTL_UNXP_RESET_STS BIT22
+#define B_ACPI_IO_OC_WDT_CTL_AFTER_POST 0x3F0000
+#define V_ACPI_IO_OC_WDT_CTL_STATUS_FAILURE 1
+#define V_ACPI_IO_OC_WDT_CTL_STATUS_OK 0
+
+#define R_ACPI_IO_GPE0_STS_127_96 0x8C
+#define S_ACPI_IO_GPE0_STS_127_96 4
+#define B_ACPI_IO_GPE0_STS_127_96_WADT BIT18
+#define B_ACPI_IO_GPE0_STS_127_96_USB_CON_DSX_STS BIT17
+#define B_ACPI_IO_GPE0_STS_127_96_LAN_WAKE BIT16
+#define B_ACPI_IO_GPE0_STS_127_96_GPIO_TIER_2 BIT15
+#define B_ACPI_IO_GPE0_STS_127_96_PME_B0 BIT13
+#define B_ACPI_IO_GPE0_STS_127_96_ME_SCI BIT12
+#define B_ACPI_IO_GPE0_STS_127_96_PME BIT11
+#define B_ACPI_IO_GPE0_STS_127_96_BATLOW BIT10
+#define B_ACPI_IO_GPE0_STS_127_96_PCI_EXP BIT9
+#define B_ACPI_IO_GPE0_STS_127_96_RI BIT8
+#define B_ACPI_IO_GPE0_STS_127_96_SMB_WAK BIT7
+#define B_ACPI_IO_GPE0_STS_127_96_TC0SCI BIT6
+#define B_ACPI_IO_GPE0_STS_127_96_SWGPE BIT2
+#define B_ACPI_IO_GPE0_STS_127_96_HOT_PLUG BIT1
+#define N_ACPI_IO_GPE0_STS_127_96_GPIO_TIER_2 15
+#define N_ACPI_IO_GPE0_STS_127_96_PME_B0 13
+#define N_ACPI_IO_GPE0_STS_127_96_PME 11
+#define N_ACPI_IO_GPE0_STS_127_96_BATLOW 10
+#define N_ACPI_IO_GPE0_STS_127_96_PCI_EXP 9
+#define N_ACPI_IO_GPE0_STS_127_96_RI 8
+#define N_ACPI_IO_GPE0_STS_127_96_SMB_WAK 7
+#define N_ACPI_IO_GPE0_STS_127_96_TC0SCI 6
+#define N_ACPI_IO_GPE0_STS_127_96_SWGPE 2
+#define N_ACPI_IO_GPE0_STS_127_96_HOT_PLUG 1
+
+
+#define R_ACPI_IO_GPE0_EN_31_0 0x90
+#define R_ACPI_IO_GPE0_EN_63_31 0x94
+#define R_ACPI_IO_GPE0_EN_94_64 0x98
+#define R_ACPI_IO_GPE0_EN_127_96 0x9C
+#define S_ACPI_IO_GPE0_EN_127_96 4
+#define B_ACPI_IO_GPE0_EN_127_96_WADT BIT18
+#define B_ACPI_IO_GPE0_EN_127_96_USB_CON_DSX_EN BIT17
+#define B_ACPI_IO_GPE0_EN_127_96_LAN_WAKE BIT16
+#define B_ACPI_IO_GPE0_EN_127_96_PME_B0 BIT13
+#define B_ACPI_IO_GPE0_EN_127_96_ME_SCI BIT12
+#define B_ACPI_IO_GPE0_EN_127_96_PME BIT11
+#define B_ACPI_IO_GPE0_EN_127_96_BATLOW BIT10
+#define B_ACPI_IO_GPE0_EN_127_96_PCI_EXP BIT9
+#define B_ACPI_IO_GPE0_EN_127_96_RI BIT8
+#define B_ACPI_IO_GPE0_EN_127_96_TC0SCI BIT6
+#define B_ACPI_IO_GPE0_EN_127_96_SWGPE BIT2
+#define B_ACPI_IO_GPE0_EN_127_96_HOT_PLUG BIT1
+#define N_ACPI_IO_GPE0_EN_127_96_PME_B0 13
+#define N_ACPI_IO_GPE0_EN_127_96_USB3 12
+#define N_ACPI_IO_GPE0_EN_127_96_PME 11
+#define N_ACPI_IO_GPE0_EN_127_96_BATLOW 10
+#define N_ACPI_IO_GPE0_EN_127_96_PCI_EXP 9
+#define N_ACPI_IO_GPE0_EN_127_96_RI 8
+#define N_ACPI_IO_GPE0_EN_127_96_TC0SCI 6
+#define N_ACPI_IO_GPE0_EN_127_96_SWGPE 2
+#define N_ACPI_IO_GPE0_EN_127_96_HOT_PLUG 1
+
+
+//
+// TCO register I/O map
+//
+#define R_TCO_IO_RLD 0x0
+#define R_TCO_IO_DAT_IN 0x2
+#define R_TCO_IO_DAT_OUT 0x3
+#define R_TCO_IO_TCO1_STS 0x04
+#define S_TCO_IO_TCO1_STS 2
+#define B_TCO_IO_TCO1_STS_DMISERR BIT12
+#define B_TCO_IO_TCO1_STS_DMISMI BIT10
+#define B_TCO_IO_TCO1_STS_DMISCI BIT9
+#define B_TCO_IO_TCO1_STS_BIOSWR BIT8
+#define B_TCO_IO_TCO1_STS_NEWCENTURY BIT7
+#define B_TCO_IO_TCO1_STS_TIMEOUT BIT3
+#define B_TCO_IO_TCO1_STS_TCO_INT BIT2
+#define B_TCO_IO_TCO1_STS_SW_TCO_SMI BIT1
+#define B_TCO_IO_TCO1_STS_NMI2SMI BIT0
+#define N_TCO_IO_TCO1_STS_DMISMI 10
+#define N_TCO_IO_TCO1_STS_BIOSWR 8
+#define N_TCO_IO_TCO1_STS_NEWCENTURY 7
+#define N_TCO_IO_TCO1_STS_TIMEOUT 3
+#define N_TCO_IO_TCO1_STS_SW_TCO_SMI 1
+#define N_TCO_IO_TCO1_STS_NMI2SMI 0
+
+#define R_TCO_IO_TCO2_STS 0x06
+#define S_TCO_IO_TCO2_STS 2
+#define B_TCO_IO_TCO2_STS_SMLINK_SLV_SMI BIT4
+#define B_TCO_IO_TCO2_STS_BAD_BIOS BIT3
+#define B_TCO_IO_TCO2_STS_BOOT BIT2
+#define B_TCO_IO_TCO2_STS_SECOND_TO BIT1
+#define B_TCO_IO_TCO2_STS_INTRD_DET BIT0
+#define N_TCO_IO_TCO2_STS_INTRD_DET 0
+
+#define R_TCO_IO_TCO1_CNT 0x08
+#define S_TCO_IO_TCO1_CNT 2
+#define B_TCO_IO_TCO1_CNT_LOCK BIT12
+#define B_TCO_IO_TCO1_CNT_TMR_HLT BIT11
+#define B_TCO_IO_TCO1_CNT_NMI2SMI_EN BIT9
+#define B_TCO_IO_TCO1_CNT_NMI_NOW BIT8
+#define N_TCO_IO_TCO1_CNT_NMI2SMI_EN 9
+
+#define R_TCO_IO_TCO2_CNT 0x0A
+#define S_TCO_IO_TCO2_CNT 2
+#define B_TCO_IO_TCO2_CNT_OS_POLICY 0x0030
+#define B_TCO_IO_TCO2_CNT_GPI11_ALERT_DISABLE 0x0008
+#define B_TCO_IO_TCO2_CNT_INTRD_SEL 0x0006
+#define N_TCO_IO_TCO2_CNT_INTRD_SEL 2
+
+#define R_TCO_IO_MESSAGE1 0x0C
+#define R_TCO_IO_MESSAGE2 0x0D
+#define R_TCO_IO_TWDS 0x0E ///< TCO_WDSTATUS register.
+#define R_TCO_IO_LE 0x10 ///< LEGACY_ELIM register
+#define B_TCO_IO_LE_IRQ12_CAUSE BIT1
+#define B_TCO_IO_LE_IRQ1_CAUSE BIT0
+#define R_TCO_IO_TMR 0x12
+
+//
+// PWRM Registers
+//
+#define R_PCH_WADT_AC 0x0 ///< Wake Alarm Device Timer: AC
+#define R_PCH_WADT_DC 0x4 ///< Wake Alarm Device Timer: DC
+#define R_PCH_WADT_EXP_AC 0x8 ///< Wake Alarm Device Expired Timer: AC
+#define R_PCH_WADT_EXP_DC 0xC ///< Wake Alarm Device Expired Timer: DC
+#define R_PCH_PWRM_PRSTS 0x10 ///< Power and Reset Status
+#define B_PCH_PWRM_PRSTS_PM_WD_TMR BIT15 ///< Power Management Watchdog Timer
+#define B_PCH_PWRM_PRSTS_VE_WD_TMR_STS BIT7 ///< VE Watchdog Timer Status
+#define B_PCH_PWRM_PRSTS_ME_WD_TMR_STS BIT6 ///< Management Engine Watchdog Timer Status
+#define B_PCH_PWRM_PRSTS_WOL_OVR_WK_STS BIT5
+#define B_PCH_PWRM_PRSTS_FIELD_1 BIT4
+#define B_PCH_PWRM_PRSTS_ME_HOST_PWRDN BIT3
+#define B_PCH_PWRM_PRSTS_ME_HRST_WARM_STS BIT2
+#define B_PCH_PWRM_PRSTS_ME_HRST_COLD_STS BIT1
+#define B_PCH_PWRM_PRSTS_ME_WAKE_STS BIT0
+#define R_PCH_PWRM_14 0x14
+#define R_PCH_PWRM_CFG 0x18 ///< Power Management Configuration
+#define V_PCH_PWRM_CFG_TIMING_T581_10MS (BIT0 | BIT1) ///< Timing t581 - 10ms
+#define B_PCH_PWRM_CFG_ALLOW_24_OSC_SD BIT29 ///< Allow 24MHz Crystal Oscillator Shutdown
+#define B_PCH_PWRM_CFG_ALLOW_USB2_CORE_PG BIT25 ///< Allow USB2 Core Power Gating
+#define B_PCH_PWRM_CFG_RTC_DS_WAKE_DIS BIT21 ///< RTC Wake from Deep S4/S5 Disable
+#define B_PCH_PWRM_CFG_SSMAW_MASK (BIT19 | BIT18) ///< SLP_SUS# Min Assertion Width
+#define V_PCH_PWRM_CFG_SSMAW_4S (BIT19 | BIT18) ///< 4 seconds
+#define V_PCH_PWRM_CFG_SSMAW_1S BIT19 ///< 1 second
+#define V_PCH_PWRM_CFG_SSMAW_0_5S BIT18 ///< 0.5 second (500ms)
+#define V_PCH_PWRM_CFG_SSMAW_0S 0 ///< 0 second
+#define B_PCH_PWRM_CFG_SAMAW_MASK (BIT17 | BIT16) ///< SLP_A# Min Assertion Width
+#define V_PCH_PWRM_CFG_SAMAW_2S (BIT17 | BIT16) ///< 2 seconds
+#define V_PCH_PWRM_CFG_SAMAW_98ms BIT17 ///< 98ms
+#define V_PCH_PWRM_CFG_SAMAW_4S BIT16 ///< 4 seconds
+#define V_PCH_PWRM_CFG_SAMAW_0S 0 ///< 0 second
+#define B_PCH_PWRM_CFG_RPCD_MASK (BIT9 | BIT8) ///< Reset Power Cycle Duration
+#define V_PCH_PWRM_CFG_RPCD_1S (BIT9 | BIT8) ///< 1-2 seconds
+#define V_PCH_PWRM_CFG_RPCD_2S BIT9 ///< 2-3 seconds
+#define V_PCH_PWRM_CFG_RPCD_3S BIT8 ///< 3-4 seconds
+#define V_PCH_PWRM_CFG_RPCD_4S 0 ///< 4-5 seconds (Default)
+#define R_PCH_PWRM_MTPMC 0x20 ///< Message to PMC
+#define V_PCH_PWRM_MTPMC_COMMAND_PG_LANE_0_15 0xE ///< Command to override lanes 0-15 power gating
+#define V_PCH_PWRM_MTPMC_COMMAND_PG_LANE_16_31 0xF ///< Command to override lanes 16-31 power gating
+#define B_PCH_PWRM_MTPMC_PG_CMD_DATA 0xFFFF0000 ///< Data part of PowerGate Message to PMC
+#define N_PCH_PWRM_MTPMC_PG_CMD_DATA 16
+#define R_PCH_PWRM_PCH_PM_STS 0x1C ///< PCH Power Management Status
+#define B_PCH_PWRM_PCH_PM_STS_ADR_RST_STS BIT16 ///< ADR Reset Status
+#define R_PCH_PWRM_S0_S1_PWRGATE_POL 0x24 ///< S0/S1 Power Gating Policies
+#define R_PCH_PWRM_S3_PWRGATE_POL 0x28 ///< S3 Power Gating Policies
+#define B_PCH_PWRM_S3DC_GATE_SUS BIT1 ///< Deep S3 Enable in DC Mode
+#define B_PCH_PWRM_S3AC_GATE_SUS BIT0 ///< Deep S3 Enable in AC Mode
+#define R_PCH_PWRM_S4_PWRGATE_POL 0x2C ///< Deep S4 Power Policies
+#define B_PCH_PWRM_S4DC_GATE_SUS BIT1 ///< Deep S4 Enable in DC Mode
+#define B_PCH_PWRM_S4AC_GATE_SUS BIT0 ///< Deep S4 Enable in AC Mode
+#define R_PCH_PWRM_S5_PWRGATE_POL 0x30 ///< Deep S5 Power Policies
+#define B_PCH_PWRM_S5DC_GATE_SUS BIT15 ///< Deep S5 Enable in DC Mode
+#define B_PCH_PWRM_S5AC_GATE_SUS BIT14 ///< Deep S5 Enable in AC Mode
+#define R_PCH_PWRM_DSX_CFG 0x34 ///< Deep SX Configuration
+#define B_PCH_PWRM_DSX_CFG_WAKE_PIN_DSX_EN BIT2 ///< WAKE# Pin DeepSx Enable
+#define B_PCH_PWRM_DSX_CFG_ACPRES_PD_DSX_DIS BIT1 ///< AC_PRESENT pin pulldown in DeepSx disable
+#define B_PCH_PWRM_DSX_CFG_LAN_WAKE_EN BIT0 ///< LAN_WAKE Pin DeepSx Enable
+#define R_PCH_PWRM_CFG2 0x3C ///< Power Management Configuration Reg 2
+#define B_PCH_PWRM_CFG2_PBOP (BIT31 | BIT30 | BIT29) ///< Power Button Override Period (PBOP)
+#define N_PCH_PWRM_CFG2_PBOP 29 ///< Power Button Override Period (PBOP)
+#define B_PCH_PWRM_CFG2_PB_DIS BIT28 ///< Power Button Native Mode Disable (PB_DIS)
+#define B_PCH_PWRM_CFG2_DRAM_RESET_CTL BIT26 ///< DRAM RESET# control
+#define R_PCH_PWRM_EN_SN_SLOW_RING 0x48 ///< Enable Snoop Request to SLOW_RING
+#define R_PCH_PWRM_EN_SN_SLOW_RING2 0x4C ///< Enable Snoop Request to SLOW_RING 2nd Reg
+#define R_PCH_PWRM_EN_SN_SA 0x50 ///< Enable Snoop Request to SA
+#define R_PCH_PWRM_EN_SN_SA2 0x54 ///< Enable Snoop Request to SA 2nd Reg
+#define R_PCH_PWRM_EN_SN_SLOW_RING_CF 0x58 ///< Enable Snoop Request to SLOW_RING_CF
+#define R_PCH_PWRM_EN_NS_SA 0x68 ///< Enable Non-Snoop Request to SA
+#define R_PCH_PWRM_EN_CW_SLOW_RING 0x80 ///< Enable Clock Wake to SLOW_RING
+#define R_PCH_PWRM_EN_CW_SLOW_RING2 0x84 ///< Enable Clock Wake to SLOW_RING 2nd Reg
+#define R_PCH_PWRM_EN_CW_SA 0x88 ///< Enable Clock Wake to SA
+#define R_PCH_PWRM_EN_CW_SA2 0x8C ///< Enable Clock Wake to SA 2nd Reg
+#define R_PCH_PWRM_EN_CW_SLOW_RING_CF 0x98 ///< Enable Clock Wake to SLOW_RING_CF
+#define R_PCH_PWRM_EN_PA_SLOW_RING 0xA8 ///< Enable Pegged Active to SLOW_RING
+#define R_PCH_PWRM_EN_PA_SLOW_RING2 0xAC ///< Enable Pegged Active to SLOW_RING 2nd Reg
+#define R_PCH_PWRM_EN_PA_SA 0xB0 ///< Enable Pegged Active to SA
+#define R_PCH_PWRM_EN_PA_SA2 0xB4 ///< Enable Pegged Active to SA 2nd Reg
+#define R_PCH_PWRM_EN_MISC_EVENT 0xC0 ///< Enable Misc PM_SYNC Events
+#define R_PCH_PWRM_PMSYNC_TPR_CONFIG 0xC4
+#define B_PCH_PWRM_PMSYNC_TPR_CONFIG_LOCK BIT31
+#define B_PCH_PWRM_PMSYNC_PCH2CPU_TT_EN BIT26
+#define B_PCH_PWRM_PMSYNC_PCH2CPU_TT_STATE (BIT25 | BIT24)
+#define N_PCH_PWRM_PMSYNC_PCH2CPU_TT_STATE 24
+#define V_PCH_PWRM_PMSYNC_PCH2CPU_TT_STATE_1 1
+#define R_PCH_PWRM_PMSYNC_MISC_CFG 0xC8
+#define B_PCH_PWRM_PMSYNC_PM_SYNC_LOCK BIT15 ///< PM_SYNC Configuration Lock
+#define B_PCH_PWRM_PMSYNC_GPIO_D_SEL BIT11
+#define B_PCH_PWRM_PMSYNC_GPIO_C_SEL BIT10
+#define B_PCH_PWRM_PMSYNC_GPIO_B_SEL BIT9
+#define B_PCH_PWRM_PMSYNC_GPIO_A_SEL BIT8
+#define R_PCH_PWRM_PMSYNC_TPR_CONFIG2 0xCC
+
+#define R_PCH_PWRM_PM_SYNC_MODE 0xD4
+#define B_PCH_PWRM_PM_SYNC_MODE_GPIO_B BIT13
+#define B_PCH_PWRM_PM_SYNC_MODE_GPIO_C BIT14
+#define PM_SYNC_GPIO_B 0
+#define PM_SYNC_GPIO_C 1
+#define B_PCH_PWRM_PM_SYNC_MODE_32_64_WR BIT29
+#define R_PCH_PWRM_PM_SYNC_MODE_C0 0xF4
+#define R_PCH_PWRM_PM_SYNC_STATE_HYS 0xD0 ///< PM_SYNC State Hysteresis
+#define R_PCH_PWRM_PM_SYNC_MODE 0xD4 ///< PM_SYNC Pin Mode
+#define R_PCH_PWRM_CFG3 0xE0 ///< Power Management Configuration Reg 3
+#define B_PCH_PWRM_CFG3_DSX_WLAN_PP_EN BIT16 ///< Deep-Sx WLAN Phy Power Enable
+#define B_PCH_PWRM_CFG3_HOST_WLAN_PP_EN BIT17 ///< Host Wireless LAN Phy Power Enable
+#define B_PCH_PWRM_CFG3_PWRG_LOCK BIT2 ///< Lock power gating override messages
+#define B_PCH_PWRM_CFG3_GR_PFET_DUR_ON_DEF (BIT25 | BIT24)
+#define N_PCH_PWRM_CFG3_GR_PFET_DUR_ON_DEF 24
+#define V_PCH_PWRM_CFG3_GR_PFET_DUR_ON_DEF_1US 0
+#define V_PCH_PWRM_CFG3_GR_PFET_DUR_ON_DEF_2US 1
+#define V_PCH_PWRM_CFG3_GR_PFET_DUR_ON_DEF_5US 2
+#define V_PCH_PWRM_CFG3_GR_PFET_DUR_ON_DEF_20US 3
+#define R_PCH_PWRM_PM_DOWN_PPB_CFG 0xE4 ///< PM_DOWN PCH_POWER_BUDGET CONFIGURATION
+#define R_PCH_PWRM_CFG4 0xE8 ///< Power Management Configuration Reg 4
+#define B_PCH_PWRM_CFG4_U2_PHY_PG_EN BIT30 ///< USB2 PHY SUS Well Power Gating Enable
+#define B_PCH_PWRM_CFG4_CPU_IOVR_RAMP_DUR (0x000001FF) ///< CPU I/O VR Ramp Duration, [8:0]
+#define N_PCH_PWRM_CFG4_CPU_IOVR_RAMP_DUR 0
+#define V_PCH_PWRM_CFG4_CPU_IOVR_RAMP_DUR_70US 0x007
+#define V_PCH_PWRM_CFG4_CPU_IOVR_RAMP_DUR_240US 0x018
+#define R_PCH_PWRM_CPU_EPOC 0xEC
+#define R_PCH_PWRM_ADR_EN 0xF0
+#define B_PCH_PWRM_ADR_EN_ADR_FEAT_EN BIT0
+#define B_PCH_PWRM_ADR_EN_CTWDT_ADR_EN BIT9
+#define B_PCH_PWRM_ADR_EN_SYSPWR_ADR_EN BIT12
+#define B_PCH_PWRM_ADR_EN_OCWDT_ADR_EN BIT13
+#define B_PCH_PWRM_ADR_EN_PMC_PARERR_ADR_EN BIT14
+#define B_PCH_PWRM_ADR_EN_HPR_ADR_EN BIT28
+#define B_PCH_PWRM_ADR_EN_ADR_GPIO_SEL_MASK BIT31|BIT30
+#define B_PCH_PWRM_ADR_EN_ADR_GPIO_SEL_GPIO_B BIT30
+#define B_PCH_PWRM_ADR_EN_ADR_GPIO_SEL_GPIO_C BIT31
+#define R_PCH_PWRM_GBL2HOST_EN 0x10C ///< Global to Host Reset Enable
+#define V_PCH_PWRM_GBL2HOST_EN 0x001F2DE4///< Global to Host Reset Enable default value
+#define B_PCH_PWRM_GBL2HOST_EN_G2H_FEAT_EN BIT0 ///< G2H Feature Enable
+#define B_PCH_PWRM_GBL2HOST_EN_LTRESET_G2H_EN BIT1 ///< LT RESET G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_PMCGBL_G2H_EN BIT2 ///< PMC FW-Initiated Global Reset G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_CPUTHRM_G2H_EN BIT3 ///< CPU Thermal Trip G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_PCHTHRM_G2H_EN BIT4 ///< PCH Internal Thermal Trip G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_PBO_G2H_EN BIT5 ///< Power Button Override G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_MEPBO_G2H_EN BIT6 ///< ME-Initiated Power Button Override G2H
+#define B_PCH_PWRM_GBL2HOST_EN_MEWDT_G2H_EN BIT7 ///< ME FW Watchdog Timer G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_MEGBL_G2H_EN BIT8 ///< ME-Initiated Global Reset G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_CTWDT_G2H_EN BIT9 ///< CPU Thermal Watchdog Timer G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_PMCWDT_G2H_EN BIT10 ///< PMC FW Watchdog Timer G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_ME_UERR_G2H_EN BIT11 ///< ME Uncorrectable Error G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_SYSPWR_G2H_EN BIT12 ///< SYS_PWROK Failure G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_OCWDT_G2H_EN BIT13 ///< Over-Clocking WDT G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_PMC_PARERR_G2H_EN BIT14 ///< PMC Parity Error G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_IEPBO_G2H_EN BIT16 ///< IE-Initiated Power Button Override G2H
+#define B_PCH_PWRM_GBL2HOST_EN_IEWDT_G2H_EN BIT17 ///< IE FW Watchdog Timer G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_IEGBL_G2H_EN BIT18 ///< IE-Initiated Global Reset G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_IE_UERR_G2H_EN BIT19 ///< IE Uncorrectable Error G2H Enable
+#define B_PCH_PWRM_GBL2HOST_EN_ACRU_ERR_G2H_EN BIT20 ///< AC RU Error G2H Enable
+#define R_PCH_PWRM_VR_MISC_CTL 0x100
+#define B_PCH_PWRM_VR_MISC_CTL_VIDSOVEN BIT3
+#define R_PCH_PWRM_GPIO_CFG 0x120
+#define B_PCH_PWRM_GPIO_CFG_GPE0_DW2 (BIT11 | BIT10 | BIT9 | BIT8)
+#define N_PCH_PWRM_GPIO_CFG_GPE0_DW2 8
+#define B_PCH_PWRM_GPIO_CFG_GPE0_DW1 (BIT7 | BIT6 | BIT5 | BIT4)
+#define N_PCH_PWRM_GPIO_CFG_GPE0_DW1 4
+#define B_PCH_PWRM_GPIO_CFG_GPE0_DW0 (BIT3 | BIT2 | BIT1 | BIT0)
+#define N_PCH_PWRM_GPIO_CFG_GPE0_DW0 0
+#define R_PCH_PWRM_PM_SYNC_MODE_C0 0xF4 ///< PM_SYNC Pin Mode in C0
+#define R_PCH_PWRM_GBLRST_CAUSE0 0x124 //Global reset cause 0
+#define R_PCH_PWRM_GBLRST_CAUSE1 0x128 //Global reset cause 1
+#define R_PCH_PWRM_HPR_CAUSE0 0x12C ///< Host partition reset causes
+#define B_PCH_PWRM_HPR_CAUSE0_GBL_TO_HOST BIT15 ///< Global reset converted to Host reset
+#define R_PCH_PWRM_MODPHY_PM_CFG1 0x200
+#define B_PCH_PWRM_MODPHY_PM_CFG1_MLSXSWPGP 0xFFFF
+#define R_PCH_PWRM_MODPHY_PM_CFG2 0x204 ///< ModPHY Power Management Configuration Reg 2
+#define B_PCH_PWRM_MODPHY_PM_CFG2_MLSPDDGE BIT30 ///< ModPHY Lane SUS Power Domain Dynamic Gating Enable
+#define B_PCH_PWRM_MODPHY_PM_CFG2_EMFC BIT29 ///< Enable ModPHY FET Control
+#define B_PCH_PWRM_MODPHY_PM_CFG2_EFRT (BIT28 | BIT27 | BIT26 | BIT25 | BIT24) ///< External FET Ramp Time
+#define N_PCH_PWRM_MODPHY_PM_CFG2_EFRT 24
+#define V_PCH_PWRM_MODPHY_PM_CFG2_EFRT_200US 0x0A
+#define B_PCH_PWRM_MODPHY_PM_CFG2_ASLOR_UFS BIT16 ///< UFS ModPHY SPD SPD Override
+#define R_PCH_PWRM_MODPHY_PM_CFG3 0x208 ///< ModPHY Power Management Configuration Reg 3
+#define B_PCH_PWRM_MODPHY_PM_CFG3_MSPDRTREQ_UFS BIT16 ///< UFS ModPHY SPD RT Request
+#define B_PCH_PWRM_MODPHY_PM_CFG3_MSPDRTREQ_XDCI BIT15 ///< xDCI ModPHY SPD RT Request
+#define B_PCH_PWRM_MODPHY_PM_CFG3_MSPDRTREQ_XHCI BIT14 ///< xHCI ModPHY SPD RT Request
+#define B_PCH_PWRM_MODPHY_PM_CFG3_MSPDRTREQ_GBE BIT13 ///< GbE ModPHY SPD RT Request
+#define B_PCH_PWRM_MODPHY_PM_CFG3_MSPDRTREQ_SATA BIT12 ///< SATA ModPHY SPD RT Request
+#define R_PCH_PWRM_30C 0x30C
+#define R_PCH_PWRM_OBFF_CFG 0x314 ///< OBFF Configuration
+#define R_PCH_PWRM_31C 0x31C
+#define R_PCH_PWRM_CPPM_MISC_CFG 0x320 ///< CPPM Miscellaneous Configuration
+#define R_PCH_PWRM_CPPM_CG_POL1A 0x324 ///< CPPM Clock Gating Policy Reg 1
+#define R_PCH_PWRM_CPPM_CG_POL2A 0x340 ///< CPPM Clock Gating Policy Reg 3
+#define R_PCH_PWRM_34C 0x34C
+#define R_PCH_PWRM_CPPM_CG_POL3A 0x3A8 ///< CPPM Clock Gating Policy Reg 5
+#define B_PCH_PWRM_CPPM_CG_POLXA_CPPM_GX_QUAL BIT30 ///< CPPM Shutdown Qualifier Enable for Clock Source Group X
+#define B_PCH_PWRM_CPPM_CG_POLXA_LTR_GX_THRESH (0x000001FF) ///< LTR Threshold for Clock Source Group X, [8:0]
+#define R_PCH_PWRM_3D0 0x3D0
+#define R_PCH_PWRM_CPPM_MPG_POL1A 0x3E0 ///< CPPM ModPHY Gating Policy Reg 1A
+#define B_PCH_PWRM_CPPM_MPG_POL1A_CPPM_MODPHY_QUAL BIT30 ///< CPPM Shutdown Qualifier Enable for ModPHY
+#define B_PCH_PWRM_CPPM_MPG_POL1A_LT_MODPHY_SEL BIT29 ///< ASLT/PLT Selection for ModPHY
+#define B_PCH_PWRM_CPPM_MPG_POL1A_LTR_MODPHY_THRESH (0x000001FF) ///< LTR Threshold for ModPHY, [8:0]
+#define R_PCH_PWRM_CS_SD_CTL1 0x3E8 ///< Clock Source Shutdown Control Reg 1
+#define B_PCH_PWRM_CS_SD_CTL1_CS5_CTL_CFG (BIT22 | BIT21 | BIT20) ///< Clock Source 5 Control Configuration
+#define N_PCH_PWRM_CS_SD_CTL1_CS5_CTL_CFG 20
+#define B_PCH_PWRM_CS_SD_CTL1_CS1_CTL_CFG (BIT2 | BIT1 | BIT0) ///< Clock Source 1 Control Configuration
+#define N_PCH_PWRM_CS_SD_CTL1_CS1_CTL_CFG 0
+#define R_PCH_PWRM_CS_SD_CTL2 0x3EC ///< Clock Source Shutdown Control Reg 2
+#define R_PCH_PWRM_HSWPGCR1 0x5D0
+#define B_PCH_PWRM_SW_PG_CTRL_LOCK BIT31
+#define B_PCH_PWRM_DFX_SW_PG_CTRL BIT0
+#define R_PCH_PWRM_600 0x600
+#define R_PCH_PWRM_604 0x604
+#define R_PMC_PWRM_ST_PG_FDIS_PMC_1 0x620 ///< Static PG Related Function Disable Register 1
+#define B_PMC_PWRM_ST_PG_FDIS_PMC_1_ST_FDIS_LK BIT31 ///< Static Function Disable Lock (ST_FDIS_LK)
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_1_CAM_FDIS_PMC BIT6 ///< Camera Function Disable (PMC Version) (CAM_FDIS_PMC)
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_1_ISH_FDIS_PMC BIT5 ///< SH Function Disable (PMC Version) (ISH_FDIS_PMC)
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_1_GBE_FDIS_PMC BIT0 ///< GBE Function Disable (PMC Version) (GBE_FDIS_PMC)
+#define R_PCH_PWRM_ST_PG_FDIS_PMC_2 0x624 ///< Static Function Disable Control Register 2
+#define V_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_FDIS_PMC 0x7FF ///< Static Function Disable Control Register 2
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_GSPI1_FDIS_PMC BIT10 ///< SerialIo Controller GSPI Device 1 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_GSPI0_FDIS_PMC BIT9 ///< SerialIo Controller GSPI Device 0 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_UART2_FDIS_PMC BIT8 ///< SerialIo Controller UART Device 2 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_UART1_FDIS_PMC BIT7 ///< SerialIo Controller UART Device 1 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_UART0_FDIS_PMC BIT6 ///< SerialIo Controller UART Device 0 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_I2C5_FDIS_PMC BIT5 ///< SerialIo Controller I2C Device 5 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_I2C4_FDIS_PMC BIT4 ///< SerialIo Controller I2C Device 4 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_I2C3_FDIS_PMC BIT3 ///< SerialIo Controller I2C Device 3 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_I2C2_FDIS_PMC BIT2 ///< SerialIo Controller I2C Device 2 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_I2C1_FDIS_PMC BIT1 ///< SerialIo Controller I2C Device 1 Function Disable
+#define B_PCH_PWRM_ST_PG_FDIS_PMC_2_SERIALIO_I2C0_FDIS_PMC BIT0 ///< SerialIo Controller I2C Device 0 Function Disable
+#define R_PCH_PWRM_NST_PG_FDIS_1 0x628
+#define B_PCH_PWRM_NST_PG_FDIS_1_SCC_FDIS_PMC BIT25 ///< SCC Function Disable. This is only avaiable in B0 onward.
+#define B_PCH_PWRM_NST_PG_FDIS_1_XDCI_FDIS_PMC BIT24 ///< XDCI Function Disable. This is only avaiable in B0 onward.
+#define B_PCH_PWRM_NST_PG_FDIS_1_ADSP_FDIS_PMC BIT23 ///< ADSP Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_SATA_FDIS_PMC BIT22 ///< SATA Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_sSATA_FDIS_PMC BIT27 ///< sSATA Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_C3_FDIS_PMC BIT13 ///< PCIe Controller C Port 3 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_C2_FDIS_PMC BIT12 ///< PCIe Controller C Port 2 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_C1_FDIS_PMC BIT11 ///< PCIe Controller C Port 1 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_C0_FDIS_PMC BIT10 ///< PCIe Controller C Port 0 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_B3_FDIS_PMC BIT9 ///< PCIe Controller B Port 3 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_B2_FDIS_PMC BIT8 ///< PCIe Controller B Port 2 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_B1_FDIS_PMC BIT7 ///< PCIe Controller B Port 1 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_B0_FDIS_PMC BIT6 ///< PCIe Controller B Port 0 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_A3_FDIS_PMC BIT5 ///< PCIe Controller A Port 3 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_A2_FDIS_PMC BIT4 ///< PCIe Controller A Port 2 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_A1_FDIS_PMC BIT3 ///< PCIe Controller A Port 1 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_PCIE_A0_FDIS_PMC BIT2 ///< PCIe Controller A Port 0 Function Disable
+#define B_PCH_PWRM_NST_PG_FDIS_1_XHCI_FDIS_PMC BIT0 ///< XHCI Function Disable
+#define R_PCH_PWRM_FUSE_DIS_RD_1 0x640 ///< Fuse Disable Read 1 Register
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_E3_FUSE_DIS BIT21 ///< PCIe Controller E Port 3 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_E2_FUSE_DIS BIT20 ///< PCIe Controller E Port 2 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_E1_FUSE_DIS BIT19 ///< PCIe Controller E Port 1 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_E0_FUSE_DIS BIT18 ///< PCIe Controller E Port 0 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_D3_FUSE_DIS BIT17 ///< PCIe Controller D Port 3 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_D2_FUSE_DIS BIT16 ///< PCIe Controller D Port 2 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_D1_FUSE_DIS BIT15 ///< PCIe Controller D Port 1 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_D0_FUSE_DIS BIT14 ///< PCIe Controller D Port 0 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_C3_FUSE_DIS BIT13 ///< PCIe Controller C Port 3 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_C2_FUSE_DIS BIT12 ///< PCIe Controller C Port 2 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_C1_FUSE_DIS BIT11 ///< PCIe Controller C Port 1 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_C0_FUSE_DIS BIT10 ///< PCIe Controller C Port 0 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_B3_FUSE_DIS BIT9 ///< PCIe Controller B Port 3 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_B2_FUSE_DIS BIT8 ///< PCIe Controller B Port 2 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_B1_FUSE_DIS BIT7 ///< PCIe Controller B Port 1 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_B0_FUSE_DIS BIT6 ///< PCIe Controller B Port 0 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_A3_FUSE_DIS BIT5 ///< PCIe Controller A Port 3 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_A2_FUSE_DIS BIT4 ///< PCIe Controller A Port 2 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_A1_FUSE_DIS BIT3 ///< PCIe Controller A Port 1 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_PCIE_A0_FUSE_DIS BIT2 ///< PCIe Controller A Port 0 Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_1_XHCI_FUSE_DIS BIT0 ///< XHCI Fuse Disable
+#define R_PCH_PWRM_FUSE_DIS_RD_2 0x644 ///< Fuse Disable Read 2 Register
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SPC_SS_DIS BIT25 ///< SPC Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SPB_SS_DIS BIT24 ///< SPB Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SPA_SS_DIS BIT23 ///< SPA Fuse Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_ESPISPI_FUSE_SS_DIS BIT22 ///< ESPISPI Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_PSTH_FUSE_SS_DIS BIT21 ///< PSTH Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_DMI_FUSE_SS_DIS BIT20 ///< DMI Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_OTG_FUSE_SS_DIS BIT19 ///< OTG Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_XHCI_SS_DIS BIT18 ///< XHCI Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_FIA_FUSE_SS_DIS BIT17 ///< FIA Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_DSP_FUSE_SS_DIS BIT16 ///< DSP Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SATA_FUSE_SS_DIS BIT15 ///< SATA Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_ICC_FUSE_SS_DIS BIT14 ///< ICC Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_LPC_FUSE_SS_DIS BIT13 ///< LPC Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_RTC_FUSE_SS_DIS BIT12 ///< RTC Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_P2S_FUSE_SS_DIS BIT11 ///< P2S Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_TRSB_FUSE_SS_DIS BIT10 ///< TRSB Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SMB_FUSE_SS_DIS BIT9 ///< SMB Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_ITSS_FUSE_SS_DIS BIT8 ///< ITSS Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_TRACEHUB_FUSE_SS_DIS BIT7 ///< TraceHub Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SERIALIO_FUSE_SS_DIS BIT6 ///< SerialIo Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_FLIS_FUSE_SS_DIS BIT5 ///< FLIS Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_SCC_FUSE_SS_DIS BIT4 ///< SCC Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_P2D_FUSE_SS_DIS BIT3 ///< P2D Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_CAM_FUSE_SS_DIS BIT2 ///< Camera Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_ISH_FUSE_SS_DIS BIT1 ///< ISH Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_2_GBE_FUSE_SS_DIS BIT0 ///< GBE Fuse or Soft Strap Disable
+#define R_PCH_PWRM_FUSE_DIS_RD_3 0x648 ///< Static PG Fuse and Soft Strap Disable Read Register 3
+#define B_PCH_PWRM_FUSE_DIS_RD_3_PNCRA3_FUSE_SS_DIS BIT3 ///< PNCRA3 Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_3_PNCRA2_FUSE_SS_DIS BIT2 ///< PNCRA2 Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_3_PNCRA1_FUSE_SS_DIS BIT1 ///< PNCRA1 Fuse or Soft Strap Disable
+#define B_PCH_PWRM_FUSE_DIS_RD_3_PNCRA_FUSE_SS_DIS BIT0 ///< PNCRA Fuse or Soft Strap Disable
+
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h
new file mode 100644
index 0000000000..e824e98913
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h
@@ -0,0 +1,304 @@
+/** @file
+ Register definition for PSF component
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_PSF_H_
+#define _PCH_REGS_PSF_H_
+
+//
+// Private chipset regsiter (Memory space) offset definition
+// The PCR register defines is used for PCR MMIO programming and PCH SBI programming as well.
+//
+
+//
+// PSFx segment registers
+//
+#define R_PCH_PCR_PSF_GLOBAL_CONFIG 0x4000 ///< PSF Segment Global Configuration Register
+#define B_PCH_PCR_PSF_GLOBAL_CONFIG_ENTCG BIT4
+#define B_PCH_PCR_PSF_GLOBAL_CONFIG_ENLCG BIT3
+#define R_PCH_PCR_PSF_ROOTSPACE_CONFIG_RS0 0x4014 ///< PSF Segment Rootspace Configuration Register
+#define B_PCH_PCR_PSF_ROOTSPACE_CONFIG_RS0_ENADDRP2P BIT1
+#define B_PCH_PCR_PSF_ROOTSPACE_CONFIG_RS0_VTDEN BIT0
+#define R_PCH_PCR_PSF_PORT_CONFIG_PG0_PORT0 0x4020 ///< PSF Segment Port Configuration Register
+
+#define S_PCH_PSF_DEV_GNTCNT_RELOAD_DGCR 4
+#define S_PCH_PSF_TARGET_GNTCNT_RELOAD 4
+#define B_PCH_PSF_DEV_GNTCNT_RELOAD_DGCR_GNT_CNT_RELOAD 0x1F
+#define B_PCH_PSF_TARGET_GNTCNT_RELOAD_GNT_CNT_RELOAD 0x1F
+
+//
+// PSFx PCRs definitions
+//
+#define R_PCH_PCR_PSFX_T0_SHDW_BAR0 0 ///< PCI BAR0
+#define R_PCH_PCR_PSFX_T0_SHDW_BAR1 0x04 ///< PCI BAR1
+#define R_PCH_PCR_PSFX_T0_SHDW_BAR2 0x08 ///< PCI BAR2
+#define R_PCH_PCR_PSFX_T0_SHDW_BAR3 0x0C ///< PCI BAR3
+#define R_PCH_PCR_PSFX_T0_SHDW_BAR4 0x10 ///< PCI BAR4
+#define R_PCH_PSFX_PCR_T0_SHDW_PCIEN 0x1C ///< PCI configuration space enable bits
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_BAR0DIS BIT16 ///< Disable BAR0
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_BAR1DIS BIT17 ///< Disable BAR1
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_BAR2DIS BIT18 ///< Disable BAR2
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_BAR3DIS BIT19 ///< Disable BAR3
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_BAR4DIS BIT20 ///< Disable BAR4
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_BAR5DIS BIT21 ///< Disable BAR5
+#define B_PCH_PSFX_PCR_T0_SHDW_PCIEN_FUNDIS BIT8 ///< Function disable
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_MEMEN BIT1 ///< Memory decoding enable
+#define B_PCH_PCR_PSFX_T0_SHDW_PCIEN_IOEN BIT0 ///< IO decoding enable
+#define R_PCH_PCR_PSFX_T0_SHDW_PMCSR 0x20 ///< PCI power management configuration
+#define B_PCH_PCR_PSFX_T0_SHDW_PMCSR_PWRST (BIT1 | BIT0) ///< Power status
+#define R_PCH_PCR_PSFX_T0_SHDW_CFG_DIS 0x38 ///< PCI configuration disable
+#define B_PCH_PCR_PSFX_T0_SHDW_CFG_DIS_CFGDIS BIT0 ///< config disable
+
+#define R_PCH_PCR_PSFX_T1_SHDW_PCIEN 0x3C ///< PCI configuration space enable bits
+#define B_PCH_PSFX_PCR_T1_SHDW_PCIEN_FUNDIS BIT8 ///< Function disable
+#define B_PCH_PCR_PSFX_T1_SHDW_PCIEN_MEMEN BIT1 ///< Memory decoding enable
+#define B_PCH_PCR_PSFX_T1_SHDW_PCIEN_IOEN BIT0 ///< IO decoding enable
+
+#define B_PCH_PCR_PSFX_TX_AGENT_FUNCTION_CONFIG_DEVICE 0x01F0 ///< device number
+#define N_PCH_PCR_PSFX_TX_AGENT_FUNCTION_CONFIG_DEVICE 4
+#define B_PCH_PCR_PSFX_TX_AGENT_FUNCTION_CONFIG_FUNCTION (BIT3 | BIT2 | BIT1) ///< function number
+#define N_PCH_PCR_PSFX_TX_AGENT_FUNCTION_CONFIG_FUNCTION 1
+
+#define V_PCH_LP_PCR_PSFX_PSF_MC_AGENT_MCAST_TGT_P2SB 0x38A00
+#define V_PCH_H_PCR_PSFX_PSF_MC_AGENT_MCAST_TGT_P2SB 0x38B00
+
+//
+// PSF1 PCRs
+//
+// PSF1 PCH-LP Specific Base Address
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_GBE_REG_BASE 0x0200 ///< D31F6 PSF base address (GBE)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_CAM_REG_BASE 0x0300 ///< D20F3 PSF base address (CAM)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_CSE_WLAN_REG_BASE 0x0500 ///< D22F7 PSF base address (CSME: WLAN)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_HECI3_REG_BASE 0x0700 ///< D22F4 PSF base address (CSME: HECI3)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_HECI2_REG_BASE 0x0800 ///< D22F1 PSF base address (CSME: HECI2)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_CSE_UMA_REG_BASE 0x0900 ///< D18F3 PSF base address (CSME: CSE UMA)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_HECI1_REG_BASE 0x0A00 ///< D22F0 PSF base address (CSME: HECI1)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_KT_REG_BASE 0x0B00 ///< D22F3 PSF base address (CSME: KT)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_IDER_REG_BASE 0x0C00 ///< D22F2 PSF base address (CSME: IDER)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_CLINK_REG_BASE 0x0D00 ///< D18F1 PSF base address (CSME: CLINK)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_PMT_REG_BASE 0x0E00 ///< D18F2 PSF base address (CSME: PMT)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_KVM_REG_BASE 0x0F00 ///< D18F0 PSF base address (CSME: KVM)
+#define R_PCH_LP_PCR_PSF1_T0_SHDW_SATA_REG_BASE 0x1000 ///< PCH-LP D23F0 PSF base address (SATA)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE12_REG_BASE 0x2000 ///< PCH-LP D29F3 PSF base address (PCIE PORT 12)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE11_REG_BASE 0x2100 ///< PCH-LP D29F2 PSF base address (PCIE PORT 11)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE10_REG_BASE 0x2200 ///< PCH-LP D29F1 PSF base address (PCIE PORT 10)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE09_REG_BASE 0x2300 ///< PCH-LP D29F0 PSF base address (PCIE PORT 09)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE08_REG_BASE 0x2400 ///< PCH-LP D28F7 PSF base address (PCIE PORT 08)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE07_REG_BASE 0x2500 ///< PCH-LP D28F6 PSF base address (PCIE PORT 07)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE06_REG_BASE 0x2600 ///< PCH-LP D28F5 PSF base address (PCIE PORT 06)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE05_REG_BASE 0x2700 ///< PCH-LP D28F4 PSF base address (PCIE PORT 05)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE04_REG_BASE 0x2800 ///< PCH-LP D28F3 PSF base address (PCIE PORT 04)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE03_REG_BASE 0x2900 ///< PCH-LP D28F2 PSF base address (PCIE PORT 03)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE02_REG_BASE 0x2A00 ///< PCH-LP D28F1 PSF base address (PCIE PORT 02)
+#define R_PCH_LP_PCR_PSF1_T1_SHDW_PCIE01_REG_BASE 0x2B00 ///< PCH-LP D28F0 PSF base address (PCIE PORT 01)
+
+// PSF1 PCH-H Specific Base Address
+#define R_PCH_H_PCR_PSF1_T0_SHDW_CSE_WLAN_REG_BASE 0x0200 ///< D22F7 PSF base address (CSME: WLAN)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_HECI3_REG_BASE 0x0300 ///< SPT-H D22F4 PSF base address (CSME: HECI3)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_HECI2_REG_BASE 0x0400 ///< SPT-H D22F1 PSF base address (CSME: HECI2)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_CSE_UMA_REG_BASE 0x0500 ///< D18F3 PSF base address (CSME: CSE UMA)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_HECI1_REG_BASE 0x0600 ///< SPT-H D22F0 PSF base address (CSME: HECI1)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_KT_REG_BASE 0x0700 ///< SPT-H D22F3 PSF base address (CSME: KT)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_IDER_REG_BASE 0x0800 ///< SPT-H D22F2 PSF base address (CSME: IDER)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_PMT_REG_BASE 0x0900 ///< D18F2 PSF base address (CSME: PMT)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_IEPMT_REG_BASE 0x0A00 ///< D16F5 PSF base address (CSME: IEPMT)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_SATA_REG_BASE 0x0B00 ///< D23F0 PSF base address (SATA)
+#define R_PCH_H_PCR_PSF1_T0_SHDW_sSATA_REG_BASE 0x0C00 ///< D17F5 PSF base address (sSATA)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE20_REG_BASE 0x2000 ///< PCH-H D27F3 PSF base address (PCIE PORT 20)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE19_REG_BASE 0x2100 ///< PCH-H D27F2 PSF base address (PCIE PORT 19)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE18_REG_BASE 0x2200 ///< PCH-H D27F1 PSF base address (PCIE PORT 18)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE17_REG_BASE 0x2300 ///< PCH-H D27F0 PSF base address (PCIE PORT 17)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE16_REG_BASE 0x2400 ///< PCH-H D29F7 PSF base address (PCIE PORT 16)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE15_REG_BASE 0x2500 ///< PCH-H D29F6 PSF base address (PCIE PORT 15)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE14_REG_BASE 0x2600 ///< PCH-H D29F5 PSF base address (PCIE PORT 14)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE13_REG_BASE 0x2700 ///< PCH-H D29F4 PSF base address (PCIE PORT 13)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE12_REG_BASE 0x2800 ///< PCH-H D29F3 PSF base address (PCIE PORT 10)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE11_REG_BASE 0x2900 ///< PCH-H D29F2 PSF base address (PCIE PORT 11)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE10_REG_BASE 0x2A00 ///< PCH-H D29F1 PSF base address (PCIE PORT 10)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE09_REG_BASE 0x2B00 ///< PCH-H D29F0 PSF base address (PCIE PORT 09)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE08_REG_BASE 0x2C00 ///< PCH-H D28F7 PSF base address (PCIE PORT 08)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE07_REG_BASE 0x2D00 ///< PCH-H D28F6 PSF base address (PCIE PORT 07)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE06_REG_BASE 0x2E00 ///< PCH-H D28F5 PSF base address (PCIE PORT 06)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE05_REG_BASE 0x2F00 ///< PCH-H D28F4 PSF base address (PCIE PORT 05)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE04_REG_BASE 0x3000 ///< PCH-H D28F3 PSF base address (PCIE PORT 04)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE03_REG_BASE 0x3100 ///< PCH-H D28F2 PSF base address (PCIE PORT 03)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE02_REG_BASE 0x3200 ///< PCH-H D28F1 PSF base address (PCIE PORT 02)
+#define R_PCH_H_PCR_PSF1_T1_SHDW_PCIE01_REG_BASE 0x3300 ///< PCH-H D28F0 PSF base address (PCIE PORT 01)
+
+// Other PSF1 PCRs definition
+#define R_PCH_H_PCR_PSF1_T0_SHDW_SATA_VS_CAP_VR_RS0_D23_F0_OFFSET16 0x1024
+#define R_PCH_H_PCR_PSF1_T0_SHDW_SATA_MMIOPI_VR_RS0_D23_F0_OFFSET16 0x1030
+#define R_PCH_H_PCR_PSF1_PSF_PORT_CONFIG_PG1_PORT7 0x4040 ///< PSF Port Configuration Register
+#define R_PCH_LP_PCR_PSF1_PSF_PORT_CONFIG_PG1_PORT7 0x403C ///< PSF Port Configuration Register
+#define R_PCH_LP_PCR_PSF1_PSF_MC_CONTROL_MCAST0_EOI 0x4050 ///< Multicast Control Register
+#define R_PCH_LP_PCR_PSF1_PSF_MC_AGENT_MCAST0_TGT0_EOI 0x4060 ///< Destination ID
+#define R_PCH_H_PCR_PSF1_PSF_MC_CONTROL_MCAST0_EOI 0x4054 ///< Multicast Control Register
+#define R_PCH_H_PCR_PSF1_PSF_MC_AGENT_MCAST0_TGT0_EOI 0x406C ///< Destination ID
+
+
+//PSF 1 Multicast Message Configuration
+
+#define R_PCH_PCR_PSF1_RC_OWNER_RS0 0x4008 ///< Destination ID
+
+#define B_PCH_PCR_PSF1_TARGET_CHANNELID 0xFF
+#define B_PCH_PCR_PSF1_TARGET_PORTID 0x7F00
+#define N_PCH_PCR_PSF1_TARGET_PORTID 8
+#define B_PCH_PCR_PSF1_TARGET_PORTGROUPID BIT15
+#define N_PCH_PCR_PSF1_TARGET_PORTGROUPID 15
+#define B_PCH_PCR_PSF1_TARGET_PSFID 0xFF0000
+#define N_PCH_PCR_PSF1_TARGET_PSFID 16
+#define B_PCH_PCR_PSF1_TARGET_CHANMAP BIT31
+
+#define V_PCH_PCR_PSF1_RC_OWNER_RS0_CHANNELID 0
+#define V_PCH_PCR_PSF1_RC_OWNER_RS0_PORTID 10
+#define V_PCH_PCR_PSF1_RC_OWNER_RS0_PORTGROUPID_DOWNSTREAM 1
+#define V_PCH_PCR_PSF1_RC_OWNER_RS0_PSFID_PMT 0
+#define V_PCH_PCR_PSF1_RC_OWNER_RS0_PSFID_PSF1 1
+
+#define R_PCH_LP_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGT0_MCTP1 0x409C ///< Destination ID
+#define R_PCH_H_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGT0_MCTP1 0x40D0 ///< Destination ID
+#define R_PCH_H_PCR_PSF5_PSF_MC_AGENT_MCAST0_RS0_TGT0_MCTP0 0x404C ///< Destination ID
+#define R_PCH_H_PCR_PSF6_PSF_MC_AGENT_MCAST0_RS0_TGT0_MCTP0 0x4050 ///< Destination ID
+
+#define V_PCH_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGTX_MCTP1_PORTGROUPID_UPSTREAM 0
+#define V_PCH_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGTX_MCTP1_PORTGROUPID_DOWNSTREAM 1
+#define V_PCH_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGTX_MCTP1_PSFID_PSF1 1
+
+#define R_PCH_H_PCR_PSF1_PSF_MC_CONTROL_MCAST1_RS0_MCTP1 0x4060 ///< Multicast Control Register
+#define R_PCH_LP_PCR_PSF1_PSF_MC_CONTROL_MCAST1_RS0_MCTP1 0x4058 ///< Multicast Control Register
+#define R_PCH_H_PCR_PSF5_PSF_MC_CONTROL_MCAST0_RS0_MCTP0 0x4040 ///< Multicast Control Register
+#define R_PCH_H_PCR_PSF6_PSF_MC_CONTROL_MCAST0_RS0_MCTP0 0x4044 ///< Multicast Control Register
+
+#define B_PCH_PCR_PSF1_PSF_MC_CONTROL_MCAST1_RS0_MCTP1_MULTCEN BIT0
+#define B_PCH_PCR_PSF1_PSF_MC_CONTROL_MCAST1_RS0_MCTP1_NUMMC 0xFE
+#define N_PCH_PCR_PSF1_PSF_MC_CONTROL_MCAST1_RS0_MCTP1_NUMMC 1
+
+#define V_PCH_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGTX_MCTP1_CHANNELID_DMI 0
+#define V_PCH_PCR_PSF1_PSF_MC_AGENT_MCAST1_RS0_TGTX_MCTP1_PORTID_DMI 0
+
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_VR_RS0_D23_F0 0x4240 ///< VR
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_PMT_RS0_D18_F2 0x4248 ///< PMT
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_PTIO_RS0_D22_F2 0x424C ///< PTIO
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_PTIO_RS0_D22_F3 0x4250 ///< PTIO
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_CSE_RS0_D22_F0 0x4254 ///< CSE
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_CSE_RS0_D18_F3 0x4258 ///< CSE
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_CSE_RS0_D22_F1 0x425C ///< CSE
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_CSE_RS0_D22_F4 0x4260 ///< CSE
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_CSE_RS0_D22_F7 0x4264 ///< CSE
+#define R_PCH_PCR_PSF1_T0_AGENT_FUNCTION_CONFIG_CSE_RS0_D18_F4 0x4268 ///< CSE
+
+#define B_PCH_PCR_PSFX_TX_AGENT_FUNCTION_CONFIG_IFR BIT0 ///< IFR
+#define R_PCH_PCR_PSF1_RS_IFR 0x42C0 ///< This register can be used to reset all functions in a particular Root Space simultaneously
+
+//
+// controls the PCI configuration header of a PCI function
+//
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F0 0x4198 ///< SPA
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F1 0x419C ///< SPA
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F2 0x41A0 ///< SPA
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F3 0x41A4 ///< SPA
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F4 0x41A8 ///< SPB
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F5 0x41AC ///< SPB
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F6 0x41B0 ///< SPB
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F7 0x41B4 ///< SPB
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F0 0x41B8 ///< SPC
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F1 0x41BC ///< SPC
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F2 0x41C0 ///< SPC
+#define R_PCH_LP_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F3 0x41C4 ///< SPC
+
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F0 0x426C ///< SPA
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F1 0x4270 ///< SPA
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F2 0x4274 ///< SPA
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPA_D28_F3 0x4278 ///< SPA
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F4 0x427C ///< SPB
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F5 0x4280 ///< SPB
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F6 0x4284 ///< SPB
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPB_D28_F7 0x4288 ///< SPB
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F0 0x428C ///< SPC
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F1 0x4290 ///< SPC
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F2 0x4294 ///< SPC
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPC_D29_F3 0x4298 ///< SPC
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPD_D29_F4 0x429C ///< SPD
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPD_D29_F5 0x42A0 ///< SPD
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPD_D29_F6 0x42A4 ///< SPD
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPD_D29_F7 0x42A8 ///< SPD
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPE_D27_F0 0x42AC ///< SPE
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPE_D27_F1 0x42B0 ///< SPE
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPE_D27_F2 0x42B4 ///< SPE
+#define R_PCH_H_PCR_PSF1_T1_AGENT_FUNCTION_CONFIG_SPE_D27_F3 0x42B8 ///< SPE
+
+//
+// PSF1 grant count registers
+//
+#define R_PCH_LP_PSF1_DEV_GNTCNT_RELOAD_DGCR0 0x41CC
+#define R_PCH_LP_PSF1_TARGET_GNTCNT_RELOAD_PG1_TGT0 0x45D0
+
+#define R_PCH_H_PSF1_DEV_GNTCNT_RELOAD_DGCR0 0x42C0
+#define R_PCH_H_PSF1_TARGET_GNTCNT_RELOAD_PG1_TGT0 0x47AC
+
+//
+// PSF2 PCRs (PID:PSF2)
+//
+#define R_PCH_PCR_PSF2_T0_SHDW_TRH_REG_BASE 0x0100 ///< D20F2 PSF base address (Thermal). // LP&H
+// PSF2 PCH-LP Specific Base Address
+#define R_PCH_LP_PCR_PSF2_T0_SHDW_UFS_REG_BASE 0x0200 ///< D30F7 PSF base address (SCC: UFS)
+#define R_PCH_LP_PCR_PSF2_T0_SHDW_SDCARD_REG_BASE 0x0300 ///< D30F6 PSF base address (SCC: SDCard)
+#define R_PCH_LP_PCR_PSF2_T0_SHDW_SDIO_REG_BASE 0x0400 ///< D30F5 PSF base address (SCC: SDIO)
+#define R_PCH_LP_PCR_PSF2_T0_SHDW_EMMC_REG_BASE 0x0500 ///< D30F4 PSF base address (SCC: eMMC)
+#define R_PCH_LP_PCR_PSF2_T0_SHDW_OTG_REG_BASE 0x0600 ///< D20F1 PSF base address (USB device controller: OTG)
+#define R_PCH_LP_PCR_PSF2_T0_SHDW_XHCI_REG_BASE 0x0700 ///< D20F0 PSF base address (XHCI)
+// PSF2 PCH-H Specific Base Address
+#define R_PCH_H_PCR_PSF2_T0_SHDW_OTG_REG_BASE 0x0200 ///< D20F1 PSF base address (USB device controller: OTG)
+#define R_PCH_H_PCR_PSF2_T0_SHDW_XHCI_REG_BASE 0x0300 ///< D20F0 PSF base address (XHCI)
+
+//
+// PSF3 PCRs (PID:PSF3)
+//
+#define R_PCH_PCR_PSF3_T0_SHDW_HECI3_REG_BASE 0x0100 ///< D16F4 PSF base address (IE: HECI3)
+#define R_PCH_PCR_PSF3_T0_SHDW_HECI2_REG_BASE 0x0200 ///< D16F1 PSF base address (IE: HECI2)
+#define R_PCH_PCR_PSF3_T0_SHDW_HECI1_REG_BASE 0x0400 ///< D16F0 PSF base address (IE: HECI1)
+#define R_PCH_PCR_PSF3_T0_SHDW_KT_REG_BASE 0x0500 ///< D16F3 PSF base address (IE: KT)
+#define R_PCH_PCR_PSF3_T0_SHDW_IDER_REG_BASE 0x0600 ///< D16F2 PSF base address (IE: IDER)
+#define R_PCH_PCR_PSF3_T0_SHDW_P2SB_REG_BASE 0x0700 ///< D31F1 PSF base address (P2SB)
+#define R_PCH_PCR_PSF3_T0_SHDW_TRACE_HUB_ACPI_REG_BASE 0x0800 ///< D20F4 PSF base address (TraceHub ACPI)
+#define R_PCH_PCR_PSF3_T0_SHDW_TRACE_HUB_REG_BASE 0x0900 ///< D31F7 PSF base address (TraceHub PCI)
+#define R_PCH_PCR_PSF3_T0_SHDW_LPC_REG_BASE 0x0A00 ///< D31F0 PSF base address (LPC)
+#define R_PCH_PCR_PSF3_T0_SHDW_SMBUS_REG_BASE 0x0B00 ///< D31F4 PSF base address (SMBUS)
+#define R_PCH_PCR_PSF3_T0_SHDW_PMC_REG_BASE 0x0E00 ///< D31F2 PSF base address (PMC)
+#define R_PCH_PCR_PSF3_T0_SHDW_SPI_SPI_REG_BASE 0x1300 ///< D31F5 PSF base address (SPI SPI)
+#define R_PCH_H_PCR_PSF3_T0_SHDW_GBE_REG_BASE 0x1600 ///< D31F6 PSF base address (GBE)
+#define R_PCH_PCR_PSF3_T0_SHDW_AUD_REG_BASE 0x1800 ///< D31F3 PSF base address (HDA, ADSP)
+#define R_PCH_PCR_PSF3_T0_SHDW_AUD_PCIEN 0x181C ///< D31F3 PCI Configuration space enable bits (HDA, ADSP)
+#define R_PCH_PCR_PSF3_T0_SHDW_MROM1_REG_BASE 0x1A00 ///< D17F1 PSF base address (MROM1)
+#define B_PCH_PCR_PSF3_T0_SHDW_AUD_PCIEN_FUNDIS BIT8 ///< D31F3 Function Disable
+#define R_PCH_PSF3_T0_SHDW_AUD_RS1_D24_F0_BASE 0x1700 ///< RS1D24F0 PSF base address (HDA)
+
+#define R_PCH_PCR_PSF3_T0_AGENT_FUNCTION_CONFIG_GBE_RS0_D31_F6 0x40F8 ///< GBE
+
+#define R_PCH_PCR_PSF3_PSF_MC_CONTROL_MCAST0_EOI 0x4058 ///< Multicast Control Register
+#define R_PCH_PCR_PSF3_PSF_MC_AGENT_MCAST0_TGT0_EOI 0x4064 ///< Destination ID
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h
new file mode 100644
index 0000000000..2f30ef3b5d
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h
@@ -0,0 +1,66 @@
+/** @file
+ Register definition for PSTH component
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_PSTH_H_
+#define _PCH_REGS_PSTH_H_
+
+//
+// Private chipset regsiter (Memory space) offset definition
+// The PCR register defines is used for PCR MMIO programming and PCH SBI programming as well.
+//
+
+//
+// PSTH and IO Trap PCRs (PID:PSTH)
+//
+#define R_PCH_PCR_PSTH_PSTHCTL 0x1D00 ///< PSTH control register
+#define B_PCH_PCR_PSTH_PSTHIOSFPTCGE BIT2 ///< PSTH IOSF primary trunk clock gating enable
+#define B_PCH_PCR_PSTH_PSTHIOSFSTCGE BIT1 ///< PSTH IOSF sideband trunk clock gating enable
+#define B_PCH_PCR_PSTH_PSTHDCGE BIT0 ///< PSTH dynamic clock gating enable
+#define R_PCH_PCR_PSTH_TRPST 0x1E00 ///< Trap status regsiter
+#define B_PCH_PCR_PSTH_TRPST_CTSS 0x0000000F ///< Cycle Trap SMI# Status mask
+#define R_PCH_PCR_PSTH_TRPC 0x1E10 ///< Trapped cycle
+#define B_PCH_PCR_PSTH_TRPC_RW BIT24 ///< Read/Write#: 1=Read, 0=Write
+#define B_PCH_PCR_PSTH_TRPC_AHBE 0x00000000000F0000 ///< Active high byte enables
+#define B_PCH_PCR_PSTH_TRPC_IOA 0x000000000000FFFC ///< Trap cycle I/O address
+#define R_PCH_PCR_PSTH_TRPD 0x1E18 ///< Trapped write data
+#define B_PCH_PCR_PSTH_TRPD_IOD 0x00000000FFFFFFFF ///< Trap cycle I/O data
+#define R_PCH_PCR_PSTH_TRPREG0 0x1E80 ///< IO Tarp 0 register
+#define R_PCH_PCR_PSTH_TRPREG1 0x1E88 ///< IO Tarp 1 register
+#define R_PCH_PCR_PSTH_TRPREG2 0x1E90 ///< IO Tarp 2 register
+#define R_PCH_PCR_PSTH_TRPREG3 0x1E98 ///< IO Tarp 3 register
+#define B_PCH_PCR_PSTH_TRPREG_RWM BIT17 ///< 49 - 32 for 32 bit access, Read/Write mask
+#define B_PCH_PCR_PSTH_TRPREG_RWIO BIT16 ///< 48 - 32 for 32 bit access, Read/Write#, 1=Read, 0=Write
+#define N_PCH_PCR_PSTH_TRPREG_RWIO 16 ///< 48 - 32 for 32 bit access, 16bit shift for Read/Write field
+#define N_PCH_PCR_PSTH_TRPREG_BEM (36 - 32)
+#define B_PCH_PCR_PSTH_TRPREG_BEM 0x000000F000000000 ///< Byte enable mask
+#define B_PCH_PCR_PSTH_TRPREG_BE 0x0000000F00000000 ///< Byte enable
+#define B_PCH_PCR_PSTH_TRPREG_AM 0x0000000000FC0000 ///< IO Address mask
+#define B_PCH_PCR_PSTH_TRPREG_AD 0x000000000000FFFC ///< IO Address
+#define B_PCH_PCR_PSTH_TRPREG_TSE BIT0 ///< Trap and SMI# Enable
+
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h
new file mode 100644
index 0000000000..c031c4da76
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h
@@ -0,0 +1,713 @@
+/** @file
+ Register names for PCH SATA controllers
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_SATA_H_
+#define _PCH_REGS_SATA_H_
+
+//
+// SATA Controller Registers (D23:F0)
+//
+#define PCI_DEVICE_NUMBER_PCH_SATA 23
+#define PCI_FUNCTION_NUMBER_PCH_SATA 0
+#define V_SATA_CFG_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+
+#define PCH_SATA_FIRST_CONTROLLER 1
+#define PCH_SATA_SECOND_CONTROLLER 2
+
+//
+// SKL PCH-LP SATA Device ID's
+//
+#define V_PCH_LP_SATA_DEVICE_ID_M_AHCI 0x9D03 ///< SATA Controller (AHCI) - Mobile
+#define V_PCH_LP_SATA_DEVICE_ID_M_RAID 0x9D05 ///< SATA Controller (RAID 0/1/5/10) - NOT premium - Mobile
+#define V_PCH_LP_SATA_DEVICE_ID_M_RAID_ALTDIS 0x282A ///< SATA Controller (RAID 0/1/5/10) - NOT premium - Mobile - Alternate ID
+#define V_PCH_LP_SATA_DEVICE_ID_M_RAID_PREM 0x9D07 ///< SATA Controller (RAID 0/1/5/10) - premium - Mobile
+#define V_PCH_LP_SATA_DEVICE_ID_M_RAID_RRT 0x9D0F ///< SATA Controller (RAID 1/RRT Only) - Mobile
+
+//
+// SKL PCH-H SATA Device ID's
+//
+#define V_PCH_H_SATA_DEVICE_ID_D_AHCI 0xA102 ///< SATA Controller (AHCI)
+#define V_PCH_H_SATA_DEVICE_ID_D_AHCI_A0 0xA103 ///< SATA Controller (AHCI) - SPTH A0
+#define V_PCH_H_SATA_DEVICE_ID_D_RAID 0xA105 ///< SATA Controller (RAID 0/1/5/10) - NOT premium
+#define V_PCH_H_SATA_DEVICE_ID_D_RAID_ALTDIS 0x2822 ///< SATA Controller (RAID 0/1/5/10) - premium - Alternate ID
+#define V_PCH_H_SATA_DEVICE_ID_D_RAID_RSTE 0x2826 ///< SATA Controller (RAID 0/1/5/10) - RSTe of Server SKU
+#define V_PCH_H_SATA_DEVICE_ID_D_RAID_PREM 0xA107 ///< SATA Controller (RAID 0/1/5/10) - premium
+#define V_PCH_H_SATA_DEVICE_ID_D_RAID_RRT 0xA10F ///< SATA Controller (RAID 1/RRT Only)
+
+
+//
+// LBG PRODUCTION INCLUDING QUAL SAMPLES SATA Device ID's
+//
+#define V_PCH_LBG_PROD_SATA_DEVICE_ID_D_AHCI 0xA182 ///< Server AHCI Mode (Ports 0-5)
+#define V_PCH_LBG_PROD_SATA_DEVICE_ID_D_RAID 0xA184 ///< Server RAID 0/1/5/10 - NOT premium
+#define V_PCH_LBG_PROD_SATA_DEVICE_ID_D_RAID_PREMIUM 0xA186 ///< Server RAID 0/1/5/10 - premium
+#define V_PCH_LBG_PROD_SATA_DEVICE_ID_D_RAID1 0xA18E ///< Server RAID 1/RRT Only
+
+//
+// LBG SSX (Super SKUs and Pre Production) SATA Device ID's
+//
+#define V_PCH_LBG_SATA_DEVICE_ID_D_AHCI 0xA202 ///< Server AHCI Mode (Ports 0-5)
+#define V_PCH_LBG_SATA_DEVICE_ID_D_RAID 0xA204 ///< Server RAID 0/1/5/10 - NOT premium
+#define V_PCH_LBG_SATA_DEVICE_ID_D_RAID_PREMIUM 0xA206 ///< Server RAID 0/1/5/10 - premium
+#define V_PCH_LBG_SATA_DEVICE_ID_D_RAID1 0xA20E ///< Server RAID 1/RRT Only
+
+//
+// LBG Alternate RST Device IDs
+//
+#define V_PCH_LBG_SATA_DEVICE_ID_D_RAID_PREMIUM_DSEL0 0x2822 ///< Server RAID 0/1/5/10 - premium - Alternate ID for RST
+#define V_PCH_LBG_SATA_DEVICE_ID_D_RAID_PREMIUM_DSEL1 0x2826 ///< Server RAID 0/1/5/10 - premium - Alternate ID for RSTe
+
+//
+// SATA Controller common Registers
+//
+#define R_PCH_SATA_PI_REGISTER 0x09
+#define B_PCH_SATA_PI_REGISTER_SNC BIT3
+#define B_PCH_SATA_PI_REGISTER_SNE BIT2
+#define B_PCH_SATA_PI_REGISTER_PNC BIT1
+#define B_PCH_SATA_PI_REGISTER_PNE BIT0
+#define V_PCH_SATA_SUB_CLASS_CODE_AHCI 0x06
+#define V_PCH_SATA_SUB_CLASS_CODE_RAID 0x04
+#define R_PCH_SATA_AHCI_BAR 0x24
+#define B_PCH_SATA_AHCI_BAR_BA 0xFFFFF800
+#define V_PCH_SATA_AHCI_BAR_LENGTH 0x800
+#define N_PCH_SATA_AHCI_BAR_ALIGNMENT 11
+#define V_PCH_SATA_AHCI_BAR_LENGTH_512K 0x80000
+#define N_PCH_SATA_AHCI_BAR_ALIGNMENT_512K 19
+#define B_PCH_SATA_AHCI_BAR_PF BIT3
+#define B_PCH_SATA_AHCI_BAR_TP (BIT2 | BIT1)
+#define B_PCH_SATA_AHCI_BAR_RTE BIT0
+#define R_PCH_SATA_PID 0x70
+#define B_PCH_SATA_PID_NEXT 0xFF00
+#define V_PCH_SATA_PID_NEXT_0 0xB000
+#define V_PCH_SATA_PID_NEXT_1 0xA800
+#define B_PCH_SATA_PID_CID 0x00FF
+#define R_PCH_SATA_PC 0x72
+#define S_PCH_SATA_PC 2
+#define B_PCH_SATA_PC_PME (BIT15 | BIT14 | BIT13 | BIT12 | BIT11)
+#define V_PCH_SATA_PC_PME_0 0x0000
+#define V_PCH_SATA_PC_PME_1 0x4000
+#define B_PCH_SATA_PC_D2_SUP BIT10
+#define B_PCH_SATA_PC_D1_SUP BIT9
+#define B_PCH_SATA_PC_AUX_CUR (BIT8 | BIT7 | BIT6)
+#define B_PCH_SATA_PC_DSI BIT5
+#define B_PCH_SATA_PC_PME_CLK BIT3
+#define B_PCH_SATA_PC_VER (BIT2 | BIT1 | BIT0)
+#define R_PCH_SATA_PMCS 0x74
+#define B_PCH_SATA_PMCS_PMES BIT15
+#define B_PCH_SATA_PMCS_PMEE BIT8
+#define B_PCH_SATA_PMCS_NSFRST BIT3
+#define V_PCH_SATA_PMCS_NSFRST_1 0x01
+#define V_PCH_SATA_PMCS_NSFRST_0 0x00
+#define B_PCH_SATA_PMCS_PS (BIT1 | BIT0)
+#define V_PCH_SATA_PMCS_PS_3 0x03
+#define V_PCH_SATA_PMCS_PS_0 0x00
+#define R_PCH_SATA_MID 0x80
+#define B_PCH_SATA_MID_NEXT 0xFF00
+#define B_PCH_SATA_MID_CID 0x00FF
+#define R_PCH_SATA_MC 0x82
+#define B_PCH_SATA_MC_C64 BIT7
+#define B_PCH_SATA_MC_MME (BIT6 | BIT5 | BIT4)
+#define V_PCH_SATA_MC_MME_4 0x04
+#define V_PCH_SATA_MC_MME_2 0x02
+#define V_PCH_SATA_MC_MME_1 0x01
+#define V_PCH_SATA_MC_MME_0 0x00
+#define B_PCH_SATA_MC_MMC (BIT3 | BIT2 | BIT1)
+#define V_PCH_SATA_MC_MMC_4 0x04
+#define V_PCH_SATA_MC_MMC_0 0x00
+#define B_PCH_SATA_MC_MSIE BIT0
+#define V_PCH_SATA_MC_MSIE_1 0x01
+#define V_PCH_SATA_MC_MSIE_0 0x00
+#define R_PCH_SATA_MA 0x84
+#define B_PCH_SATA_MA 0xFFFFFFFC
+#define R_PCH_SATA_MD 0x88
+#define B_PCH_SATA_MD_MSIMD 0xFFFF
+
+//
+// Sata Register for PCH-LP
+//
+#define R_PCH_LP_SATA_MAP 0x90
+#define B_PCH_LP_SATA_MAP_SPD (BIT10 | BIT9 | BIT8)
+#define N_PCH_LP_SATA_MAP_SPD 8
+#define B_PCH_LP_SATA_MAP_SPD2 BIT10
+#define B_PCH_LP_SATA_MAP_SPD1 BIT9
+#define B_PCH_LP_SATA_MAP_SPD0 BIT8
+#define B_PCH_LP_SATA_MAP_SMS_MASK BIT6
+#define N_PCH_LP_SATA_MAP_SMS_MASK 6
+#define V_PCH_LP_SATA_MAP_SMS_AHCI 0x0
+#define V_PCH_LP_SATA_MAP_SMS_RAID 0x1
+#define R_PCH_LP_SATA_PCS 0x92
+#define B_PCH_LP_SATA_PCS_OOB_RETRY BIT15
+#define B_PCH_LP_SATA_PCS_P2P BIT10
+#define B_PCH_LP_SATA_PCS_P1P BIT9
+#define B_PCH_LP_SATA_PCS_P0P BIT8
+#define B_PCH_LP_SATA_PCS_PXE_MASK (BIT2 | BIT1 | BIT0)
+#define B_PCH_LP_SATA_PCS_P2E BIT2
+#define B_PCH_LP_SATA_PCS_P1E BIT1
+#define B_PCH_LP_SATA_PCS_P0E BIT0
+#define R_PCH_LP_SATA_SCLKGC 0x94
+#define B_PCH_LP_SATA_SCLKGC_PCD (BIT26 | BIT25 | BIT24)
+#define B_PCH_LP_SATA_SCLKGC_PORT2_PCD BIT26
+#define B_PCH_LP_SATA_SCLKGC_PORT1_PCD BIT25
+#define B_PCH_LP_SATA_SCLKGC_PORT0_PCD BIT24
+#define R_PCH_LP_SATA_98 0x98
+
+//
+// Sata Register for PCH-H
+//
+#define R_PCH_H_SATA_MAP 0x90
+#define B_PCH_H_SATA_MAP_SPD 0xFF0000
+#define N_PCH_H_SATA_MAP_SPD 16
+#define B_PCH_H_SATA_MAP_SPD7 BIT23
+#define B_PCH_H_SATA_MAP_SPD6 BIT22
+#define B_PCH_H_SATA_MAP_SPD5 BIT21
+#define B_PCH_H_SATA_MAP_SPD4 BIT20
+#define B_PCH_H_SATA_MAP_SPD3 BIT19
+#define B_PCH_H_SATA_MAP_SPD2 BIT18
+#define B_PCH_H_SATA_MAP_SPD1 BIT17
+#define B_PCH_H_SATA_MAP_SPD0 BIT16
+#define B_PCH_H_SATA_MAP_PCD 0xFF
+#define B_PCH_H_SATA_MAP_PORT7_PCD BIT7
+#define B_PCH_H_SATA_MAP_PORT6_PCD BIT6
+#define B_PCH_H_SATA_MAP_PORT5_PCD BIT5
+#define B_PCH_H_SATA_MAP_PORT4_PCD BIT4
+#define B_PCH_H_SATA_MAP_PORT3_PCD BIT3
+#define B_PCH_H_SATA_MAP_PORT2_PCD BIT2
+#define B_PCH_H_SATA_MAP_PORT1_PCD BIT1
+#define B_PCH_H_SATA_MAP_PORT0_PCD BIT0
+#define R_PCH_H_SATA_PCS 0x94
+#define B_PCH_H_SATA_PCS_P7P BIT23
+#define B_PCH_H_SATA_PCS_P6P BIT22
+#define B_PCH_H_SATA_PCS_P5P BIT21
+#define B_PCH_H_SATA_PCS_P4P BIT20
+#define B_PCH_H_SATA_PCS_P3P BIT19
+#define B_PCH_H_SATA_PCS_P2P BIT18
+#define B_PCH_H_SATA_PCS_P1P BIT17
+#define B_PCH_H_SATA_PCS_P0P BIT16
+#define B_PCH_H_SATA_PCS_PXE_MASK 0xFF
+#define B_PCH_H_SATA_PCS_P7E BIT7
+#define B_PCH_H_SATA_PCS_P6E BIT6
+#define B_PCH_H_SATA_PCS_P5E BIT5
+#define B_PCH_H_SATA_PCS_P4E BIT4
+#define B_PCH_H_SATA_PCS_P3E BIT3
+#define B_PCH_H_SATA_PCS_P2E BIT2
+#define B_PCH_H_SATA_PCS_P1E BIT1
+#define B_PCH_H_SATA_PCS_P0E BIT0
+
+#define R_PCH_SATA_SATAGC 0x9C
+#define B_PCH_H_SATA_SATAGC_SMS_MASK BIT16
+#define N_PCH_H_SATA_SATAGC_SMS_MASK 16
+#define V_PCH_H_SATA_SATAGC_SMS_AHCI 0x0
+#define V_PCH_H_SATA_SATAGC_SMS_RAID 0x1
+#define B_PCH_SATA_SATAGC_AIE BIT7
+#define B_PCH_SATA_SATAGC_AIES BIT6
+#define B_PCH_SATA_SATAGC_MSS (BIT4 | BIT3)
+#define V_PCH_SATA_SATAGC_MSS_8K 0x2
+#define N_PCH_SATA_SATAGC_MSS 3
+#define B_PCH_SATA_SATAGC_ASSEL (BIT2 | BIT1 | BIT0)
+
+#define V_PCH_SATA_SATAGC_ASSEL_2K 0x0
+#define V_PCH_SATA_SATAGC_ASSEL_16K 0x1
+#define V_PCH_SATA_SATAGC_ASSEL_32K 0x2
+#define V_PCH_SATA_SATAGC_ASSEL_64K 0x3
+#define V_PCH_SATA_SATAGC_ASSEL_128K 0x4
+#define V_PCH_SATA_SATAGC_ASSEL_256K 0x5
+#define V_PCH_SATA_SATAGC_ASSEL_512K 0x6
+
+#define R_PCH_SATA_SIRI 0xA0
+#define R_PCH_SATA_STRD 0xA4
+#define R_PCH_SATA_SIR_50 0x50
+#define R_PCH_SATA_SIR_54 0x54
+#define R_PCH_SATA_SIR_58 0x58
+#define R_PCH_SATA_SIR_5C 0x5C
+#define R_PCH_SATA_SIR_60 0x60
+#define R_PCH_SATA_SIR_64 0x64
+#define R_PCH_SATA_SIR_68 0x68
+#define R_PCH_SATA_SIR_6C 0x6C
+#define R_PCH_SATA_SIR_70 0x70
+#define R_PCH_SATA_SIR_80 0x80
+#define R_PCH_SATA_SIR_84 0x84
+#define R_PCH_SATA_SIR_8C 0x8C
+#define R_PCH_SATA_SIR_90 0x90
+#define R_PCH_SATA_SIR_98 0x98
+#define R_PCH_SATA_SIR_9C 0x9C
+#define R_PCH_SATA_SIR_A0 0xA0
+#define R_PCH_SATA_SIR_A4 0xA4
+#define R_PCH_SATA_SIR_A8 0xA8
+#define R_PCH_SATA_SIR_C8 0xC8
+#define R_PCH_SATA_SIR_CC 0xCC
+#define R_PCH_SATA_SIR_D0 0xD0
+#define R_PCH_SATA_SIR_D4 0xD4
+#define B_PCH_SATA_STRD_DTA 0xFFFFFFFF
+#define B_PCH_SATA_SIR_CTM4_ORM BIT6
+#define R_PCH_SATA_CR0 0xA8
+#define B_PCH_SATA_CR0_MAJREV 0x00F00000
+#define B_PCH_SATA_CR0_MINREV 0x000F0000
+#define B_PCH_SATA_CR0_NEXT 0x0000FF00
+#define B_PCH_SATA_CR0_CAP 0x000000FF
+#define R_PCH_SATA_CR1 0xAC
+#define B_PCH_SATA_CR1_BAROFST 0xFFF0
+#define B_PCH_SATA_CR1_BARLOC 0x000F
+#define R_PCH_SATA_FLR_CID 0xB0
+#define B_PCH_SATA_FLR_CID_NEXT 0xFF00
+#define B_PCH_SATA_FLR_CID 0x00FF
+#define V_PCH_SATA_FLR_CID_1 0x0009
+#define V_PCH_SATA_FLR_CID_0 0x0013
+#define R_PCH_SATA_FLR_CLV 0xB2
+#define B_PCH_SATA_FLR_CLV_FLRC_FLRCSSEL_0 BIT9
+#define B_PCH_SATA_FLR_CLV_TXPC_FLRCSSEL_0 BIT8
+#define B_PCH_SATA_FLR_CLV_VSCID_FLRCSSEL_0 0x00FF
+#define B_PCH_SATA_FLR_CLV_VSCID_FLRCSSEL_1 0x00FF
+#define V_PCH_SATA_FLR_CLV_VSCID_FLRCSSEL 0x0006
+#define R_PCH_SATA_FLRC 0xB4
+#define B_PCH_SATA_FLRC_TXP BIT8
+#define B_PCH_SATA_FLRC_INITFLR BIT0
+#define R_PCH_SATA_SP 0xC0
+#define B_PCH_SATA_SP 0xFFFFFFFF
+#define R_PCH_SATA_MXID 0xD0
+#define N_PCH_SATA_MXID_NEXT 8
+
+#define R_PCH_SATA_BFCS 0xE0
+#define B_PCH_SATA_BFCS_P7BFI BIT17
+#define B_PCH_SATA_BFCS_P6BFI BIT16
+#define B_PCH_SATA_BFCS_P5BFI BIT15
+#define B_PCH_SATA_BFCS_P4BFI BIT14
+#define B_PCH_SATA_BFCS_P3BFI BIT13
+#define B_PCH_SATA_BFCS_P2BFI BIT12
+#define B_PCH_SATA_BFCS_P2BFS BIT11
+#define B_PCH_SATA_BFCS_P2BFF BIT10
+#define B_PCH_SATA_BFCS_P1BFI BIT9
+#define B_PCH_SATA_BFCS_P0BFI BIT8
+#define B_PCH_SATA_BFCS_BIST_FIS_T BIT7
+#define B_PCH_SATA_BFCS_BIST_FIS_A BIT6
+#define B_PCH_SATA_BFCS_BIST_FIS_S BIT5
+#define B_PCH_SATA_BFCS_BIST_FIS_L BIT4
+#define B_PCH_SATA_BFCS_BIST_FIS_F BIT3
+#define B_PCH_SATA_BFCS_BIST_FIS_P BIT2
+#define R_PCH_SATA_BFTD1 0xE4
+#define B_PCH_SATA_BFTD1 0xFFFFFFFF
+#define R_PCH_SATA_BFTD2 0xE8
+#define B_PCH_SATA_BFTD2 0xFFFFFFFF
+
+#define R_PCH_SATA_VS_CAP 0xA4
+#define B_PCH_SATA_VS_CAP_NRMBE BIT0 ///< NVM Remap Memory BAR Enable
+#define B_PCH_SATA_VS_CAP_MSL 0x1FFE ///< Memory Space Limit
+#define N_PCH_SATA_VS_CAP_MSL 1
+#define V_PCH_SATA_VS_CAP_MSL 0x1EF ///< Memory Space Limit Field Value
+#define B_PCH_SATA_VS_CAP_NRMO 0xFFF0000 ///< NVM Remapped Memory Offset
+#define N_PCH_SATA_VS_CAP_NRMO 16
+#define V_PCH_SATA_VS_CAP_NRMO 0x10 ///< NVM Remapped Memory Offset Field Value
+
+//
+// RST PCIe Storage Remapping Registers
+//
+#define R_PCH_RST_PCIE_STORAGE_RCR 0x800 ///< Remap Capability Register
+#define B_PCH_RST_PCIE_STORAGE_RCR_NRS (BIT2|BIT1|BIT0) ///< Number of Remapping Supported
+#define B_PCH_RST_PCIE_STORAGE_RCR_NRS_CR1 BIT0 ///< Number of Remapping Supported (RST PCIe Storage Cycle Router #1)
+#define R_PCH_RST_PCIE_STORAGE_AMXC 0x808 ///< AHCI MSI-X Configuration
+#define B_PCH_RST_PCIE_STORAGE_AMXC_AMXV 0x7FF ///< AHCI MSI-X Vector
+#define R_PCH_RST_PCIE_STORAGE_SPR 0x80C ///< Scratch Pad Register
+#define R_PCH_RST_PCIE_STORAGE_CR1_DCC 0x880 ///< CR#1 Device Class Code
+#define N_PCH_RST_PCIE_STORAGE_CR1_DCC_SCC 8
+#define N_PCH_RST_PCIE_STORAGE_CR1_DCC_BCC 16
+#define B_PCH_RST_PCIE_STORAGE_CR1_DCC_DT BIT31 ///< Device Type
+#define R_PCH_RST_PCIE_STORAGE_CR1_DMBL 0x884 ///< CR#1 Device Memory BAR Length
+#define R_PCH_RST_PCIE_STORAGE_CR1_DMXC 0x888 ///< CR#1 Device MSI-X Configuration
+#define N_PCH_RST_PCIE_STORAGE_CR1_DMXC_MXEV 16
+#define V_PCH_RST_PCIE_STORAGE_REMAP_CONFIG_CR 0x80 ///< Remapped Configuration for RST PCIe Storage Cycle Router #n
+#define V_PCH_RST_PCIE_STORAGE_REMAP_RP_OFFSET 0x100 ///< Remapped Root Port Offset Value
+#define R_PCH_RST_PCIE_STORAGE_GCR 0x300 ///< General Configuration Register
+#define R_PCH_RST_PCIE_STORAGE_CCFG 0x1D0 ///< Port Configuration Register
+#define B_PCH_RST_PCIE_STORAGE_GCR_CRE BIT0 ///< RST PCIe Storage Cycle Router Enable
+#define B_PCH_RST_PCIE_STORAGE_GCR_PLS 0x1FFFFE ///< PCIe Lane Selected Field
+#define B_PCH_RST_PCIE_STORAGE_GCR_PNCAIDL BIT29 ///< Configuration Access Index/Data Lockdown
+#define B_PCH_RST_PCIE_STORAGE_GCR_RCL BIT30 ///< Remapping Configuration Lockdown
+#define B_PCH_RST_PCIE_STORAGE_GCR_CREL BIT31 ///< RST PCIe Storage Cycle Router Enable Lockdown
+#define R_PCH_RST_PCIE_STORAGE_GSR 0x304 ///< General Status Register
+#define B_PCH_RST_PCIE_STORAGE_GSR_PLRC 0x1FFFFE ///< PCIe Lane Remap Capable Field
+#define B_PCH_RST_PCIE_STORAGE_GSR_PCCS BIT30 ///< Port Configuration Check Status
+#define B_PCH_RST_PCIE_STORAGE_GSR_PCCD BIT31 ///< Port Configuration Check Disable
+#define R_PCH_RST_PCIE_STORAGE_CAIR 0x308 ///< Configuration Access Index Register
+#define R_PCH_RST_PCIE_STORAGE_CADR 0x30C ///< Configuration Access Data Register
+#define R_PCH_RST_PCIE_STORAGE_MBRC 0x310 ///< Memory BAR Remap Configuration
+#define B_PCH_RST_PCIE_STORAGE_MBRC_TMB (BIT19|BIT18|BIT17|BIT16) ///< Memory BAR Remap Configuration Target Memory BAR
+#define N_PCH_RST_PCIE_STORAGE_MBRC_TMB 16
+#define V_PCH_RST_PCIE_STORAGE_MBRC_TMB_BAR0 0x4 ///< Memory BAR Remap Configuration Target Memory BAR - BAR0
+#define V_PCH_RST_PCIE_STORAGE_MBRC_TMB_BAR5 0x9 ///< Memory BAR Remap Configuration Target Memory BAR - BAR5
+#define B_PCH_RST_PCIE_STORAGE_MBRC_TT BIT20 ///< Remap Configuration Target Type
+#define B_PCH_RST_PCIE_STORAGE_MBRC_RE BIT31 ///< Remap Configuration Remap Enable
+#define R_PCH_RST_PCIE_STORAGE_IOBRSC 0x320 ///< I/O BAR Remap Source Configuration
+#define B_PCH_RST_PCIE_STORAGE_IOBRSC_RE BIT31 ///< I/O BAR Remap Source Configuration Remap Enable
+#define R_PCH_RST_PCIE_STORAGE_AIDPCRC 0x338 ///< AHCI Index/Data Pair Capability Remap Configuration
+#define B_PCH_RST_PCIE_STORAGE_AIDPCRC_TCSO 0xFF0000 ///< AHCI Index/Data Pair Capability Remap Configuration Target Capability Structure OffsBet
+#define N_PCH_RST_PCIE_STORAGE_AIDPCRC_TCSO 16
+#define B_PCH_RST_PCIE_STORAGE_AIDPCRC_RE BIT31 ///< AHCI Index/Data Pair Capability Remap Configuration Remap Enable
+#define R_PCH_RST_PCIE_STORAGE_MXCRC 0x33C ///< MSI-X Capability Remap Configuration
+#define B_PCH_RST_PCIE_STORAGE_MXCRCC_TCSO 0xFF0000 ///< MSI-X Capability Remap Configuration Target Capability Structure Offset
+#define N_PCH_RST_PCIE_STORAGE_MXCRCC_TCSO 16
+#define B_PCH_RST_PCIE_STORAGE_MXCRC_RE BIT31 ///< MSI-X Capability Remap Configuration Remap Enable
+#define R_PCH_RST_PCIE_STORAGE_MXTRC 0x340 ///< MSI-X Table Remap Configuration
+#define B_PCH_RST_PCIE_STORAGE_MXTRC_TBIR 0x07 ///< MSI-X Table Remap Configuration Table BIR
+#define B_PCH_RST_PCIE_STORAGE_MXTRC_TO 0xFFFFFFF8 ///< MSI-X Table Remap Configuration Table Offset
+#define R_PCH_RST_PCIE_STORAGE_MXTBAR 0x344 ///< MSI-X Table Base Address Register
+#define B_PCH_RST_PCIE_STORAGE_MXTBAR_TBAV BIT0 ///< MSI-X Table Base Address Register Table Base Address Valid
+#define R_PCH_RST_PCIE_STORAGE_MXPRC 0x348 ///< MSI-X PBA Remap Configuration
+#define B_PCH_RST_PCIE_STORAGE_MXPRC_TBIR 0x07 ///< MSI-X PBA Remap Configuration Table BIR
+#define B_PCH_RST_PCIE_STORAGE_MXPRC_TO 0xFFFFFFF8 ///< MSI-X PBA Remap Configuration Table Offset
+#define R_PCH_RST_PCIE_STORAGE_MXPBAR 0x34C ///< MSI-X PBA Base Address Register
+#define B_PCH_RST_PCIE_STORAGE_MXPBAR_TBAV BIT0 ///< MSI-X PBA Base Address Register Table Base Address Valid
+#define R_PCH_RST_PCIE_STORAGE_NRDF 0x350 ///< NVM Remapping Device:Function
+#define R_PCH_RST_PCIE_STORAGE_EGCR 0x354 ///< Extended General Configuration Register
+#define B_PCH_RST_PCIE_STORAGE_EGCR_CRDCGE BIT16 ///< RST PCIe Storage Cycle Router Dynamic Clock Gating Enable
+#define B_PCH_RST_PCIE_STORAGE_EGCR_CRTCGE BIT17 ///< RST PCIe Storage Cycle Router Trunk Clock Gating Enable
+#define B_PCH_RST_PCIE_STORAGE_EGCR_ICAS BIT19 ///< IOSF CLKREQ Assertion Select
+#define B_PCH_RST_PCIE_STORAGE_EGCR_TSCAS BIT20 ///< To SATA CLKREQ Assertion Select
+#define R_PCH_RST_PCIE_STORAGE_SAPI 0x358 ///< Shadowed AHCI Ports Implemented
+#define R_PCH_RST_PCIE_STORAGE_CRGC 0xFC0 ///< RST PCIe Storage Cycle Router Global Control
+#define B_PCH_RST_PCIE_STORAGE_CRGC_CRAS (BIT1|BIT0) ///< RST PCIe Storage Cycle Router Global Control Cycle Router Accessibility Select
+
+//
+// AHCI BAR Area related Registers
+//
+#define R_PCH_SATA_AHCI_CAP 0x0
+#define B_PCH_SATA_AHCI_CAP_S64A BIT31
+#define B_PCH_SATA_AHCI_CAP_SCQA BIT30
+#define B_PCH_SATA_AHCI_CAP_SSNTF BIT29
+#define B_PCH_SATA_AHCI_CAP_SIS BIT28 ///< Supports Interlock Switch
+#define B_PCH_SATA_AHCI_CAP_SSS BIT27 ///< Supports Stagger Spin-up
+#define B_PCH_SATA_AHCI_CAP_SALP BIT26
+#define B_PCH_SATA_AHCI_CAP_SAL BIT25
+#define B_PCH_SATA_AHCI_CAP_SCLO BIT24 ///< Supports Command List Override
+#define B_PCH_SATA_AHCI_CAP_ISS_MASK (BIT23 | BIT22 | BIT21 | BIT20)
+#define N_PCH_SATA_AHCI_CAP_ISS 20 ///< Interface Speed Support
+#define V_PCH_SATA_AHCI_CAP_ISS_1_5_G 0x01
+#define V_PCH_SATA_AHCI_CAP_ISS_3_0_G 0x02
+#define V_PCH_SATA_AHCI_CAP_ISS_6_0_G 0x03
+#define B_PCH_SATA_AHCI_CAP_SNZO BIT19
+#define B_PCH_SATA_AHCI_CAP_SAM BIT18
+#define B_PCH_SATA_AHCI_CAP_PMS BIT17 ///< Supports Port Multiplier
+#define B_PCH_SATA_AHCI_CAP_PMD BIT15 ///< PIO Multiple DRQ Block
+#define B_PCH_SATA_AHCI_CAP_SSC BIT14
+#define B_PCH_SATA_AHCI_CAP_PSC BIT13
+#define B_PCH_SATA_AHCI_CAP_NCS 0x1F00
+#define B_PCH_SATA_AHCI_CAP_CCCS BIT7
+#define B_PCH_SATA_AHCI_CAP_EMS BIT6
+#define B_PCH_SATA_AHCI_CAP_SXS BIT5 ///< External SATA is supported
+#define B_PCH_SATA_AHCI_CAP_NPS 0x001F
+
+#define R_PCH_SATA_AHCI_GHC 0x04
+#define B_PCH_SATA_AHCI_GHC_AE BIT31
+#define B_PCH_SATA_AHCI_GHC_MRSM BIT2
+#define B_PCH_SATA_AHCI_GHC_IE BIT1
+#define B_PCH_SATA_AHCI_GHC_HR BIT0
+
+#define R_PCH_SATA_AHCI_IS 0x08
+#define B_PCH_SATA_AHCI_IS_PORT7 BIT7
+#define B_PCH_SATA_AHCI_IS_PORT6 BIT6
+#define B_PCH_SATA_AHCI_IS_PORT5 BIT5
+#define B_PCH_SATA_AHCI_IS_PORT4 BIT4
+#define B_PCH_SATA_AHCI_IS_PORT3 BIT3
+#define B_PCH_SATA_AHCI_IS_PORT2 BIT2
+#define B_PCH_SATA_AHCI_IS_PORT1 BIT1
+#define B_PCH_SATA_AHCI_IS_PORT0 BIT0
+#define R_SATA_MEM_AHCI_PI 0x0C
+#define B_PCH_H_SATA_PORT_MASK 0xFF
+#define B_PCH_LP_SATA_PORT_MASK 0x03
+#define B_PCH_SATA_PORT7_IMPLEMENTED BIT7
+#define B_PCH_SATA_PORT6_IMPLEMENTED BIT6
+#define B_PCH_SATA_PORT5_IMPLEMENTED BIT5
+#define B_PCH_SATA_PORT4_IMPLEMENTED BIT4
+#define B_PCH_SATA_PORT3_IMPLEMENTED BIT3
+#define B_PCH_SATA_PORT2_IMPLEMENTED BIT2
+#define B_PCH_SATA_PORT1_IMPLEMENTED BIT1
+#define B_PCH_SATA_PORT0_IMPLEMENTED BIT0
+#define R_PCH_SATA_AHCI_VS 0x10
+#define B_PCH_SATA_AHCI_VS_MJR 0xFFFF0000
+#define B_PCH_SATA_AHCI_VS_MNR 0x0000FFFF
+#define R_PCH_SATA_AHCI_EM_LOC 0x1C
+#define B_PCH_SATA_AHCI_EM_LOC_OFST 0xFFFF0000
+#define B_PCH_SATA_AHCI_EM_LOC_SZ 0x0000FFFF
+#define R_PCH_SATA_AHCI_EM_CTRL 0x20
+#define B_PCH_SATA_AHCI_EM_CTRL_ATTR_ALHD BIT26
+#define B_PCH_SATA_AHCI_EM_CTRL_ATTR_XMT BIT25
+#define B_PCH_SATA_AHCI_EM_CTRL_ATTR_SMB BIT24
+#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_SGPIO BIT19
+#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_SES2 BIT18
+#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_SAFTE BIT17
+#define B_PCH_SATA_AHCI_EM_CTRL_SUPP_LED BIT16
+#define B_PCH_SATA_AHCI_EM_CTRL_RST BIT9
+#define B_PCH_SATA_AHCI_EM_CTRL_CTL_TM BIT8
+#define B_PCH_SATA_AHCI_EM_CTRL_STS_MR BIT0
+#define R_PCH_SATA_AHCI_CAP2 0x24
+#define B_PCH_SATA_AHCI_CAP2_DESO BIT5
+#define B_PCH_SATA_AHCI_CAP2_SADM BIT4
+#define B_PCH_SATA_AHCI_CAP2_SDS BIT3
+#define B_PCH_SATA_AHCI_CAP2_APST BIT2 ///< Automatic Partial to Slumber Transitions
+#define R_PCH_SATA_AHCI_VSP 0xA0
+#define B_PCH_SATA_AHCI_VSP_SLPD BIT0
+#define R_PCH_SATA_AHCI_RSTF 0xC8 ///< RST Feature Capabilities
+#define B_PCH_SATA_AHCI_RSTF_OUD (BIT11 | BIT10)
+#define N_PCH_SATA_AHCI_RSTF_OUD 10
+#define B_PCH_SATA_AHCI_RSTF_SEREQ BIT9
+#define B_PCH_SATA_AHCI_RSTF_IROES BIT8
+#define B_PCH_SATA_AHCI_RSTF_LEDL BIT7
+#define B_PCH_SATA_AHCI_RSTF_HDDLK BIT6
+#define B_PCH_SATA_AHCI_RSTF_IRSTOROM BIT5
+#define B_PCH_SATA_AHCI_RSTF_RSTE BIT4
+#define B_PCH_SATA_AHCI_RSTF_R5E BIT3
+#define B_PCH_SATA_AHCI_RSTF_R10E BIT2
+#define B_PCH_SATA_AHCI_RSTF_R1E BIT1
+#define B_PCH_SATA_AHCI_RSTF_R0E BIT0
+#define B_PCH_SATA_AHCI_RSTF_LOWBYTES 0x1FF
+#define R_PCH_SATA_AHCI_P0CLB 0x100
+#define R_PCH_SATA_AHCI_P1CLB 0x180
+#define R_PCH_SATA_AHCI_P2CLB 0x200
+#define R_PCH_SATA_AHCI_P3CLB 0x280
+#define R_PCH_SATA_AHCI_P4CLB 0x300
+#define R_PCH_SATA_AHCI_P5CLB 0x380
+#define R_PCH_SATA_AHCI_P6CLB 0x400
+#define R_PCH_SATA_AHCI_P7CLB 0x480
+#define B_PCH_SATA_AHCI_PXCLB 0xFFFFFC00
+#define R_PCH_SATA_AHCI_P0CLBU 0x104
+#define R_PCH_SATA_AHCI_P1CLBU 0x184
+#define R_PCH_SATA_AHCI_P2CLBU 0x204
+#define R_PCH_SATA_AHCI_P3CLBU 0x284
+#define R_PCH_SATA_AHCI_P4CLBU 0x304
+#define R_PCH_SATA_AHCI_P5CLBU 0x384
+#define R_PCH_SATA_AHCI_P6CLBU 0x404
+#define R_PCH_SATA_AHCI_P7CLBU 0x484
+#define B_PCH_SATA_AHCI_PXCLBU 0xFFFFFFFF
+#define R_PCH_SATA_AHCI_P0FB 0x108
+#define R_PCH_SATA_AHCI_P1FB 0x188
+#define R_PCH_SATA_AHCI_P2FB 0x208
+#define R_PCH_SATA_AHCI_P3FB 0x288
+#define R_PCH_SATA_AHCI_P4FB 0x308
+#define R_PCH_SATA_AHCI_P5FB 0x388
+#define R_PCH_SATA_AHCI_P6FB 0x408
+#define R_PCH_SATA_AHCI_P7FB 0x488
+#define B_PCH_SATA_AHCI_PXFB 0xFFFFFF00
+#define R_PCH_SATA_AHCI_P0FBU 0x10C
+#define R_PCH_SATA_AHCI_P1FBU 0x18C
+#define R_PCH_SATA_AHCI_P2FBU 0x20C
+#define R_PCH_SATA_AHCI_P3FBU 0x28C
+#define R_PCH_SATA_AHCI_P4FBU 0x30C
+#define R_PCH_SATA_AHCI_P5FBU 0x38C
+#define R_PCH_SATA_AHCI_P6FBU 0x40C
+#define R_PCH_SATA_AHCI_P7FBU 0x48C
+#define B_PCH_SATA_AHCI_PXFBU 0xFFFFFFFF
+#define R_PCH_SATA_AHCI_P0IS 0x110
+#define R_PCH_SATA_AHCI_P1IS 0x190
+#define R_PCH_SATA_AHCI_P2IS 0x210
+#define R_PCH_SATA_AHCI_P3IS 0x290
+#define R_PCH_SATA_AHCI_P4IS 0x310
+#define R_PCH_SATA_AHCI_P5IS 0x390
+#define R_PCH_SATA_AHCI_P6IS 0x410
+#define R_PCH_SATA_AHCI_P7IS 0x490
+#define B_PCH_SATA_AHCI_PXIS_CPDS BIT31
+#define B_PCH_SATA_AHCI_PXIS_TFES BIT30
+#define B_PCH_SATA_AHCI_PXIS_HBFS BIT29
+#define B_PCH_SATA_AHCI_PXIS_HBDS BIT28
+#define B_PCH_SATA_AHCI_PXIS_IFS BIT27
+#define B_PCH_SATA_AHCI_PXIS_INFS BIT26
+#define B_PCH_SATA_AHCI_PXIS_OFS BIT24
+#define B_PCH_SATA_AHCI_PXIS_IPMS BIT23
+#define B_PCH_SATA_AHCI_PXIS_PRCS BIT22
+#define B_PCH_SATA_AHCI_PXIS_DIS BIT7
+#define B_PCH_SATA_AHCI_PXIS_PCS BIT6
+#define B_PCH_SATA_AHCI_PXIS_DPS BIT5
+#define B_PCH_SATA_AHCI_PXIS_UFS BIT4
+#define B_PCH_SATA_AHCI_PXIS_SDBS BIT3
+#define B_PCH_SATA_AHCI_PXIS_DSS BIT2
+#define B_PCH_SATA_AHCI_PXIS_PSS BIT1
+#define B_PCH_SATA_AHCI_PXIS_DHRS BIT0
+#define R_PCH_SATA_AHCI_P0IE 0x114
+#define R_PCH_SATA_AHCI_P1IE 0x194
+#define R_PCH_SATA_AHCI_P2IE 0x214
+#define R_PCH_SATA_AHCI_P3IE 0x294
+#define R_PCH_SATA_AHCI_P4IE 0x314
+#define R_PCH_SATA_AHCI_P5IE 0x394
+#define R_PCH_SATA_AHCI_P6IE 0x414
+#define R_PCH_SATA_AHCI_P7IE 0x494
+#define B_PCH_SATA_AHCI_PXIE_CPDE BIT31
+#define B_PCH_SATA_AHCI_PXIE_TFEE BIT30
+#define B_PCH_SATA_AHCI_PXIE_HBFE BIT29
+#define B_PCH_SATA_AHCI_PXIE_HBDE BIT28
+#define B_PCH_SATA_AHCI_PXIE_IFE BIT27
+#define B_PCH_SATA_AHCI_PXIE_INFE BIT26
+#define B_PCH_SATA_AHCI_PXIE_OFE BIT24
+#define B_PCH_SATA_AHCI_PXIE_IPME BIT23
+#define B_PCH_SATA_AHCI_PXIE_PRCE BIT22
+#define B_PCH_SATA_AHCI_PXIE_DIE BIT7
+#define B_PCH_SATA_AHCI_PXIE_PCE BIT6
+#define B_PCH_SATA_AHCI_PXIE_DPE BIT5
+#define B_PCH_SATA_AHCI_PXIE_UFIE BIT4
+#define B_PCH_SATA_AHCI_PXIE_SDBE BIT3
+#define B_PCH_SATA_AHCI_PXIE_DSE BIT2
+#define B_PCH_SATA_AHCI_PXIE_PSE BIT1
+#define B_PCH_SATA_AHCI_PXIE_DHRE BIT0
+#define R_PCH_SATA_AHCI_P0CMD 0x118
+#define R_PCH_SATA_AHCI_P1CMD 0x198
+#define R_PCH_SATA_AHCI_P2CMD 0x218
+#define R_PCH_SATA_AHCI_P3CMD 0x298
+#define R_PCH_SATA_AHCI_P4CMD 0x318
+#define R_PCH_SATA_AHCI_P5CMD 0x398
+#define R_PCH_SATA_AHCI_P6CMD 0x418
+#define R_PCH_SATA_AHCI_P7CMD 0x498
+#define B_PCH_SATA_AHCI_PxCMD_ICC (BIT31 | BIT30 | BIT29 | BIT28)
+#define B_PCH_SATA_AHCI_PxCMD_MASK (BIT27 | BIT26 | BIT22 | BIT21 | BIT19 | BIT18)
+#define B_PCH_SATA_AHCI_PxCMD_ASP BIT27
+#define B_PCH_SATA_AHCI_PxCMD_ALPE BIT26
+#define B_PCH_SATA_AHCI_PxCMD_DLAE BIT25
+#define B_PCH_SATA_AHCI_PxCMD_ATAPI BIT24
+#define B_PCH_SATA_AHCI_PxCMD_APSTE BIT23
+#define B_PCH_SATA_AHCI_PxCMD_SUD BIT1
+#define R_PCH_SATA_AHCI_P0DEVSLP 0x144
+#define R_PCH_SATA_AHCI_P1DEVSLP 0x1C4
+#define R_PCH_SATA_AHCI_P2DEVSLP 0x244
+#define R_PCH_SATA_AHCI_P3DEVSLP 0x2C4
+#define R_PCH_SATA_AHCI_P4DEVSLP 0x344
+#define R_PCH_SATA_AHCI_P5DEVSLP 0x3C4
+#define R_PCH_SATA_AHCI_P6DEVSLP 0x444
+#define R_PCH_SATA_AHCI_P7DEVSLP 0x4C4
+#define B_PCH_SATA_AHCI_PxDEVSLP_DSP BIT1
+#define B_PCH_SATA_AHCI_PxDEVSLP_ADSE BIT0
+#define B_PCH_SATA_AHCI_PxDEVSLP_DITO_MASK 0x01FF8000
+#define V_PCH_SATA_AHCI_PxDEVSLP_DITO_625 0x01388000
+#define B_PCH_SATA_AHCI_PxDEVSLP_DM_MASK 0x1E000000
+#define V_PCH_SATA_AHCI_PxDEVSLP_DM_16 0x1E000000
+#define B_PCH_SATA_AHCI_PxCMD_ESP BIT21 ///< Used with an external SATA device
+#define B_PCH_SATA_AHCI_PxCMD_MPSP BIT19 ///< Mechanical Switch Attached to Port
+#define B_PCH_SATA_AHCI_PxCMD_HPCP BIT18 ///< Hotplug capable
+#define B_PCH_SATA_AHCI_PxCMD_CR BIT15
+#define B_SATA_MEM_AHCI_PxCMD_FR BIT14
+#define B_PCH_SATA_AHCI_PxCMD_ISS BIT13
+#define B_PCH_SATA_AHCI_PxCMD_CCS 0x00001F00
+#define B_SATA_MEM_AHCI_PxCMD_FRE BIT4
+#define B_PCH_SATA_AHCI_PxCMD_CLO BIT3
+#define B_PCH_SATA_AHCI_PxCMD_POD BIT2
+#define B_PCH_SATA_AHCI_PxCMD_SUD BIT1
+#define B_PCH_SATA_AHCI_PxCMD_ST BIT0
+#define R_PCH_SATA_AHCI_P0TFD 0x120
+#define R_PCH_SATA_AHCI_P1TFD 0x1A0
+#define R_PCH_SATA_AHCI_P2TFD 0x220
+#define R_PCH_SATA_AHCI_P3TFD 0x2A0
+#define R_PCH_SATA_AHCI_P4TFD 0x320
+#define R_PCH_SATA_AHCI_P5TFD 0x3A0
+#define R_PCH_SATA_AHCI_P6TFD 0x420
+#define B_PCH_SATA_AHCI_PXTFD_ERR 0x0000FF00
+#define B_PCH_SATA_AHCI_PXTFD_STS 0x000000FF
+#define R_PCH_SATA_AHCI_P0SIG 0x124
+#define R_PCH_SATA_AHCI_P1SIG 0x1A4
+#define R_PCH_SATA_AHCI_P2SIG 0x224
+#define R_PCH_SATA_AHCI_P3SIG 0x2A4
+#define R_PCH_SATA_AHCI_P4SIG 0x324
+#define R_PCH_SATA_AHCI_P5SIG 0x3A4
+#define R_PCH_SATA_AHCI_P6SIG 0x424
+#define B_PCH_SATA_AHCI_PXSIG_LBA_HR 0xFF000000
+#define B_PCH_SATA_AHCI_PXSIG_LBA_MR 0x00FF0000
+#define B_PCH_SATA_AHCI_PXSIG_LBA_LR 0x0000FF00
+#define B_PCH_SATA_AHCI_PXSIG_SCR 0x000000FF
+#define R_PCH_SATA_AHCI_P0SSTS 0x128
+#define R_PCH_SATA_AHCI_P1SSTS 0x1A8
+#define R_PCH_SATA_AHCI_P2SSTS 0x228
+#define R_PCH_SATA_AHCI_P3SSTS 0x2A8
+#define R_PCH_SATA_AHCI_P4SSTS 0x328
+#define R_PCH_SATA_AHCI_P5SSTS 0x3A8
+#define R_PCH_SATA_AHCI_P6SSTS 0x428
+#define B_PCH_SATA_AHCI_PXSSTS_IPM_0 0x00000000
+#define B_PCH_SATA_AHCI_PXSSTS_IPM_1 0x00000100
+#define B_PCH_SATA_AHCI_PXSSTS_IPM_2 0x00000200
+#define B_PCH_SATA_AHCI_PXSSTS_IPM_6 0x00000600
+#define B_PCH_SATA_AHCI_PXSSTS_SPD_0 0x00000000
+#define B_PCH_SATA_AHCI_PXSSTS_SPD_1 0x00000010
+#define B_PCH_SATA_AHCI_PXSSTS_SPD_2 0x00000020
+#define B_PCH_SATA_AHCI_PXSSTS_SPD_3 0x00000030
+#define B_PCH_SATA_AHCI_PXSSTS_DET_0 0x00000000
+#define B_PCH_SATA_AHCI_PXSSTS_DET_1 0x00000001
+#define B_PCH_SATA_AHCI_PXSSTS_DET_3 0x00000003
+#define B_PCH_SATA_AHCI_PXSSTS_DET_4 0x00000004
+#define R_PCH_SATA_AHCI_P0SCTL 0x12C
+#define R_PCH_SATA_AHCI_P1SCTL 0x1AC
+#define R_PCH_SATA_AHCI_P2SCTL 0x22C
+#define R_PCH_SATA_AHCI_P3SCTL 0x2AC
+#define R_PCH_SATA_AHCI_P4SCTL 0x32C
+#define R_PCH_SATA_AHCI_P5SCTL 0x3AC
+#define R_PCH_SATA_AHCI_P6SCTL 0x42C
+#define B_PCH_SATA_AHCI_PXSCTL_IPM 0x00000F00
+#define V_PCH_SATA_AHCI_PXSCTL_IPM_0 0x00000000
+#define V_PCH_SATA_AHCI_PXSCTL_IPM_1 0x00000100
+#define V_PCH_SATA_AHCI_PXSCTL_IPM_2 0x00000200
+#define V_PCH_SATA_AHCI_PXSCTL_IPM_3 0x00000300
+#define B_PCH_SATA_AHCI_PXSCTL_SPD 0x000000F0
+#define V_PCH_SATA_AHCI_PXSCTL_SPD_0 0x00000000
+#define V_PCH_SATA_AHCI_PXSCTL_SPD_1 0x00000010
+#define V_PCH_SATA_AHCI_PXSCTL_SPD_2 0x00000020
+#define V_PCH_SATA_AHCI_PXSCTL_SPD_3 0x00000030
+#define B_PCH_SATA_AHCI_PXSCTL_DET 0x0000000F
+#define V_PCH_SATA_AHCI_PXSCTL_DET_0 0x00000000
+#define V_PCH_SATA_AHCI_PXSCTL_DET_1 0x00000001
+#define V_PCH_SATA_AHCI_PXSCTL_DET_4 0x00000004
+#define R_PCH_SATA_AHCI_P0SERR 0x130
+#define R_PCH_SATA_AHCI_P1SERR 0x1B0
+#define R_PCH_SATA_AHCI_P2SERR 0x230
+#define R_PCH_SATA_AHCI_P3SERR 0x2B0
+#define R_PCH_SATA_AHCI_P4SERR 0x330
+#define R_PCH_SATA_AHCI_P5SERR 0x3B0
+#define R_PCH_SATA_AHCI_P6SERR 0x430
+#define B_PCH_SATA_AHCI_PXSERR_EXCHG BIT26
+#define B_PCH_SATA_AHCI_PXSERR_UN_FIS_TYPE BIT25
+#define B_PCH_SATA_AHCI_PXSERR_TRSTE_24 BIT24
+#define B_PCH_SATA_AHCI_PXSERR_TRSTE_23 BIT23
+#define B_PCH_SATA_AHCI_PXSERR_HANDSHAKE BIT22
+#define B_PCH_SATA_AHCI_PXSERR_CRC_ERROR BIT21
+#define B_PCH_SATA_AHCI_PXSERR_10B8B_DECERR BIT19
+#define B_PCH_SATA_AHCI_PXSERR_COMM_WAKE BIT18
+#define B_PCH_SATA_AHCI_PXSERR_PHY_ERROR BIT17
+#define B_PCH_SATA_AHCI_PXSERR_PHY_RDY_CHG BIT16
+#define B_PCH_SATA_AHCI_PXSERR_INTRNAL_ERR BIT11
+#define B_PCH_SATA_AHCI_PXSERR_PROTOCOL_ERR BIT10
+#define B_PCH_SATA_AHCI_PXSERR_PCDIE BIT9
+#define B_PCH_SATA_AHCI_PXSERR_TDIE BIT8
+#define B_PCH_SATA_AHCI_PXSERR_RCE BIT1
+#define B_PCH_SATA_AHCI_PXSERR_RDIE BIT0
+#define R_PCH_SATA_AHCI_P0SACT 0x134
+#define R_PCH_SATA_AHCI_P1SACT 0x1B4
+#define R_PCH_SATA_AHCI_P2SACT 0x234
+#define R_PCH_SATA_AHCI_P3SACT 0x2B4
+#define R_PCH_SATA_AHCI_P4SACT 0x334
+#define R_PCH_SATA_AHCI_P5SACT 0x3B4
+#define R_PCH_SATA_AHCI_P6SACT 0x434
+#define B_PCH_SATA_AHCI_PXSACT_DS 0xFFFFFFFF
+#define R_PCH_SATA_AHCI_P0CI 0x138
+#define R_PCH_SATA_AHCI_P1CI 0x1B8
+#define R_PCH_SATA_AHCI_P2CI 0x238
+#define R_PCH_SATA_AHCI_P3CI 0x2B8
+#define R_PCH_SATA_AHCI_P4CI 0x338
+#define R_PCH_SATA_AHCI_P5CI 0x3B8
+#define R_PCH_SATA_AHCI_P6CI 0x438
+#define B_PCH_SATA_AHCI_PXCI 0xFFFFFFFF
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h
new file mode 100644
index 0000000000..80d116493a
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h
@@ -0,0 +1,157 @@
+/** @file
+ Register names for PCH Smbus Device.
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_SMBUS_H_
+#define _PCH_REGS_SMBUS_H_
+
+//
+// SMBus Controller Registers (D31:F4)
+//
+#define PCI_DEVICE_NUMBER_PCH_SMBUS 31
+#define PCI_FUNCTION_NUMBER_PCH_SMBUS 4
+#define V_PCH_SMBUS_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_H_SMBUS_DEVICE_ID 0xA123
+//
+// LBG Production SMBus Controller Device ID
+//
+#define V_PCH_LBG_PROD_SMBUS_DEVICE_ID 0xA1A3
+//
+// LBG SSX (Super SKU) SMBus Controller Device ID
+//
+#define V_PCH_LBG_SMBUS_DEVICE_ID 0xA223
+#define V_PCH_LP_SMBUS_DEVICE_ID 0x9D23
+#define R_PCH_SMBUS_BASE 0x20
+#define V_PCH_SMBUS_BASE_SIZE (1 << 5)
+#define B_PCH_SMBUS_BASE_BAR 0x0000FFE0
+#define R_PCH_SMBUS_HOSTC 0x40
+#define B_PCH_SMBUS_HOSTC_SPDWD BIT4
+#define B_PCH_SMBUS_HOSTC_SSRESET BIT3
+#define B_PCH_SMBUS_HOSTC_I2C_EN BIT2
+#define B_PCH_SMBUS_HOSTC_SMI_EN BIT1
+#define B_PCH_SMBUS_HOSTC_HST_EN BIT0
+#define R_PCH_SMBUS_TCOBASE 0x50
+#define B_PCH_SMBUS_TCOBASE_BAR 0x0000FFE0
+#define R_PCH_SMBUS_TCOCTL 0x54
+#define B_PCH_SMBUS_TCOCTL_TCO_BASE_EN BIT8
+#define B_PCH_SMBUS_TCOCTL_TCO_BASE_LOCK BIT0
+#define R_PCH_SMBUS_64 0x64
+#define R_PCH_SMBUS_80 0x80
+
+//
+// SMBus I/O Registers
+//
+#define R_PCH_SMBUS_HSTS 0x00 ///< Host Status Register R/W
+#define B_PCH_SMBUS_HBSY 0x01
+#define B_PCH_SMBUS_INTR 0x02
+#define B_PCH_SMBUS_DERR 0x04
+#define B_PCH_SMBUS_BERR 0x08
+#define B_PCH_SMBUS_FAIL 0x10
+#define B_PCH_SMBUS_SMBALERT_STS 0x20
+#define B_PCH_SMBUS_IUS 0x40
+#define B_PCH_SMBUS_BYTE_DONE_STS 0x80
+#define B_PCH_SMBUS_ERROR (B_PCH_SMBUS_DERR | B_PCH_SMBUS_BERR | B_PCH_SMBUS_FAIL)
+#define B_PCH_SMBUS_HSTS_ALL 0xFF
+#define R_PCH_SMBUS_HCTL 0x02 ///< Host Control Register R/W
+#define B_PCH_SMBUS_INTREN 0x01
+#define B_PCH_SMBUS_KILL 0x02
+#define B_PCH_SMBUS_SMB_CMD 0x1C
+#define V_PCH_SMBUS_SMB_CMD_QUICK 0x00
+#define V_PCH_SMBUS_SMB_CMD_BYTE 0x04
+#define V_PCH_SMBUS_SMB_CMD_BYTE_DATA 0x08
+#define V_PCH_SMBUS_SMB_CMD_WORD_DATA 0x0C
+#define V_PCH_SMBUS_SMB_CMD_PROCESS_CALL 0x10
+#define V_PCH_SMBUS_SMB_CMD_BLOCK 0x14
+#define V_PCH_SMBUS_SMB_CMD_IIC_READ 0x18
+#define V_PCH_SMBUS_SMB_CMD_BLOCK_PROCESS 0x1C
+#define B_PCH_SMBUS_LAST_BYTE 0x20
+#define B_PCH_SMBUS_START 0x40
+#define B_PCH_SMBUS_PEC_EN 0x80
+#define R_PCH_SMBUS_HCMD 0x03 ///< Host Command Register R/W
+#define R_PCH_SMBUS_TSA 0x04 ///< Transmit Slave Address Register R/W
+#define B_PCH_SMBUS_RW_SEL 0x01
+#define B_PCH_SMBUS_READ 0x01 // RW
+#define B_PCH_SMBUS_WRITE 0x00 // RW
+#define B_PCH_SMBUS_ADDRESS 0xFE
+#define R_PCH_SMBUS_HD0 0x05 ///< Data 0 Register R/W
+#define R_PCH_SMBUS_HD1 0x06 ///< Data 1 Register R/W
+#define R_PCH_SMBUS_HBD 0x07 ///< Host Block Data Register R/W
+#define R_PCH_SMBUS_PEC 0x08 ///< Packet Error Check Data Register R/W
+#define R_PCH_SMBUS_RSA 0x09 ///< Receive Slave Address Register R/W
+#define B_PCH_SMBUS_SLAVE_ADDR 0x7F
+#define R_PCH_SMBUS_SD 0x0A ///< Receive Slave Data Register R/W
+#define R_PCH_SMBUS_AUXS 0x0C ///< Auxiliary Status Register R/WC
+#define B_PCH_SMBUS_CRCE 0x01
+#define B_PCH_SMBUS_STCO 0x02 ///< SMBus TCO Mode
+#define R_PCH_SMBUS_AUXC 0x0D ///< Auxiliary Control Register R/W
+#define B_PCH_SMBUS_AAC 0x01
+#define B_PCH_SMBUS_E32B 0x02
+#define R_PCH_SMBUS_SMLC 0x0E ///< SMLINK Pin Control Register R/W
+#define B_PCH_SMBUS_SMLINK0_CUR_STS 0x01
+#define B_PCH_SMBUS_SMLINK1_CUR_STS 0x02
+#define B_PCH_SMBUS_SMLINK_CLK_CTL 0x04
+#define R_PCH_SMBUS_SMBC 0x0F ///< SMBus Pin Control Register R/W
+#define B_PCH_SMBUS_SMBCLK_CUR_STS 0x01
+#define B_PCH_SMBUS_SMBDATA_CUR_STS 0x02
+#define B_PCH_SMBUS_SMBCLK_CTL 0x04
+#define R_PCH_SMBUS_SSTS 0x10 ///< Slave Status Register R/WC
+#define B_PCH_SMBUS_HOST_NOTIFY_STS 0x01
+#define R_PCH_SMBUS_SCMD 0x11 ///< Slave Command Register R/W
+#define B_PCH_SMBUS_HOST_NOTIFY_INTREN 0x01
+#define B_PCH_SMBUS_HOST_NOTIFY_WKEN 0x02
+#define B_PCH_SMBUS_SMBALERT_DIS 0x04
+#define R_PCH_SMBUS_NDA 0x14 ///< Notify Device Address Register RO
+#define B_PCH_SMBUS_DEVICE_ADDRESS 0xFE
+#define R_PCH_SMBUS_NDLB 0x16 ///< Notify Data Low Byte Register RO
+#define R_PCH_SMBUS_NDHB 0x17 ///< Notify Data High Byte Register RO
+
+//
+// SMBus Private Config Registers
+// (PID:SMB)
+//
+#define R_PCH_PCR_SMBUS_TCOCFG 0x00 ///< TCO Configuration register
+#define B_PCH_PCR_SMBUS_TCOCFG_IE BIT7 ///< TCO IRQ Enable
+#define B_PCH_PCR_SMBUS_TCOCFG_IS (BIT2 | BIT1 | BIT0) ///< TCO IRQ Select
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_9 0x00
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_10 0x01
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_11 0x02
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_20 0x04 ///< only if APIC enabled
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_21 0x05 ///< only if APIC enabled
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_22 0x06 ///< only if APIC enabled
+#define V_PCH_PCR_SMBUS_TCOCFG_IRQ_23 0x07 ///< only if APIC enabled
+#define R_PCH_PCR_SMBUS_SMBTM 0x04 ///< SMBus Test Mode
+#define B_PCH_PCR_SMBUS_SMBTM_SMBCT BIT1 ///< SMBus Counter
+#define B_PCH_PCR_SMBUS_SMBTM_SMBDG BIT0 ///< SMBus Deglitch
+#define R_PCH_PCR_SMBUS_SCTM 0x08 ///< Short Counter Test Mode
+#define B_PCH_PCR_SMBUS_SCTM_SSU BIT31 ///< Simulation Speed-Up
+#define R_PCH_PCR_SMBUS_GC 0x0C ///< General Control
+#define B_PCH_PCR_SMBUS_GC_FD BIT0 ///< Function Disable
+#define B_PCH_PCR_SMBUS_GC_NR BIT1 ///< No Reboot
+#define B_PCH_PCR_SMBUS_GC_SMBSCGE BIT2 ///< SMB Static Clock Gating Enable
+#define R_PCH_PCR_SMBUS_PCE 0x10 ///< Power Control Enable
+#define B_PCH_PCR_SMBUS_PCE_HAE BIT5 ///< Hardware Autonomous Enable
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h
new file mode 100644
index 0000000000..cbd3dad872
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h
@@ -0,0 +1,354 @@
+/** @file
+ Register names for PCH SPI device.
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_SPI_H_
+#define _PCH_REGS_SPI_H_
+
+//
+// SPI Registers (D31:F5)
+//
+
+#define PCI_DEVICE_NUMBER_PCH_SPI 31
+#define PCI_FUNCTION_NUMBER_PCH_SPI 5
+#define V_PCH_SPI_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_H_SPI_DEVICE_ID 0xA124
+//
+// LBG PRODUCTION SPI Device ID
+//
+#define V_PCH_LBG_PROD_SPI_DEVICE_ID 0xA1A4
+//
+// LBG SSX (Super SKU) SPI Device ID
+//
+#define V_PCH_LBG_SPI_DEVICE_ID 0xA224
+#define V_PCH_LP_SPI_DEVICE_ID 0x9D24
+#define R_SPI_CFG_BAR0 0x10
+#define B_SPI_CFG_BAR0_MASK 0x0FFF
+
+#define R_SPI_CFG_BDE 0xD8
+#define B_SPI_CFG_BDE_F8 0x8000
+#define B_SPI_CFG_BDE_F0 0x4000
+#define B_SPI_CFG_BDE_E8 0x2000
+#define B_SPI_CFG_BDE_E0 0x1000
+#define B_SPI_CFG_BDE_D8 0x0800
+#define B_SPI_CFG_BDE_D0 0x0400
+#define B_SPI_CFG_BDE_C8 0x0200
+#define B_SPI_CFG_BDE_C0 0x0100
+#define B_SPI_CFG_BDE_LEG_F 0x0080
+#define B_SPI_CFG_BDE_LEG_E 0x0040
+#define B_SPI_CFG_BDE_70 0x0008
+#define B_SPI_CFG_BDE_60 0x0004
+#define B_SPI_CFG_BDE_50 0x0002
+#define B_SPI_CFG_BDE_40 0x0001
+
+#define R_SPI_CFG_BC 0xDC
+#define S_SPI_CFG_BC 4
+#define N_SPI_CFG_BC_ASE_BWP 11
+#define B_SPI_CFG_BC_ASE_BWP BIT11
+#define N_SPI_CFG_BC_ASYNC_SS 10
+#define B_SPI_CFG_BC_ASYNC_SS BIT10
+#define B_SPI_CFG_BC_OSFH BIT9 ///< OS Function Hide
+#define N_SPI_CFG_BC_SYNC_SS 8
+#define B_SPI_CFG_BC_SYNC_SS BIT8
+#define B_SPI_CFG_BC_BILD BIT7
+#define B_SPI_CFG_BC_BBS BIT6 ///< Boot BIOS strap
+#define N_SPI_CFG_BC_BBS 6
+#define V_SPI_CFG_BC_BBS_SPI 0 ///< Boot BIOS strapped to SPI
+#define V_SPI_CFG_BC_BBS_LPC 1 ///< Boot BIOS strapped to LPC
+#define B_SPI_CFG_BC_EISS BIT5 ///< Enable InSMM.STS
+#define B_SPI_CFG_BC_TSS BIT4
+#define B_SPI_CFG_BC_SRC (BIT3 | BIT2)
+#define N_SPI_CFG_BC_SRC 2
+#define V_SPI_CFG_BC_SRC_PREF_EN_CACHE_EN 0x02 ///< Prefetching and Caching enabled
+#define V_SPI_CFG_BC_SRC_PREF_DIS_CACHE_DIS 0x01 ///< No prefetching and no caching
+#define V_SPI_CFG_BC_SRC_PREF_DIS_CACHE_EN 0x00 ///< No prefetching, but caching enabled
+#define B_SPI_CFG_BC_LE BIT1 ///< Lock Enable
+#define N_SPI_CFG_BC_BLE 1
+#define B_SPI_CFG_BC_WPD BIT0 ///< Write Protect Disable
+
+//
+// BIOS Flash Program Registers (based on SPI_BAR0)
+//
+#define R_SPI_MEM_BFPR 0x00 ///< BIOS Flash Primary Region Register(32bits), which is RO and contains the same value from FREG1
+#define B_SPI_MEM_BFPR_PRL 0x7FFF0000 ///< BIOS Flash Primary Region Limit mask
+#define N_SPI_MEM_BFPR_PRL 16 ///< BIOS Flash Primary Region Limit bit position
+#define B_SPI_MEM_BFPR_PRB 0x00007FFF ///< BIOS Flash Primary Region Base mask
+#define N_SPI_MEM_BFPR_PRB 0 ///< BIOS Flash Primary Region Base bit position
+#define B_PCH_SPI_BFPR_SBRS BIT31 ///< BIOS Flash Primary Region Shadowed BIOS Region Select
+#define R_SPI_MEM_HSFSC 0x04 ///< Hardware Sequencing Flash Status and Control Register(32bits)
+#define B_SPI_MEM_HSFSC_FSMIE BIT31 ///< Flash SPI SMI# Enable
+#define B_SPI_MEM_HSFSC_FDBC_MASK 0x3F000000 ///< Flash Data Byte Count ( <= 64), Count = (Value in this field) + 1.
+#define N_SPI_MEM_HSFSC_FDBC 24
+#define B_SPI_MEM_HSFSC_CYCLE_MASK 0x001E0000 ///< Flash Cycle.
+#define N_SPI_MEM_HSFSC_CYCLE 17
+#define V_SPI_MEM_HSFSC_CYCLE_READ 0 ///< Flash Cycle Read
+#define V_SPI_MEM_HSFSC_CYCLE_WRITE 2 ///< Flash Cycle Write
+#define V_SPI_MEM_HSFSC_CYCLE_4K_ERASE 3 ///< Flash Cycle 4K Block Erase
+#define V_SPI_MEM_HSFSC_CYCLE_64K_ERASE 4 ///< Flash Cycle 64K Sector Erase
+#define V_SPI_MEM_HSFSC_CYCLE_READ_SFDP 5 ///< Flash Cycle Read SFDP
+#define V_SPI_MEM_HSFSC_CYCLE_READ_JEDEC_ID 6 ///< Flash Cycle Read JEDEC ID
+#define V_SPI_MEM_HSFSC_CYCLE_WRITE_STATUS 7 ///< Flash Cycle Write Status
+#define V_SPI_MEM_HSFSC_CYCLE_READ_STATUS 8 ///< Flash Cycle Read Status
+#define B_SPI_MEM_HSFSC_CYCLE_FGO BIT16 ///< Flash Cycle Go.
+#define B_SPI_MEM_HSFSC_FLOCKDN BIT15 ///< Flash Configuration Lock-Down
+#define B_SPI_MEM_HSFSC_FDV BIT14 ///< Flash Descriptor Valid, once valid software can use hareware sequencing regs
+#define B_SPI_MEM_HSFSC_FDOPSS BIT13 ///< Flash Descriptor Override Pin-Strap Status
+#define B_SPI_MEM_HSFSC_PRR34_LOCKDN BIT12 ///< PRR3 PRR4 Lock-Down
+#define B_SPI_MEM_HSFSC_WRSDIS BIT11 ///< Flash Write Status Register Disable
+#define B_SPI_MEM_HSFSC_SAF_CE BIT8 ///< SAF ctype error
+#define B_SPI_MEM_HSFSC_SAF_MODE_ACTIVE BIT7 ///< Indicates flash is attached either directly to the PCH via the SPI bus or EC/BMC
+#define B_SPI_MEM_HSFSC_SAF_LE BIT6 ///< SAF link error
+#define B_SPI_MEM_HSFSC_SCIP BIT5 ///< SPI cycle in progress
+#define B_SPI_MEM_HSFSC_SAF_DLE BIT4 ///< SAF Data length error
+#define B_SPI_MEM_HSFSC_SAF_ERROR BIT3 ///< SAF Error
+#define B_SPI_MEM_HSFSC_AEL BIT2 ///< Access Error Log
+#define B_SPI_MEM_HSFSC_FCERR BIT1 ///< Flash Cycle Error
+#define B_SPI_MEM_HSFSC_FDONE BIT0 ///< Flash Cycle Done
+#define R_SPI_MEM_FADDR 0x08 ///< SPI Flash Address
+#define B_SPI_MEM_FADDR_MASK 0x07FFFFFF ///< SPI Flash Address Mask (0~26bit)
+#define R_SPI_MEM_DLOCK 0x0C ///< Discrete Lock Bits
+#define B_SPI_MEM_DLOCK_PR0LOCKDN BIT8 ///< PR0LOCKDN
+#define R_SPI_MEM_FDATA00 0x10 ///< SPI Data 00 (32 bits)
+#define R_SPI_MEM_FDATA01 0x14 ///< SPI Data 01
+#define R_SPI_MEM_FDATA02 0x18 ///< SPI Data 02
+#define R_SPI_MEM_FDATA03 0x1C ///< SPI Data 03
+#define R_SPI_MEM_FDATA04 0x20 ///< SPI Data 04
+#define R_SPI_MEM_FDATA05 0x24 ///< SPI Data 05
+#define R_SPI_MEM_FDATA06 0x28 ///< SPI Data 06
+#define R_SPI_MEM_FDATA07 0x2C ///< SPI Data 07
+#define R_SPI_MEM_FDATA08 0x30 ///< SPI Data 08
+#define R_SPI_MEM_FDATA09 0x34 ///< SPI Data 09
+#define R_SPI_MEM_FDATA10 0x38 ///< SPI Data 10
+#define R_SPI_MEM_FDATA11 0x3C ///< SPI Data 11
+#define R_SPI_MEM_FDATA12 0x40 ///< SPI Data 12
+#define R_SPI_MEM_FDATA13 0x44 ///< SPI Data 13
+#define R_SPI_MEM_FDATA14 0x48 ///< SPI Data 14
+#define R_SPI_MEM_FDATA15 0x4C ///< SPI Data 15
+#define R_SPI_MEM_FRAP 0x50 ///< Flash Region Access Permisions Register
+#define B_SPI_MEM_FRAP_BRWA_MASK 0x0000FF00 ///< BIOS Region Write Access MASK, Region0~7 - 0: Flash Descriptor; 1: BIOS; 2: ME; 3: GbE; 4: PlatformData
+#define N_SPI_MEM_FRAP_BRWA 8 ///< BIOS Region Write Access bit position
+#define B_SPI_MEM_FRAP_BRRA_MASK 0x000000FF ///< BIOS Region Read Access MASK, Region0~7 - 0: Flash Descriptor; 1: BIOS; 2: ME; 3: GbE; 4: PlatformData
+#define B_SPI_MEM_FRAP_BMRAG_MASK 0x00FF0000 ///< BIOS Master Read Access Grant
+#define B_SPI_MEM_FRAP_BMWAG_MASK 0xFF000000 ///< BIOS Master Write Access Grant
+#define R_PCH_SPI_BM_RAP 0x118 ///< SPI Flash BIOS Master Read Access Permissions
+#define R_PCH_SPI_BM_WAP 0x11C ///< SPI Flash BIOS Master Write Access Permissions
+#define B_PCH_SPI_BM_AP_REG15 BIT15 ///< Region read or write access for Region15
+#define B_PCH_SPI_BM_AP_PLATFORM BIT4 ///< Region read or write access for Region4 PlatformData
+#define B_PCH_SPI_BM_AP_GBE BIT3 ///< Region read or write access for Region3 GbE
+#define B_PCH_SPI_BM_AP_ME BIT2 ///< Region read or write access for Region2 ME
+#define B_PCH_SPI_BM_AP_BIOS BIT1 ///< Region read or write access for Region1 BIOS
+#define B_PCH_SPI_BM_AP_FLASHD BIT0 ///< Region read or write access for Region0 Flash Descriptor
+#define R_SPI_MEM_FREG0_FLASHD 0x54 ///< Flash Region 0(Flash Descriptor)(32bits)
+#define B_SPI_MEM_FREG0_LIMIT_MASK 0x7FFF0000 ///< Size, [30:16] here represents limit[26:12]
+#define N_SPI_MEM_FREG0_LIMIT 4 ///< Bit 30:16 identifies address bits [26:12]
+#define B_SPI_MEM_FREG0_BASE_MASK 0x00007FFF ///< Base, [14:0] here represents base [26:12]
+#define N_SPI_MEM_FREG0_BASE 12 ///< Bit 14:0 identifies address bits [26:2]
+#define B_SPI_MEM_FREG1_LIMIT_MASK 0x7FFF0000 ///< Size, [30:16] here represents limit[26:12]
+#define N_SPI_MEM_FREG1_LIMIT 4 ///< Bit 30:16 identifies address bits [26:12]
+#define B_SPI_MEM_FREG1_BASE_MASK 0x00007FFF ///< Base, [14:0] here represents base [26:12]
+#define N_SPI_MEM_FREG1_BASE 12 ///< Bit 14:0 identifies address bits [26:2]
+#define B_SPI_MEM_FREG2_LIMIT_MASK 0x7FFF0000 ///< Size, [30:16] here represents limit[26:12]
+#define N_SPI_MEM_FREG2_LIMIT 4 ///< Bit 30:16 identifies address bits [26:12]
+#define B_SPI_MEM_FREG2_BASE_MASK 0x00007FFF ///< Base, [14:0] here represents base [26:12]
+#define N_SPI_MEM_FREG2_BASE 12 ///< Bit 14:0 identifies address bits [26:2]
+#define B_SPI_MEM_FREG3_LIMIT_MASK 0x7FFF0000 ///< Size, [30:16] here represents limit[26:12]
+#define N_SPI_MEM_FREG3_LIMIT 4 ///< Bit 30:16 identifies address bits [26:12]
+#define B_SPI_MEM_FREG3_BASE_MASK 0x00007FFF ///< Base, [14:0] here represents base [26:12]
+#define N_SPI_MEM_FREG3_BASE 12 ///< Bit 14:0 identifies address bits [26:2]
+#define R_SPI_MEM_FREG1_BIOS 0x58 ///< Flash Region 1(BIOS)(32bits)
+#define R_SPI_MEM_FREG2_ME 0x5C ///< Flash Region 2(ME)(32bits)
+#define R_SPI_MEM_FREG3_GBE 0x60 ///< Flash Region 3(GbE)(32bits)
+#define R_SPI_MEM_FREG4_PLATFORM_DATA 0x64 ///< Flash Region 4(Platform Data)(32bits)
+#define B_SPI_MEM_FREG4_LIMIT_MASK 0x7FFF0000 ///< Size, [30:16] here represents limit[26:12]
+#define N_SPI_MEM_FREG4_LIMIT 4 ///< Bit 30:16 identifies address bits [26:12]
+#define B_SPI_MEM_FREG4_BASE_MASK 0x00007FFF ///< Base, [14:0] here represents base [26:12]
+#define N_SPI_MEM_FREG4_BASE 12 ///< Bit 14:0 identifies address bits [26:2]
+#define R_SPI_MEM_FREG5_DER 0x68 ///< Flash Region 5(Device Expansion Region)(32bits)
+#define R_SPI_MEM_FREG6_SECONDARY_BIOS 0x6C ///< Flash Region 6(Secondary BIOS)(32bits)
+#define R_PCH_SPI_FREG7_UCODE_PATCH 0x70 ///< Flash Region 7(uCode Patch)(32bits)
+#define R_PCH_SPI_FREG12 0xE0 ///< Flash Region 12(32bits)
+#define R_PCH_SPI_FREG15 0xEC ///< Flash Region 15 (32bits)
+#define B_SPI_MEM_FREG15_LIMIT_MASK 0x7FFF0000 ///< Size, [30:16] here represents limit[26:12]
+#define N_SPI_MEM_FREG15_LIMIT 4 ///< Bit 30:16 identifies address bits [26:12]
+#define B_SPI_MEM_FREG15_BASE_MASK 0x00007FFF ///< Base, [14:0] here represents base [26:12]
+#define N_SPI_MEM_FREG15_BASE 12 ///< Bit 14:0 identifies address bits [26:2]
+#define S_SPI_MEM_FREGX 4 ///< Size of Flash Region register
+#define B_SPI_MEM_FREGX_LIMIT_MASK 0x7FFF0000 ///< Flash Region Limit [30:16] represents [26:12], [11:0] are assumed to be FFFh
+#define N_SPI_MEM_FREGX_LIMIT 16 ///< Region limit bit position
+#define N_SPI_MEM_FREGX_LIMIT_REPR 12 ///< Region limit bit represents position
+#define B_SPI_MEM_FREGX_BASE_MASK 0x00007FFF ///< Flash Region Base, [14:0] represents [26:12]
+#define N_SPI_MEM_FREGX_BASE 0 ///< Region base bit position
+#define N_SPI_MEM_FREGX_BASE_REPR 12 ///< Region base bit represents position
+#define R_SPI_MEM_PR0 0x84 ///< Protected Region 0 Register
+#define R_SPI_MEM_PR1 0x88 ///< Protected Region 1 Register
+#define R_SPI_MEM_PR2 0x8C ///< Protected Region 2 Register
+#define R_SPI_MEM_PR3 0x90 ///< Protected Region 3 Register
+#define R_SPI_MEM_PR4 0x94 ///< Protected Region 4 Register
+#define S_SPI_MEM_PRX 4 ///< Protected Region X Register size
+#define B_SPI_MEM_PRX_WPE BIT31 ///< Write Protection Enable
+#define B_SPI_MEM_PRX_PRL_MASK 0x7FFF0000 ///< Protected Range Limit Mask, [30:16] here represents upper limit of address [26:12]
+#define N_SPI_MEM_PRX_PRL 16 ///< Protected Range Limit bit position
+#define B_SPI_MEM_PRX_RPE BIT15 ///< Read Protection Enable
+#define B_SPI_MEM_PRX_PRB_MASK 0x00007FFF ///< Protected Range Base Mask, [14:0] here represents base limit of address [26:12]
+#define N_SPI_MEM_PRX_PRB 0 ///< Protected Range Base bit position
+#define R_SPI_MEM_SFRAP 0xB0 ///< Secondary Flash Regions Access Permisions Register
+#define R_SPI_MEM_FDOC 0xB4 ///< Flash Descriptor Observability Control Register(32 bits)
+#define B_SPI_MEM_FDOC_FDSS_MASK (BIT14 | BIT13 | BIT12) ///< Flash Descritor Section Select
+#define V_SPI_MEM_FDOC_FDSS_FSDM 0x0000 ///< Flash Signature and Descriptor Map
+#define V_SPI_MEM_FDOC_FDSS_COMP 0x1000 ///< Component
+#define V_SPI_MEM_FDOC_FDSS_REGN 0x2000 ///< Region
+#define V_SPI_MEM_FDOC_FDSS_MSTR 0x3000 ///< Master
+#define V_SPI_MEM_FDOC_FDSS_PCHS 0x4000 ///< PCH soft straps
+#define V_SPI_MEM_FDOC_FDSS_SFDP 0x5000 ///< SFDP Parameter Table
+#define B_SPI_MEM_FDOC_FDSI_MASK 0x0FFC ///< Flash Descriptor Section Index
+#define R_SPI_MEM_FDOD 0xB8 ///< Flash Descriptor Observability Data Register(32 bits)
+#define R_SPI_MEM_SFDP0_VSCC0 0xC4 ///< Vendor Specific Component Capabilities Register(32 bits)
+#define B_SPI_MEM_SFDPX_VSCCX_CPPTV BIT31 ///< Component Property Parameter Table Valid
+#define B_SPI_MEM_SFDP0_VSCC0_VCL BIT30 ///< Vendor Component Lock
+#define B_SPI_MEM_SFDPX_VSCCX_EO_64K BIT29 ///< 64k Erase valid (EO_64k_valid)
+#define B_SPI_MEM_SFDPX_VSCCX_EO_4K BIT28 ///< 4k Erase valid (EO_4k_valid)
+#define B_SPI_MEM_SFDPX_VSCCX_RPMC BIT27 ///< RPMC Supported
+#define B_SPI_MEM_SFDPX_VSCCX_DPD BIT26 ///< Deep Powerdown Supported
+#define B_SPI_MEM_SFDPX_VSCCX_SUSRES BIT25 ///< Suspend/Resume Supported
+#define B_SPI_MEM_SFDPX_VSCCX_SOFTRES BIT24 ///< Soft Reset Supported
+#define B_SPI_MEM_SFDPX_VSCCX_64k_EO_MASK 0x00FF0000 ///< 64k Erase Opcode (EO_64k)
+#define B_SPI_MEM_SFDPX_VSCCX_4k_EO_MASK 0x0000FF00 ///< 4k Erase Opcode (EO_4k)
+#define B_SPI_MEM_SFDPX_VSCCX_QER (BIT7 | BIT6 | BIT5) ///< Quad Enable Requirements
+#define B_SPI_MEM_SFDPX_VSCCX_WEWS BIT4 ///< Write Enable on Write Status
+#define B_SPI_MEM_SFDPX_VSCCX_WSR BIT3 ///< Write Status Required
+#define B_SPI_MEM_SFDPX_VSCCX_WG_64B BIT2 ///< Write Granularity, 0: 1 Byte; 1: 64 Bytes
+#define R_SPI_MEM_SFDP1_VSCC1 0xC8 ///< Vendor Specific Component Capabilities Register(32 bits)
+#define R_SPI_MEM_PINTX 0xCC ///< Parameter Table Index
+#define N_SPI_MEM_PINTX_SPT 14
+#define V_SPI_MEM_PINTX_SPT_CPT0 0x0 ///< Component 0 Property Parameter Table
+#define V_SPI_MEM_PINTX_SPT_CPT1 0x1 ///< Component 1 Property Parameter Table
+#define N_SPI_MEM_PINTX_HORD 12
+#define V_SPI_MEM_PINTX_HORD_SFDP 0x0 ///< SFDP Header
+#define V_SPI_MEM_PINTX_HORD_PT 0x1 ///< Parameter Table Header
+#define V_SPI_MEM_PINTX_HORD_DATA 0x2 ///< Data
+#define R_SPI_MEM_PTDATA 0xD0 ///< Parameter Table Data
+#define R_SPI_MEM_SBRS 0xD4 ///< SPI Bus Requester Status
+#define R_PCH_SPI_SSML 0xF0 ///< Set Strap Msg Lock
+#define B_PCH_SPI_SSML_SSL BIT0 ///< Set_Strap Lock
+#define R_PCH_SPI_SSMC 0xF4 ///< Set Strap Msg Control
+#define B_PCH_SPI_SSMC_SSMS BIT0 ///< Set_Strap Mux Select
+#define R_PCH_SPI_SSMD 0xF8 ///< Set Strap Msg Data
+//
+// @todo Follow up with EDS owner if it should be 3FFF or FFFF.
+//
+#define B_SPI_MEM_SRD_SSD 0x0000FFFF ///< Set_Strap Data
+//
+// Flash Descriptor Base Address Region (FDBAR) from Flash Region 0
+//
+#define R_SPI_FLASH_FDBAR_FLVALSIG 0x00 ///< Flash Valid Signature
+#define V_SPI_FLASH_FDBAR_FLVALSIG 0x0FF0A55A
+#define R_SPI_FLASH_FDBAR_FLASH_MAP0 0x04
+#define B_SPI_FLASH_FDBAR_FCBA 0x000000FF ///< Flash Component Base Address
+#define B_SPI_FLASH_FDBAR_NC 0x00000300 ///< Number Of Components
+#define N_SPI_FLASH_FDBAR_NC 8 ///< Number Of Components
+#define V_SPI_FLASH_FDBAR_NC_1 0x00000000
+#define V_SPI_FLASH_FDBAR_NC_2 0x00000100
+#define B_SPI_FLASH_FDBAR_FRBA 0x00FF0000 ///< Flash Region Base Address
+#define B_SPI_FLASH_FDBAR_NR 0x07000000 ///< Number Of Regions
+#define R_SPI_FLASH_FDBAR_FLASH_MAP1 0x08
+#define B_SPI_FLASH_FDBAR_FMBA 0x000000FF ///< Flash Master Base Address
+#define B_SPI_FLASH_FDBAR_NM 0x00000700 ///< Number Of Masters
+#define B_SPI_FLASH_FDBAR_FPSBA 0x00FF0000 ///< PCH Strap Base Address, [23:16] represents [11:4]
+#define N_SPI_FLASH_FDBAR_FPSBA 16 ///< PCH Strap base Address bit position
+#define N_SPI_FLASH_FDBAR_FPSBA_REPR 4 ///< PCH Strap base Address bit represents position
+#define B_SPI_FLASH_FDBAR_PCHSL 0xFF000000 ///< PCH Strap Length, [31:24] represents number of Dwords
+#define R_SPI_MEM_FDBAR_FLASH_MAP1_RW 0x18 ///< For Use With FlashRead() and FlashWrite()
+#define N_SPI_FLASH_FDBAR_PCHSL 24 ///< PCH Strap Length bit position
+#define R_SPI_FLASH_FDBAR_FLASH_MAP2 0x0C
+#define B_SPI_FLASH_FDBAR_FCPUSBA 0x000000FF ///< CPU Strap Base Address, [7:0] represents [11:4]
+#define N_SPI_FLASH_FDBAR_FCPUSBA 0 ///< CPU Strap Base Address bit position
+#define N_SPI_FLASH_FDBAR_FCPUSBA_REPR 4 ///< CPU Strap Base Address bit represents position
+#define B_SPI_FLASH_FDBAR_CPUSL 0x0000FF00 ///< CPU Strap Length, [15:8] represents number of Dwords
+#define N_SPI_FLASH_FDBAR_CPUSL 8 ///< CPU Strap Length bit position
+//
+// Flash Component Base Address (FCBA) from Flash Region 0
+//
+#define R_SPI_FLASH_FCBA_FLCOMP 0x00 ///< Flash Components Register
+#define B_SPI_FLASH_FLCOMP_RIDS_FREQ (BIT29 | BIT28 | BIT27) ///< Read ID and Read Status Clock Frequency
+#define B_SPI_FLASH_FLCOMP_WE_FREQ (BIT26 | BIT25 | BIT24) ///< Write and Erase Clock Frequency
+#define B_SPI_FLASH_FLCOMP_FRCF_FREQ (BIT23 | BIT22 | BIT21) ///< Fast Read Clock Frequency
+#define B_SPI_FLASH_FLCOMP_FR_SUP BIT20 ///< Fast Read Support.
+#define B_SPI_FLASH_FLCOMP_RC_FREQ (BIT19 | BIT18 | BIT17) ///< Read Clock Frequency.
+#define V_SPI_FLASH_FLCOMP_FREQ_48MHZ 0x02
+#define V_SPI_FLASH_FLCOMP_FREQ_30MHZ 0x04
+#define V_SPI_FLASH_FLCOMP_FREQ_17MHZ 0x06
+#define B_SPI_FLASH_FLCOMP_COMP1_MASK 0xF0 ///< Flash Component 1 Size MASK
+#define N_SPI_FLASH_FLCOMP_COMP1 4 ///< Flash Component 1 Size bit position
+#define B_SPI_FLASH_FLCOMP_COMP0_MASK 0x0F ///< Flash Component 0 Size MASK
+#define V_SPI_FLASH_FLCOMP_COMP_512KB 0x80000
+//
+// Descriptor Upper Map Section from Flash Region 0
+//
+#define R_SPI_FLASH_UMAP1 0xEFC ///< Flash Upper Map 1
+#define B_SPI_FLASH_UMAP1_VTBA 0x000000FF ///< VSCC Table Base Address
+#define B_SPI_FLASH_UMAP1_VTL 0x0000FF00 ///< VSCC Table Length
+
+#define R_SPI_MEM_VTBA_JID0 0x00 ///< JEDEC-ID 0 Register
+#define S_SPI_MEM_VTBA_JID0 0x04
+#define B_SPI_MEM_VTBA_JID0_VID 0x000000FF
+#define B_SPI_MEM_VTBA_JID0_DID0 0x0000FF00
+#define B_SPI_MEM_VTBA_JID0_DID1 0x00FF0000
+#define N_SPI_MEM_VTBA_JID0_DID0 0x08
+#define N_SPI_MEM_VTBA_JID0_DID1 0x10
+#define R_SPI_MEM_VTBA_VSCC0 0x04
+#define S_SPI_MEM_VTBA_VSCC0 0x04
+
+#define R_PCH_PCR_SPI_CONF_VALUE 0xC00C
+#define B_ESPI_ENABLE_STRAP BIT0
+
+//
+// SPI Private Configuration Space Registers
+//
+#define R_SPI_PCR_CLK_CTL 0xC004
+#define R_SPI_PCR_PWR_CTL 0xC008
+
+//
+// MMP0
+//
+#define R_SPI_MEM_STRP_MMP0 0xC4 ///< MMP0 Soft strap offset
+#define B_SPI_MEM_STRP_MMP0 0x10 ///< MMP0 Soft strap bit
+
+
+#define R_SPI_MEM_STRP_SFDP 0xF0 ///< PCH Soft Strap SFDP
+#define B_SPI_MEM_STRP_SFDP_QIORE BIT3 ///< Quad IO Read Enable
+#define B_SPI_MEM_STRP_SFDP_QORE BIT2 ///< Quad Output Read Enable
+#define B_SPI_MEM_STRP_SFDP_DIORE BIT1 ///< Dual IO Read Enable
+#define B_SPI_MEM_STRP_SFDP_DORE BIT0 ///< Dual Output Read Enable
+
+//
+// Descriptor Record 0
+//
+#define R_SPI_MEM_STRP_DSCR_0 0x00 ///< PCH Soft Strap 0
+#define B_SPI_MEM_STRP_DSCR_0_PTT_SUPP BIT22 ///< PTT Supported
+
+#define R_PCH_SPI_SS119_PMC 0x1DC ///< PCH soft strap 119 - PMC
+#define B_PCH_SPI_SS119_PMC_GBE_DIS BIT14 ///< PCH soft strap 119 - GbE Disable
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h
new file mode 100644
index 0000000000..97faa15255
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h
@@ -0,0 +1,113 @@
+/** @file
+ Register names for PCH Thermal Device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_THERMAL_H_
+#define _PCH_REGS_THERMAL_H_
+
+//
+// Thermal Device Registers (D20:2)
+//
+#define PCI_DEVICE_NUMBER_PCH_THERMAL 20
+#define PCI_FUNCTION_NUMBER_PCH_THERMAL 2
+#define V_PCH_THERMAL_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_H_THERMAL_DEVICE_ID 0x8C24
+
+//
+// LBG Production Thermal Device Device ID
+//
+#define V_PCH_LBG_PROD_THERMAL_DEVICE_ID 0xA1B1
+//
+// LBG SSX (Super SKU) Thermal Device Device ID
+//
+#define V_PCH_LBG_THERMAL_DEVICE_ID 0xA231
+
+#define V_PCH_LP_THERMAL_DEVICE_ID 0x9C24
+#define R_PCH_THERMAL_TBAR 0x10
+#define V_PCH_THERMAL_TBAR_SIZE (4 * 1024)
+#define N_PCH_THREMAL_TBAR_ALIGNMENT 12
+#define B_PCH_THERMAL_TBAR_MASK 0xFFFFF000
+#define R_PCH_THERMAL_TBARH 0x14
+#define R_PCH_THERMAL_TBARB 0x40
+#define V_PCH_THERMAL_TBARB_SIZE (4 * 1024)
+#define N_PCH_THREMAL_TBARB_ALIGNMENT 12
+#define B_PCH_THERMAL_SPTYPEN BIT0
+#define R_PCH_THERMAL_TBARBH 0x44
+#define B_PCH_THERMAL_TBARB_MASK 0xFFFFF000
+
+//
+// Thermal TBAR MMIO registers
+//
+#define R_PCH_TBAR_TSC 0x04
+#define B_PCH_TBAR_TSC_PLD BIT7
+#define B_PCH_TBAR_TSC_CPDE BIT0
+#define R_PCH_TBAR_TSS 0x06
+#define R_PCH_TBAR_TSEL 0x08
+#define B_PCH_TBAR_TSEL_PLD BIT7
+#define B_PCH_TBAR_TSEL_ETS BIT0
+#define R_PCH_TBAR_TSREL 0x0A
+#define R_PCH_TBAR_TSMIC 0x0C
+#define B_PCH_TBAR_TSMIC_PLD BIT7
+#define B_PCH_TBAR_TSMIC_SMIE BIT0
+#define R_PCH_TBAR_CTT 0x10
+#define R_PCH_TBAR_TAHV 0x14
+#define R_PCH_TBAR_TALV 0x18
+#define R_PCH_TBAR_TSPM 0x1C
+#define B_PCH_TBAR_TSPM_LTT (BIT8 | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0)
+#define V_PCH_TBAR_TSPM_LTT 0x0C8
+#define B_PCH_TBAR_TSPM_MAXTSST (BIT11 | BIT10 | BIT9)
+#define V_PCH_TBAR_TSPM_MAXTSST (0x4 << 9)
+#define B_PCH_TBAR_TSPM_MINTSST BIT12
+#define B_PCH_TBAR_TSPM_DTSSIC0 BIT13
+#define B_PCH_TBAR_TSPM_DTSSS0EN BIT14
+#define B_PCH_TBAR_TSPM_TSPMLOCK BIT15
+#define R_PCH_TBAR_TL 0x40
+#define B_PCH_TBAR_TL_LOCK BIT31
+#define B_PCH_TBAR_TL_TTEN BIT29
+#define R_PCH_TBAR_TL2 0x50
+#define R_PCH_TBAR_TL2_LOCK BIT15
+#define R_PCH_TBAR_TL2_PMCTEN BIT14
+#define R_PCH_TBAR_PHL 0x60
+#define B_PCH_TBAR_PHLE BIT15
+#define R_PCH_TBAR_PHLC 0x62
+#define B_PCH_TBAR_PHLC_LOCK BIT0
+#define R_PCH_TBAR_TAS 0x80
+#define R_PCH_TBAR_TSPIEN 0x82
+#define R_PCH_TBAR_TSGPEN 0x84
+#define B_PCH_TBAR_TL2_PMCTEN BIT14
+#define R_PCH_TBAR_A4 0xA4
+#define R_PCH_TBAR_C0 0xC0
+#define R_PCH_TBAR_C4 0xC4
+#define R_PCH_TBAR_C8 0xC8
+#define R_PCH_TBAR_CC 0xCC
+#define R_PCH_TBAR_D0 0xD0
+#define R_PCH_TBAR_E0 0xE0
+#define R_PCH_TBAR_E4 0xE4
+#define R_PCH_TBAR_E8 0xE8
+#define R_PCH_TBAR_TCFD 0xF0 ///< Thermal controller function disable
+#define B_PCH_TBAR_TCFD_TCD BIT0 ///< Thermal controller disable
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h
new file mode 100644
index 0000000000..87d0f2cb34
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h
@@ -0,0 +1,147 @@
+/** @file
+ Register names for PCH TraceHub device
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_TRACE_HUB_H_
+#define _PCH_REGS_TRACE_HUB_H_
+
+//
+// TraceHub Registers (D31:F7)
+//
+#define PCI_DEVICE_NUMBER_PCH_TRACE_HUB 31
+#define PCI_FUNCTION_NUMBER_PCH_TRACE_HUB 7
+
+#define V_PCH_TRACE_HUB_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_TRACE_HUB_DEVICE_ID 0x0963
+
+//
+// LBG Production (PRQ) TraceHub Device ID
+//
+#define V_PCH_LBG_PROD_TRACE_HUB_DEVICE_ID 0xA1A6
+//
+// LBG SuperSKU (SSX) TraceHub Device ID
+//
+#define V_PCH_LBG_TRACE_HUB_DEVICE_ID 0xA226
+
+#define R_TRACE_HUB_CFG_CSR_MTB_LBAR 0x10
+#define B_TRACE_HUB_CFG_CSR_MTB_RBAL 0xFFF00000
+#define R_TRACE_HUB_CFG_CSR_MTB_UBAR 0x14
+#define B_PCH_TRACE_HUB_CSR_MTB_RBAU 0xFFFFFFFF
+#define R_PCH_TRACE_HUB_SW_LBAR 0x18
+#define B_PCH_TRACE_HUB_SW_RBAL 0xFFE00000
+#define R_PCH_TRACE_HUB_SW_UBAR 0x1C
+#define B_PCH_TRACE_HUB_SW_RBAU 0xFFFFFFFF
+#define R_PCH_TRACE_HUB_RTIT_LBAR 0x20
+#define B_PCH_TRACE_HUB_RTIT_RBAL 0xFFFFFF00
+#define R_PCH_TRACE_HUB_RTIT_UBAR 0x24
+#define B_PCH_TRACE_HUB_RTIT_RBAU 0xFFFFFFFF
+#define R_PCH_TRACE_HUB_MSICID 0x40
+#define R_PCH_TRACE_HUB_MSINCP 0x41
+#define R_PCH_TRACE_HUB_MSIMC 0x42
+#define R_PCH_TRACE_HUB_MSILMA 0x44
+#define R_PCH_TRACE_HUB_MSIUMA 0x48
+#define R_PCH_TRACE_HUB_MSIMD 0x4C
+#define R_PCH_TRACE_HUB_FW_LBAR 0x70
+#define B_PCH_TRACE_HUB_FW_RBAL 0xFFFC0000
+#define R_PCH_TRACE_HUB_FW_UBAR 0x74
+#define B_PCH_TRACE_HUB_FW_RBAU 0xFFFFFFFF
+#define R_PCH_TRACE_HUB_DSC 0x80
+#define B_PCH_TRACE_HUB_BYP BIT0 //< TraceHub Bypass
+#define R_PCH_TRACE_HUB_DSS 0x81
+#define R_PCH_TRACE_HUB_ISTOT 0x84
+#define R_PCH_TRACE_HUB_ICTOT 0x88
+#define R_PCH_TRACE_HUB_IPAD 0x8C
+#define R_PCH_TRACE_HUB_DSD 0x90
+
+//
+// Offsets from CSR_MTB_BAR
+//
+#define R_PCH_TRACE_HUB_MTB_GTHOPT0 0x00
+#define B_PCH_TRACE_HUB_MTB_GTHOPT0_P0FLUSH BIT7
+#define B_PCH_TRACE_HUB_MTB_GTHOPT0_P1FLUSH BIT15
+#define V_PCH_TRACE_HUB_MTB_SWDEST_PTI 0x0A
+#define V_PCH_TRACE_HUB_MTB_SWDEST_MEMEXI 0x08
+#define V_PCH_TRACE_HUB_MTB_SWDEST_DISABLE 0x00
+#define R_PCH_TRACE_HUB_MTB_SWDEST_1 0x0C
+#define B_PCH_TRACE_HUB_MTB_SWDEST_CSE_1 0x0000000F
+#define B_PCH_TRACE_HUB_MTB_SWDEST_CSE_2 0x000000F0
+#define B_PCH_TRACE_HUB_MTB_SWDEST_CSE_3 0x00000F00
+#define B_PCH_TRACE_HUB_MTB_SWDEST_ISH_1 0x0000F000
+#define B_PCH_TRACE_HUB_MTB_SWDEST_ISH_2 0x000F0000
+#define B_PCH_TRACE_HUB_MTB_SWDEST_ISH_3 0x00F00000
+#define B_PCH_TRACE_HUB_MTB_SWDEST_AUDIO 0x0F000000
+#define B_PCH_TRACE_HUB_MTB_SWDEST_PMC 0xF0000000
+#define R_PCH_TRACE_HUB_MTB_SWDEST_2 0x10
+#define B_PCH_TRACE_HUB_MTB_SWDEST_FTH 0x0000000F
+#define R_PCH_TRACE_HUB_MTB_SWDEST_3 0x14
+#define B_PCH_TRACE_HUB_MTB_SWDEST_MAESTRO 0x00000F00
+#define B_PCH_TRACE_HUB_MTB_SWDEST_SKYCAM 0x0F000000
+#define B_PCH_TRACE_HUB_MTB_SWDEST_AET 0xF0000000
+#define R_PCH_TRACE_HUB_MTB_SWDEST_4 0x18
+#define R_PCH_TRACE_HUB_MTB_MSC0CTL 0xA0100
+#define R_PCH_TRACE_HUB_MTB_MSC1CTL 0xA0200
+#define V_PCH_TRACE_HUB_MTB_MSCNMODE_DCI 0x2
+#define V_PCH_TRACE_HUB_MTB_MSCNMODE_DEBUG 0x3
+#define B_PCH_TRACE_HUB_MTB_MSCNLEN (BIT10 | BIT9 | BIT8)
+#define B_PCH_TRACE_HUB_MTB_MSCNMODE (BIT5 | BIT4)
+#define N_PCH_TRACE_HUB_MTB_MSCNMODE 0x4
+#define B_PCH_TRACE_HUB_MTB_MSCN_RD_HDR_OVRD BIT2
+#define B_PCH_TRACE_HUB_MTB_WRAPENN BIT1
+#define B_PCH_TRACE_HUB_MTB_MSCNEN BIT0
+#define R_PCH_TRACE_HUB_MTB_GTHSTAT 0xD4
+#define R_PCH_TRACE_HUB_MTB_SCR2 0xD8
+#define B_PCH_TRACE_HUB_MTB_SCR2_FCD BIT0
+#define B_PCH_TRACE_HUB_MTB_SCR2_FSEOFF2 BIT2
+#define B_PCH_TRACE_HUB_MTB_SCR2_FSEOFF3 BIT3
+#define B_PCH_TRACE_HUB_MTB_SCR2_FSEOFF4 BIT4
+#define B_PCH_TRACE_HUB_MTB_SCR2_FSEOFF5 BIT5
+#define B_PCH_TRACE_HUB_MTB_SCR2_FSEOFF6 BIT6
+#define B_PCH_TRACE_HUB_MTB_SCR2_FSEOFF7 BIT7
+#define R_PCH_TRACE_HUB_MTB_MSC0BAR 0xA0108
+#define R_PCH_TRACE_HUB_MTB_MSC0SIZE 0xA010C
+#define R_PCH_TRACE_HUB_MTB_MSC1BAR 0xA0208
+#define R_PCH_TRACE_HUB_MTB_MSC1SIZE 0xA020C
+#define R_PCH_TRACE_HUB_MTB_STREAMCFG1 0xA1000
+#define B_PCH_TRACE_HUB_MTB_STREAMCFG1_ENABLE BIT28
+#define R_PCH_TRACE_HUB_MTB_PTI_CTL 0x1C00
+#define B_PCH_TRACE_HUB_MTB_PTIMODESEL 0xF0
+#define B_PCH_TRACE_HUB_MTB_PTICLKDIV (BIT17 | BIT16)
+#define B_PCH_TRACE_HUB_MTB_PATGENMOD (BIT22 | BIT21 | BIT20)
+#define B_PCH_TRACE_HUB_MTB_PTI_EN BIT0
+#define R_PCH_TRACE_HUB_MTB_SCR 0xC8
+#define R_PCH_TRACE_HUB_MTB_GTH_FREQ 0xCC
+#define V_PCH_TRACE_HUB_MTB_SCR 0x00130000
+#define R_PCH_TRACE_HUB_CSR_MTB_SCRATCHPAD0 0xE0
+#define R_PCH_TRACE_HUB_CSR_MTB_SCRATCHPAD1 0xE4
+#define R_PCH_TRACE_HUB_CSR_MTB_SCRATCHPAD10 0xE40
+#define R_PCH_TRACE_HUB_MTB_CTPGCS 0x1C14
+#define B_PCH_TRACE_HUB_MTB_CTPEN BIT0
+#define V_PCH_TRACE_HUB_MTB_CHLCNT 0x80
+#define V_PCH_TRACE_HUB_MTB_STHMSTR 0x20
+#define R_PCH_TRACE_HUB_CSR_MTB_TSUCTRL 0x2000
+#define B_PCH_TRACE_HUB_CSR_MTB_TSUCTRL_CTCRESYNC BIT0
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h
new file mode 100644
index 0000000000..6ae9ec1640
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h
@@ -0,0 +1,529 @@
+/** @file
+ Register names for PCH USB devices
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+ In general, PCH registers are denoted by "_PCH_" in register names
+ Registers / bits that are different between PCH generations are denoted by
+ _PCH_[generation_name]_" in register/bit names.
+ Registers / bits that are specific to PCH-H denoted by "_H_" in register/bit names.
+ Registers / bits that are specific to PCH-LP denoted by "_LP_" in register/bit names.
+ e.g., "_PCH_H_", "_PCH_LP_"
+ Registers / bits names without _H_ or _LP_ apply for both H and LP.
+ Registers / bits that are different between SKUs are denoted by "_[SKU_name]"
+ at the end of the register/bit names
+ Registers / bits of new devices introduced in a PCH generation will be just named
+ as "_PCH_" without [generation_name] inserted.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_REGS_USB_H_
+#define _PCH_REGS_USB_H_
+
+//
+// USB3 (XHCI) related definitions
+//
+#define PCI_BUS_NUMBER_PCH_XHCI 0
+#define PCI_DEVICE_NUMBER_PCH_XHCI 20
+#define PCI_FUNCTION_NUMBER_PCH_XHCI 0
+
+//
+// XHCI PCI Config Space registers
+//
+#define V_PCH_USB_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_H_USB_DEVICE_ID_XHCI_1 0x8C31 ///< SKL PCH H XHCI#1
+//
+// LBG Production (PRQ) XHCI Controller Device ID
+//
+#define V_PCH_LBG_PROD_USB_DEVICE_ID_XHCI_1 0xA1AF ///< LBG Production DID XHCI#1
+//
+// LBG Super SKU (SSX) XHCI Controller Device ID
+//
+#define V_PCH_LBG_USB_DEVICE_ID_XHCI_1 0xA22F ///< LBG Super SKU DID XHCI#1
+#define V_PCH_LP_USB_DEVICE_ID_XHCI_1 0x9C31 ///< SKL PCH LP XHCI#1
+
+#define B_PCH_XHCI_CMD_PER BIT6 // PCI_COMMAND_OFFSET, Parity Error Response
+#define B_PCH_XHCI_CMD_SERR BIT8 // PCI_COMMAND_OFFSET, SERR# Enable
+
+#define R_XHCI_CFG_BAR0 0x10
+#define V_PCH_XHCI_MEM_LENGTH 0x10000
+#define N_PCH_XHCI_MEM_ALIGN 16
+#define B_PCH_XHCI_MEM_ALIGN_MASK 0xFFFF
+
+#define R_PCH_XHCI_XHCC1 0x40
+#define B_PCH_XHCI_XHCC1_ACCTRL BIT31
+#define B_PCH_XHCI_XHCC1_RMTASERR BIT24
+#define B_PCH_XHCI_XHCC1_URD BIT23
+#define B_PCH_XHCI_XHCC1_URRE BIT22
+#define B_PCH_XHCI_XHCC1_IIL1E (BIT21 | BIT20 | BIT19)
+#define V_PCH_XHCI_XHCC1_IIL1E_DIS 0
+#define V_PCH_XHCI_XHCC1_IIL1E_32 (BIT19)
+#define V_PCH_XHCI_XHCC1_IIL1E_64 (BIT20)
+#define V_PCH_XHCI_XHCC1_IIL1E_128 (BIT20 | BIT19)
+#define V_PCH_XHCI_XHCC1_IIL1E_256 (BIT21)
+#define V_PCH_XHCI_XHCC1_IIL1E_512 (BIT21 | BIT19)
+#define V_PCH_XHCI_XHCC1_IIL1E_1024 (BIT21 | BIT20)
+#define V_PCH_XHCI_XHCC1_IIL1E_131072 (BIT21 | BIT20 | BIT19)
+#define B_PCH_XHCI_XHCC1_XHCIL1E BIT18
+#define B_PCH_XHCI_XHCC1_D3IL1E BIT17
+#define B_PCH_XHCI_XHCC1_UNPPA (BIT16 | BIT15 | BIT14 | BIT13 | BIT12)
+#define B_PCH_XHCI_XHCC1_SWAXHCI BIT11
+#define B_PCH_XHCI_XHCC1_L23HRAWC (BIT10 | BIT9 | BIT8)
+#define B_PCH_XHCI_XHCC1_UTAGCP (BIT7 | BIT6)
+#define B_PCH_XHCI_XHCC1_UDAGCNP (BIT5 | BIT4)
+#define B_PCH_XHCI_XHCC1_UDAGCCP (BIT3 | BIT2)
+#define B_PCH_XHCI_XHCC1_UDAGC (BIT1 | BIT0)
+
+#define R_PCH_XHCI_XHCC2 0x44
+#define B_PCH_XHCI_XHCC2_OCCFDONE BIT31
+#define B_PCH_XHCI_XHCC2_XHCUPRDROE BIT21
+#define B_PCH_XHCI_XHCC2_IOSFSRAD BIT10
+#define B_PCH_XHCI_XHCC2_SWACXIHB (BIT9 | BIT8)
+#define B_PCH_XHCI_XHCC2_SWADMIL1IHB (BIT7 | BIT6)
+#define B_PCH_XHCI_XHCC2_L1FP2CGWC (BIT5 | BIT4 | BIT3)
+#define B_PCH_XHCI_XHCC2_RDREQSZCTRL (BIT2 | BIT1 | BIT0)
+
+#define R_PCH_XHCI_XHCLKGTEN 0x50
+#define B_PCH_XHCI_XHCLKGTEN_SRAMPGTEN BIT27
+#define N_PCH_XHCI_XHCLKGTEN_HSTCGE 20
+#define V_PCH_XHCI_XHCLKGTEN_HSTCGE 0xC
+#define N_PCH_XHCI_XHCLKGTEN_SSTCGE 16
+#define V_PCH_XHCI_XHCLKGTEN_SSTCGE 0xE
+#define N_PCH_XHCI_XHCLKGTEN_HSPLLSU 8
+#define V_PCH_XHCI_XHCLKGTEN_HSPLLSU 0x2
+#define N_PCH_XHCI_XHCLKGTEN_SSPLLSUE 5
+#define V_PCH_XHCI_XHCLKGTEN_SSPLLSUE 0x2
+#define B_PCH_XHCI_XHCLKGTEN_SSLSE BIT26
+#define B_PCH_XHCI_XHCLKGTEN_USB2PLLSE BIT25
+#define B_PCH_XHCI_XHCLKGTEN_IOSFSTCGE BIT24
+#define B_PCH_XHCI_XHCLKGTEN_HSTCGE (BIT23 | BIT22 | BIT21 | BIT20)
+#define B_PCH_XHCI_XHCLKGTEN_SSTCGE (BIT19 | BIT18 | BIT17 | BIT16)
+#define B_PCH_XHCI_XHCLKGTEN_XHCIGEU3S BIT15
+#define B_PCH_XHCI_XHCLKGTEN_XHCFTCLKSE BIT14
+#define B_PCH_XHCI_XHCLKGTEN_XHCBBTCGIPISO BIT13
+#define B_PCH_XHCI_XHCLKGTEN_XHCHSTCGU2NRWE BIT12
+#define B_PCH_XHCI_XHCLKGTEN_XHCUSB2PLLSDLE (BIT11 | BIT10)
+#define B_PCH_XHCI_XHCLKGTEN_HSPLLSUE (BIT9 | BIT8)
+#define B_PCH_XHCI_XHCLKGTEN_SSPLLSUE (BIT7 | BIT6 | BIT5)
+#define B_PCH_XHCI_XHCLKGTEN_XHCBLCGE BIT4
+#define B_PCH_XHCI_XHCLKGTEN_HSLTCGE BIT3
+#define B_PCH_XHCI_XHCLKGTEN_SSLTCGE BIT2
+#define B_PCH_XHCI_XHCLKGTEN_IOSFBTCGE BIT1
+#define B_PCH_XHCI_XHCLKGTEN_IOSFGBLCGE BIT0
+
+#define R_PCH_XHCI_USB_RELNUM 0x60
+#define B_PCH_XHCI_USB_RELNUM 0xFF
+#define R_PCH_XHCI_FL_ADJ 0x61
+#define B_PCH_XHCI_FL_ADJ 0x3F
+#define R_PCH_XHCI_PWR_CAPID 0x70
+#define B_PCH_XHCI_PWR_CAPID 0xFF
+#define R_PCH_XHCI_NXT_PTR1 0x71
+#define B_PCH_XHCI_NXT_PTR1 0xFF
+#define R_PCH_XHCI_PWR_CAP 0x72
+#define B_PCH_XHCI_PWR_CAP_PME_SUP 0xF800
+#define B_PCH_XHCI_PWR_CAP_D2_SUP BIT10
+#define B_PCH_XHCI_PWR_CAP_D1_SUP BIT9
+#define B_PCH_XHCI_PWR_CAP_AUX_CUR (BIT8 | BIT7 | BIT6)
+#define B_PCH_XHCI_PWR_CAP_DSI BIT5
+#define B_PCH_XHCI_PWR_CAP_PME_CLK BIT3
+#define B_PCH_XHCI_PWR_CAP_VER (BIT2 | BIT1 | BIT0)
+#define R_PCH_XHCI_PWR_CNTL_STS 0x74
+#define B_PCH_XHCI_PWR_CNTL_STS_PME_STS BIT15
+#define B_PCH_XHCI_PWR_CNTL_STS_DATASCL (BIT14 | BIT13)
+#define B_PCH_XHCI_PWR_CNTL_STS_DATASEL (BIT12 | BIT11 | BIT10 | BIT9)
+#define B_PCH_XHCI_PWR_CNTL_STS_PME_EN BIT8
+#define B_PCH_XHCI_PWR_CNTL_STS_PWR_STS (BIT1 | BIT0)
+#define V_PCH_XHCI_PWR_CNTL_STS_PWR_STS_D3 (BIT1 | BIT0)
+#define R_PCH_XHCI_MSI_MCTL 0x82
+#define R_PCH_XHCI_U2OCM 0xB0
+#define R_PCH_XHCI_U3OCM 0xD0
+#define V_PCH_XHCI_NUMBER_OF_OC_PINS 8
+
+#define R_PCH_XHCI_FUS 0xE0
+#define B_PCH_XHCI_FUS_USBR (BIT5)
+#define V_PCH_XHCI_FUS_USBR_EN 0
+#define V_PCH_XHCI_FUS_USBR_DIS (BIT5)
+
+#define R_PCH_XHCI_FC 0xFC
+
+#define B_PCH_XHCI_FUS_SSPRTCNT (BIT4 | BIT3)
+#define V_PCH_XHCI_FUS_SSPRTCNT_00B 0
+#define V_PCH_XHCI_FUS_SSPRTCNT_01B (BIT3)
+#define V_PCH_XHCI_FUS_SSPRTCNT_10B (BIT4)
+#define V_PCH_XHCI_FUS_SSPRTCNT_11B (BIT4 | BIT3)
+
+#define B_PCH_XHCI_FUS_HSPRTCNT (BIT2 | BIT1)
+#define V_PCH_XHCI_FUS_HSPRTCNT_00B 0
+#define V_PCH_XHCI_FUS_HSPRTCNT_01B (BIT1)
+#define V_PCH_XHCI_FUS_HSPRTCNT_10B (BIT2)
+#define V_PCH_XHCI_FUS_HSPRTCNT_11B (BIT2 | BIT1)
+
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_00B_CNT 6
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_01B_CNT 4
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_10B_CNT 2
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_11B_CNT 0
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_00B_MASK 0x3F
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_01B_MASK 0x0F
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_10B_MASK 0x03
+#define V_PCH_H_XHCI_FUS_SSPRTCNT_11B_MASK 0x00
+
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_00B_CNT 14
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_01B_CNT 12
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_10B_CNT 10
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_11B_CNT 8
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_00B_MASK 0x3FFF
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_01B_MASK 0x3F3F
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_10B_MASK 0x03FF
+#define V_PCH_H_XHCI_FUS_HSPRTCNT_11B_MASK 0x00FF
+
+#define V_PCH_LP_XHCI_FIXED_SSPRTCNT 4
+#define V_PCH_LP_XHCI_FIXED_SSPRTCNT_MASK 0x0F
+
+#define V_PCH_LP_XHCI_FIXED_HSPRTCNT 8
+#define V_PCH_LP_XHCI_FIXED_HSPRTCNT_MASK 0x00FF
+
+//
+// xHCI MMIO registers
+//
+
+//
+// 0x00 - 0x1F - Capability Registers
+//
+#define R_PCH_XHCI_CAPLENGTH 0x00
+#define R_PCH_XHCI_HCIVERSION 0x02
+#define R_PCH_XHCI_HCSPARAMS1 0x04
+#define R_PCH_XHCI_HCSPARAMS2 0x08
+#define R_PCH_XHCI_HCSPARAMS3 0x0C
+#define B_PCH_XHCI_HCSPARAMS3_U2DEL 0xFFFF0000
+#define B_PCH_XHCI_HCSPARAMS3_U1DEL 0x0000FFFF
+#define R_PCH_XHCI_HCCPARAMS 0x10
+#define B_PCH_XHCI_HCCPARAMS_LHRC BIT5
+#define B_PCH_XHCI_HCCPARAMS_MAXPSASIZE 0xF000
+#define R_PCH_XHCI_DBOFF 0x14
+#define R_PCH_XHCI_RTSOFF 0x18
+
+//
+// 0x80 - 0xBF - Operational Registers
+//
+#define R_PCH_XHCI_USBCMD 0x80
+#define B_PCH_XHCI_USBCMD_RS BIT0 ///< Run/Stop
+#define B_PCH_XHCI_USBCMD_RST BIT1 ///< HCRST
+#define B_PCH_XHCI_USBCMD_HSEE BIT3 //Host System Error Enable
+#define R_PCH_XHCI_USBSTS 0x84
+#define B_PCH_XHCI_USBSTS_HCH BIT0
+#define B_PCH_XHCI_USBSTS_CNR BIT11
+
+//
+// 0x480 - 0x5CF - Port Status and Control Registers
+//
+#define R_PCH_LP_XHCI_PORTSC01USB2 0x480
+#define R_PCH_LP_XHCI_PORTSC02USB2 0x490
+#define R_PCH_LP_XHCI_PORTSC03USB2 0x4A0
+#define R_PCH_LP_XHCI_PORTSC04USB2 0x4B0
+#define R_PCH_LP_XHCI_PORTSC05USB2 0x4C0
+#define R_PCH_LP_XHCI_PORTSC06USB2 0x4D0
+#define R_PCH_LP_XHCI_PORTSC07USB2 0x4E0
+#define R_PCH_LP_XHCI_PORTSC08USB2 0x4F0
+#define R_PCH_LP_XHCI_PORTSC09USB2 0x500
+#define R_PCH_LP_XHCI_PORTSC10USB2 0x510
+
+#define R_PCH_LP_XHCI_PORTSC13USBR 0x520
+#define R_PCH_LP_XHCI_PORTSC14USBR 0x530
+
+#define R_PCH_LP_XHCI_PORTSC01USB3 0x540
+#define R_PCH_LP_XHCI_PORTSC02USB3 0x550
+#define R_PCH_LP_XHCI_PORTSC03USB3 0x560
+#define R_PCH_LP_XHCI_PORTSC04USB3 0x570
+#define R_PCH_LP_XHCI_PORTSC05USB3 0x580
+#define R_PCH_LP_XHCI_PORTSC06USB3 0x590
+
+//
+// 0x480 - 0x5CF - Port Status and Control Registers
+//
+#define R_PCH_H_XHCI_PORTSC01USB2 0x480
+#define R_PCH_H_XHCI_PORTSC02USB2 0x490
+#define R_PCH_H_XHCI_PORTSC03USB2 0x4A0
+#define R_PCH_H_XHCI_PORTSC04USB2 0x4B0
+#define R_PCH_H_XHCI_PORTSC05USB2 0x4C0
+#define R_PCH_H_XHCI_PORTSC06USB2 0x4D0
+#define R_PCH_H_XHCI_PORTSC07USB2 0x4E0
+#define R_PCH_H_XHCI_PORTSC08USB2 0x4F0
+#define R_PCH_H_XHCI_PORTSC09USB2 0x500
+#define R_PCH_H_XHCI_PORTSC10USB2 0x510
+#define R_PCH_H_XHCI_PORTSC11USB2 0x520
+#define R_PCH_H_XHCI_PORTSC12USB2 0x530
+#define R_PCH_H_XHCI_PORTSC13USB2 0x540
+#define R_PCH_H_XHCI_PORTSC14USB2 0x550
+
+#define R_PCH_H_XHCI_PORTSC15USBR 0x560
+#define R_PCH_H_XHCI_PORTSC16USBR 0x570
+
+#define R_PCH_H_XHCI_PORTSC01USB3 0x580
+#define R_PCH_H_XHCI_PORTSC02USB3 0x590
+#define R_PCH_H_XHCI_PORTSC03USB3 0x5A0
+#define R_PCH_H_XHCI_PORTSC04USB3 0x5B0
+#define R_PCH_H_XHCI_PORTSC05USB3 0x5C0
+#define R_PCH_H_XHCI_PORTSC06USB3 0x5D0
+#define R_PCH_H_XHCI_PORTSC07USB3 0x5E0
+#define R_PCH_H_XHCI_PORTSC08USB3 0x5F0
+#define R_PCH_H_XHCI_PORTSC09USB3 0x600
+#define R_PCH_H_XHCI_PORTSC10USB3 0x610
+
+#define B_PCH_XHCI_PORTSCXUSB2_WPR BIT31 ///< Warm Port Reset
+#define B_PCH_XHCI_PORTSCXUSB2_WDE BIT26 ///< Wake on Disconnect Enable
+#define B_PCH_XHCI_PORTSCXUSB2_WCE BIT25 ///< Wake on Connect Enable
+#define B_PCH_XHCI_PORTSCXUSB2_CEC BIT23 ///< Port Config Error Change
+#define B_PCH_XHCI_PORTSCXUSB2_PLC BIT22 ///< Port Link State Change
+#define B_PCH_XHCI_PORTSCXUSB2_PRC BIT21 ///< Port Reset Change
+#define B_PCH_XHCI_PORTSCXUSB2_OCC BIT20 ///< Over-current Change
+#define B_PCH_XHCI_PORTSCXUSB2_WRC BIT19 ///< Warm Port Reset Change
+#define B_PCH_XHCI_PORTSCXUSB2_PEC BIT18 ///< Port Enabled Disabled Change
+#define B_PCH_XHCI_PORTSCXUSB2_CSC BIT17 ///< Connect Status Change
+#define B_PCH_XHCI_PORTSCXUSB2_LWS BIT16 ///< Port Link State Write Strobe
+#define B_PCH_XHCI_USB2_U3_EXIT (BIT5 | BIT6 | BIT7 | BIT8)
+#define B_PCH_XHCI_USB2_U0_MASK (BIT5 | BIT6 | BIT7 | BIT8)
+#define B_PCH_XHCI_PORTSCXUSB2_PP BIT9
+#define B_PCH_XHCI_PORTSCXUSB2_PLS (BIT5 | BIT6 | BIT7 | BIT8) ///< Port Link State
+#define B_PCH_XHCI_PORTSCXUSB2_PR BIT4 ///< Port Reset
+#define B_PCH_XHCI_PORTSCXUSB2_PED BIT1 ///< Port Enable/Disabled
+#define B_PCH_XHCI_PORTSCXUSB2_CCS BIT0 ///< Current Connect Status
+#define B_PCH_XHCI_PORT_CHANGE_ENABLE_MASK (B_PCH_XHCI_PORTSCXUSB2_CEC | B_PCH_XHCI_PORTSCXUSB2_PLC | B_PCH_XHCI_PORTSCXUSB2_PRC | B_PCH_XHCI_PORTSCXUSB2_OCC | B_PCH_XHCI_PORTSCXUSB2_WRC | B_PCH_XHCI_PORTSCXUSB2_PEC | B_PCH_XHCI_PORTSCXUSB2_CSC | B_PCH_XHCI_PORTSCXUSB2_PED)
+#define B_PCH_XHCI_PORTPMSCXUSB2_PTC (BIT28 | BIT29 | BIT30 | BIT31) ///< Port Test Control
+
+#define B_PCH_XHCI_PORTSCXUSB3_WPR BIT31 ///< Warm Port Reset
+#define B_PCH_XHCI_PORTSCXUSB3_WDE BIT26 ///< Wake on Disconnect Enable
+#define B_PCH_XHCI_PORTSCXUSB3_WCE BIT25 ///< Wake on Connect Enable
+#define B_PCH_XHCI_PORTSCXUSB3_CEC BIT23 ///< Port Config Error Change
+#define B_PCH_XHCI_PORTSCXUSB3_PLC BIT22 ///< Port Link State Change
+#define B_PCH_XHCI_PORTSCXUSB3_PRC BIT21 ///< Port Reset Change
+#define B_PCH_XHCI_PORTSCXUSB3_OCC BIT20 ///< Over-current Change
+#define B_PCH_XHCI_PORTSCXUSB3_WRC BIT19 ///< Warm Port Reset Change
+#define B_PCH_XHCI_PORTSCXUSB3_PEC BIT18 ///< Port Enabled Disabled Change
+#define B_PCH_XHCI_PORTSCXUSB3_CSC BIT17 ///< Connect Status Change
+#define B_PCH_XHCI_PORTSCXUSB3_PP BIT9 ///< Port Power
+#define B_PCH_XHCI_PORTSCXUSB3_PLS (BIT8 | BIT7 | BIT6 | BIT5) ///< Port Link State
+#define V_PCH_XHCI_PORTSCXUSB3_PLS_POLLING 0x000000E0 ///< Link is in the Polling State
+#define V_PCH_XHCI_PORTSCXUSB3_PLS_RXDETECT 0x000000A0 ///< Link is in the RxDetect State
+#define B_PCH_XHCI_PORTSCXUSB3_PR BIT4 ///< Port Reset
+#define B_PCH_XHCI_PORTSCXUSB3_PED BIT1 ///< Port Enable/Disabled
+#define B_PCH_XHCI_PORTSCXUSB3_CHANGE_ENABLE_MASK (B_PCH_XHCI_PORTSCXUSB3_CEC | B_PCH_XHCI_PORTSCXUSB3_PLC | B_PCH_XHCI_PORTSCXUSB3_PRC | B_PCH_XHCI_PORTSCXUSB3_OCC | B_PCH_XHCI_PORTSCXUSB3_WRC | B_PCH_XHCI_PORTSCXUSB3_PEC | B_PCH_XHCI_PORTSCXUSB3_CSC | B_PCH_XHCI_PORTSCXUSB3_PED)
+//
+// 0x2000 - 0x21FF - Runtime Registers
+// 0x3000 - 0x307F - Doorbell Registers
+//
+
+
+#define R_PCH_XHCI_PCE 0xA2
+#define R_PCH_XHCI_HSCFG2 0xA4
+#define R_PCH_XHCI_SSCFG1 0xA8
+#define R_PCH_XHCI_HSCFG1 0xAC
+
+#define R_PCH_XHCI_XECP_SUPP_USB2_2 0x8008
+#define R_PCH_XHCI_XECP_SUPP_USB3_2 0x8028
+#define R_PCH_XHCI_HOST_CTRL_TRM_REG 0x8090
+#define R_PCH_XHCI_HOST_CTRL_SCH_REG 0x8094
+#define R_PCH_XHCI_HOST_CTRL_IDMA_REG 0x809C
+#define R_PCH_XHCI_PMCTRL 0x80A4
+#define R_PCH_XHCI_PGCBCTRL 0x80A8 ///< PGCB Control
+#define R_PCH_XHCI_HOST_CTRL_MISC_REG 0x80B0 ///< Host Controller Misc Reg
+#define R_PCH_XHCI_HOST_CTRL_MISC_REG_2 0x80B4 ///< Host Controller Misc Reg 2
+#define R_PCH_XHCI_SSPE 0x80B8 ///< Super Speed Port Enables
+#define B_PCH_XHCI_LP_SSPE_MASK 0x3F ///< LP: Mask for 6 USB3 ports
+#define B_PCH_XHCI_H_SSPE_MASK 0x3FF ///< H: Mask for 10 USB3 ports
+#define R_PCH_XHCI_DUAL_ROLE_CFG0 0x80D8
+#define R_PCH_XHCI_DUAL_ROLE_CFG1 0x80DC
+#define R_PCH_XHCI_AUX_CTRL_REG1 0x80E0
+#define R_PCH_XHCI_HOST_CTRL_PORT_LINK_REG 0x80EC ///< SuperSpeed Port Link Control
+#define R_PCH_XHCI_XECP_CMDM_CTRL_REG1 0x818C ///< Command Manager Control 1
+#define R_PCH_XHCI_XECP_CMDM_CTRL_REG2 0x8190 ///< Command Manager Control 2
+#define R_PCH_XHCI_XECP_CMDM_CTRL_REG3 0x8194 ///< Command Manager Control 3
+#define R_PCH_XHCI_USB2_LINK_MGR_CTRL_REG1_DW1 0x80F0 ///< USB2_LINK_MGR_CTRL_REG1 - USB2 Port Link Control 1, 2, 3, 4
+#define R_PCH_XHCI_USB2_LINK_MGR_CTRL_REG1_DW2 0x80F4 ///< USB2_LINK_MGR_CTRL_REG1 - USB2 Port Link Control 1, 2, 3, 4
+#define R_PCH_XHCI_USB2_LINK_MGR_CTRL_REG1_DW3 0x80F8 ///< USB2_LINK_MGR_CTRL_REG1 - USB2 Port Link Control 1, 2, 3, 4
+#define R_PCH_XHCI_USB2_LINK_MGR_CTRL_REG1_DW4 0x80FC ///< USB2_LINK_MGR_CTRL_REG1 - USB2 Port Link Control 1, 2, 3, 4
+#define R_PCH_XHCI_HOST_CTRL_TRM_REG2 0x8110 ///< HOST_CTRL_TRM_REG2 - Host Controller Transfer Manager Control 2
+#define R_PCH_XHCI_HOST_CTRL_BW_MAX_REG_DW1 0x8128 ///< HOST_CTRL_BW_MAX_REG - MAX BW Control Reg 4
+#define R_PCH_XHCI_HOST_CTRL_BW_MAX_REG_DW2 0x812C ///< HOST_CTRL_BW_MAX_REG - MAX BW Control Reg 4
+#define R_PCH_XHCI_AUX_CTRL_REG2 0x8154 ///< AUX_CTRL_REG2 - Aux PM Control Register 2
+#define R_PCH_XHCI_AUXCLKCTL 0x816C ///< xHCI Aux Clock Control Register
+#define R_PCH_XHCI_HOST_IF_PWR_CTRL_REG0 0x8140 ///< HOST_IF_PWR_CTRL_REG0 - Power Scheduler Control 0
+#define R_PCH_XHCI_HOST_IF_PWR_CTRL_REG1 0x8144 ///< HOST_IF_PWR_CTRL_REG1 - Power Scheduler Control 1
+#define R_PCH_XHCI_XHCLTVCTL2 0x8174 ///< xHC Latency Tolerance Parameters - LTV Control
+#define R_PCH_XHCI_LTVHIT 0x817C ///< xHC Latency Tolerance Parameters - High Idle Time Control
+#define R_PCH_XHCI_LTVMIT 0x8180 ///< xHC Latency Tolerance Parameters - Medium Idle Time Control
+#define R_PCH_XHCI_LTVLIT 0x8184 ///< xHC Latency Tolerance Parameters - Low Idle Time Control
+#define R_PCH_XHCI_USB2PHYPM 0x8164 ///< USB2 PHY Power Management Control
+#define R_PCH_XHCI_PDDIS 0x8198 ///< xHC Pulldown Disable Control
+#define R_PCH_XHCI_THROTT 0x819C ///< XHCI Throttle Control
+#define R_PCH_XHCI_LFPSPM 0x81A0 ///< LFPS PM Control
+#define R_PCH_XHCI_THROTT2 0x81B4 ///< XHCI Throttle
+#define R_PCH_XHCI_LFPSONCOUNT 0x81B8 ///< LFPS On Count
+#define R_PCH_XHCI_D0I2CTRL 0x81BC ///< D0I2 Control Register
+#define R_PCH_XHCI_USB2PMCTRL 0x81C4 ///< USB2 Power Management Control
+
+//
+// SKL PCH LP FUSE
+//
+#define R_PCH_XHCI_LP_FUSE1 0x8410
+#define B_PCH_XHCI_LP_FUS_HSPRTCNT (BIT1)
+#define B_PCH_XHCI_LP_FUS_USBR (BIT5)
+#define R_PCH_XHCI_STRAP2 0x8420 ///< USB3 Mode Strap
+#define R_PCH_XHCI_USBLEGCTLSTS 0x8470 ///< USB Legacy Support Control Status
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIBAR BIT31 ///< SMI on BAR Status
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIPCIC BIT30 ///< SMI on PCI Command Status
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIOSC BIT29 ///< SMI on OS Ownership Change Status
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIBARE BIT15 ///< SMI on BAR Enable
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIPCICE BIT14 ///< SMI on PCI Command Enable
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIOSOE BIT13 ///< SMI on OS Ownership Enable
+#define B_PCH_XHCI_USBLEGCTLSTS_SMIHSEE BIT4 ///< SMI on Host System Error Enable
+#define B_PCH_XHCI_USBLEGCTLSTS_USBSMIE BIT0 ///< USB SMI Enable
+
+//
+// Extended Capability Registers
+//
+#define R_PCH_XHCI_USB2PDO 0x84F8
+#define B_PCH_XHCI_LP_USB2PDO_MASK 0x3FF ///< LP: Mask for 10 USB2 ports
+#define B_PCH_XHCI_H_USB2PDO_MASK 0x7FFF ///< H: Mask for 14 USB2 ports
+#define B_PCH_XHCI_USB2PDO_DIS_PORT0 BIT0
+
+#define R_PCH_XHCI_USB3PDO 0x84FC
+#define B_PCH_XHCI_LP_USB3PDO_MASK 0x3F ///< LP: Mask for 6 USB3 ports
+#define B_PCH_XHCI_H_USB3PDO_MASK 0x3FF ///< H: Mask for 10 USB3 ports
+#define B_PCH_XHCI_USB3PDO_DIS_PORT0 BIT0
+
+//
+// Debug Capability Descriptor Parameters
+//
+#define R_PCH_XHCI_DBC_DBCCTL 0x8760 ///< DBCCTL - DbC Control
+
+//
+// xDCI (OTG) USB Device Controller
+//
+#define PCI_DEVICE_NUMBER_PCH_XDCI 20
+#define PCI_FUNCTION_NUMBER_PCH_XDCI 1
+
+#define V_PCH_XDCI_VENDOR_ID V_PCH_INTEL_VENDOR_ID
+#define V_PCH_XDCI_DEVICE_ID 0x9D30
+
+//
+// LBG Pruduction (PRQ) xDCI (OTG) USB Device Controller Device ID
+//
+#define V_PCH_LBG_PROD_XDCI_DEVICE_ID 0xA1B0
+//
+// LBG SuperSKU (SSX) xDCI (OTG) USB Device Controller Device ID
+//
+#define V_PCH_LBG_XDCI_DEVICE_ID 0xA230
+
+//
+// xDCI (OTG) PCI Config Space Registers
+//
+#define R_PCH_XDCI_MEM_BASE 0x10
+#define V_PCH_XDCI_MEM_LENGTH 0x200000
+#define R_PCH_XDCI_PMCSR 0x84 ///< Power Management Control and Status Register
+#define R_PCH_XDCI_GENERAL_PURPOSER_REG1 0xA0 ///< General Purpose PCI RW Register1
+#define R_PCH_XDCI_CPGE 0xA2 ///< Chassis Power Gate Enable
+#define R_PCH_XDCI_GENERAL_PURPOSER_REG4 0xAC ///< General Purpose PCI RW Register4
+#define R_PCH_OTG_GENERAL_INPUT_REG 0xC0 ///< General Input Register
+
+//
+// xDCI (OTG) MMIO registers
+//
+#define R_PCH_XDCI_GCTL 0xC110 ///< Xdci Global Ctrl
+#define B_PCH_XDCI_GCTL_GHIBEREN BIT1 ///< Hibernation enable
+#define R_PCH_XDCI_GUSB2PHYCFG 0xC200 ///< Global USB2 PHY Configuration Register
+#define B_PCH_XDCI_GUSB2PHYCFG_SUSPHY BIT6 ///< Suspend USB2.0 HS/FS/LS PHY
+#define R_PCH_XDCI_GUSB3PIPECTL0 0xC2C0 ///< Global USB3 PIPE Control Register 0
+#define B_PCH_XDCI_GUSB3PIPECTL0_UX_IN_PX BIT27 ///< Ux Exit in Px
+#define R_PCH_XDCI_APBFC_U3PMU_CFG2 0x10F810
+#define R_PCH_XDCI_APBFC_U3PMU_CFG4 0x10F818
+
+//
+// xDCI (OTG) Private Configuration Registers
+// (PID:OTG)
+//
+#define R_PCH_PCR_OTG_IOSF_A2 0xA2
+#define R_PCH_PCR_OTG_IOSF_PMCTL 0x1D0
+#define R_PCH_PCR_OTG_PCICFGCTRL1 0x200
+#define B_PCH_PCR_OTG_PCICFGCTRL_PCI_IRQ 0x0FF00000
+#define N_PCH_PCR_OTG_PCICFGCTRL_PCI_IRQ 20
+#define B_PCH_PCR_OTG_PCICFGCTRL_ACPI_IRQ 0x000FF000
+#define N_PCH_PCR_OTG_PCICFGCTRL_ACPI_IRQ 12
+#define B_PCH_PCR_OTG_PCICFGCTRL_INT_PIN 0x00000F00
+#define N_PCH_PCR_OTG_PCICFGCTRL_INT_PIN 8
+#define B_PCH_PCR_OTG_PCICFGCTRL_BAR1_DIS 0x00000080
+#define B_PCH_PCR_OTG_PCICFGCTRL_PME_SUP 0x0000007C
+#define B_PCH_PCR_OTG_PCICFGCTRL_ACPI_INT_EN 0x00000002
+#define B_PCH_PCR_OTG_PCICFGCTRL_PCI_CFG_DIS 0x00000001
+
+//
+// USB2 Private Configuration Registers
+// USB2 HIP design featured
+// (PID:USB2)
+//
+#define R_PCH_PCR_USB2_GLOBAL_PORT 0x4001 ///< USB2 GLOBAL PORT
+#define R_PCH_PCR_USB2_400C 0x400C
+#define R_PCH_PCR_USB2_PP_LANE_BASE_ADDR 0x4000 ///< PP LANE base address
+#define V_PCH_PCR_USB2_PER_PORT 0x00 ///< USB2 PER PORT Addr[7:2] = 0x00
+#define V_PCH_PCR_USB2_UTMI_MISC_PER_PORT 0x08 ///< UTMI MISC REG PER PORT Addr[7:2] = 0x08
+#define V_PCH_PCR_USB2_PER_PORT_2 0x26 ///< USB2 PER PORT 2 Addr[7:2] = 0x26
+#define R_PCH_PCR_USB2_402A 0x402A
+#define R_PCH_PCR_USB2_GLB_ADP_VBUS_REG 0x402B ///< GLB ADP VBUS REG
+#define R_PCH_PCR_USB2_GLOBAL_PORT_2 0x402C ///< USB2 GLOBAL PORT 2
+#define R_PCH_PCR_USB2_PLLDIVRATIOS_0 0x7000
+#define R_PCH_PCR_USB2_SFRCONFIG_0 0x702C
+#define R_PCH_PCR_USB2_CONFIG_0 0x7008
+#define R_PCH_PCR_USB2_CONFIG_3 0x7014
+#define R_PCH_PCR_USB2_DFT_1 0x7024
+#define R_PCH_PCR_USB2_7034 0x7034
+#define R_PCH_PCR_USB2_7038 0x7038
+#define R_PCH_PCR_USB2_703C 0x703C
+#define R_PCH_PCR_USB2_7040 0x7040
+#define R_PCH_PCR_USB2_7044 0x7044
+#define R_PCH_PCR_USB2_7048 0x7048
+#define R_PCH_PCR_USB2_704C 0x704C
+#define R_PCH_PCR_USB2_CFG_COMPBG 0x7F04 ///< USB2 COMPBG
+
+//
+// xHCI SSIC registers
+//
+#define R_PCH_XHCI_SSIC_GLOBAL_CONF_CTRL 0x8804 ///< SSIC Global Configuration Control
+#define R_PCH_XHCI_SSIC_CONF_REG1_PORT_1 0x8808 ///< SSIC Configuration Register 1 Port 1
+#define R_PCH_XHCI_SSIC_CONF_REG2_PORT_1 0x880C ///< SSIC Configuration Register 2 Port 1
+#define R_PCH_XHCI_SSIC_CONF_REG3_PORT_1 0x8810 ///< SSIC Configuration Register 3 Port 1
+#define R_PCH_XHCI_SSIC_CONF_REG1_PORT_2 0x8838 ///< SSIC Configuration Register 1 Port 2
+#define R_PCH_XHCI_SSIC_CONF_REG2_PORT_2 0x883C ///< SSIC Configuration Register 2 Port 2
+#define R_PCH_XHCI_SSIC_CONF_REG3_PORT_2 0x8840 ///< SSIC Configuration Register 3 Port 2
+#define B_PCH_XHCI_SSIC_CONF_REG2_PORT_UNUSED BIT31
+#define B_PCH_XHCI_SSIC_CONF_REG2_PROG_DONE BIT30
+
+#define R_PCH_XHCI_SSIC_PROF_ATTR_PORT_1 0x8900 ///< Profile Attributes: Port 1 ... N
+#define R_PCH_XHCI_SSIC_ACCESS_CONT_PORT_1 0x8904 ///< SSIC Port N Register Access Control: Port 1
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_0C 0x890C
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_10 0x8910
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_14 0x8914
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_18 0x8918
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_1C 0x891C
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_20 0x8920
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_24 0x8924
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P1_28 0x8928
+
+#define R_PCH_XHCI_SSIC_PROF_ATTR_PORT_2 0x8A10 ///< Profile Attributes: Port 2 ... N
+#define R_PCH_XHCI_SSIC_ACCESS_CONT_PORT_2 0x8A14 ///< SSIC Port N Register Access Control: Port 2
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_0C 0x8A1C
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_10 0x8A20
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_14 0x8A24
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_18 0x8A28
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_1C 0x8A2C
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_20 0x8A30
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_24 0x8A34
+#define R_PCH_XHCI_SSIC_PROF_ATTR_P2_28 0x8A38
+
+#endif
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 06/17] WhitleySiliconPkg: Add PCH Includes
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (4 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 05/17] WhitleySiliconPkg: Add PCH Register Includes Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 07/17] WhitleySiliconPkg: Add PCH Libraries Nate DeSimone
` (12 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../SouthClusterLbg/Include/GpioPinsSklH.h | 300 +++
.../SouthClusterLbg/Include/Library/GpioLib.h | 1016 ++++++++
.../Include/Library/PchMultiPchBase.h | 37 +
.../Include/Library/PchPcieRpLib.h | 145 ++
.../Pch/SouthClusterLbg/Include/PchAccess.h | 629 +++++
.../Pch/SouthClusterLbg/Include/PchLimits.h | 108 +
.../SouthClusterLbg/Include/PchPolicyCommon.h | 2161 +++++++++++++++++
.../Include/PchReservedResources.h | 82 +
.../Pch/SouthClusterLbg/Include/PcieRegs.h | 288 +++
.../Include/Ppi/PchHsioPtssTable.h | 31 +
.../Include/Ppi/PchPcieDeviceTable.h | 126 +
.../SouthClusterLbg/Include/Ppi/PchPolicy.h | 23 +
.../SouthClusterLbg/Include/Ppi/PchReset.h | 95 +
.../Pch/SouthClusterLbg/Include/Ppi/Spi.h | 28 +
.../Include/Private/Library/PchSpiCommonLib.h | 458 ++++
.../Include/Protocol/PchReset.h | 114 +
.../SouthClusterLbg/Include/Protocol/Spi.h | 305 +++
17 files changed, 5946 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h
new file mode 100644
index 0000000000..79d6e73dc4
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h
@@ -0,0 +1,300 @@
+/** @file
+ GPIO pins for SKL-PCH-H,
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _GPIO_PINS_SKL_H_H_
+#define _GPIO_PINS_SKL_H_H_
+///
+/// This header file should be used together with
+/// PCH GPIO lib in C and ASL. All defines used
+/// must match both ASL/C syntax
+///
+///
+/// SKL H GPIO Groups
+/// Use below for functions from PCH GPIO Lib which
+/// require GpioGroup as argument
+///
+#define GPIO_SKL_H_GROUP_GPP_A 0x0100
+#define GPIO_SKL_H_GROUP_GPP_B 0x0101
+#define GPIO_SKL_H_GROUP_GPP_C 0x0102
+#define GPIO_SKL_H_GROUP_GPP_D 0x0103
+#define GPIO_SKL_H_GROUP_GPP_E 0x0104
+#define GPIO_SKL_H_GROUP_GPP_F 0x0105
+#define GPIO_SKL_H_GROUP_GPP_G 0x0106
+#define GPIO_SKL_H_GROUP_GPP_H 0x0107
+#define GPIO_SKL_H_GROUP_GPP_I 0x0108
+#define GPIO_SKL_H_GROUP_GPP_J 0x0109
+#define GPIO_SKL_H_GROUP_GPP_K 0x010A
+#define GPIO_SKL_H_GROUP_GPP_L 0x010B
+#define GPIO_SKL_H_GROUP_GPD 0x010C
+
+///
+/// SKL H GPIO pins
+/// Use below for functions from PCH GPIO Lib which
+/// require GpioPad as argument. Encoding used here
+/// has all information required by library functions
+///
+#define GPIO_SKL_H_GPP_A0 0x01000000
+#define GPIO_SKL_H_GPP_A1 0x01000001
+#define GPIO_SKL_H_GPP_A2 0x01000002
+#define GPIO_SKL_H_GPP_A3 0x01000003
+#define GPIO_SKL_H_GPP_A4 0x01000004
+#define GPIO_SKL_H_GPP_A5 0x01000005
+#define GPIO_SKL_H_GPP_A6 0x01000006
+#define GPIO_SKL_H_GPP_A7 0x01000007
+#define GPIO_SKL_H_GPP_A8 0x01000008
+#define GPIO_SKL_H_GPP_A9 0x01000009
+#define GPIO_SKL_H_GPP_A10 0x0100000A
+#define GPIO_SKL_H_GPP_A11 0x0100000B
+#define GPIO_SKL_H_GPP_A12 0x0100000C
+#define GPIO_SKL_H_GPP_A13 0x0100000D
+#define GPIO_SKL_H_GPP_A14 0x0100000E
+#define GPIO_SKL_H_GPP_A15 0x0100000F
+#define GPIO_SKL_H_GPP_A16 0x01000010
+#define GPIO_SKL_H_GPP_A17 0x01000011
+#define GPIO_SKL_H_GPP_A18 0x01000012
+#define GPIO_SKL_H_GPP_A19 0x01000013
+#define GPIO_SKL_H_GPP_A20 0x01000014
+#define GPIO_SKL_H_GPP_A21 0x01000015
+#define GPIO_SKL_H_GPP_A22 0x01000016
+#define GPIO_SKL_H_GPP_A23 0x01000017
+#define GPIO_SKL_H_GPP_B0 0x01010000
+#define GPIO_SKL_H_GPP_B1 0x01010001
+#define GPIO_SKL_H_GPP_B2 0x01010002
+#define GPIO_SKL_H_GPP_B3 0x01010003
+#define GPIO_SKL_H_GPP_B4 0x01010004
+#define GPIO_SKL_H_GPP_B5 0x01010005
+#define GPIO_SKL_H_GPP_B6 0x01010006
+#define GPIO_SKL_H_GPP_B7 0x01010007
+#define GPIO_SKL_H_GPP_B8 0x01010008
+#define GPIO_SKL_H_GPP_B9 0x01010009
+#define GPIO_SKL_H_GPP_B10 0x0101000A
+#define GPIO_SKL_H_GPP_B11 0x0101000B
+#define GPIO_SKL_H_GPP_B12 0x0101000C
+#define GPIO_SKL_H_GPP_B13 0x0101000D
+#define GPIO_SKL_H_GPP_B14 0x0101000E
+#define GPIO_SKL_H_GPP_B15 0x0101000F
+#define GPIO_SKL_H_GPP_B16 0x01010010
+#define GPIO_SKL_H_GPP_B17 0x01010011
+#define GPIO_SKL_H_GPP_B18 0x01010012
+#define GPIO_SKL_H_GPP_B19 0x01010013
+#define GPIO_SKL_H_GPP_B20 0x01010014
+#define GPIO_SKL_H_GPP_B21 0x01010015
+#define GPIO_SKL_H_GPP_B22 0x01010016
+#define GPIO_SKL_H_GPP_B23 0x01010017
+#define GPIO_SKL_H_GPP_C0 0x01020000
+#define GPIO_SKL_H_GPP_C1 0x01020001
+#define GPIO_SKL_H_GPP_C2 0x01020002
+#define GPIO_SKL_H_GPP_C3 0x01020003
+#define GPIO_SKL_H_GPP_C4 0x01020004
+#define GPIO_SKL_H_GPP_C5 0x01020005
+#define GPIO_SKL_H_GPP_C6 0x01020006
+#define GPIO_SKL_H_GPP_C7 0x01020007
+#define GPIO_SKL_H_GPP_C8 0x01020008
+#define GPIO_SKL_H_GPP_C9 0x01020009
+#define GPIO_SKL_H_GPP_C10 0x0102000A
+#define GPIO_SKL_H_GPP_C11 0x0102000B
+#define GPIO_SKL_H_GPP_C12 0x0102000C
+#define GPIO_SKL_H_GPP_C13 0x0102000D
+#define GPIO_SKL_H_GPP_C14 0x0102000E
+#define GPIO_SKL_H_GPP_C15 0x0102000F
+#define GPIO_SKL_H_GPP_C16 0x01020010
+#define GPIO_SKL_H_GPP_C17 0x01020011
+#define GPIO_SKL_H_GPP_C18 0x01020012
+#define GPIO_SKL_H_GPP_C19 0x01020013
+#define GPIO_SKL_H_GPP_C20 0x01020014
+#define GPIO_SKL_H_GPP_C21 0x01020015
+#define GPIO_SKL_H_GPP_C22 0x01020016
+#define GPIO_SKL_H_GPP_C23 0x01020017
+#define GPIO_SKL_H_GPP_D0 0x01030000
+#define GPIO_SKL_H_GPP_D1 0x01030001
+#define GPIO_SKL_H_GPP_D2 0x01030002
+#define GPIO_SKL_H_GPP_D3 0x01030003
+#define GPIO_SKL_H_GPP_D4 0x01030004
+#define GPIO_SKL_H_GPP_D5 0x01030005
+#define GPIO_SKL_H_GPP_D6 0x01030006
+#define GPIO_SKL_H_GPP_D7 0x01030007
+#define GPIO_SKL_H_GPP_D8 0x01030008
+#define GPIO_SKL_H_GPP_D9 0x01030009
+#define GPIO_SKL_H_GPP_D10 0x0103000A
+#define GPIO_SKL_H_GPP_D11 0x0103000B
+#define GPIO_SKL_H_GPP_D12 0x0103000C
+#define GPIO_SKL_H_GPP_D13 0x0103000D
+#define GPIO_SKL_H_GPP_D14 0x0103000E
+#define GPIO_SKL_H_GPP_D15 0x0103000F
+#define GPIO_SKL_H_GPP_D16 0x01030010
+#define GPIO_SKL_H_GPP_D17 0x01030011
+#define GPIO_SKL_H_GPP_D18 0x01030012
+#define GPIO_SKL_H_GPP_D19 0x01030013
+#define GPIO_SKL_H_GPP_D20 0x01030014
+#define GPIO_SKL_H_GPP_D21 0x01030015
+#define GPIO_SKL_H_GPP_D22 0x01030016
+#define GPIO_SKL_H_GPP_D23 0x01030017
+#define GPIO_SKL_H_GPP_E0 0x01040000
+#define GPIO_SKL_H_GPP_E1 0x01040001
+#define GPIO_SKL_H_GPP_E2 0x01040002
+#define GPIO_SKL_H_GPP_E3 0x01040003
+#define GPIO_SKL_H_GPP_E4 0x01040004
+#define GPIO_SKL_H_GPP_E5 0x01040005
+#define GPIO_SKL_H_GPP_E6 0x01040006
+#define GPIO_SKL_H_GPP_E7 0x01040007
+#define GPIO_SKL_H_GPP_E8 0x01040008
+#define GPIO_SKL_H_GPP_E9 0x01040009
+#define GPIO_SKL_H_GPP_E10 0x0104000A
+#define GPIO_SKL_H_GPP_E11 0x0104000B
+#define GPIO_SKL_H_GPP_E12 0x0104000C
+#define GPIO_SKL_H_GPP_F0 0x01050000
+#define GPIO_SKL_H_GPP_F1 0x01050001
+#define GPIO_SKL_H_GPP_F2 0x01050002
+#define GPIO_SKL_H_GPP_F3 0x01050003
+#define GPIO_SKL_H_GPP_F4 0x01050004
+#define GPIO_SKL_H_GPP_F5 0x01050005
+#define GPIO_SKL_H_GPP_F6 0x01050006
+#define GPIO_SKL_H_GPP_F7 0x01050007
+#define GPIO_SKL_H_GPP_F8 0x01050008
+#define GPIO_SKL_H_GPP_F9 0x01050009
+#define GPIO_SKL_H_GPP_F10 0x0105000A
+#define GPIO_SKL_H_GPP_F11 0x0105000B
+#define GPIO_SKL_H_GPP_F12 0x0105000C
+#define GPIO_SKL_H_GPP_F13 0x0105000D
+#define GPIO_SKL_H_GPP_F14 0x0105000E
+#define GPIO_SKL_H_GPP_F15 0x0105000F
+#define GPIO_SKL_H_GPP_F16 0x01050010
+#define GPIO_SKL_H_GPP_F17 0x01050011
+#define GPIO_SKL_H_GPP_F18 0x01050012
+#define GPIO_SKL_H_GPP_F19 0x01050013
+#define GPIO_SKL_H_GPP_F20 0x01050014
+#define GPIO_SKL_H_GPP_F21 0x01050015
+#define GPIO_SKL_H_GPP_F22 0x01050016
+#define GPIO_SKL_H_GPP_F23 0x01050017
+#define GPIO_SKL_H_GPP_G0 0x01060000
+#define GPIO_SKL_H_GPP_G1 0x01060001
+#define GPIO_SKL_H_GPP_G2 0x01060002
+#define GPIO_SKL_H_GPP_G3 0x01060003
+#define GPIO_SKL_H_GPP_G4 0x01060004
+#define GPIO_SKL_H_GPP_G5 0x01060005
+#define GPIO_SKL_H_GPP_G6 0x01060006
+#define GPIO_SKL_H_GPP_G7 0x01060007
+#define GPIO_SKL_H_GPP_G8 0x01060008
+#define GPIO_SKL_H_GPP_G9 0x01060009
+#define GPIO_SKL_H_GPP_G10 0x0106000A
+#define GPIO_SKL_H_GPP_G11 0x0106000B
+#define GPIO_SKL_H_GPP_G12 0x0106000C
+#define GPIO_SKL_H_GPP_G13 0x0106000D
+#define GPIO_SKL_H_GPP_G14 0x0106000E
+#define GPIO_SKL_H_GPP_G15 0x0106000F
+#define GPIO_SKL_H_GPP_G16 0x01060010
+#define GPIO_SKL_H_GPP_G17 0x01060011
+#define GPIO_SKL_H_GPP_G18 0x01060012
+#define GPIO_SKL_H_GPP_G19 0x01060013
+#define GPIO_SKL_H_GPP_G20 0x01060014
+#define GPIO_SKL_H_GPP_G21 0x01060015
+#define GPIO_SKL_H_GPP_G22 0x01060016
+#define GPIO_SKL_H_GPP_G23 0x01060017
+#define GPIO_SKL_H_GPP_H0 0x01070000
+#define GPIO_SKL_H_GPP_H1 0x01070001
+#define GPIO_SKL_H_GPP_H2 0x01070002
+#define GPIO_SKL_H_GPP_H3 0x01070003
+#define GPIO_SKL_H_GPP_H4 0x01070004
+#define GPIO_SKL_H_GPP_H5 0x01070005
+#define GPIO_SKL_H_GPP_H6 0x01070006
+#define GPIO_SKL_H_GPP_H7 0x01070007
+#define GPIO_SKL_H_GPP_H8 0x01070008
+#define GPIO_SKL_H_GPP_H9 0x01070009
+#define GPIO_SKL_H_GPP_H10 0x0107000A
+#define GPIO_SKL_H_GPP_H11 0x0107000B
+#define GPIO_SKL_H_GPP_H12 0x0107000C
+#define GPIO_SKL_H_GPP_H13 0x0107000D
+#define GPIO_SKL_H_GPP_H14 0x0107000E
+#define GPIO_SKL_H_GPP_H15 0x0107000F
+#define GPIO_SKL_H_GPP_H16 0x01070010
+#define GPIO_SKL_H_GPP_H17 0x01070011
+#define GPIO_SKL_H_GPP_H18 0x01070012
+#define GPIO_SKL_H_GPP_H19 0x01070013
+#define GPIO_SKL_H_GPP_H20 0x01070014
+#define GPIO_SKL_H_GPP_H21 0x01070015
+#define GPIO_SKL_H_GPP_H22 0x01070016
+#define GPIO_SKL_H_GPP_H23 0x01070017
+#define GPIO_SKL_H_GPP_I0 0x01080000
+#define GPIO_SKL_H_GPP_I1 0x01080001
+#define GPIO_SKL_H_GPP_I2 0x01080002
+#define GPIO_SKL_H_GPP_I3 0x01080003
+#define GPIO_SKL_H_GPP_I4 0x01080004
+#define GPIO_SKL_H_GPP_I5 0x01080005
+#define GPIO_SKL_H_GPP_I6 0x01080006
+#define GPIO_SKL_H_GPP_I7 0x01080007
+#define GPIO_SKL_H_GPP_I8 0x01080008
+#define GPIO_SKL_H_GPP_I9 0x01080009
+#define GPIO_SKL_H_GPP_I10 0x0108000A
+#define GPIO_SKL_H_GPP_J0 0x01090000
+#define GPIO_SKL_H_GPP_J1 0x01090001
+#define GPIO_SKL_H_GPP_J2 0x01090002
+#define GPIO_SKL_H_GPP_J3 0x01090003
+#define GPIO_SKL_H_GPP_J4 0x01090004
+#define GPIO_SKL_H_GPP_J5 0x01090005
+#define GPIO_SKL_H_GPP_J6 0x01090006
+#define GPIO_SKL_H_GPP_J7 0x01090007
+#define GPIO_SKL_H_GPP_J8 0x01090008
+#define GPIO_SKL_H_GPP_J9 0x01090009
+#define GPIO_SKL_H_GPP_J10 0x0109000A
+#define GPIO_SKL_H_GPP_J11 0x0109000B
+#define GPIO_SKL_H_GPP_J12 0x0109000C
+#define GPIO_SKL_H_GPP_J13 0x0109000D
+#define GPIO_SKL_H_GPP_J14 0x0109000E
+#define GPIO_SKL_H_GPP_J15 0x0109000F
+#define GPIO_SKL_H_GPP_J16 0x01090010
+#define GPIO_SKL_H_GPP_J17 0x01090011
+#define GPIO_SKL_H_GPP_J18 0x01090012
+#define GPIO_SKL_H_GPP_J19 0x01090013
+#define GPIO_SKL_H_GPP_J20 0x01090014
+#define GPIO_SKL_H_GPP_J21 0x01090015
+#define GPIO_SKL_H_GPP_J22 0x01090016
+#define GPIO_SKL_H_GPP_J23 0x01090017
+#define GPIO_SKL_H_GPP_K0 0x010A0000
+#define GPIO_SKL_H_GPP_K1 0x010A0001
+#define GPIO_SKL_H_GPP_K2 0x010A0002
+#define GPIO_SKL_H_GPP_K3 0x010A0003
+#define GPIO_SKL_H_GPP_K4 0x010A0004
+#define GPIO_SKL_H_GPP_K5 0x010A0005
+#define GPIO_SKL_H_GPP_K6 0x010A0006
+#define GPIO_SKL_H_GPP_K7 0x010A0007
+#define GPIO_SKL_H_GPP_K8 0x010A0008
+#define GPIO_SKL_H_GPP_K9 0x010A0009
+#define GPIO_SKL_H_GPP_K10 0x010A000A
+#define GPIO_SKL_H_GPP_L2 0x010B0002
+#define GPIO_SKL_H_GPP_L3 0x010B0003
+#define GPIO_SKL_H_GPP_L4 0x010B0004
+#define GPIO_SKL_H_GPP_L5 0x010B0005
+#define GPIO_SKL_H_GPP_L6 0x010B0006
+#define GPIO_SKL_H_GPP_L7 0x010B0007
+#define GPIO_SKL_H_GPP_L8 0x010B0008
+#define GPIO_SKL_H_GPP_L9 0x010B0009
+#define GPIO_SKL_H_GPP_L10 0x010B000A
+#define GPIO_SKL_H_GPP_L11 0x010B000B
+#define GPIO_SKL_H_GPP_L12 0x010B000C
+#define GPIO_SKL_H_GPP_L13 0x010B000D
+#define GPIO_SKL_H_GPP_L14 0x010B000E
+#define GPIO_SKL_H_GPP_L15 0x010B000F
+#define GPIO_SKL_H_GPP_L16 0x010B0010
+#define GPIO_SKL_H_GPP_L17 0x010B0011
+#define GPIO_SKL_H_GPP_L18 0x010B0012
+#define GPIO_SKL_H_GPP_L19 0x010B0013
+#define GPIO_SKL_H_GPD0 0x010C0000
+#define GPIO_SKL_H_GPD1 0x010C0001
+#define GPIO_SKL_H_GPD2 0x010C0002
+#define GPIO_SKL_H_GPD3 0x010C0003
+#define GPIO_SKL_H_GPD4 0x010C0004
+#define GPIO_SKL_H_GPD5 0x010C0005
+#define GPIO_SKL_H_GPD6 0x010C0006
+#define GPIO_SKL_H_GPD7 0x010C0007
+#define GPIO_SKL_H_GPD8 0x010C0008
+#define GPIO_SKL_H_GPD9 0x010C0009
+#define GPIO_SKL_H_GPD10 0x010C000A
+#define GPIO_SKL_H_GPD11 0x010C000B
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h
new file mode 100644
index 0000000000..17b433ac78
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h
@@ -0,0 +1,1016 @@
+/** @file
+ Header file for GpioLib.
+ All function in this library is available for PEI, DXE, and SMM
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _GPIO_LIB_H_
+#define _GPIO_LIB_H_
+
+#include <GpioConfig.h>
+#include <Uefi/UefiBaseType.h>
+
+typedef struct {
+ GPIO_PAD GpioPad;
+ GPIO_CONFIG GpioConfig;
+} GPIO_INIT_CONFIG;
+/**
+ This procedure will initialize multiple GPIO pins. Use GPIO_INIT_CONFIG structure.
+ Structure contains fields that can be used to configure each pad.
+ Pad not configured using GPIO_INIT_CONFIG will be left with hardware default values.
+ Separate fields could be set to hardware default if it does not matter, except
+ GpioPad and PadMode.
+ Some GpioPads are configured and switched to native mode by RC, those include:
+ SerialIo pins, ISH pins, ClkReq Pins
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] NumberofItem Number of GPIO pads to be updated
+ @param[in] GpioInitTableAddress GPIO initialization table
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioConfigurePadsByPchId (
+ IN UINT8 PchId,
+ IN UINT32 NumberOfItems,
+ IN GPIO_INIT_CONFIG *GpioInitTableAddress
+ );
+
+/**
+ This procedure will initialize multiple GPIO pins. Use GPIO_INIT_CONFIG structure.
+ Structure contains fields that can be used to configure each pad.
+ Pad not configured using GPIO_INIT_CONFIG will be left with hardware default values.
+ Separate fields could be set to hardware default if it does not matter, except
+ GpioPad and PadMode.
+ Some GpioPads are configured and switched to native mode by RC, those include:
+ SerialIo pins, ISH pins, ClkReq Pins
+
+ @param[in] NumberofItem Number of GPIO pads to be updated
+ @param[in] GpioInitTableAddress GPIO initialization table
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioConfigurePads (
+ IN UINT32 NumberOfItems,
+ IN GPIO_INIT_CONFIG *GpioInitTableAddress
+ );
+
+//
+// Functions for setting/getting multiple GpioPad settings
+//
+
+/**
+ This procedure will read multiple GPIO settings
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO Pad
+ @param[out] GpioData GPIO data structure
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadConfigByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT GPIO_CONFIG *GpioData
+ );
+
+/**
+ This procedure will read multiple GPIO settings
+
+ @param[in] GpioPad GPIO Pad
+ @param[out] GpioData GPIO data structure
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadConfig (
+ IN GPIO_PAD GpioPad,
+ OUT GPIO_CONFIG *GpioData
+ );
+
+/**
+ This procedure will configure multiple GPIO settings
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO Pad
+ @param[in] GpioData GPIO data structure
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetPadConfigByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_CONFIG *GpioData
+ );
+
+/**
+ This procedure will configure multiple GPIO settings
+
+ @param[in] GpioPad GPIO Pad
+ @param[in] GpioData GPIO data structure
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetPadConfig (
+ IN GPIO_PAD GpioPad,
+ IN GPIO_CONFIG *GpioData
+ );
+
+//
+// Functions for setting/getting single GpioPad properties
+//
+
+/**
+ This procedure will set GPIO output level
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Output value
+ 0: OutputLow, 1: OutputHigh
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetOutputValueByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN UINT32 Value
+ );
+
+/**
+ This procedure will set GPIO output level
+
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Output value
+ 0: OutputLow, 1: OutputHigh
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetOutputValue (
+ IN GPIO_PAD GpioPad,
+ IN UINT32 Value
+ );
+
+/**
+ This procedure will get GPIO output level
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] OutputVal GPIO Output value
+ 0: OutputLow, 1: OutputHigh
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetOutputValueByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *OutputVal
+ );
+
+/**
+ This procedure will get GPIO output level
+
+ @param[in] GpioPad GPIO pad
+ @param[out] OutputVal GPIO Output value
+ 0: OutputLow, 1: OutputHigh
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetOutputValue (
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *OutputVal
+ );
+
+/**
+ This procedure will get GPIO input level
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] InputVal GPIO Input value
+ 0: InputLow, 1: InputHigh
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetInputValueByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *InputVal
+ );
+
+/**
+ This procedure will get GPIO input level
+
+ @param[in] GpioPad GPIO pad
+ @param[out] InputVal GPIO Input value
+ 0: InputLow, 1: InputHigh
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetInputValue (
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *InputVal
+ );
+
+ /**
+ This procedure will get GPIO IOxAPIC interrupt number
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] IrqNum IRQ number
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadIoApicIrqNumber (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *IrqNum
+ );
+
+/**
+ This procedure will configure GPIO input inversion
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Value for GPIO input inversion
+ 0: No input inversion, 1: Invert input
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetInputInversionByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN UINT32 Value
+ );
+
+/**
+ This procedure will configure GPIO input inversion
+
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Value for GPIO input inversion
+ 0: No input inversion, 1: Invert input
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetInputInversion (
+ IN GPIO_PAD GpioPad,
+ IN UINT32 Value
+ );
+
+/**
+ This procedure will get GPIO pad input inversion value
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] InvertState GPIO inversion state
+ 0: No input inversion, 1: Inverted input
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetInputInversionByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *InvertState
+ );
+
+/**
+ This procedure will get GPIO pad input inversion value
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] InvertState GPIO inversion state
+ 0: No input inversion, 1: Inverted input
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetInputInversion (
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *InvertState
+ );
+
+/**
+ This procedure will set GPIO interrupt settings
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Value of Level/Edge
+ use GPIO_INT_CONFIG as argument
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetPadInterruptConfig (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_INT_CONFIG Value
+ );
+
+/**
+ This procedure will set GPIO electrical settings
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Value of termination
+ use GPIO_ELECTRICAL_CONFIG as argument
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetPadElectricalConfig (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_ELECTRICAL_CONFIG Value
+ );
+
+/**
+ This procedure will set GPIO Reset settings
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Value for Pad Reset Configuration
+ use GPIO_RESET_CONFIG as argument
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetPadResetConfig (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_RESET_CONFIG Value
+ );
+
+/**
+ This procedure will get GPIO Reset settings
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] Value Value of Pad Reset Configuration
+ based on GPIO_RESET_CONFIG
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadResetConfig (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_RESET_CONFIG *Value
+ );
+
+/**
+ This procedure will get GPIO Host Software Pad Ownership for certain group
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum Host Ownership register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[out] HostSwRegVal Value of Host Software Pad Ownership register
+ Bit position - PadNumber
+ Bit value - 0: ACPI Mode, 1: GPIO Driver mode
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number
+**/
+EFI_STATUS
+GpioGetHostSwOwnershipForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ OUT UINT32 *HostSwRegVal
+ );
+
+/**
+ This procedure will get GPIO Host Software Pad Ownership for certain group
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum Host Ownership register number for current group
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[in] HostSwRegVal Value of Host Software Pad Ownership register
+ Bit position - PadNumber
+ Bit value - 0: ACPI Mode, 1: GPIO Driver mode
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number
+**/
+EFI_STATUS
+GpioSetHostSwOwnershipForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ IN UINT32 HostSwRegVal
+ );
+
+/**
+ This procedure will get Gpio Pad Host Software Ownership
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] PadHostSwOwn Value of Host Software Pad Owner
+ 0: ACPI Mode, 1: GPIO Driver mode
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetHostSwOwnershipForPad (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *PadHostSwOwn
+ );
+
+/**
+ This procedure will set Gpio Pad Host Software Ownership
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] PadHostSwOwn Pad Host Software Owner
+ 0: ACPI Mode, 1: GPIO Driver mode
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetHostSwOwnershipForPad (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN UINT32 PadHostSwOwn
+ );
+
+//
+// Possible values of Pad Ownership
+//
+typedef enum {
+ GpioPadOwnHost = 0x0,
+ GpioPadOwnCsme = 0x1,
+ GpioPadOwnIsh = 0x2,
+} GPIO_PAD_OWN;
+
+/**
+ This procedure will get Gpio Pad Ownership
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] PadOwnVal Value of Pad Ownership
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadOwnership (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT GPIO_PAD_OWN *PadOwnVal
+ );
+
+/**
+ This procedure will check state of Pad Config Lock for pads within one group
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum PadCfgLock register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[out] PadCfgLockRegVal Value of PadCfgLock register
+ Bit position - PadNumber
+ Bit value - 0: NotLocked, 1: Locked
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number
+**/
+EFI_STATUS
+GpioGetPadCfgLockForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ OUT UINT32 *PadCfgLockRegVal
+ );
+
+/**
+ This procedure will check state of Pad Config Lock for selected pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] PadCfgLock PadCfgLock for selected pad
+ 0: NotLocked, 1: Locked
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadCfgLock (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *PadCfgLock
+ );
+
+/**
+ This procedure will check state of Pad Config Tx Lock for pads within one group
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum PadCfgLockTx register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[out] PadCfgLockTxRegVal Value of PadCfgLockTx register
+ Bit position - PadNumber
+ Bit value - 0: NotLockedTx, 1: LockedTx
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number
+**/
+EFI_STATUS
+GpioGetPadCfgLockTxForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ OUT UINT32 *PadCfgLockTxRegVal
+ );
+
+/**
+ This procedure will check state of Pad Config Tx Lock for selected pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] PadCfgLock PadCfgLockTx for selected pad
+ 0: NotLockedTx, 1: LockedTx
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetPadCfgLockTx (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *PadCfgLockTx
+ );
+
+/**
+ This procedure will clear PadCfgLock for selected pads within one group.
+ This function should be used only inside SMI.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum PadCfgLock register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[in] PadsToUnlock Bitmask for pads which are going to be unlocked,
+ Bit position - PadNumber
+ Bit value - 0: DoNotUnlock, 1: Unlock
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioUnlockPadCfgForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ IN UINT32 PadsToUnlock
+ );
+
+/**
+ This procedure will clear PadCfgLock for selected pad.
+ This function should be used only inside SMI.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioUnlockPadCfgByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure will clear PadCfgLock for selected pad.
+ This function should be used only inside SMI.
+
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioUnlockPadCfg (
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure will set PadCfgLock for selected pads within one group
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum PadCfgLock register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[in] PadsToLock Bitmask for pads which are going to be locked,
+ Bit position - PadNumber
+ Bit value - 0: DoNotLock, 1: Lock
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number
+**/
+EFI_STATUS
+GpioLockPadCfgForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ IN UINT32 PadsToLock
+ );
+
+/**
+ This procedure will set PadCfgLock for selected pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioLockPadCfg (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure will clear PadCfgLockTx for selected pads within one group.
+ This function should be used only inside SMI.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum PadCfgLockTx register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[in] PadsToUnlockTx Bitmask for pads which are going to be unlocked,
+ Bit position - PadNumber
+ Bit value - 0: DoNotUnLockTx, 1: LockTx
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioUnlockPadCfgTxForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ IN UINT32 PadsToUnlockTx
+ );
+
+/**
+ This procedure will clear PadCfgLockTx for selected pad.
+ This function should be used only inside SMI.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioUnlockPadCfgTx (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure will set PadCfgLockTx for selected pads within one group
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] Group GPIO group
+ @param[in] DwNum PadCfgLock register number for current group.
+ For group which has less then 32 pads per group DwNum must be 0.
+ @param[in] PadsToLockTx Bitmask for pads which are going to be locked,
+ Bit position - PadNumber
+ Bit value - 0: DoNotLockTx, 1: LockTx
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or DwNum parameter number
+**/
+EFI_STATUS
+GpioLockPadCfgTxForGroupDw (
+ IN UINT8 PchId,
+ IN GPIO_GROUP Group,
+ IN UINT32 DwNum,
+ IN UINT32 PadsToLockTx
+ );
+
+/**
+ This procedure will set PadCfgLockTx for selected pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioLockPadCfgTx (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure will get Group to GPE mapping.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[out] GroupToGpeDw0 GPIO group to be mapped to GPE_DW0
+ @param[out] GroupToGpeDw1 GPIO group to be mapped to GPE_DW1
+ @param[out] GroupToGpeDw2 GPIO group to be mapped to GPE_DW2
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetGroupToGpeDwX (
+ IN UINT8 PchId,
+ IN GPIO_GROUP *GroupToGpeDw0,
+ IN GPIO_GROUP *GroupToGpeDw1,
+ IN GPIO_GROUP *GroupToGpeDw2
+ );
+
+/**
+ This procedure will set Group to GPE mapping.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GroupToGpeDw0 GPIO group to be mapped to GPE_DW0
+ @param[in] GroupToGpeDw1 GPIO group to be mapped to GPE_DW1
+ @param[in] GroupToGpeDw2 GPIO group to be mapped to GPE_DW2
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioSetGroupToGpeDwX (
+ IN UINT8 PchId,
+ IN GPIO_GROUP GroupToGpeDw0,
+ IN GPIO_GROUP GroupToGpeDw1,
+ IN GPIO_GROUP GroupToGpeDw2
+ );
+
+/**
+ This procedure will get GPE number for provided GpioPad.
+ PCH allows to configure mapping between GPIO groups and related GPE (GpioSetGroupToGpeDwX())
+ what results in the fact that certain Pad can cause different General Purpose Event. Only three
+ GPIO groups can be mapped to cause unique GPE (1-tier), all others groups will be under one common
+ event (GPE_111 for 2-tier).
+
+ 1-tier:
+ Returned GpeNumber is in range <0,95>. GpioGetGpeNumber() can be used
+ to determine what _LXX ACPI method would be called on event on selected GPIO pad
+
+ 2-tier:
+ Returned GpeNumber is 0x6F (111). All GPIO pads which are not mapped to 1-tier GPE
+ will be under one master GPE_111 which is linked to _L6F ACPI method. If it is needed to determine
+ what Pad from 2-tier has caused the event, _L6F method should check GPI_GPE_STS and GPI_GPE_EN
+ registers for all GPIO groups not mapped to 1-tier GPE.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] GpeNumber GPE number
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetGpeNumber (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32 *GpeNumber
+ );
+
+/**
+ This procedure is used to clear SMI STS for a specified Pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioClearGpiSmiStsByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure is used to clear SMI STS for a specified Pad
+
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioClearGpiSmiSts (
+ IN GPIO_PAD GpioPad
+ );
+
+//
+// Extended interface for Server RAS usage
+//
+/**
+ This procedure is used to get SMI STS for a specified Pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] SmiStsReg Smi status register for given pad
+ The bit position is set for given Pad number
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid GpioPad
+**/
+EFI_STATUS
+GpioGetGpiSmiStsByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT BOOLEAN *SmiSts
+ );
+
+/**
+ This procedure is used to get SMI STS for a specified Pad
+
+ @param[in] GpioPad GPIO pad
+ @param[out] SmiStsReg Smi status register for given pad
+ The bit position is set for given Pad number
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid GpioPad
+**/
+EFI_STATUS
+GpioGetGpiSmiSts (
+ IN GPIO_PAD GpioPad,
+ OUT BOOLEAN *SmiSts
+ );
+
+/**
+ This procedure is used by Smi Dispatcher and will clear
+ all GPI SMI Status bits
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioClearAllGpiSmiSts (
+ IN UINT8 PchId
+ );
+
+/**
+ This procedure is used to disable all GPI SMI
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioDisableAllGpiSmi (
+ IN UINT8 PchId
+ );
+
+/**
+ This procedure is used to register GPI SMI dispatch function.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] GpiNum GPI number
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetGpiSmiNumByPchId (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINTN *GpiNum
+ );
+
+/**
+ This procedure is used to register GPI SMI dispatch function.
+
+ @param[in] GpioPad GPIO pad
+ @param[out] GpiNum GPI number
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetGpiSmiNum (
+ IN GPIO_PAD GpioPad,
+ OUT UINTN *GpiNum
+ );
+
+/**
+ This procedure is used to check GPIO inputs belongs to 2 tier or 1 tier architecture
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval Data 0 means 1-tier, 1 means 2-tier
+**/
+BOOLEAN
+GpioCheckFor2Tier (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure is used to clear GPE STS for a specified GpioPad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioClearGpiGpeSts (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad
+ );
+
+/**
+ This procedure is used to read GPE STS for a specified Pad
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] Data GPE STS data
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GpioGetGpiGpeSts (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT UINT32* Data
+ );
+
+
+/**
+ Locks GPIO pads according to GPIO_INIT_CONFIG array from
+ gPlatformGpioConfigGuid HOB. Only locking is applied and no other GPIO pad
+ configuration is changed.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_NOT_FOUND gPlatformGpioConfigGuid not found
+**/
+EFI_STATUS
+GpioLockGpios (
+ IN UINT8 PchId
+ );
+
+/**
+ Unlocks all PCH GPIO pads
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+
+ @retval None
+**/
+VOID
+GpioUnlockAllGpios (
+ IN UINT8 PchId
+ );
+
+#endif // _GPIO_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h
new file mode 100644
index 0000000000..546d7e3212
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h
@@ -0,0 +1,37 @@
+/** @file
+ Prototype of the MultiPch library - Base definitions.
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_MULTI_PCH_BASE_H_
+#define _PCH_MULTI_PCH_BASE_H_
+
+
+#define PCH_LEGACY_ID 0
+#define PCH_MAX 4
+
+/**
+ Function returns PchId for devices of passed Segment and Bus.
+ PchId is an index in PCH_IP_INFO table
+
+ @param [in] Segment Segment to look for
+ @param [in] Bus Bas to look for
+ @param [in, out] PchId pointer to variable to return PchId
+
+ @retval EFI_SUCCESS Function returned valid PchId
+ @retval EFI_INVALID_PARAMETER Passed pointer is invalid
+ @retval EFI_DEVICE_ERROR Not found valid PchInfo
+ @retval EFI_NOT_FOUND For given input parameters not found valid PchId
+**/
+EFI_STATUS
+FindMultiPchInfo (
+ IN UINTN HeciSegment,
+ IN UINTN HeciBus,
+ IN OUT UINTN *PchId
+ );
+
+#endif // _PCH_MULTI_PCH_BASE_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h
new file mode 100644
index 0000000000..26b2f8fbaf
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h
@@ -0,0 +1,145 @@
+/** @file
+ Header file for PchPcieRpLib.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_PCIERP_LIB_H_
+#define _PCH_PCIERP_LIB_H_
+
+/**
+ PCIe controller bifurcation configuration.
+**/
+typedef enum {
+ PcieBifurcation4x1 = 0,
+ PcieBifurcation1x2_2x1 = 1,
+ PcieBifurcation2x2 = 2,
+ PcieBifurcation1x4 = 3,
+ PcieUnknownConfig
+} PCIE_BIFURCATION_CONFIG;
+
+typedef struct {
+ UINT8 DevNum;
+ UINT8 Pid;
+ UINT8 RpNumBase;
+} PCH_PCIE_CONTROLLER_INFO;
+
+/**
+ Get Pch Pcie Root Port Device and Function Number by Root Port physical Number
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] RpNumber Root port physical number. (0-based)
+ @param[out] RpDev Return corresponding root port device number.
+ @param[out] RpFun Return corresponding root port function number.
+
+ @retval EFI_SUCCESS
+**/
+EFI_STATUS
+EFIAPI
+GetPchPcieRpDevFunByPchId (
+ IN UINT8 PchId,
+ IN UINTN RpNumber,
+ OUT UINTN *RpDev,
+ OUT UINTN *RpFun
+ );
+
+/**
+ Get Pch Pcie Root Port Device and Function Number by Root Port physical Number
+
+ @param[in] RpNumber Root port physical number. (0-based)
+ @param[out] RpDev Return corresponding root port device number.
+ @param[out] RpFun Return corresponding root port function number.
+
+ @retval EFI_SUCCESS
+**/
+EFI_STATUS
+EFIAPI
+GetPchPcieRpDevFun (
+ IN UINTN RpNumber,
+ OUT UINTN *RpDev,
+ OUT UINTN *RpFun
+ );
+
+/**
+ Get Root Port physical Number by Pch Pcie Root Port Device and Function Number
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] RpDev Root port device number.
+ @param[in] RpFun Root port function number.
+ @param[out] RpNumber Return corresponding physical Root Port index (0-based)
+
+ @retval EFI_SUCCESS Physical root port is retrieved
+ @retval EFI_INVALID_PARAMETER RpDev and/or RpFun are invalid
+ @retval EFI_UNSUPPORTED Root port device and function is not assigned to any physical root port
+**/
+EFI_STATUS
+EFIAPI
+GetPchPcieRpNumber (
+ IN UINT8 PchId,
+ IN UINTN RpDev,
+ IN UINTN RpFun,
+ OUT UINTN *RpNumber
+ );
+
+/**
+ Gets base address of PCIe root port.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param RpIndex Root Port Index (0 based)
+ @return PCIe port base address.
+**/
+UINTN
+PchPcieBase (
+ IN UINT8 PchId,
+ IN UINT32 RpIndex
+ );
+
+/**
+ Determines whether L0s is supported on current stepping.
+
+ @return TRUE if L0s is supported, FALSE otherwise
+**/
+BOOLEAN
+PchIsPcieL0sSupported (
+ VOID
+ );
+
+/**
+ Some early SKL PCH steppings require Native ASPM to be disabled due to hardware issues:
+ - RxL0s exit causes recovery
+ - Disabling PCIe L0s capability disables L1
+ Use this function to determine affected steppings.
+
+ @return TRUE if Native ASPM is supported, FALSE otherwise
+**/
+BOOLEAN
+PchIsPcieNativeAspmSupported (
+ VOID
+ );
+
+/**
+ Returns the maximum value of the "Payload" parameter of all available PchPcie Ports.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @retval INT16 The value to assign in field max payload size field
+**/
+UINT16
+PchPcieGetMaxPayloadSizeForAllPortsByPchId (
+ IN UINT8 PchId
+ );
+
+/**
+ Returns the maximum value of the "Payload" parameter of all available PchPcie Ports.
+
+ @param VOID
+ @retval INT16 The value to assign in field max payload size field
+**/
+UINT16
+PchPcieGetMaxPayloadSizeForAllPorts (
+ VOID
+ );
+
+#endif // _PCH_PCIERP_LIB_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h
new file mode 100644
index 0000000000..ec020651fb
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h
@@ -0,0 +1,629 @@
+/** @file
+ Macros that simplify accessing PCH devices's PCI registers.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_ACCESS_H_
+#define _PCH_ACCESS_H_
+
+#include "PchLimits.h"
+#include "PchReservedResources.h"
+
+#ifndef STALL_ONE_MICRO_SECOND
+#define STALL_ONE_MICRO_SECOND 1
+#endif
+#ifndef STALL_ONE_SECOND
+#define STALL_ONE_SECOND 1000000
+#endif
+
+///
+/// The default PCH PCI bus number
+///
+#define DEFAULT_PCI_BUS_NUMBER_PCH 0
+
+
+//
+// SKX defines to get to sspad7
+//
+#define UBOX_SCRATCH_DEVICE 0x8
+#define UBOX_SCRATCH_FUNC2 0x2
+#define UBOX_BIOS_SCRATCHPAD7 0xBC
+
+///
+/// The default PCH PCI segment and bus number
+///
+#define DEFAULT_PCI_SEGMENT_NUMBER_PCH 0
+#define DEFAULT_PCI_BUS_NUMBER_PCH 0
+
+//
+// Default Vendor ID and Subsystem ID
+//
+#define V_PCH_INTEL_VENDOR_ID 0x8086 ///< Default Intel PCH Vendor ID
+#define V_PCH_DEFAULT_SID 0x7270 ///< Default Intel PCH Subsystem ID
+#define V_PCH_DEFAULT_SVID_SID (V_INTEL_VENDOR_ID + (V_PCH_DEFAULT_SID << 16)) ///< Default INTEL PCH Vendor ID and Subsystem ID
+
+//
+// Generic definitions for device enabling/disabling used by PCH code.
+//
+#define PCH_DEVICE_ENABLE 1
+#define PCH_DEVICE_DISABLE 0
+#define PCH_DEVICE_DEFAULT 2
+
+//
+// Include device register definitions
+//
+#include "PcieRegs.h"
+#include "Register/PchRegsPcr.h"
+#include "Register/PchRegsP2sb.h"
+#include "Register/PchRegsHda.h"
+#include "Register/PchRegsHsio.h"
+#include "Register/PchRegsLan.h"
+#include "Register/PchRegsLpc.h"
+#include "Register/PchRegsPmc.h"
+#include "Register/PchRegsPcie.h"
+#include "Register/PchRegsSata.h"
+#include "Register/PchRegsSmbus.h"
+#include "Register/PchRegsSpi.h"
+#include "Register/PchRegsThermal.h"
+#include "Register/PchRegsUsb.h"
+#include "Register/PchRegsGpio.h"
+#include "Register/PchRegsTraceHub.h"
+#include "Register/PchRegsDmi.h"
+#include "Register/PchRegsItss.h"
+#include "Register/PchRegsPsth.h"
+#include "Register/PchRegsPsf.h"
+#include "Register/PchRegsFia.h"
+#include "Register/PchRegsDci.h"
+#include "Register/PchRegsEva.h"
+
+//
+// LPC Device ID macros
+//
+//
+// Device IDs that are PCH-H Desktop specific
+//
+#define IS_PCH_H_LPC_DEVICE_ID_DESKTOP(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_0) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_1) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_2) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_3) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_4) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_5) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_6) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_UNFUSE) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_DT_SUPER_SKU) \
+ )
+
+#define IS_PCH_LPC_DEVICE_ID_DESKTOP(DeviceId) \
+ ( \
+ IS_PCH_H_LPC_DEVICE_ID_DESKTOP(DeviceId) \
+ )
+
+//
+// Device IDs that are PCH-H Mobile specific
+//
+
+#define IS_PCH_H_LPC_DEVICE_ID_MOBILE(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_MB_0) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_MB_1) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_MB_2) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_MB_SUPER_SKU) \
+ )
+
+
+//
+// Device IDs that are PCH-LP Mobile specific
+//
+#define IS_PCH_LP_LPC_DEVICE_ID_MOBILE(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_LPC_DEVICE_ID_UNFUSE) || \
+ (DeviceId == V_PCH_LP_LPC_DEVICE_ID_MB_SUPER_SKU) || \
+ (DeviceId == V_PCH_LP_LPC_DEVICE_ID_MB_0) || \
+ (DeviceId == V_PCH_LP_LPC_DEVICE_ID_MB_1) || \
+ (DeviceId == V_PCH_LP_LPC_DEVICE_ID_MB_2) || \
+ (DeviceId == V_PCH_LP_LPC_DEVICE_ID_MB_3) \
+ )
+
+#define IS_PCH_LPC_DEVICE_ID_MOBILE(DeviceId) \
+ ( \
+ IS_PCH_H_LPC_DEVICE_ID_MOBILE(DeviceId) || \
+ IS_PCH_LP_LPC_DEVICE_ID_MOBILE(DeviceId) \
+ )
+
+//
+// Device IDS that are PCH Server\Workstation specific
+#define IS_PCH_H_LPC_DEVICE_ID_SERVER(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_SVR_0) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_SVR_1) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_SVR_2) || \
+ (DeviceId == V_PCH_H_LPC_DEVICE_ID_A14B) \
+ )
+
+
+#define IS_PCH_LPC_DEVICE_ID_SERVER(DeviceId) \
+ ( \
+ IS_PCH_H_LPC_DEVICE_ID_SERVER(DeviceId) \
+ )
+
+#define IS_PCH_H_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_H_LPC_DEVICE_ID_DESKTOP (DeviceId) || \
+ IS_PCH_H_LPC_DEVICE_ID_MOBILE (DeviceId) || \
+ IS_PCH_H_LPC_DEVICE_ID_SERVER (DeviceId) \
+ )
+
+#define IS_PCH_LP_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LP_LPC_DEVICE_ID_MOBILE (DeviceId) \
+ )
+
+#define IS_PCH_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_H_LPC_DEVICE_ID(DeviceId) || \
+ IS_PCH_LP_LPC_DEVICE_ID(DeviceId) \
+ )
+
+#define IS_PCH_LBG_PROD_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId >= V_PCH_LBG_PROD_LPC_DEVICE_ID_0) && \
+ (DeviceId <= V_PCH_LBG_PROD_LPC_DEVICE_ID_RESERVED_MAX) \
+ )
+
+#define IS_PCH_LBG_SSKU_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId >= V_PCH_LBG_LPC_DEVICE_ID_UNFUSED) && \
+ (DeviceId <= V_PCH_LBG_LPC_DEVICE_ID_RESERVED_SS_MAX ) \
+ )
+
+#define IS_PCH_LBG_NS_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_LPC_DEVICE_ID_SS_T80_NS) || \
+ (DeviceId == V_PCH_LBG_PROD_LPC_DEVICE_ID_T) || \
+ (DeviceId == V_PCH_LBG_PROD_LPC_DEVICE_ID_C) \
+ )
+
+#define IS_PCH_LBG_WS_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ FALSE \
+ )
+
+#define IS_PCH_LBG_LPC_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_PROD_LPC_DEVICE_ID(DeviceId) || \
+ IS_PCH_LBG_NS_LPC_DEVICE_ID(DeviceId) || \
+ IS_PCH_LBG_WS_LPC_DEVICE_ID(DeviceId) || \
+ IS_PCH_LBG_SSKU_LPC_DEVICE_ID(DeviceId) \
+ )
+
+
+//
+// SATA AHCI Device ID macros
+//
+#define IS_PCH_LBG_SATA_AHCI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_PROD_SATA_DEVICE_ID_D_AHCI) || \
+ (DeviceId == V_PCH_LBG_SATA_DEVICE_ID_D_AHCI) \
+ )
+
+#define IS_PCH_LBG_SSATA_AHCI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_AHCI) || \
+ (DeviceId == V_PCH_LBG_SSATA_DEVICE_ID_D_AHCI) \
+ )
+
+
+#define IS_PCH_H_SATA_AHCI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_AHCI_A0) || \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_AHCI) \
+ )
+
+#define IS_PCH_LP_SATA_AHCI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_SATA_DEVICE_ID_M_AHCI) \
+ )
+
+#define IS_PCH_SATA_AHCI_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_SATA_AHCI_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_SSATA_AHCI_DEVICE_ID (DeviceId) \
+ )
+
+
+
+//
+// SATA RAID Device ID macros
+//
+#define IS_PCH_LBG_SATA_RAID_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_SATA_DEVICE_ID_D_RAID) || \
+ (DeviceId == V_PCH_LBG_SATA_DEVICE_ID_D_RAID_PREMIUM) || \
+ (DeviceId == V_PCH_LBG_SATA_DEVICE_ID_D_RAID_PREMIUM_DSEL0) || \
+ (DeviceId == V_PCH_LBG_SATA_DEVICE_ID_D_RAID_PREMIUM_DSEL1) || \
+ (DeviceId == V_PCH_LBG_SATA_DEVICE_ID_D_RAID1) || \
+ (DeviceId == V_PCH_LBG_PROD_SATA_DEVICE_ID_D_RAID) || \
+ (DeviceId == V_PCH_LBG_PROD_SATA_DEVICE_ID_D_RAID_PREMIUM) || \
+ (DeviceId == V_PCH_LBG_PROD_SATA_DEVICE_ID_D_RAID1) \
+ )
+
+#define IS_PCH_LBG_SSATA_RAID_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_SSATA_DEVICE_ID_D_RAID) || \
+ (DeviceId == V_PCH_LBG_SSATA_DEVICE_ID_D_RAID_PREMIUM) || \
+ (DeviceId == V_PCH_LBG_SSATA_DEVICE_ID_D_RAID_PREMIUM_DSEL0) || \
+ (DeviceId == V_PCH_LBG_SSATA_DEVICE_ID_D_RAID_PREMIUM_DSEL1) || \
+ (DeviceId == V_PCH_LBG_SSATA_DEVICE_ID_D_RAID1) || \
+ (DeviceId == V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_RAID) || \
+ (DeviceId == V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_RAID_PREMIUM) || \
+ (DeviceId == V_PCH_LBG_PROD_SSATA_DEVICE_ID_D_RAID1) \
+ )
+
+
+#define IS_PCH_H_SATA_RAID_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_RAID) || \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_RAID_PREM) || \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_RAID_ALTDIS) || \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_RAID_RSTE) || \
+ (DeviceId == V_PCH_H_SATA_DEVICE_ID_D_RAID_RRT) \
+ )
+
+
+#define IS_PCH_LP_SATA_RAID_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_SATA_DEVICE_ID_M_RAID) || \
+ (DeviceId == V_PCH_LP_SATA_DEVICE_ID_M_RAID_ALTDIS) || \
+ (DeviceId == V_PCH_LP_SATA_DEVICE_ID_M_RAID_PREM) || \
+ (DeviceId == V_PCH_LP_SATA_DEVICE_ID_M_RAID_RRT) \
+ )
+
+#define IS_PCH_SATA_RAID_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_SATA_RAID_DEVICE_ID(DeviceId) || \
+ IS_PCH_LBG_SSATA_RAID_DEVICE_ID(DeviceId) \
+ )
+
+//
+// Combined SATA IDE/AHCI/RAID Device ID macros
+//
+#define IS_PCH_LBG_SATA_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_SATA_AHCI_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_SATA_RAID_DEVICE_ID (DeviceId) \
+ )
+#define IS_PCH_LBG_SSATA_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_SSATA_AHCI_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_SSATA_RAID_DEVICE_ID (DeviceId) \
+ )
+#define IS_PCH_LBG_RAID_AVAILABLE(DeviceId) (TRUE)
+
+#define IS_PCH_H_SATA_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_H_SATA_AHCI_DEVICE_ID (DeviceId) || \
+ IS_PCH_H_SATA_RAID_DEVICE_ID (DeviceId) \
+ )
+
+#define IS_PCH_LP_SATA_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LP_SATA_AHCI_DEVICE_ID (DeviceId) || \
+ IS_PCH_LP_SATA_RAID_DEVICE_ID (DeviceId) \
+ )
+
+#define IS_PCH_SATA_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_SATA_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_SSATA_DEVICE_ID (DeviceId) \
+ )
+
+#define IS_PCH_H_RAID_AVAILABLE(DeviceId) (TRUE)
+#define IS_PCH_LP_RAID_AVAILABLE(DeviceId) (TRUE)
+
+#define IS_PCH_RAID_AVAILABLE(DeviceId) \
+ ( \
+ IS_PCH_LBG_RAID_AVAILABLE(DeviceId) \
+ )
+
+//
+// SPI Device ID macros
+//
+#define IS_PCH_LBG_SPI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_SPI_DEVICE_ID) || \
+ (DeviceId == V_PCH_LBG_PROD_SPI_DEVICE_ID) \
+ )
+
+#define IS_PCH_H_SPI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_SPI_DEVICE_ID) || \
+ FALSE \
+ )
+
+#define IS_PCH_LP_SPI_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_SPI_DEVICE_ID) || \
+ FALSE \
+ )
+
+#define IS_PCH_SPI_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_SPI_DEVICE_ID(DeviceId) \
+ )
+
+//
+// USB Device ID macros
+//
+#define IS_PCH_LBG_USB_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_USB_DEVICE_ID_XHCI_1) || \
+ (DeviceId == V_PCH_LBG_PROD_USB_DEVICE_ID_XHCI_1) \
+ )
+
+#define IS_PCH_H_USB_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_USB_DEVICE_ID_XHCI_1) \
+ )
+
+#define IS_PCH_LP_USB_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_USB_DEVICE_ID_XHCI_1) \
+ )
+#define IS_PCH_USB_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_USB_DEVICE_ID(DeviceId) \
+ )
+
+//
+// PCIE Device ID macros
+//
+#define IS_PCH_LBG_PCIE_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT1) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT2) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT3) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT4) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT5) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT6) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT7) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT8) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT9) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT10) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT11) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT12) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT13) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT14) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT15) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT16) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT17) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT18) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT19) || \
+ (DeviceId == V_PCH_LBG_PCIE_DEVICE_ID_PORT20) \
+ )
+
+#define IS_PCH_LBG_PROD_PCIE_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT1) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT2) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT3) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT4) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT5) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT6) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT7) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT8) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT9) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT10) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT11) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT12) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT13) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT14) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT15) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT16) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT17) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT18) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT19) || \
+ (DeviceId == V_PCH_LBG_PROD_PCIE_DEVICE_ID_PORT20) \
+ )
+
+
+
+#define IS_PCH_H_PCIE_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT1) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT2) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT3) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT4) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT5) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT6) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT7) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT8) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT9) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT10) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT11) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT12) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT13) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT14) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT15) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT16) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT17) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT18) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT19) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_PORT20) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_MB_SUBD) || \
+ (DeviceId == V_PCH_H_PCIE_DEVICE_ID_DT_SUBD) \
+ )
+
+#define IS_PCH_LP_PCIE_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT1) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT2) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT3) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT4) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT5) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT6) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT7) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT8) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT9) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT10) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT11) || \
+ (DeviceId == V_PCH_LP_PCIE_DEVICE_ID_PORT12) \
+ )
+
+#define IS_PCH_PCIE_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_PCIE_DEVICE_ID(DeviceId) || \
+ IS_PCH_LBG_PROD_PCIE_DEVICE_ID(DeviceId) \
+ )
+
+
+//
+// HD Audio Device ID macros
+//
+#define IS_PCH_LBG_HDA_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_0) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_1) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_2) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_3) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_4) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_5) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_6) || \
+ (DeviceId == V_PCH_LBG_HDA_DEVICE_ID_7) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_0) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_1) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_2) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_3) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_4) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_5) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_6) || \
+ (DeviceId == V_PCH_LBG_PROD_HDA_DEVICE_ID_7) \
+ )
+
+#define IS_PCH_H_HDA_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_0) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_1) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_2) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_3) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_4) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_5) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_6) || \
+ (DeviceId == V_PCH_H_HDA_DEVICE_ID_7) \
+ )
+
+#define IS_PCH_LP_HDA_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_0) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_1) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_2) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_3) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_4) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_5) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_6) || \
+ (DeviceId == V_PCH_LP_HDA_DEVICE_ID_7) \
+ )
+#define IS_PCH_HDA_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LBG_HDA_DEVICE_ID(DeviceId) \
+ )
+
+
+///
+/// Any device ID that is PCH-LBG
+///
+#define IS_PCH_LBG_SMBUS_DEVICE_ID(DeviceId) \
+ ( \
+ (DeviceId == V_PCH_LBG_SMBUS_DEVICE_ID) || \
+ (DeviceId == V_PCH_LBG_PROD_SMBUS_DEVICE_ID) \
+ )
+
+#define IS_PCH_LBG_DEVICE_ID(DeviceId) \
+ (\
+ IS_PCH_LBG_LPC_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_SATA_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_USB_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_PCIE_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_PROD_PCIE_DEVICE_ID (DeviceId) || \
+ IS_PCH_LBG_SMBUS_DEVICE_ID (DeviceId) || \
+ (DeviceId == V_PCH_LBG_MROM_DEVICE_ID_0) || \
+ (DeviceId == V_PCH_LBG_PROD_MROM_DEVICE_ID_0) || \
+ (DeviceId == V_PCH_LBG_MROM_DEVICE_ID_1) || \
+ (DeviceId == V_PCH_LBG_PROD_MROM_DEVICE_ID_1) || \
+ (DeviceId == V_PCH_LBG_THERMAL_DEVICE_ID) || \
+ (DeviceId == V_PCH_LBG_PROD_THERMAL_DEVICE_ID) || \
+ (DeviceId == V_PCH_LBG_LAN_DEVICE_ID) || \
+ (DeviceId == V_PCH_LBG_PROD_LAN_DEVICE_ID) \
+ )
+
+///
+/// Any device ID that is PCH-H
+///
+#define IS_PCH_H_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_H_LPC_DEVICE_ID (DeviceId) || \
+ IS_PCH_H_SATA_DEVICE_ID (DeviceId) || \
+ IS_PCH_H_USB_DEVICE_ID (DeviceId) || \
+ IS_PCH_H_PCIE_DEVICE_ID (DeviceId) || \
+ IS_PCH_H_SPI_DEVICE_ID (DeviceId) || \
+ IS_PCH_H_HDA_DEVICE_ID (DeviceId) || \
+ (DeviceId) == V_PCH_H_THERMAL_DEVICE_ID || \
+ (DeviceId) == V_PCH_H_SMBUS_DEVICE_ID || \
+ (DeviceId) == V_PCH_H_LAN_DEVICE_ID \
+ )
+
+///
+/// Any device ID that is PCH-Lp
+///
+#define IS_PCH_LP_DEVICE_ID(DeviceId) \
+ ( \
+ IS_PCH_LP_LPC_DEVICE_ID (DeviceId) || \
+ IS_PCH_LP_SATA_DEVICE_ID (DeviceId) || \
+ IS_PCH_LP_USB_DEVICE_ID (DeviceId) || \
+ IS_PCH_LP_PCIE_DEVICE_ID (DeviceId) || \
+ IS_PCH_LP_HDA_DEVICE_ID (DeviceId) || \
+ (DeviceId == V_PCH_LP_THERMAL_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SMBUS_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SPI_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_LAN_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_DMA_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_I2C0_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_I2C1_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_SPI0_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_SPI1_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_UART0_DEVICE_ID) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_UART1_DEVICE_ID ) || \
+ (DeviceId == V_PCH_LP_SERIAL_IO_SDIO_DEVICE_ID) \
+ )
+
+///
+/// Combined any device ID that is PCH-H or PCH-LP
+///
+///
+/// And any device that is PCH LBG
+///
+#define IS_PCH_DEVICE_ID(DeviceId) \
+ (\
+ IS_PCH_LBG_DEVICE_ID(DeviceId) \
+ )
+
+
+/**
+ PCH PCR boot script accessing macro
+ Those macros are only available for DXE phase.
+**/
+#define PCH_PCR_BOOT_SCRIPT_WRITE(Width, SbMmioBaseAddress, Pid, Offset, Count, Buffer) \
+ S3BootScriptSaveMemWrite (Width, PCH_PCR_ADDRESS_BASE (SbMmioBaseAddress, Pid, Offset), Count, Buffer); \
+ S3BootScriptSaveMemPoll (Width, PCH_PCR_ADDRESS_BASE (SbMmioBaseAddress, Pid, Offset), Buffer, Buffer, 1, 1);
+
+#define PCH_PCR_BOOT_SCRIPT_READ_WRITE(Width, SbMmioBaseAddress, Pid, Offset, DataOr, DataAnd) \
+ S3BootScriptSaveMemReadWrite (Width, PCH_PCR_ADDRESS_BASE (SbMmioBaseAddress, Pid, Offset), DataOr, DataAnd); \
+ S3BootScriptSaveMemPoll (Width, PCH_PCR_ADDRESS_BASE (SbMmioBaseAddress, Pid, Offset), DataOr, DataOr, 1, 1);
+
+#endif
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h
new file mode 100644
index 0000000000..fc5e0f2516
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h
@@ -0,0 +1,108 @@
+/** @file
+ Build time limits of PCH resources.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_LIMITS_H_
+#define _PCH_LIMITS_H_
+
+//
+// PCIe limits
+//
+#define PCH_MAX_PCIE_ROOT_PORTS PCH_H_PCIE_MAX_ROOT_PORTS
+#define PCH_H_PCIE_MAX_ROOT_PORTS 20
+#define PCH_LP_PCIE_MAX_ROOT_PORTS 12
+
+#define PCH_MAX_PCIE_CONTROLLERS PCH_H_PCIE_MAX_CONTROLLERS
+#define PCH_PCIE_CONTROLLER_PORTS 4
+#define PCH_H_PCIE_MAX_CONTROLLERS (PCH_H_PCIE_MAX_ROOT_PORTS / PCH_PCIE_CONTROLLER_PORTS)
+#define PCH_LP_PCIE_MAX_CONTROLLERS (PCH_LP_PCIE_MAX_ROOT_PORTS / PCH_PCIE_CONTROLLER_PORTS)
+
+#define PCH_MAX_WM20_LANES_NUMBER 20
+
+//
+// PCIe clocks limits
+//
+#define PCH_MAX_PCIE_CLOCKS PCH_H_PCIE_MAX_ROOT_PORTS
+#define PCH_LP_PCIE_MAX_CLK_REQ 6
+#define PCH_H_PCIE_MAX_CLK_REQ 16
+
+//
+// RST PCIe Storage Cycle Router limits
+//
+#define PCH_MAX_RST_PCIE_STORAGE_CR 3
+
+//
+// SATA limits
+//
+#define SATA_1_CONTROLLER_INDEX 0
+#define SATA_2_CONTROLLER_INDEX 1
+#define SATA_3_CONTROLLER_INDEX 2
+#define PCH_MAX_SATA_CONTROLLERS 2
+#define PCH_MAX_SATA_PORTS PCH_H_AHCI_MAX_PORTS
+#define PCH_MAX_SSATA_PORTS 6
+#define PCH_H_AHCI_MAX_PORTS 8 ///< Max number of sata ports in SKL PCH H
+#define PCH_LP_AHCI_MAX_PORTS 3 ///< Max number of sata ports in SKL PCH LP
+#define PCH_SATA_MAX_DEVICES_PER_PORT 1 ///< Max support device numner per port, Port Multiplier is not support.
+
+//
+// USB limits
+//
+#define PCH_MAX_USB2_PORTS PCH_H_XHCI_MAX_USB2_PORTS
+
+#define PCH_H_XHCI_MAX_USB2_PHYSICAL_PORTS 14 ///< Max Physical Connector XHCI, not counting virtual ports like USB-R.
+#define PCH_LP_XHCI_MAX_USB2_PHYSICAL_PORTS 10 ///< Max Physical Connector XHCI, not counting virtual ports like USB-R.
+
+#define PCH_H_XHCI_MAX_USB2_PORTS 16 ///< 14 High Speed lanes + Including two ports reserved for USBr
+#define PCH_LP_XHCI_MAX_USB2_PORTS 12 ///< 10 High Speed lanes + Including two ports reserved for USBr
+
+#define PCH_MAX_USB3_PORTS PCH_H_XHCI_MAX_USB3_PORTS
+
+#define PCH_H_XHCI_MAX_USB3_PORTS 10 ///< 10 Super Speed lanes
+#define PCH_LP_XHCI_MAX_USB3_PORTS 6 ///< 6 Super Speed lanes
+
+#define PCH_XHCI_MAX_SSIC_PORT_COUNT 2 ///< 2 SSIC ports in SKL PCH-LP and SKL PCH-H
+
+//
+// SerialIo limits
+//
+#define PCH_SERIALIO_MAX_CONTROLLERS 11 ///< Number of SerialIo controllers, this includes I2C, SPI and UART
+#define PCH_SERIALIO_MAX_I2C_CONTROLLERS 6 ///< Number of SerialIo I2C controllers
+#define PCH_LP_SERIALIO_MAX_I2C_CONTROLLERS 6 ///< Number of SerialIo I2C controllers for PCH-LP
+#define PCH_H_SERIALIO_MAX_I2C_CONTROLLERS 4 ///< Number of SerialIo I2C controllers for PCH-H
+#define PCH_SERIALIO_MAX_SPI_CONTROLLERS 2 ///< Number of SerialIo SPI controllers
+#define PCH_SERIALIO_MAX_UART_CONTROLLERS 3 ///< Number of SerialIo UART controllers
+
+//
+// ISH limits
+//
+#define PCH_ISH_MAX_GP_PINS 8
+#define PCH_ISH_MAX_UART_CONTROLLERS 2
+#define PCH_ISH_MAX_I2C_CONTROLLERS 3
+#define PCH_ISH_MAX_SPI_CONTROLLERS 1
+
+//
+// SCS limits
+//
+#define PCH_SCS_MAX_CONTROLLERS 3 ///< Number of Storage and Communication Subsystem controllers, this includes eMMC, SDIO, SDCARD
+
+//
+// Flash Protection Range Register
+//
+#define PCH_FLASH_PROTECTED_RANGES 5
+
+//
+// Number of eSPI slaves
+//
+#define PCH_ESPI_MAX_SLAVE_ID 2
+
+#define PCH_PCIE_SWEQ_COEFFS_MAX 5
+
+#define LBG_A0 0x30
+
+#endif // _PCH_LIMITS_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h
new file mode 100644
index 0000000000..f5861ccafd
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h
@@ -0,0 +1,2161 @@
+/** @file
+ PCH configuration based on PCH policy
+
+ @copyright
+ Copyright 2009 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_POLICY_COMMON_H_
+#define _PCH_POLICY_COMMON_H_
+
+#include "PchLimits.h"
+#include <ConfigBlock/UsbConfig.h>
+#include <ConfigBlock/Usb2PhyConfig.h>
+#include <ConfigBlock/TraceHubConfig.h>
+
+#define FLASH_PROTECTION_CONFIG_REVISION 1
+extern EFI_GUID gFlashProtectionConfigGuid;
+
+#pragma pack (push,1)
+//
+// ---------------------------- PCH General Config -------------------------------
+//
+
+typedef struct {
+ /**
+ Subsystem Vendor ID and Subsystem ID of the PCH devices.
+ This fields will be ignored if the value of SubSystemVendorId and SubSystemId
+ are both 0.
+ **/
+ UINT16 SubSystemVendorId; ///< Default Subsystem Vendor ID of the PCH devices. Default is <b>0x8086</b>
+ UINT16 SubSystemId; ///< Default Subsystem ID of the PCH devices. Default is <b>0x7270</b>
+ /**
+ This member describes whether or not the Compatibility Revision ID (CRID) feature
+ of PCH should be enabled. <b>0: Disable</b>; 1: Enable
+ **/
+ UINT32 Crid : 1;
+ UINT32 EnableClockSpreadSpec : 1;
+ UINT32 Serm : 1;
+ UINT32 RsvdBits0 : 29; ///< Reserved bits
+ UINT32 Rsvd0[2]; ///< Reserved bytes
+} PCH_GENERAL_CONFIG;
+
+
+#define FORCE_ENABLE 1
+#define FORCE_DISABLE 2
+#define PLATFORM_POR 0
+#define AUTO 0
+#define DCI_DISABLE 0
+//
+// ---------------------------- Reserved Page Config -----------------------------
+//
+
+enum PCH_RESERVED_PAGE_ROUTE {
+ PchReservedPageToLpc, ///< Port 80h cycles are sent to LPC.
+ PchReservedPageToPcie ///< Port 80h cycles are sent to PCIe.
+};
+
+//
+// ---------------------------- PCI Express Config ----------------------
+//
+
+enum PCH_PCIE_SPEED {
+ PchPcieAuto,
+ PchPcieGen1,
+ PchPcieGen2,
+ PchPcieGen3
+};
+
+///
+/// The values before AutoConfig match the setting of PCI Express Base Specification 1.1, please be careful for adding new feature
+///
+typedef enum {
+ PchPcieAspmDisabled,
+ PchPcieAspmL0s,
+ PchPcieAspmL1,
+ PchPcieAspmL0sL1,
+ PchPcieAspmAutoConfig,
+ PchPcieAspmMax
+} PCH_PCIE_ASPM_CONTROL;
+
+/**
+ Refer to PCH EDS for the PCH implementation values corresponding
+ to below PCI-E spec defined ranges
+**/
+typedef enum {
+ PchPcieL1SubstatesDisabled,
+ PchPcieL1SubstatesL1_1,
+ PchPcieL1SubstatesL1_2,
+ PchPcieL1SubstatesL1_1_2,
+ PchPcieL1SubstatesMax
+} PCH_PCIE_L1SUBSTATES_CONTROL;
+
+enum PCH_PCIE_MAX_PAYLOAD {
+ PchPcieMaxPayload128 = 0,
+ PchPcieMaxPayload256,
+ PchPcieMaxPayloadMax
+};
+
+enum PCH_PCIE_COMPLETION_TIMEOUT {
+ PchPcieCompletionTO_Default,
+ PchPcieCompletionTO_50_100us,
+ PchPcieCompletionTO_1_10ms,
+ PchPcieCompletionTO_16_55ms,
+ PchPcieCompletionTO_65_210ms,
+ PchPcieCompletionTO_260_900ms,
+ PchPcieCompletionTO_1_3P5s,
+ PchPcieCompletionTO_4_13s,
+ PchPcieCompletionTO_17_64s,
+ PchPcieCompletionTO_Disabled
+};
+
+enum PCH_PCIE_MPL {
+ PchPcieMaxPayLoad128B,
+ PchPcieMaxPayLoad256B,
+ PchPcieMaxPayLoad512B,
+};
+
+typedef enum {
+ PchPcieEqDefault = 0, ///< Use reference code default (software margining)
+ PchPcieEqHardware = 1, ///< Hardware equalization (experimental), note this requires PCH-LP C0 or PCH-H D0 or newer
+ PchPcieEqSoftware = 2, ///< Use software margining flow
+ PchPcieEqStaticCoeff = 4 ///< Fixed equalization (requires Coefficient settings per lane)
+} PCH_PCIE_EQ_METHOD;
+
+/**
+ Represent lane specific PCIe Gen3 equalization parameters.
+**/
+typedef struct {
+ UINT8 Cm; ///< Coefficient C-1
+ UINT8 Cp; ///< Coefficient C+1
+ UINT8 Rsvd0[2]; ///< Reserved bytes
+} PCH_PCIE_EQ_LANE_PARAM, PCH_PCIE_EQ_PARAM;
+
+/**
+ The PCH_PCI_EXPRESS_ROOT_PORT_CONFIG describe the feature and capability of each PCH PCIe root port.
+**/
+typedef struct {
+ UINT32 Enable : 1; ///< Root Port enabling, 0: Disable; <b>1: Enable</b>.
+ UINT32 HotPlug : 1; ///< Indicate whether the root port is hot plug available. <b>0: Disable</b>; 1: Enable.
+ UINT32 PmSci : 1; ///< Indicate whether the root port power manager SCI is enabled. 0: Disable; <b>1: Enable</b>.
+ UINT32 ExtSync : 1; ///< Indicate whether the extended synch is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 TransmitterHalfSwing : 1; ///< Indicate whether the Transmitter Half Swing is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 AcsEnabled : 1; ///< Indicate whether the ACS is enabled. 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 5; ///< Reserved bits.
+ UINT32 ClkReqSupported : 1; ///< Indicate whether dedicated CLKREQ# is supported by the port.
+ /**
+ The ClkReq Signal mapped to this root port. Default is zero. Valid if ClkReqSupported is TRUE.
+ This Number should not exceed the Maximum Available ClkReq Signals for LP and H.
+ **/
+ UINT32 ClkReqNumber : 4;
+ /**
+ Probe CLKREQ# signal before enabling CLKREQ# based power management.
+ Conforming device shall hold CLKREQ# low until CPM is enabled. This feature attempts
+ to verify CLKREQ# signal is connected by testing pad state before enabling CPM.
+ In particular this helps to avoid issues with open-ended PCIe slots.
+ This is only applicable to non hot-plug ports.
+ <b>0: Disable</b>; 1: Enable.
+ **/
+ UINT32 ClkReqDetect : 1;
+ //
+ // Error handlings
+ //
+ UINT32 AdvancedErrorReporting : 1; ///< Indicate whether the Advanced Error Reporting is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 RsvdBits1 : 3; ///< Reserved fields for future expansion w/o protocol change
+ UINT32 UnsupportedRequestReport : 1; ///< Indicate whether the Unsupported Request Report is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 FatalErrorReport : 1; ///< Indicate whether the Fatal Error Report is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 NoFatalErrorReport : 1; ///< Indicate whether the No Fatal Error Report is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 CorrectableErrorReport : 1; ///< Indicate whether the Correctable Error Report is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 SystemErrorOnFatalError : 1; ///< Indicate whether the System Error on Fatal Error is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 SystemErrorOnNonFatalError : 1; ///< Indicate whether the System Error on Non Fatal Error is enabled. <b>0: Disable</b>; 1: Enable.
+ UINT32 SystemErrorOnCorrectableError : 1; ///< Indicate whether the System Error on Correctable Error is enabled. <b>0: Disable</b>; 1: Enable.
+ /**
+ Max Payload Size supported, Default <b>128B</b>, see enum PCH_PCIE_MAX_PAYLOAD
+ Changes Max Payload Size Supported field in Device Capabilities of the root port.
+ **/
+ UINT32 MaxPayload : 2;
+
+ /**
+ Indicates how this root port is connected to endpoint.
+ 0: built-in device;
+ 1: slot
+ Built-in is incompatible with hotplug-capable ports
+ **/
+ UINT32 SlotImplemented : 1;
+
+ UINT32 DeviceResetPadActiveHigh : 1; ///< Indicated whether PERST# is active <b>0: Low</b>; 1: High, See: DeviceResetPad
+ /**
+ Determines each PCIE Port speed capability.
+ <b>0: Auto</b>; 1: Gen1; 2: Gen2; 3: Gen3 (see: PCH_PCIE_SPEED)
+ **/
+ UINT8 PcieSpeed;
+ /**
+ PCIe Gen3 Equalization Phase 3 Method (see PCH_PCIE_EQ_METHOD).
+ <b>0: Default</b>; 2: Software Search; 4: Fixed Coeficients
+ **/
+ UINT8 Gen3EqPh3Method;
+
+ UINT8 PhysicalSlotNumber; ///< Indicates the slot number for the root port. Default is the value as root port index.
+ UINT8 CompletionTimeout; ///< The completion timeout configuration of the root port (see: PCH_PCIE_COMPLETION_TIMEOUT). Default is <b>PchPcieCompletionTO_Default</b>.
+ /**
+ The PCH pin assigned to device PERST# signal if available, zero otherwise.
+ This entry is used mainly in Gen3 software equalization flow. It is necessary for some devices
+ (mainly some graphic adapters) to successfully complete the software equalization flow.
+ See also DeviceResetPadActiveHigh
+ **/
+ UINT32 DeviceResetPad;
+ UINT32 Rsvd1; ///< Reserved bytes
+ //
+ // Power Management
+ //
+ UINT8 Aspm; ///< The ASPM configuration of the root port (see: PCH_PCIE_ASPM_CONTROL). Default is <b>PchPcieAspmAutoConfig</b>.
+ UINT8 L1Substates; ///< The L1 Substates configuration of the root port (see: PCH_PCIE_L1SUBSTATES_CONTROL). Default is <b>PchPcieL1SubstatesL1_1_2</b>.
+ UINT8 LtrEnable; ///< Latency Tolerance Reporting Mechanism. <b>0: Disable</b>; 1: Enable.
+ UINT8 LtrConfigLock; ///< <b>0: Disable</b>; 1: Enable.
+ UINT16 LtrMaxSnoopLatency; ///< <b>(Test)</b> Latency Tolerance Reporting, Max Snoop Latency.
+ UINT16 LtrMaxNoSnoopLatency; ///< <b>(Test)</b> Latency Tolerance Reporting, Max Non-Snoop Latency.
+ UINT8 SnoopLatencyOverrideMode; ///< <b>(Test)</b> Latency Tolerance Reporting, Snoop Latency Override Mode.
+ UINT8 SnoopLatencyOverrideMultiplier; ///< <b>(Test)</b> Latency Tolerance Reporting, Snoop Latency Override Multiplier.
+ UINT16 SnoopLatencyOverrideValue; ///< <b>(Test)</b> Latency Tolerance Reporting, Snoop Latency Override Value.
+ UINT8 NonSnoopLatencyOverrideMode; ///< <b>(Test)</b> Latency Tolerance Reporting, Non-Snoop Latency Override Mode.
+ UINT8 NonSnoopLatencyOverrideMultiplier; ///< <b>(Test)</b> Latency Tolerance Reporting, Non-Snoop Latency Override Multiplier.
+ UINT16 NonSnoopLatencyOverrideValue; ///< <b>(Test)</b> Latency Tolerance Reporting, Non-Snoop Latency Override Value.
+ UINT32 SlotPowerLimitScale : 2; ///< <b>(Test)</b> Specifies scale used for slot power limit value. Leave as 0 to set to default. Default is <b>zero</b>.
+ UINT32 SlotPowerLimitValue : 12; ///< <b>(Test)</b> Specifies upper limit on power supplie by slot. Leave as 0 to set to default. Default is <b>zero</b>.
+
+ UINT32 HsioRxSetCtleEnable : 1; ///< @deprecated, please use HsioRxSetCtleEnable from PCH_HSIO_PCIE_LANE_CONFIG
+ UINT32 HsioRxSetCtle : 6; ///< @deprecated, please use HsioRxSetCtle from PCH_HSIO_PCIE_LANE_CONFIG
+ //
+ // Gen3 Equaliztion settings
+ //
+ UINT32 Uptp : 4; ///< <b>(Test)</b> Upstream Port Transmiter Preset used during Gen3 Link Equalization. Used for all lanes. Default is <b>5</b>.
+ UINT32 Dptp : 4; ///< <b>(Test)</b> Downstream Port Transmiter Preset used during Gen3 Link Equalization. Used for all lanes. Default is <b>7</b>.
+ UINT32 RsvdBits3 : 3; ///< Reserved Bits
+ UINT32 Rsvd2[16]; ///< Reserved bytes
+} PCH_PCIE_ROOT_PORT_CONFIG;
+
+///
+/// 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];
+ ///
+ /// Pci Delay (Latency) Optimization ECR - Engineering Change Request
+ ///
+ UINT8 PciDelayOptimizationEcr;
+ ///
+ /// Pch Pcie Max Read Request Size
+ ///
+ UINT8 MaxReadRequestSize;
+ ///
+ /// Gen3 Equalization settings for physiacal PCIe lane, index 0 represents PCIe lane 1, etc.
+ /// Correstponding entries are used when root port EqPh3Method is PchPcieEqStaticCoeff (default).
+ ///
+ PCH_PCIE_EQ_LANE_PARAM EqPh3LaneParam[PCH_MAX_PCIE_ROOT_PORTS];
+ ///
+ /// <b>(Test)</b> This member describes whether PCIE root port Port 8xh Decode is enabled. <b>0: Disable</b>; 1: Enable.
+ ///
+ UINT32 EnablePort8xhDecode : 1;
+ ///
+ /// <b>(Test)</b> The Index of PCIe Port that is selected for Port8xh Decode (0 Based)
+ ///
+ UINT32 PchPciePort8xhDecodePortIndex : 5;
+ ///
+ /// This member describes whether the PCI Express Clock Gating for each root port
+ /// is enabled by platform modules. <b>0: Disable</b>; 1: Enable.
+ ///
+ UINT32 DisableRootPortClockGating : 1;
+ ///
+ /// This member describes whether Peer Memory Writes are enabled on the platform. <b>0: Disable</b>; 1: Enable.
+ ///
+ UINT32 EnablePeerMemoryWrite : 1;
+ /**
+ This member allows BIOS to control ICC PLL Shutdown by determining PCIe devices are LTR capable
+ or leaving untouched.
+ - <b>0: Disable, ICC PLL Shutdown is determined by PCIe device LTR capablility.</b>
+ - 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;
+ /**
+ Compliance Test Mode shall be enabled when using Compliance Load Board.
+ <b>0: Disable</b>, 1: Enable
+ **/
+ UINT32 ComplianceTestMode : 1;
+ /**
+ RpFunctionSwap allows BIOS to use root port function number swapping when root port of function 0 is disabled.
+ A PCIE device can have higher functions only when Function0 exists. To satisfy this requirement,
+ BIOS will always enable Function0 of a device that contains more than 0 enabled root ports.
+ - <b>Enabled: One of enabled root ports get assigned to Function0.</b>
+ This offers no guarantee that any particular root port will be available at a specific DevNr:FuncNr location
+ - Disabled: Root port that corresponds to Function0 will be kept visible even though it might be not used.
+ That way rootport - to - DevNr:FuncNr assignment is constant. This option will impact ports 1, 9, 17.
+ NOTE: This option will not work if ports 1, 9, 17 are fused or configured for RST PCIe storage
+ NOTE: Disabling function swap may have adverse impact on power management. This option should ONLY
+ be used when each one of root ports 1, 9, 17:
+ - is configured as PCIe and has correctly configured ClkReq signal, or
+ - does not own any mPhy lanes (they are configured as SATA or USB)
+ **/
+ UINT32 RpFunctionSwap : 1;
+
+ UINT32 RsvdBits0 : 21;
+ /**
+ The number of milliseconds reference code will wait for link to exit Detect state for enabled ports
+ before assuming there is no device and potentially disabling the port.
+ It's assumed that the link will exit detect state before root port initialization (sufficient time
+ elapsed since PLTRST de-assertion) therefore default timeout is zero. However this might be useful
+ if device power-up seqence is controlled by BIOS or a specific device requires more time to detect.
+ I case of non-common clock enabled the default timout is 15ms.
+ <b>Default: 0</b>
+ **/
+ UINT16 DetectTimeoutMs;
+
+ ///
+ /// These are Competions Timeout settings for Uplink ports in Server PCH
+ ///
+ UINT8 PchPcieUX16CompletionTimeout;
+ UINT8 PchPcieUX8CompletionTimeout;
+
+ ///
+ /// Max Payload Size settings for Upling ports in Server PCH
+ ///
+ UINT8 PchPcieUX16MaxPayload;
+ UINT8 PchPcieUX8MaxPayload;
+
+ ///
+ /// Intel+ Virtual Technology for Directed I/O (VT-d) Support
+ ///
+ UINT8 VTdSupport;
+ UINT16 Rsvd0; ///< Reserved bytes
+ UINT32 Rsvd1[2]; ///< Reserved bytes
+} PCH_PCIE_CONFIG;
+
+
+///
+/// The PCH_PCIE_CONFIG2 block describes the additional configuration of the PCH PCI Express controllers
+///
+typedef struct {
+ PCH_PCIE_EQ_PARAM SwEqCoeffList[PCH_PCIE_SWEQ_COEFFS_MAX]; ///< List of coefficients used during equalization (applicable to both software and hardware EQ)
+ PCH_PCIE_EQ_PARAM Rsvd0[3];
+ UINT32 Rsvd1[4];
+} PCH_PCIE_CONFIG2;
+
+typedef struct {
+ UINT8 PchAdrEn;
+ UINT8 AdrTimerEn;
+ UINT8 AdrTimerVal;
+ UINT8 AdrMultiplierVal;
+ UINT8 AdrGpioSel;
+ UINT8 AdrHostPartitionReset;
+ UINT8 AdrSysPwrOk;
+ UINT8 AdrOverClockingWdt;
+ UINT8 AdrCpuThermalWdt;
+ UINT8 AdrPmcParityError;
+} PCH_ADR_CONFIG;
+
+/**
+ The PCH_HSIO_PCIE_LANE_CONFIG describes HSIO settings for PCIe lane
+**/
+typedef struct {
+ //
+ // HSIO Rx Eq
+ // Refer to the EDS for recommended values.
+ // Note that these setting are per-lane and not per-port
+ //
+ UINT32 HsioRxSetCtleEnable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 3 Set CTLE Value
+ UINT32 HsioRxSetCtle : 6; ///< PCH PCIe Gen 3 Set CTLE Value
+ UINT32 HsioTxGen1DownscaleAmpEnable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 1 TX Output Downscale Amplitude Adjustment value override
+ UINT32 HsioTxGen1DownscaleAmp : 6; ///< PCH PCIe Gen 1 TX Output Downscale Amplitude Adjustment value
+ UINT32 HsioTxGen2DownscaleAmpEnable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 2 TX Output Downscale Amplitude Adjustment value override
+ UINT32 HsioTxGen2DownscaleAmp : 6; ///< PCH PCIe Gen 2 TX Output Downscale Amplitude Adjustment value
+ UINT32 HsioTxGen3DownscaleAmpEnable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 3 TX Output Downscale Amplitude Adjustment value override
+ UINT32 HsioTxGen3DownscaleAmp : 6; ///< PCH PCIe Gen 3 TX Output Downscale Amplitude Adjustment value
+ UINT32 RsvdBits0 : 4; ///< Reserved Bits
+
+ UINT32 HsioTxGen1DeEmphEnable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 1 TX Output De-Emphasis Adjustment Setting value override
+ UINT32 HsioTxGen1DeEmph : 6; ///< PCH PCIe Gen 1 TX Output De-Emphasis Adjustment Setting
+ UINT32 HsioTxGen2DeEmph3p5Enable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 2 TX Output -3.5dB Mode De-Emphasis Adjustment Setting value override
+ UINT32 HsioTxGen2DeEmph3p5 : 6; ///< PCH PCIe Gen 2 TX Output -3.5dB Mode De-Emphasis Adjustment Setting
+ UINT32 HsioTxGen2DeEmph6p0Enable : 1; ///< <b>0: Disable</b>; 1: Enable PCH PCIe Gen 2 TX Output -6.0dB Mode De-Emphasis Adjustment Setting value override
+ UINT32 HsioTxGen2DeEmph6p0 : 6; ///< PCH PCIe Gen 2 TX Output -6.0dB Mode De-Emphasis Adjustment Setting
+ UINT32 RsvdBits1 : 11; ///< Reserved Bits
+
+ //
+ // Server specific offsets
+ //
+ UINT32 HsioIcfgAdjLimitLoEnable : 1; /// < <b>0: Disable</b>; 1: Enable Set the floor on how many ticks the autovref can take.
+ UINT32 HsioIcfgAdjLimitLo : 5; /// < Set the floor on how many ticks the autovref can take. (offset 0x9c)
+ UINT32 HsioSampOffstEvenErrSpEnable : 1; /// < <b>0: Disable</b>; 1: Enable EVEN ERR P sampler manual offset.
+ UINT32 HsioSampOffstEvenErrSp : 8; /// < EVEN ERR P sampler manual offset. (offset 0xA0)
+ UINT32 RsvdBits2 : 17; ///< Reserved Bits
+
+ UINT32 HsioRemainingSamplerOffEnable : 1; /// < <b>0: Disable</b>; 1: Enable Remaining EVEN/ODD ERR P and N sampler manual offset.
+ UINT32 HsioRemainingSamplerOff : 24; /// < Remaining EVEN/ODD ERR P and N sampler manual offset. (offset 0xA4)
+ UINT32 HsioVgaGainCalEnable : 1; /// < <b>0: Disable</b>; 1: Enable VGA Gain CAL
+ UINT32 HsioVgaGainCal : 5; /// < VGA Gain Calibration Value (offset 0x1C)
+ UINT32 RsvdBits3 : 1; ///< Reserved Bits
+
+ UINT32 Rsvd4[12]; ///< Reserved bytes
+
+} PCH_HSIO_PCIE_LANE_CONFIG;
+
+///
+/// The PCH_HSIO_PCIE_CONFIG block describes the configuration of the HSIO for PCIe lanes
+///
+typedef struct {
+ ///
+ /// These members describe the configuration of HSIO for PCIe lanes.
+ ///
+ PCH_HSIO_PCIE_LANE_CONFIG Lane[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT32 Rsvd0[3]; ///< Reserved bytes
+
+} PCH_HSIO_PCIE_CONFIG;
+
+
+///
+/// The PCH_HSIO_PCIE_WM20_CONFIG block describes the configuration of the HSIO for PCIe lanes
+///
+typedef struct {
+ ///
+ /// These members describe the configuration of HSIO for PCIe lanes.
+ ///
+ PCH_HSIO_PCIE_LANE_CONFIG Lane[PCH_MAX_WM20_LANES_NUMBER];
+ UINT32 Rsvd0[3]; ///< Reserved bytes
+
+} PCH_HSIO_PCIE_WM20_CONFIG;
+
+//
+// ---------------------------- EVA Config -----------------------------
+//
+
+// EVA port function hide registers.
+
+typedef union {
+ UINT32 FuncHideVal;
+ struct _FuncHideBits {
+ UINT32 PchEvaMROM0Enable : 1; ///< MROM is never hidden
+ UINT32 PchEvaMROM1Hidden : 1; ///< Enable/disable MROM1 funcion, 1 - hidden
+ UINT32 RsvdBits1 : 3;
+ UINT32 PchEvasSata1Hidden : 1; ///< Enable/disable sSata1, 1 - hidden
+ UINT32 RsvdBits2 : 25;
+ UINT32 PchEvaLock : 1; ///< Lock registers in EVA
+
+ } FuncHideBits;
+}
+PCH_EVA_DNDEVFUNCHIDE;
+
+
+typedef struct {
+ PCH_EVA_DNDEVFUNCHIDE FuncHide;
+ UINT8 LockDown;
+}
+PCH_EVA_CONFIG;
+//
+// ---------------------------- SATA Config -----------------------------
+//
+
+typedef enum {
+ PchSataModeAhci,
+ PchSataModeRaid,
+ PchSataModeMax
+} PCH_SATA_MODE;
+
+typedef enum {
+ PchSataOromDelay2sec,
+ PchSataOromDelay4sec,
+ PchSataOromDelay6sec,
+ PchSataOromDelay8sec
+} PCH_SATA_OROM_DELAY;
+
+typedef enum {
+ PchSataSpeedDefault,
+ PchSataSpeedGen1,
+ PchSataSpeedGen2,
+ PchSataSpeedGen3
+} PCH_SATA_SPEED;
+
+/**
+ This structure configures the features, property, and capability for each SATA port.
+**/
+typedef struct {
+ /**
+ Enable SATA port.
+ It is highly recommended to disable unused ports for power savings
+ **/
+ UINT32 Enable : 1; ///< 0: Disable; <b>1: Enable</b>
+ UINT32 HotPlug : 1; ///< <b>0: Disable</b>; 1: Enable
+ UINT32 InterlockSw : 1; ///< <b>0: Disable</b>; 1: Enable
+ UINT32 External : 1; ///< <b>0: Disable</b>; 1: Enable
+ UINT32 SpinUp : 1; ///< <b>0: Disable</b>; 1: Enable the COMRESET initialization Sequence to the device
+ UINT32 SolidStateDrive : 1; ///< <b>0: HDD</b>; 1: SSD
+ UINT32 DevSlp : 1; ///< <b>0: Disable</b>; 1: Enable DEVSLP on the port
+ UINT32 EnableDitoConfig : 1; ///< <b>0: Disable</b>; 1: Enable DEVSLP Idle Timeout settings (DmVal, DitoVal)
+ UINT32 DmVal : 4; ///< DITO multiplier. Default is <b>15</b>.
+ UINT32 DitoVal : 10; ///< DEVSLP Idle Timeout (DITO), Default is <b>625</b>.
+ /**
+ Support zero power ODD <b>0: Disable</b>, 1: Enable.
+ This is also used to disable ModPHY dynamic power gate.
+ **/
+ UINT32 ZpOdd : 1;
+ UINT32 RsvdBits0 : 9; ///< Reserved fields for future expansion w/o protocol change
+
+ UINT32 HsioRxEqBoostMagAdEnable : 1; ///< @deprecated, please use HsioRxGen3EqBoostMagEnable
+ UINT32 HsioRxEqBoostMagAd : 6; ///< @deprecated, please use HsioRxGen3EqBoostMag
+
+ UINT32 HsioTxGen1DownscaleAmpEnable : 1; ///< @deprecated, please use HsioTxGen1DownscaleAmpEnable in PCH_HSIO_SATA_PORT_LANE
+ UINT32 HsioTxGen1DownscaleAmp : 6; ///< @deprecated, please use HsioTxGen1DownscaleAmp in PCH_HSIO_SATA_PORT_LANE
+ UINT32 HsioTxGen2DownscaleAmpEnable : 1; ///< @deprecated, please use HsioTxGen2DownscaleAmpEnable in PCH_HSIO_SATA_PORT_LANE
+ UINT32 HsioTxGen2DownscaleAmp : 6; ///< @deprecated, please use HsioTxGen2DownscaleAmp in PCH_HSIO_SATA_PORT_LANE
+ UINT32 Rsvd0 : 11; ///< Reserved bits
+
+} PCH_SATA_PORT_CONFIG;
+
+/**
+ Rapid Storage Technology settings.
+**/
+typedef struct {
+ UINT32 RaidAlternateId : 1; ///< <b>0: Disable</b>; 1: Enable RAID Alternate ID
+ UINT32 Raid0 : 1; ///< 0: Disable; <b>1: Enable</b> RAID0
+ UINT32 Raid1 : 1; ///< 0: Disable; <b>1: Enable</b> RAID1
+ UINT32 Raid10 : 1; ///< 0: Disable; <b>1: Enable</b> RAID10
+ UINT32 Raid5 : 1; ///< 0: Disable; <b>1: Enable</b> RAID5
+ UINT32 Irrt : 1; ///< 0: Disable; <b>1: Enable</b> Intel Rapid Recovery Technology
+ UINT32 OromUiBanner : 1; ///< 0: Disable; <b>1: Enable</b> OROM UI and BANNER
+ UINT32 OromUiDelay : 2; ///< <b>00b: 2 secs</b>; 01b: 4 secs; 10b: 6 secs; 11: 8 secs (see: PCH_SATA_OROM_DELAY)
+ UINT32 HddUnlock : 1; ///< 0: Disable; <b>1: Enable</b>. Indicates that the HDD password unlock in the OS is enabled
+ UINT32 LedLocate : 1; ///< 0: Disable; <b>1: Enable</b>. Indicates that the LED/SGPIO hardware is attached and ping to locate feature is enabled on the OS
+ UINT32 IrrtOnly : 1; ///< 0: Disable; <b>1: Enable</b>. Allow only IRRT drives to span internal and external ports
+ UINT32 SmartStorage : 1; ///< 0: Disable; <b>1: Enable</b> RST Smart Storage caching Bit
+ UINT32 EfiRaidDriverLoad :1; ///< 0: Dont load EFI RST/RSTe driver; <b>1: Load EFI RST/RSTe driver
+ UINT32 Resvdbits : 18; ///< Reserved Bits
+} PCH_SATA_RST_CONFIG;
+
+/**
+ This structure describes the details of Intel RST for PCIe Storage remapping
+ Note: In order to use this feature, Intel RST Driver is required
+**/
+typedef struct {
+ /**
+ This member describes whether or not the Intel RST for PCIe Storage remapping should be enabled. <b>0: Disable</b>; 1: Enable.
+ Note 1: If Sata Controller is disabled, PCIe Storage Remapping should be disabled as well
+ Note 2: If PCIe Storage remapping is enabled, the PCH integrated AHCI controllers Class Code is configured as RAID
+ **/
+ UINT32 Enable : 1;
+ /**
+ Intel RST for PCIe Storage remapping - PCIe Port Selection (1-based, <b>0 = autodetect</b>)
+ The supported ports for PCIe Storage remapping is different depend on the platform and cycle router, the assignments are as below:
+ SKL PCH-LP RST PCIe Storage Cycle Router Assignment:
+ i.) RST PCIe Storage Cycle Router 2 -> RP5 - RP8
+ ii.) RST PCIe Storage Cycle Router 3 -> RP9 - RP12
+
+ SKL PCH-H RST PCIe Storage Cycle Router Assignment:
+ i.) RST PCIe Storage Cycle Router 1 -> RP9 - RP12
+ ii.) RST PCIe Storage Cycle Router 2 -> RP13 - RP16
+ iii.) RST PCIe Storage Cycle Router 3 -> RP17 - RP20
+ **/
+ UINT32 RstPcieStoragePort : 5;
+ UINT32 RsvdBits0 : 2; ///< Reserved bit
+ /**
+ PCIe Storage Device Reset Delay in milliseconds (ms), which it guarantees such delay gap is fulfilled
+ before PCIe Storage Device configuration space is accessed after an reset caused by the link disable and enable step.
+ Default value is <b>100ms</b>.
+ **/
+ UINT32 DeviceResetDelay : 8;
+ UINT32 RsvdBits1 : 16; ///< Reserved bits
+
+ UINT32 Rsvd0[2]; ///< Reserved bytes
+} PCH_RST_PCIE_STORAGE_CONFIG;
+
+///
+/// The PCH_SATA_CONFIG block describes the expected configuration of the SATA controllers.
+///
+typedef struct {
+ ///
+ /// This member describes whether or not the SATA controllers should be enabled. 0: Disable; <b>1: Enable</b>.
+ ///
+ UINT32 Enable : 1;
+ UINT32 TestMode : 1; ///< <b>(Test)</b> <b>0: Disable</b>; 1: Allow entrance to the PCH SATA test modes
+ UINT32 SalpSupport : 1; ///< 0: Disable; <b>1: Enable</b> Aggressive Link Power Management
+ UINT32 PwrOptEnable : 1; ///< 0: Disable; <b>1: Enable</b> SATA Power Optimizer on PCH side.
+ /**
+ eSATASpeedLimit
+ When enabled, BIOS will configure the PxSCTL.SPD to 2 to limit the eSATA port speed.
+ Please be noted, this setting could be cleared by HBA reset, which might be issued
+ by EFI AHCI driver when POST time, or by SATA inbox driver/RST driver after POST.
+ To support the Speed Limitation when POST, the EFI AHCI driver should preserve the
+ setting before and after initialization. For support it after POST, it's dependent on
+ driver's behavior.
+ <b>0: Disable</b>; 1: Enable
+ **/
+ UINT32 eSATASpeedLimit : 1;
+ UINT32 EnclosureSupport : 1; ///< 0: Disable; 1: Enable Enclosure Management Support
+ UINT32 Rsvdbits : 26; ///< Reserved bits
+
+ /**
+ Determines the system will be configured to which SATA mode (PCH_SATA_MODE). Default is <b>PchSataModeAhci</b>.
+ **/
+ PCH_SATA_MODE SataMode;
+ /**
+ Indicates the maximum speed the SATA controller can support
+ <b>0h: PchSataSpeedDefault</b>; 1h: 1.5 Gb/s (Gen 1); 2h: 3 Gb/s(Gen 2); 3h: 6 Gb/s (Gen 1)
+ **/
+ PCH_SATA_SPEED SpeedLimit;
+ /**
+ This member configures the features, property, and capability for each SATA port.
+ **/
+ PCH_SATA_PORT_CONFIG PortSettings[PCH_MAX_SATA_PORTS];
+ PCH_SATA_RST_CONFIG Rst; ///< Setting applicable to Rapid Storage Technology
+ /**
+ 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];
+ UINT32 Rsvd0[4]; ///< Reserved fields for future expansion
+} PCH_SATA_CONFIG;
+
+
+/**
+ The PCH_HSIO_SATA_PORT_LANE describes HSIO settings for SATA Port lane
+**/
+typedef struct {
+
+ //
+ // HSIO Rx Eq
+ //
+ UINT32 HsioRxGen1EqBoostMagEnable : 1; ///< <b>0: Disable</b>; 1: Enable Receiver Equalization Boost Magnitude Adjustment Value override
+ UINT32 HsioRxGen1EqBoostMag : 6; ///< SATA 1.5 Gb/sReceiver Equalization Boost Magnitude Adjustment value
+ UINT32 HsioRxGen2EqBoostMagEnable : 1; ///< <b>0: Disable</b>; 1: Enable Receiver Equalization Boost Magnitude Adjustment Value override
+ UINT32 HsioRxGen2EqBoostMag : 6; ///< SATA 3.0 Gb/sReceiver Equalization Boost Magnitude Adjustment value
+ UINT32 HsioRxGen3EqBoostMagEnable : 1; ///< <b>0: Disable</b>; 1: Enable Receiver Equalization Boost Magnitude Adjustment Value override
+ UINT32 HsioRxGen3EqBoostMag : 6; ///< SATA 6.0 Gb/sReceiver Equalization Boost Magnitude Adjustment value
+
+ //
+ // HSIO Tx Eq
+ //
+ UINT32 HsioTxGen1DownscaleAmpEnable : 1; ///< <b>0: Disable</b>; 1: Enable SATA 1.5 Gb/s TX Output Downscale Amplitude Adjustment value override
+ UINT32 HsioTxGen1DownscaleAmp : 6; ///< SATA 1.5 Gb/s TX Output Downscale Amplitude Adjustment value
+ UINT32 RsvdBits0 : 4; ///< Reserved bits
+
+ UINT32 HsioTxGen2DownscaleAmpEnable : 1; ///< <b>0: Disable</b>; 1: Enable SATA 3.0 Gb/s TX Output Downscale Amplitude Adjustment value override
+ UINT32 HsioTxGen2DownscaleAmp : 6; ///< SATA 3.0 Gb/s TX Output Downscale Amplitude Adjustment
+ UINT32 HsioTxGen3DownscaleAmpEnable : 1; ///< <b>0: Disable</b>; 1: Enable SATA 6.0 Gb/s TX Output Downscale Amplitude Adjustment value override
+ UINT32 HsioTxGen3DownscaleAmp : 6; ///< SATA 6.0 Gb/s TX Output Downscale Amplitude Adjustment
+ UINT32 HsioTxGen1DeEmphEnable : 1; ///< <b>0: Disable</b>; 1: Enable SATA 1.5 Gb/s TX Output De-Emphasis Adjustment Setting value override
+ UINT32 HsioTxGen1DeEmph : 6; ///< SATA 1.5 Gb/s TX Output De-Emphasis Adjustment Setting
+
+ UINT32 HsioTxGen2DeEmphEnable : 1; ///< <b>0: Disable</b>; 1: Enable SATA 3.0 Gb/s TX Output De-Emphasis Adjustment Setting value override
+ UINT32 HsioTxGen2DeEmph : 6; ///< SATA 3.0 Gb/s TX Output De-Emphasis Adjustment Setting
+ UINT32 RsvdBits1 : 4; ///< Reserved bits
+
+ UINT32 HsioTxGen3DeEmphEnable : 1; ///< <b>0: Disable</b>; 1: Enable SATA 6.0 Gb/s TX Output De-Emphasis Adjustment Setting value override
+ UINT32 HsioTxGen3DeEmph : 6; ///< SATA 6.0 Gb/s TX Output De-Emphasis Adjustment Setting value override
+ UINT32 RsvdBits2 : 25; ///< Reserved bits
+
+ UINT32 Rsvd0[8]; ///< Reserved bytes
+} PCH_HSIO_SATA_PORT_LANE;
+
+
+///
+/// The PCH_HSIO_SATA_CONFIG block describes the HSIO configuration of the SATA controller.
+///
+typedef struct {
+ ///
+ /// These members describe the configuration of HSIO for SATA lanes.
+ ///
+ PCH_HSIO_SATA_PORT_LANE PortLane[PCH_MAX_SATA_PORTS];
+ UINT32 Rsvd0[8]; ///< Reserved bytes
+
+} PCH_HSIO_SATA_CONFIG;
+
+//
+// --------------------------- IO APIC Config ------------------------------
+//
+/**
+ The PCH_IOAPIC_CONFIG block describes the expected configuration of the PCH
+ IO APIC, it's optional and PCH code would ignore it if the BdfValid bit is
+ not TRUE. Bus:device:function fields will be programmed to the register
+ P2SB IBDF(P2SB PCI offset R6Ch-6Dh), it's using for the following purpose:
+ As the Requester ID when initiating Interrupt Messages to the processor.
+ As the Completer ID when responding to the reads targeting the IOxAPI's
+ Memory-Mapped I/O registers.
+ This field defaults to Bus 0: Device 31: Function 0 after reset. BIOS can
+ program this field to provide a unique Bus:Device:Function number for the
+ internal IOxAPIC.
+ The address resource range of IOAPIC must be reserved in E820 and ACPI as
+ system resource.
+**/
+typedef struct {
+ UINT32 BdfValid : 1; ///< Set to 1 if BDF value is valid, PCH code will not program these fields if this bit is not TRUE. <b>0: Disable</b>; 1: Enable.
+ UINT32 RsvdBits0 : 7; ///< Reserved bits
+ UINT32 BusNumber : 8; ///< Bus/Device/Function used as Requestor / Completer ID. Default is <b>0xF0</b>.
+ UINT32 DeviceNumber : 5; ///< Bus/Device/Function used as Requestor / Completer ID. Default is <b>0x1F</b>.
+ UINT32 FunctionNumber : 3; ///< Bus/Device/Function used as Requestor / Completer ID. Default is <b>0x00</b>.
+ UINT32 IoApicEntry24_119 : 1; ///< 0: Disable; <b>1: Enable</b> IOAPIC Entry 24-119
+ UINT32 RsvdBits1 : 7; ///< Reserved bits
+ UINT8 IoApicId; ///< This member determines IOAPIC ID. Default is <b>0x02</b>.
+ UINT8 ApicRangeSelect; ///< Define address bits 19:12 for the IOxAPIC range. Default is <b>0</b>
+ UINT8 Rsvd0[2]; ///< Reserved bytes
+} PCH_IOAPIC_CONFIG;
+
+//
+// ---------------------------- HPET Config -----------------------------
+//
+
+/**
+ The PCH_HPET_CONFIG block passes the bus/device/function value for HPET.
+ The address resource range of HPET must be reserved in E820 and ACPI as
+ system resource.
+**/
+typedef struct {
+ /**
+ Determines if enable HPET timer. 0: Disable; <b>1: Enable</b>.
+ The HPET timer address decode is always enabled.
+ This policy is used to configure the HPET timer count, and also the _STA of HPET device in ACPI.
+ While enabled, the HPET timer is started, else the HPET timer is halted.
+ **/
+ UINT32 Enable : 1;
+ UINT32 BdfValid : 1; ///< Whether the BDF value is valid. <b>0: Disable</b>; 1: Enable.
+ UINT32 RsvdBits0 : 6; ///< Reserved bits
+ UINT32 BusNumber : 8; ///< Bus Number HPETn used as Requestor / Completer ID. Default is <b>0xF0</b>.
+ UINT32 DeviceNumber : 5; ///< Device Number HPETn used as Requestor / Completer ID. Default is <b>0x1F</b>.
+ UINT32 FunctionNumber : 3; ///< Function Number HPETn used as Requestor / Completer ID. Default is <b>0x00</b>.
+ UINT32 RsvdBits1 : 8; ///< Reserved bits
+ UINT32 Base; ///< The HPET base address. Default is <b>0xFED00000</b>.
+} PCH_HPET_CONFIG;
+
+//
+// --------------------------- HD-Audio Config ------------------------------
+//
+///
+/// The PCH_HDAUDIO_CONFIG block describes the expected configuration of the Intel HD Audio feature.
+///
+#define PCH_HDAUDIO_AUTO 2
+
+enum PCH_HDAUDIO_IO_BUFFER_OWNERSHIP {
+ PchHdaIoBufOwnerHdaLink = 0, ///< HD-Audio link owns all the I/O buffers.
+ PchHdaIoBufOwnerHdaLinkI2sPort = 1, ///< HD-Audio link owns 4 and I2S port owns 4 of the I/O buffers.
+ PchHdaIoBufOwnerI2sPort = 3 ///< I2S0 and I2S1 ports own all the I/O buffers.
+};
+
+enum PCH_HDAUDIO_IO_BUFFER_VOLTAGE {
+ PchHdaIoBuf33V = 0,
+ PchHdaIoBuf18V = 1
+};
+
+enum PCH_HDAUDIO_VC_TYPE {
+ PchHdaVc0 = 0,
+ PchHdaVc1 = 1
+};
+
+enum PCH_HDAUDIO_DMIC_TYPE {
+ PchHdaDmicDisabled = 0,
+ PchHdaDmic2chArray = 1,
+ PchHdaDmic4chArray = 2,
+ PchHdaDmic1chArray = 3
+};
+
+typedef enum {
+ PchHdaLinkFreq6MHz = 0,
+ PchHdaLinkFreq12MHz = 1,
+ PchHdaLinkFreq24MHz = 2,
+ PchHdaLinkFreq48MHz = 3,
+ PchHdaLinkFreq96MHz = 4,
+ PchHdaLinkFreqInvalid
+} PCH_HDAUDIO_LINK_FREQUENCY;
+
+typedef enum {
+ PchHdaIDispMode2T = 0,
+ PchHdaIDispMode1T = 1
+} PCH_HDAUDIO_IDISP_TMODE;
+
+typedef struct {
+ /**
+ This member describes whether or not Intel HD Audio (Azalia) should be enabled.
+ If enabled (in Auto mode) and no codec exists the reference code will automatically disable
+ the HD Audio device.
+ 0: Disable, 1: Enable, <b>2: Auto (enabled if codec detected and initialized, disabled otherwise)</b>
+ **/
+ UINT32 Enable : 2;
+ UINT32 DspEnable : 1; ///< DSP enablement: 0: Disable; <b>1: Enable</b>
+ UINT32 Pme : 1; ///< Azalia wake-on-ring, <b>0: Disable</b>; 1: Enable
+ UINT32 IoBufferOwnership : 2; ///< I/O Buffer Ownership Select: <b>0: HD-A Link</b>; 1: Shared, HD-A Link and I2S Port; 3: I2S Ports
+ UINT32 IoBufferVoltage : 1; ///< I/O Buffer Voltage Mode Select: <b>0: 3.3V</b>; 1: 1.8V
+ UINT32 VcType : 1; ///< Virtual Channel Type Select: <b>0: VC0</b>, 1: VC1
+ UINT32 HdAudioLinkFrequency : 4; ///< HDA-Link frequency (PCH_HDAUDIO_LINK_FREQUENCY enum): <b>2: 24MHz</b>, 1: 12MHz, 0: 6MHz
+ UINT32 IDispLinkFrequency : 4; ///< iDisp-Link frequency (PCH_HDAUDIO_LINK_FREQUENCY enum): <b>4: 96MHz</b>, 3: 48MHz
+ UINT32 IDispLinkTmode : 1; ///< iDisp-Link T-Mode (PCH_HDAUDIO_IDISP_TMODE enum): <b>0: 2T</b>, 1: 1T
+ /**
+ Universal Audio Architecture compliance for DSP enabled system:
+ <b>0: Not-UAA Compliant (Intel SST driver supported only)</b>,
+ 1: UAA Compliant (HDA Inbox driver or SST driver supported)
+ **/
+ UINT32 DspUaaCompliance : 1;
+ UINT32 IDispCodecDisconnect : 1; ///< iDisplay Audio Codec disconnection, <b>0: Not disconnected, enumerable</b>; 1: Disconnected SDI, not enumerable
+ UINT32 RsvdBits0 : 13; ///< Reserved bits 1
+ /**
+ Bitmask of supported DSP endpoint configuration exposed via NHLT ACPI table:
+ **/
+ UINT32 DspEndpointDmic : 2; ///< DMIC Select (PCH_HDAUDIO_DMIC_TYPE enum): 0: Disable; 1: 2ch array; <b>2: 4ch array</b>; 3: 1ch array
+ UINT32 DspEndpointBluetooth : 1; ///< Bluetooth enablement: <b>0: Disable</b>; 1: Enable
+ UINT32 DspEndpointI2s : 1; ///< I2S enablement: <b>0: Disable</b>; 1: Enable
+ UINT32 RsvdBits1 : 28; ///< Reserved bits 2
+ /**
+ Bitmask of supported DSP features:
+ [BIT0] - WoV; [BIT1] - BT Sideband; [BIT2] - Codec VAD; [BIT5] - BT Intel HFP; [BIT6] - BT Intel A2DP
+ [BIT7] - DSP based speech pre-processing disabled; [BIT8] - 0: Intel WoV, 1: Windows Voice Activation
+ Default is <b>zero</b>.
+ **/
+ UINT32 DspFeatureMask;
+ /**
+ Bitmask of supported DSP Pre/Post-Processing Modules.
+ Specific pre/post-processing module bit position must be coherent with the ACPI implementation:
+ \_SB.PCI0.HDAS._DSM Function 3: Query Pre/Post Processing Module Support.
+ DspPpModuleMask is passed to ACPI as 'ADPM' NVS variable
+ Default is <b>zero</b>.
+ **/
+ UINT32 DspPpModuleMask;
+ UINT16 ResetWaitTimer; ///< <b>(Test)</b> The delay timer after Azalia reset, the value is number of microseconds. Default is <b>600</b>.
+ UINT8 Rsvd0[2]; ///< Reserved bytes, align to multiple 4
+} PCH_HDAUDIO_CONFIG;
+
+//
+// ------------------------------ LAN Config ---------------------------------
+//
+
+/**
+ PCH intergrated LAN controller configuration settings.
+**/
+typedef struct {
+ /**
+ Determines if enable PCH internal LAN, 0: Disable; <b>1: Enable</b>.
+ When Enable is changed (from disabled to enabled or from enabled to disabled),
+ it needs to set LAN Disable regsiter, which might be locked by FDSWL register.
+ So it's recommendated to issue a global reset when changing the status for PCH Internal LAN.
+ **/
+ UINT32 Enable : 1;
+ UINT32 K1OffEnable : 1; ///< Use CLKREQ for GbE power management; 1: Enabled, <b>0: Disabled</b>;
+ UINT32 RsvdBits0 : 4; ///< Reserved bits
+ UINT32 ClkReqSupported : 1; ///< Indicate whether dedicated CLKREQ# is supported; 1: Enabled, <b>0: Disabled</b>;
+ UINT32 ClkReqNumber : 4; ///< CLKREQ# used by GbE. Valid if ClkReqSupported is TRUE.
+ UINT32 RsvdBits1 : 21; ///< Reserved bits
+ UINT32 Rsvd0; ///< Reserved bytes
+} PCH_LAN_CONFIG;
+
+//
+// --------------------------- SMBUS Config ------------------------------
+//
+
+#define PCH_MAX_SMBUS_RESERVED_ADDRESS 128
+
+///
+/// The SMBUS_CONFIG block lists the reserved addresses for non-ARP capable devices in the platform.
+///
+typedef struct {
+ /**
+ This member describes whether or not the SMBus controller of PCH should be enabled.
+ 0: Disable; <b>1: Enable</b>.
+ **/
+ UINT32 Enable : 1;
+ UINT32 ArpEnable : 1; ///< Enable SMBus ARP support, <b>0: Disable</b>; 1: Enable.
+ UINT32 DynamicPowerGating : 1; ///< <b>(Test)</b> <b>Disable</b> or Enable Smbus dynamic power gating.
+ UINT32 RsvdBits0 : 29; ///< Reserved bits
+ UINT16 SmbusIoBase; ///< SMBUS Base Address (IO space). Default is <b>0xEFA0</b>.
+ UINT8 Rsvd0; ///< 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];
+} PCH_SMBUS_CONFIG;
+
+//
+// --------------------------- Lock Down Config ------------------------------
+//
+/**
+ The PCH_LOCK_DOWN_CONFIG block describes the expected configuration of the PCH
+ for security requirement.
+**/
+typedef struct {
+ /**
+ <b>(Test)</b> Enable SMI_LOCK bit to prevent writes to the Global SMI Enable bit. 0: Disable; <b>1: Enable</b>.
+ **/
+ UINT32 GlobalSmi : 1;
+ /**
+ <b>(Test)</b> 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; <b>1: Enable</b>.
+ **/
+ UINT32 BiosInterface : 1;
+ /**
+ <b>(Test)</b> 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; <b>1: Enable</b>.
+ **/
+ UINT32 RtcLock : 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. <b>0: Disable</b>; 1: Enable.
+ **/
+ UINT32 BiosLock : 1;
+ /**
+ Enable InSMM.STS (EISS) in SPI
+ If this 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 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: Clear EISS bit; <b>1: Set EISS bit</b>.
+ **/
+ UINT32 SpiEiss : 1;
+ /**
+ Lock configuration and/or state of vendor-defined set of GPIOs.
+ 0: Don't lock; 1: Lock
+ **/
+ UINT32 GpioLockDown : 1;
+ /**
+ Lock TCO Base Address.
+ D31:F4 (SMBus Controller) Offset 54h: TCOCTL (TCO Control Register) Bit 0: TCO_BASE_LOCK (TCO Base Lock)
+ 0: Don't lock; 1: Lock
+ **/
+ UINT32 TcoLock : 1;
+
+ /**
+ <b>(Test)</b> Enable Lock bit for Device Function Hide Register in
+ MS Unit Device Function Hide Control Register (MSDEVFUNCHIDE)
+ 0: Disable; <b>1: Enable</b>.
+ **/
+ UINT32 EvaLockDown : 1;
+ UINT32 RsvdBits0 : 24; ///< Reserved bits
+} PCH_LOCK_DOWN_CONFIG;
+
+//
+// --------------------------- Thermal Config ------------------------------------
+//
+/**
+ This structure lists PCH supported throttling register setting for custimization.
+ When the SuggestedSetting is enabled, the customized values are ignored.
+**/
+typedef struct {
+ UINT32 T0Level : 9; ///< Custimized T0Level value. If SuggestedSetting is used, this setting is ignored.
+ UINT32 T1Level : 9; ///< Custimized T1Level value. If SuggestedSetting is used, this setting is ignored.
+ UINT32 T2Level : 9; ///< Custimized T2Level value. If SuggestedSetting is used, this setting is ignored.
+ UINT32 TTEnable : 1; ///< Enable the thermal throttle function. If SuggestedSetting is used, this settings is ignored.
+ /**
+ When set to 1 and the programmed GPIO pin is a 1, then PMSync state 13 will force at least T2 state.
+ If SuggestedSetting is used, this setting is ignored.
+ **/
+ UINT32 TTState13Enable : 1;
+ /**
+ When set to 1, this entire register (TL) is locked and remains locked until the next platform reset.
+ If SuggestedSetting is used, this setting is ignored.
+ **/
+ UINT32 TTLock : 1;
+ UINT32 SuggestedSetting : 1; ///< 0: Disable; <b>1: Enable</b> suggested representative values.
+ /**
+ ULT processors support thermal management and cross thermal throttling between the processor package
+ and LP PCH. The PMSYNC message from PCH to CPU includes specific bit fields to update the PCH
+ thermal status to the processor which is factored into the processor throttling.
+ Enable/Disable PCH Cross Throttling; 0: Disabled, 1: <b>Enabled</b>.
+ **/
+ UINT32 PchCrossThrottling : 1;
+ UINT32 Rsvd0; ///< Reserved bytes
+} THERMAL_THROTTLE_LEVELS;
+
+/**
+ This structure allows to customize DMI HW Autonomous Width Control for Thermal and Mechanical spec design.
+ When the SuggestedSetting is enabled, the customized values are ignored.
+**/
+typedef struct {
+ UINT32 DmiTsawEn : 1; ///< DMI Thermal Sensor Autonomous Width Enable
+ UINT32 SuggestedSetting : 1; ///< 0: Disable; <b>1: Enable</b> suggested representative values
+ UINT32 RsvdBits0 : 6; ///< Reserved bits
+ UINT32 TS0TW : 2; ///< Thermal Sensor 0 Target Width
+ UINT32 TS1TW : 2; ///< Thermal Sensor 1 Target Width
+ UINT32 TS2TW : 2; ///< Thermal Sensor 2 Target Width
+ UINT32 TS3TW : 2; ///< Thermal Sensor 3 Target Width
+ UINT32 RsvdBits1 : 16; ///< Reserved bits
+} DMI_HW_WIDTH_CONTROL;
+
+/**
+ This structure lists PCH supported SATA thermal throttling register setting for custimization.
+ The settings is programmed through SATA Index/Data registers.
+ When the SuggestedSetting is enabled, the customized values are ignored.
+**/
+typedef struct {
+ UINT32 P0T1M : 2; ///< Port 0 T1 Multipler
+ UINT32 P0T2M : 2; ///< Port 0 T2 Multipler
+ UINT32 P0T3M : 2; ///< Port 0 T3 Multipler
+ UINT32 P0TDisp : 2; ///< Port 0 Tdispatch
+
+ UINT32 P1T1M : 2; ///< Port 1 T1 Multipler
+ UINT32 P1T2M : 2; ///< Port 1 T2 Multipler
+ UINT32 P1T3M : 2; ///< Port 1 T3 Multipler
+ UINT32 P1TDisp : 2; ///< Port 1 Tdispatch
+
+ UINT32 P0Tinact : 2; ///< Port 0 Tinactive
+ UINT32 P0TDispFinit : 1; ///< Port 0 Alternate Fast Init Tdispatch
+ UINT32 P1Tinact : 2; ///< Port 1 Tinactive
+ UINT32 P1TDispFinit : 1; ///< Port 1 Alternate Fast Init Tdispatch
+ UINT32 SuggestedSetting : 1; ///< 0: Disable; <b>1: Enable</b> suggested representative values
+ UINT32 RsvdBits0 : 9; ///< Reserved bits
+} SATA_THERMAL_THROTTLE;
+
+/**
+ This structure decides the settings of PCH Thermal throttling. When the Suggested Setting
+ is enabled, PCH RC will use the suggested representative values.
+**/
+typedef struct {
+ THERMAL_THROTTLE_LEVELS TTLevels;
+ DMI_HW_WIDTH_CONTROL DmiHaAWC;
+ SATA_THERMAL_THROTTLE SataTT;
+ SATA_THERMAL_THROTTLE sSataTT;
+} PCH_THERMAL_THROTTLING;
+
+/**
+ This structure configures PCH memory throttling thermal sensor GPIO PIN settings
+**/
+typedef struct {
+ /**
+ GPIO PM_SYNC enable, 0:Diabled, 1:<b>Enabled</b>
+ When enabled, RC will overrides the selected GPIO native mode.
+ For GPIO_C, PinSelection 0: CPU_GP_0 (default) or 1: CPU_GP_1
+ For GPIO_D, PinSelection 0: CPU_GP_3 (default) or 1: CPU_GP_2
+ For SKL: CPU_GP_0 is GPP_E3, CPU_GP_1 is GPP_E7, CPU_GP_2 is GPP_B3, CPU_GP_3 is GPP_B4.
+ **/
+ UINT32 PmsyncEnable : 1;
+ UINT32 C0TransmitEnable : 1; ///< GPIO Transmit enable in C0 state, 0:Disabled, 1:<b>Enabled</b>
+ UINT32 PinSelection : 1; ///< GPIO Pin assignment selection, <b>0: default</b>, 1: secondary
+ UINT32 RsvdBits0 : 29;
+} TS_GPIO_PIN_SETTING;
+
+enum PCH_PMSYNC_GPIO_X_SELECTION {
+ TsGpioC,
+ TsGpioD,
+ MaxTsGpioPin
+};
+
+/**
+ This structure supports an external memory thermal sensor (TS-on-DIMM or TS-on-Board).
+**/
+typedef struct {
+ /**
+ This will enable PCH memory throttling.
+ While this policy is enabled, must also enable EnableExtts in SA policy.
+ <b>0: Disable</b>; 1: Enable
+ **/
+ UINT32 Enable : 1;
+ UINT32 RsvdBits0 : 31;
+ /**
+ GPIO_C and GPIO_D selection for memory throttling.
+ It's strongly recommended to choose GPIO_C and GPIO_D for memory throttling feature,
+ and route EXTTS# accordingly.
+ **/
+ TS_GPIO_PIN_SETTING TsGpioPinSetting[2];
+} PCH_MEMORY_THROTTLING;
+
+/**
+ The PCH_THERMAL_CONFIG block describes the expected configuration of the PCH for Thermal.
+**/
+typedef struct {
+ /**
+ This field reports the status of Thermal Device. When it reports ThermalDevice
+ is disabled, the PCI configuration space of thermal device will be hidden by
+ setting TCFD and PCR[PSF2] TRH PCIEN[8] prior to end of POST.
+ **/
+ UINT32 ThermalDeviceEnable : 2; ///< 0: Disabled, <b>1: Enabled in PCI mode</b>, 2: Enabled in ACPI mode
+ UINT32 TsmicLock : 1; ///< This locks down "SMI Enable on Alert Thermal Sensor Trip". 0: Disabled, 1: <b>Enabled</b>.
+ UINT32 RsvdBits0 : 29;
+ /**
+ This field decides the settings of Thermal throttling. When the Suggested Setting
+ is enabled, PCH RC will use the suggested representative values.
+ **/
+ PCH_THERMAL_THROTTLING ThermalThrottling;
+ /**
+ Memory Thermal Management settings
+ **/
+ PCH_MEMORY_THROTTLING MemoryThrottling;
+ /**
+ This field decides the temperature, default is <b>zero</b>.
+ - 0x00 is the hottest
+ - 0x1FF is the lowest temperature
+ **/
+ UINT16 PchHotLevel;
+ UINT8 Rsvd0[6];
+} PCH_THERMAL_CONFIG;
+
+enum PCH_THERMAL_DEVICE {
+ PchThermalDeviceDisabled,
+ PchThermalDeviceEnabledPci,
+ PchThermalDeviceEnabledAcpi,
+ PchThermalDeviceAuto
+};
+
+//
+// ---------------------- Power Management Config --------------------------
+//
+/**
+ This PCH_POWER_RESET_STATUS Specifies which Power/Reset bits need to be cleared by the PCH Init Driver.
+ Usually platform drivers take care of these bits, but if not, let PCH Init driver clear the bits.
+**/
+typedef struct {
+ UINT32 MeWakeSts : 1; ///< Clear the ME_WAKE_STS bit in the Power and Reset Status (PRSTS) register. 0: Disable; <b>1: Enable</b>.
+ UINT32 MeHrstColdSts : 1; ///< Clear the ME_HRST_COLD_STS bit in the Power and Reset Status (PRSTS) register. 0: Disable; <b>1: Enable</b>.
+ UINT32 MeHrstWarmSts : 1; ///< Clear the ME_HRST_WARM_STS bit in the Power and Reset Status (PRSTS) register. 0: Disable; <b>1: Enable</b>.
+ UINT32 MeHostPowerDn : 1; ///< Clear the ME_HOST_PWRDN bit in the Power and Reset Status (PRSTS) register. <b>0: Disable</b>; 1: Enable.
+ UINT32 WolOvrWkSts : 1; ///< Clear the WOL_OVR_WK_STS bit in the Power and Reset Status (PRSTS) register. 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 27;
+} PCH_POWER_RESET_STATUS;
+
+/**
+ This PCH_GBL2HOST_EN specifes enable bits related to the "Convert Global Resets to Host Resets" (G2H) feature
+**/
+typedef union {
+ struct {
+ UINT32 G2H_FEA : 1; ///< G2H Feature Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 LTRESET : 1; ///< LT RESET G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 PMCGBL : 1; ///< PMC FW-Initiated Global Reset G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 CPUTHRM : 1; ///< CPU Thermal Trip G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 PCHTHRM : 1; ///< PCH Internal Thermal Trip G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 PBO : 1; ///< Power Button Override G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 MEPBO : 1; ///< ME-Initiated Power Button Override G2H: 0: Disable; <b>1: Enable</b>.
+ UINT32 MEWDT : 1; ///< ME FW Watchdog Timer G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 MEGBL : 1; ///< ME-Initiated Global Reset G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 CTWDT : 1; ///< CPU Thermal Watchdog Timer G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 PMCWDT : 1; ///< PMC FW Watchdog Timer G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 ME_UERR : 1; ///< ME Uncorrectable Error G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 SYSPWR : 1; ///< SYS_PWROK Failure G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 OCWDT : 1; ///< Over-Clocking WDT G2H Enable: Disable; <b>1: Enable</b>.
+ UINT32 PMC_PARERR : 1; ///< PMC Parity Error G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 Reserved : 1; ///< Reserved
+ UINT32 IEPBO : 1; ///< IE-Initiated Power Button Override G2H: 0: Disable; <b>1: Enable</b>.
+ UINT32 IEWDT : 1; ///< IE FW Watchdog Timer G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 IEGBLN : 1; ///< IE-Initiated Global Reset G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 IE_UERRN : 1; ///< IE Uncorrectable Error G2H Enable: 0: Disable; <b>1: Enable</b>.
+ UINT32 ACRU_ERR_2H_EN : 1; ///< AC RU Error G2H Enable: 0: Disable; <b>1: Enable</b>.
+ } Bits;
+ UINT32 Value;
+} PCH_GBL2HOST_EN;
+
+/**
+ This structure allows to customize PCH wake up capability from S5 or DeepSx by WOL, LAN, PCIE wake events.
+**/
+typedef struct {
+ /**
+ Corresponds to the PME_B0_S5_DIS bit in the General PM Configuration B (GEN_PMCON_B) register.
+ When set to 1, this bit blocks wake events from PME_B0_STS in S5, regardless of the state of PME_B0_EN.
+ When cleared (default), wake events from PME_B0_STS are allowed in S5 if PME_B0_EN = 1. <b>0: Disable</b>; 1: Enable.
+ **/
+ UINT32 PmeB0S5Dis : 1;
+ UINT32 WolEnableOverride : 1; ///< Corresponds to the "WOL Enable Override" bit in the General PM Configuration B (GEN_PMCON_B) register. 0: Disable; <b>1: Enable</b>.
+ UINT32 Gp27WakeFromDeepSx : 1; ///< @deprecated
+ UINT32 PcieWakeFromDeepSx : 1; ///< Determine if enable PCIe to wake from deep Sx. <b>0: Disable</b>; 1: Enable.
+ UINT32 WoWlanEnable : 1; ///< Determine if WLAN wake from Sx, corresponds to the "HOST_WLAN_PP_EN" bit in the PWRM_CFG3 register. <b>0: Disable</b>; 1: Enable.
+ UINT32 WoWlanDeepSxEnable : 1; ///< Determine if WLAN wake from DeepSx, corresponds to the "DSX_WLAN_PP_EN" bit in the PWRM_CFG3 register. <b>0: Disable</b>; 1: Enable.
+ UINT32 LanWakeFromDeepSx : 1; ///< Determine if enable LAN to wake from deep Sx. 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 25;
+} PCH_WAKE_CONFIG;
+
+typedef enum {
+ PchDeepSxPolDisable,
+ PchDpS5BatteryEn,
+ PchDpS5AlwaysEn,
+ PchDpS4S5BatteryEn,
+ PchDpS4S5AlwaysEn,
+ PchDpS3S4S5BatteryEn,
+ PchDpS3S4S5AlwaysEn
+} PCH_DEEP_SX_CONFIG;
+
+typedef enum {
+ PchSlpS360us,
+ PchSlpS31ms,
+ PchSlpS350ms,
+ PchSlpS32s
+} PCH_SLP_S3_MIN_ASSERT;
+
+typedef enum {
+ PchSlpS4PchTime, ///< The time defined in PCH EDS Power Sequencing and Reset Signal Timings table
+ PchSlpS41s,
+ PchSlpS42s,
+ PchSlpS43s,
+ PchSlpS44s
+} PCH_SLP_S4_MIN_ASSERT;
+
+typedef enum {
+ PchSlpSus0ms,
+ PchSlpSus500ms,
+ PchSlpSus1s,
+ PchSlpSus4s
+} PCH_SLP_SUS_MIN_ASSERT;
+
+typedef enum {
+ PchSlpA0ms,
+ PchSlpA4s,
+ PchSlpA98ms,
+ PchSlpA2s
+} PCH_SLP_A_MIN_ASSERT;
+
+typedef enum {
+ PchPmGrPfetDur1us,
+ PchPmGrPfetDur2us,
+ PchPmGrPfetDur5us,
+ PchPmGrPfetDur20us
+} PCH_PM_GR_PFET_DUR;
+
+/**
+ The PCH_PM_CONFIG 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 {
+ /**
+ Specify which Power/Reset bits need to be cleared by
+ the PCH Init Driver.
+ Usually platform drivers take care of these bits, but if
+ not, let PCH Init driver clear the bits.
+ **/
+ PCH_POWER_RESET_STATUS PowerResetStatusClear;
+ PCH_WAKE_CONFIG WakeConfig; ///< Specify Wake Policy
+ PCH_DEEP_SX_CONFIG PchDeepSxPol; ///< Deep Sx Policy. Default is <b>PchDeepSxPolDisable</b>.
+ PCH_SLP_S3_MIN_ASSERT PchSlpS3MinAssert; ///< SLP_S3 Minimum Assertion Width Policy. Default is <b>PchSlpS350ms</b>.
+ PCH_SLP_S4_MIN_ASSERT PchSlpS4MinAssert; ///< SLP_S4 Minimum Assertion Width Policy. Default is <b>PchSlpS44s</b>.
+ PCH_SLP_SUS_MIN_ASSERT PchSlpSusMinAssert; ///< SLP_SUS Minimum Assertion Width Policy. Default is <b>PchSlpSus4s</b>.
+ PCH_SLP_A_MIN_ASSERT PchSlpAMinAssert; ///< SLP_A Minimum Assertion Width Policy. Default is <b>PchSlpA2s</b>.
+ /**
+ This member describes whether or not the PCI ClockRun feature of PCH should
+ be enabled. <b>0: Disable</b>; 1: Enable
+ **/
+ UINT32 PciClockRun : 1;
+ UINT32 SlpStrchSusUp : 1; ///< <b>0: Disable</b>; 1: Enable SLP_X Stretching After SUS Well Power Up
+ /**
+ Enable/Disable SLP_LAN# Low on DC Power. 0: Disable; <b>1: Enable</b>.
+ Configure On DC PHY Power Diable according to policy SlpLanLowDc.
+ When this is enabled, SLP_LAN# will be driven low when ACPRESENT is low.
+ This indicates that LAN PHY should be powered off on battery mode.
+ This will override the DC_PP_DIS setting by WolEnableOverride.
+ **/
+ UINT32 SlpLanLowDc : 1;
+ /**
+ PCH power button override period.
+ 000b-4s, 001b-6s, 010b-8s, 011b-10s, 100b-12s, 101b-14s
+ <b>Default is 0: 4s</b>
+ **/
+ UINT32 PwrBtnOverridePeriod : 3;
+ /**
+ <b>(Test)</b>
+ Disable/Enable PCH to CPU enery report feature. <b>0: Disable</b>; 1: Enable.
+ Enery Report is must have feature. Wihtout Energy Report, the performance report
+ by workloads/benchmarks will be unrealistic because PCH's energy is not being accounted
+ in power/performance management algorithm.
+ If for some reason PCH energy report is too high, which forces CPU to try to reduce
+ its power by throttling, then it could try to disable Energy Report to do first debug.
+ This might be due to energy scaling factors are not correct or the LPM settings are not
+ kicking in.
+ **/
+ UINT32 DisableEnergyReport : 1;
+ /**
+ When set to Disable, PCH will internal pull down AC_PRESENT in deep SX and during G3 exit.
+ When set to Enable, PCH will not pull down AC_PRESENT.
+ This setting is ignored when DeepSx is not supported.
+ Default is <b>0:Disable</b>
+ **/
+ UINT32 DisableDsxAcPresentPulldown : 1;
+ /**
+ <b>(Test)</b>
+ When set to true, this bit disallows Host reads to PMC XRAM.
+ BIOS must set this bit (to disable and lock the feature) prior to passing control to OS
+ 0:Disable, <b>1:Enable</b>
+ **/
+ UINT32 PmcReadDisable : 1;
+ /**
+ This determines the type of reset issued during the capsule update process by UpdateCapsule().
+ The default is <b>0:S3 Resume</b>, 1:Warm reset.
+ **/
+ UINT32 CapsuleResetType : 1;
+ /**
+ Power button native mode disable.
+ While FALSE, the PMC's power button logic will act upon the input value from the GPIO unit, as normal.
+ While TRUE, this will result in the PMC logic constantly seeing the power button as de-asserted.
+ <b>Default is FALSE.</b>
+ **/
+ UINT32 DisableNativePowerButton : 1;
+ /**
+ Indicates whether SLP_S0# is to be asserted when PCH reaches idle state.
+ When set to one SLP_S0# will be asserted in idle state.
+ When set to zero SLP_S0# will not toggle and is always drivern high.
+ 0:Disable, <b>1:Enable</b>
+
+ Warning: In SKL PCH VCCPRIM_CORE must NOT be reduced based on SLP_S0# being asserted.
+ If a platform is using SLP_S0 to lower PCH voltage the below policy must be disabled.
+ **/
+ UINT32 SlpS0Enable : 1;
+ UINT32 DirtyWarmReset : 1; ///< DirtyWarmReset enable
+ UINT32 StallDirtyWarmReset : 1; ///< Stall during DWR
+ UINT32 GrPfetDurOnDef : 2; ///< Global Reset PFET duration
+ UINT32 Dwr_MeResetPrepDone : 1; ///< ME Reset Prep Done
+ UINT32 Dwr_IeResetPrepDone : 1; ///< IE Reset Prep Done
+ UINT32 Dwr_BmcRootPort : 8; ///< Root port where BMC is connected to
+ UINT32 RsvdBits0 : 6; ///< @todo ADD DESCRIPTION
+
+ PCH_GBL2HOST_EN PchGbl2HostEn;
+ /**
+ Reset Power Cycle Duration could be customized in the unit of second. Please refer to EDS
+ for all support settings. PCH HW default is 4 seconds, and range is 1~4 seconds, where
+ <b>0 is default</b>, 1 is 1 second, 2 is 2 seconds, ... 4 is 4 seconds.
+ And make sure the setting correct, which never less than the following register.
+ - GEN_PMCON_B.SLP_S3_MIN_ASST_WDTH
+ - GEN_PMCON_B.SLP_S4_MIN_ASST_WDTH
+ - PWRM_CFG.SLP_A_MIN_ASST_WDTH
+ - PWRM_CFG.SLP_LAN_MIN_ASST_WDTH
+ **/
+ UINT8 PchPwrCycDur;
+ /**
+ Specifies the Pcie Pll Spread Spectrum Percentage
+ The value of this policy is in 1/10th percent units.
+ Valid spread range is 0-20. A value of 0xFF is reserved for AUTO.
+ A value of 0 is SSC of 0.0%. A value of 20 is SSC of 2.0%
+ The default is <b>0xFF: AUTO - No BIOS override</b>.
+ **/
+ UINT8 PciePllSsc;
+ UINT8 Rsvd0[2]; ///< Reserved bytes
+
+} PCH_PM_CONFIG;
+
+//
+// ---------------------------- DMI Config -----------------------------
+//
+
+///
+/// The PCH_DMI_CONFIG block describes the expected configuration of the PCH for DMI.
+///
+typedef struct {
+ /**
+ 0: Disable; <b>1: Enable</b> ASPM on PCH side of the DMI Link.
+ While DmiAspm is enabled, DMI ASPM will be set to Intel recommended value.
+ **/
+ UINT32 DmiAspm : 1;
+ UINT32 PwrOptEnable : 1; ///< <b>0: Disable</b>; 1: Enable DMI Power Optimizer on PCH side.
+ BOOLEAN DmiStopAndScreamEnable : 1;
+ UINT32 DmiLinkDownHangBypass : 1;
+ UINT32 Rsvdbits : 29;
+ UINT32 Rsvd0[6]; ///< Reserved bytes
+} PCH_DMI_CONFIG;
+
+//
+// --------------------------- Serial IRQ Config ------------------------------
+//
+
+typedef enum {
+ PchQuietMode,
+ PchContinuousMode
+} PCH_SIRQ_MODE;
+///
+/// Refer to PCH EDS for the details of Start Frame Pulse Width in Continuous and Quiet mode
+///
+typedef enum {
+ PchSfpw4Clk,
+ PchSfpw6Clk,
+ PchSfpw8Clk
+} PCH_START_FRAME_PULSE;
+
+///
+/// The PCH_LPC_SIRQ_CONFIG block describes the expected configuration of the PCH for Serial IRQ.
+///
+typedef struct {
+ UINT32 SirqEnable : 1; ///< Determines if enable Serial IRQ. 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 31; ///< Reserved bits
+ PCH_SIRQ_MODE SirqMode; ///< Serial IRQ Mode Select. <b>0: quiet mode</b> 1: continuous mode.
+ PCH_START_FRAME_PULSE StartFramePulse; ///< Start Frame Pulse Width. Default is <b>PchSfpw4Clk</b>.
+ UINT32 Rsvd0; ///< Reserved bytes
+} PCH_LPC_SIRQ_CONFIG;
+
+
+//
+// --------------------------- Port 61h Emulation in SMM ------------------------------
+//
+/**
+ This structure is used for the emulation feature for Port61h read. The port is trapped
+ and the SMI handler will toggle bit4 according to the handler's internal state.
+**/
+typedef struct {
+ UINT32 Enable : 1; ///< 0: Disable; <b>1: Enable</b> the emulation
+ UINT32 RsvdBits0 : 31; ///< Reserved bits
+} PCH_PORT61H_SMM_CONFIG;
+
+//
+// --------------------- Interrupts Config ------------------------------
+//
+typedef enum {
+ PchNoInt, ///< No Interrupt Pin
+ PchIntA,
+ PchIntB,
+ PchIntC,
+ PchIntD
+} PCH_INT_PIN;
+
+///
+/// The PCH_DEVICE_INTERRUPT_CONFIG block describes interrupt pin, IRQ and interrupt mode for PCH device.
+///
+typedef struct {
+ UINT8 Device; ///< Device number
+ UINT8 Function; ///< Device function
+ UINT8 IntX; ///< Interrupt pin: INTA-INTD (see PCH_INT_PIN)
+ UINT8 Irq; ///< IRQ to be set for device.
+} PCH_DEVICE_INTERRUPT_CONFIG;
+
+#define PCH_MAX_DEVICE_INTERRUPT_CONFIG 64 ///< Number of all PCH devices
+#define PCH_MAX_PXRC_CONFIG 8 ///< Number of PXRC registers in ITSS
+
+///
+/// The PCH_INTERRUPT_CONFIG block describes interrupt settings for PCH.
+///
+typedef struct {
+ UINT8 NumOfDevIntConfig; ///< Number of entries in DevIntConfig table
+ 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]; ///< Array which stores interrupt routing for 8259 controller
+ UINT8 GpioIrqRoute; ///< Interrupt routing for GPIO. Default is <b>14</b>.
+ UINT8 SciIrqSelect; ///< Interrupt select for SCI. Default is <b>9</b>.
+ UINT8 TcoIrqSelect; ///< Interrupt select for TCO. Default is <b>9</b>.
+ UINT8 TcoIrqEnable; ///< Enable IRQ generation for TCO. <b>0: Disable</b>; 1: Enable.
+ UINT8 ShutdownPolicySelect; ///< Shutdown mode 0: PCH will drive INIT#; 1: PCH will drive PLTRST# active
+} PCH_INTERRUPT_CONFIG;
+
+//
+// --------------------- TraceHub Config ------------------------------
+//
+///
+/// The PCH_TRACE_HUB_CONFIG block describes TraceHub settings for PCH.
+///
+typedef struct {
+ TRACE_HUB_CONFIG TraceHub;
+ UINT32 AetEnableMode : 2;
+ UINT32 PchTraceHubHide : 1;
+} PCH_TRACE_HUB_CONFIG;
+
+
+//
+// ------------------- CIO2 FLIS registers Config --------------------
+//
+
+///
+/// The PCH_SKYCAM_CIO2_FLS_CONFIG block describes SkyCam CIO2 FLS registers configuration.
+///
+typedef struct {
+ UINT32 PortATrimEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port A Clk Trim
+ UINT32 PortBTrimEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port B Clk Trim
+ UINT32 PortCTrimEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port C Clk Trim
+ UINT32 PortDTrimEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port D Clk Trim
+ UINT32 PortACtleEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port A Ctle
+ UINT32 PortBCtleEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port B Ctle
+ UINT32 PortCDCtleEnable : 1; ///< <b>0: Disable</b>; 1: Enable - Enable Port C/D Ctle
+ UINT32 RsvdBits0 : 25;
+
+ UINT32 PortACtleCapValue : 4; /// Port A Ctle Cap Value
+ UINT32 PortBCtleCapValue : 4; /// Port B Ctle Cap Value
+ UINT32 PortCDCtleCapValue : 4; /// Port C/D Ctle Cap Value
+ UINT32 PortACtleResValue : 5; /// Port A Ctle Res Value
+ UINT32 PortBCtleResValue : 5; /// Port B Ctle Res Value
+ UINT32 PortCDCtleResValue : 5; /// Port C/D Ctle Res Value
+ UINT32 RsvdBits1 : 5;
+
+ UINT32 PortAClkTrimValue : 4; /// Port A Clk Trim Value
+ UINT32 PortBClkTrimValue : 4; /// Port B Clk Trim Value
+ UINT32 PortCClkTrimValue : 4; /// Port C Clk Trim Value
+ UINT32 PortDClkTrimValue : 4; /// Port D Clk Trim Value
+ UINT32 PortADataTrimValue : 16; /// Port A Data Trim Value
+
+ UINT32 PortBDataTrimValue : 16; /// Port B Data Trim Value
+ UINT32 PortCDDataTrimValue : 16; /// Port C/D Data Trim Value
+
+} PCH_SKYCAM_CIO2_FLS_CONFIG;
+//
+// ---------------------------- USB Config -----------------------------
+//
+
+///
+/// The location of the USB connectors. This information is use to decide eye diagram tuning value for Usb 2.0 motherboard trace.
+///
+enum PCH_USB_PORT_LOCATION{
+ PchUsbPortLocationBackPanel = 0,
+ PchUsbPortLocationFrontPanel,
+ PchUsbPortLocationDock,
+ PchUsbPortLocationMiniPciE,
+ PchUsbPortLocationFlex,
+ PchUsbPortLocationInternalTopology,
+ PchUsbPortLocationSkip,
+ PchUsbPortLocationMax
+};
+
+/**
+ This structure configures per USB2 port physical settings.
+ It allows to setup the port location and port length, and configures the port strength accordingly.
+**/
+typedef struct {
+ UINT32 Enable : 1; ///< 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 31; ///< Reserved bits
+ /**
+ These members describe the specific over current pin number of USB 2.0 Port N.
+ It is SW's responsibility to ensure that a given port's bit map is set only for
+ one OC pin Description. USB2 and USB3 on the same combo Port must use the same
+ OC pin (see: USB_OVERCURRENT_PIN).
+ **/
+ UINT8 OverCurrentPin;
+ UINT8 Rsvd0[3]; ///< Reserved bytes, align to multiple 4.
+ USB2_PHY_PARAMETERS Afe; ///< USB2 AFE settings
+ UINT32 Rsvd1[1]; ///< Reserved bytes
+} PCH_USB20_PORT_CONFIG;
+
+/**
+ This structure describes whether the USB3 Port N of PCH is enabled by platform modules.
+**/
+typedef struct {
+ UINT32 Enable : 1; ///< 0: Disable; <b>1: Enable</b>.
+ UINT32 RsvdBits0 : 31; ///< Reserved bits
+ /**
+ These members describe the specific over current pin number of USB 3.0 Port N.
+ It is SW's responsibility to ensure that a given port's bit map is set only for
+ one OC pin Description. USB2 and USB3 on the same combo Port must use the same
+ OC pin (see: USB_OVERCURRENT_PIN).
+ **/
+ UINT8 OverCurrentPin;
+ UINT8 Rsvd0[3]; ///< Reserved bytes, align to multiple 4
+
+ UINT32 HsioTxDeEmphEnable : 1; ///< Enable the write to USB 3.0 TX Output -3.5dB De-Emphasis Adjustment, <b>0: Disable</b>; 1: Enable.
+ /**
+ USB 3.0 TX Output -3.5dB De-Emphasis Adjustment Setting (ow2tapgen2deemph3p5)
+ HSIO_TX_DWORD5[21:16]
+ <b>Default = 29h</b> (approximately -3.5dB De-Emphasis)
+ **/
+ UINT32 HsioTxDeEmph : 6;
+
+ UINT32 HsioTxDownscaleAmpEnable : 1; ///< Enable the write to USB 3.0 TX Output Downscale Amplitude Adjustment, <b>0: Disable</b>; 1: Enable.
+ /**
+ USB 3.0 TX Output Downscale Amplitude Adjustment (orate01margin)
+ HSIO_TX_DWORD8[21:16]
+ <b>Default = 00h</b>
+ **/
+ UINT32 HsioTxDownscaleAmp : 6;
+
+ UINT32 RsvdBits1 : 18; ///< Reserved bits
+ UINT32 Rsvd1[1]; ///< Reserved bytes
+} PCH_USB30_PORT_CONFIG;
+
+#define PCH_XHCI_MODE_OFF 0
+#define PCH_XHCI_MODE_ON 1
+
+/**
+ These members describe some settings which are related to the SSIC ports.
+**/
+typedef struct {
+ /**
+ 0: Disable; <b>1: Enable</b> SSIC support.
+ **/
+ UINT32 Enable : 1;
+ UINT32 RsvdBits1 : 31;
+} PCH_XHCI_SSIC_PORT;
+/**
+ These members describe some settings which are related to the SSIC ports.
+**/
+typedef struct {
+ PCH_XHCI_SSIC_PORT SsicPort[PCH_XHCI_MAX_SSIC_PORT_COUNT];
+} PCH_SSIC_CONFIG;
+
+/**
+ The PCH_XDCI_CONFIG block describes the configurations
+ of the xDCI Usb Device controller.
+**/
+typedef struct {
+ /**
+ This member describes whether or not the xDCI controller should be enabled.
+ 0: Disable; <b>1: Enable</b>.
+ **/
+ UINT32 Enable : 1;
+ UINT32 RsvdBits0 : 31; ///< Reserved bits
+} PCH_XDCI_CONFIG;
+
+/**
+ This member describes the expected configuration of the PCH USB controllers,
+ Platform modules may need to refer Setup options, schematic, BIOS specification
+ to update this field.
+ The Usb20OverCurrentPins and Usb30OverCurrentPins field must be updated by referring
+ the schematic.
+**/
+typedef struct {
+ /**
+ This feature intends to reduce the necessary initialization time for USB HC
+ and devices on root ports. It is assembled by PCHInit drivers in PEI and DXE phase.
+ In PEI phase, the feature resets all USB HCs on PCH bus, including Intel EHCI
+ and XHCI. After reset USB HC, continue the system initialization without waiting
+ for the USB XHC reset ready. After running to DXE phase, the feature resets
+ those USB devices installed on each USB HC root port in parallel, including
+ any non USB3 speed devices on XHCI root port if XHCI is enabled.
+ For USB3 protocol root port, USB3 speed devices will be advanced to
+ enable state if link training succeeds after XHC reset.
+
+ UsbPrecondition = Enable , Force USB Init happen in PEI as part of 2Sec Fast Boot bios optimization.
+ UsbPrecondition = Disable, USB Init happen in DXE just like traditionally where it happen.
+ Remark: With Precondition Enabled some USB2 devices which are not compliant with usb2 specification
+ are not being detected if installed in the system during S4/S5.
+
+
+ <b>0: Disable</b>; 1: Enable.
+ **/
+ UINT32 UsbPrecondition : 1;
+ /**
+ This policy will disable XHCI compliance mode on all ports. Complicance Mode should be default enabled.
+ For the platform that support USB Type-C, it can disable Compliance Mode, and enable Compliance Mode when testing.
+ <b>0:Disable</b> , 1: Enable
+ **/
+ UINT32 DisableComplianceMode : 1;
+ // Following option is now exposed since there are no restricted registers used.
+ UINT32 XhciOcMapEnabled : 1; ///< 0: To disable OC mapping for USB XHCI ports 1: Set Xhci OC registers, Set Xhci OCCDone bit, XHCI Access Control Bit.
+ UINT32 XhciWakeOnUsb : 1; ///< 0: To disable Wake on USB connect/Disconnect 1: Enables Wake on USB connect/disconnect event.
+ UINT32 XhciDisMSICapability : 1;
+ UINT32 RsvdBits0 : 27; ///< Reserved bits
+
+ /**
+ These members describe whether the USB2 Port N of PCH is enabled by platform modules.
+ Panel and Dock are used to describe the layout of USB port. Panel is only available for Desktop PCH.
+ Dock is only available for Mobile LPT.
+ **/
+ PCH_USB20_PORT_CONFIG PortUsb20[PCH_MAX_USB2_PORTS];
+ /**
+ These members describe whether the USB3 Port N of PCH is enabled by platform modules.
+ **/
+ PCH_USB30_PORT_CONFIG PortUsb30[PCH_MAX_USB3_PORTS];
+ /**
+ This member describes whether or not the xDCI controller should be enabled.
+ **/
+ PCH_XDCI_CONFIG XdciConfig;
+ /**
+ These members describe some settings which are related to the SSIC ports.
+ **/
+ PCH_SSIC_CONFIG SsicConfig;
+
+ UINT32 Rsvd0[6]; ///< Reserved bytes
+} PCH_USB_CONFIG;
+
+//
+// --------------------------- Flash Protection Range Registers ------------------------------
+//
+/**
+ The PCH provides a method for blocking writes and reads to specific ranges
+ in the SPI flash when the Protected Ranges are enabled.
+ PROTECTED_RANGE is used to specify if flash protection are enabled,
+ the write protection enable bit and the read protection enable bit,
+ and to specify the upper limit and lower base for each register
+ Platform code is responsible to get the range base by PchGetSpiRegionAddresses routine,
+ and set the limit and base accordingly.
+**/
+typedef struct {
+ UINT32 WriteProtectionEnable : 1; ///< Write or erase is blocked by hardware. <b>0: Disable</b>; 1: Enable.
+ UINT32 ReadProtectionEnable : 1; ///< Read is blocked by hardware. <b>0: Disable</b>; 1: Enable.
+ UINT32 RsvdBits : 30; ///< Reserved
+ /**
+ The address of the upper limit of protection
+ This is a left shifted address by 12 bits with address bits 11:0 are assumed to be FFFh for limit comparison
+ **/
+ UINT16 ProtectedRangeLimit;
+ /**
+ The address of the upper limit of protection
+ This is a left shifted address by 12 bits with address bits 11:0 are assumed to be 0
+ **/
+ UINT16 ProtectedRangeBase;
+} PROTECTED_RANGE;
+
+typedef struct {
+ PROTECTED_RANGE ProtectRange[PCH_FLASH_PROTECTED_RANGES];
+} PCH_FLASH_PROTECTION_CONFIG;
+
+//
+// --------------------- WatchDog (WDT) Configuration ------------------------------
+//
+/**
+ This policy clears status bits and disable watchdog, then lock the
+ WDT registers.
+ while WDT is designed to be disabled and locked by Policy,
+ bios should not enable WDT by WDT PPI. In such case, bios shows the
+ warning message but not disable and lock WDT register to make sure
+ WDT event trigger correctly.
+**/
+typedef struct {
+ UINT32 DisableAndLock : 1; ///< <b>(Test)</b> Set 1 to clear WDT status, then disable and lock WDT registers. <b>0: Disable</b>; 1: Enable.
+ UINT32 RsvdBits : 31;
+} PCH_WDT_CONFIG;
+
+//
+// --------------------- P2SB Configuration ------------------------------
+//
+/**
+ This structure contains the policies which are related to P2SB device.
+**/
+typedef struct {
+ /**
+ <b>(Test)</b>
+ This unlock the SBI lock bit to allow SBI after post time. <b>0: Disable</b>; 1: Enable.
+ NOTE: Do not set this policy "SbiUnlock" unless necessary.
+ **/
+ UINT32 SbiUnlock : 1;
+ /**
+ <b>(Test)</b>
+ The PSF registers will be locked before 3rd party code execution.
+ This policy unlock the PSF space. <b>0: Disable</b>; 1: Enable.
+ NOTE: Do not set this policy "PsfUnlock" unless necessary.
+ **/
+ UINT32 PsfUnlock : 1;
+ /**
+ <b>Debug</b>
+ The P2SB PCIe device will be hidden at end of PEI stage.
+ This policy reveal P2SB PCIe device at end of EXE. <b>0: Disable (hidden)</b>; 1: Enable (visible).
+ NOTE: Do not set this policy "P2SbReveal" unless necessary.
+ **/
+ UINT32 P2SbReveal : 1;
+ UINT32 RsvdBits : 29;
+} PCH_P2SB_CONFIG;
+
+//
+// --------------------- DCI Configuration ------------------------------
+//
+/**
+ This structure contains the policies which are related to Direct Connection Interface (DCI).
+**/
+typedef struct {
+ /**
+ <b>(Test)</b> DCI enable (HDCIEN bit)
+ when Enabled, allow DCI to be enabled. When Disabled, the Host control is not enabling DCI feature.
+ BIOS provides policy to enable or disable DCI, and user would be able to use BIOS option to change this policy.
+ The user changing the setting from disable to enable, is taken as a consent from the user to enable this DCI feature.
+ <b>0:Disabled</b>; 1:Enabled
+ **/
+ UINT32 DciEn : 1;
+ /**
+ <b>(Test)</b> When set to Auto detect mode, it detects DCI being connected during BIOS post time and enable DCI.
+ Else it disable DCI. This policy only apply when DciEn is disabled.
+ NOTE: this policy should not be visible to end customer.
+ 0: Disable AUTO mode, <b>1: Enable AUTO mode</b>
+ **/
+ UINT32 DciAutoDetect : 1;
+ UINT32 RsvdBits : 30; ///< Reserved bits
+} PCH_DCI_CONFIG;
+
+//
+// --------------------- LPC Configuration ------------------------------
+//
+/**
+ This structure contains the policies which are related to LPC.
+**/
+typedef struct {
+ /**
+ Enhance the port 8xh decoding.
+ Original LPC only decodes one byte of port 80h, with this enhancement LPC can decode word or dword of port 80h-83h.
+ @note: this will occupy one LPC generic IO range register. While this is enabled, read from port 80h always return 0x00.
+ 0: Disable, <b>1: Enable</b>
+ **/
+ UINT32 EnhancePort8xhDecoding : 1;
+ UINT32 RsvdBits : 30; ///< Reserved bits
+} PCH_LPC_CONFIG;
+
+//
+// --------------------- SPI Configuration ------------------------------
+//
+/**
+ This structure contains the policies which are related to SPI.
+**/
+typedef struct {
+ /**
+ Force to show SPI controller.
+ <b>0: FALSE</b>, 1: TRUE
+ NOTE: For Windows OS, it MUST BE false. It's optional for other OSs.
+ **/
+ UINT32 ShowSpiController : 1;
+ UINT32 RsvdBits : 31; ///< Reserved bits
+} PCH_SPI_CONFIG;
+
+//
+// ---------------------------------------------------------------------
+//
+
+/**
+ PCH Policy revision number
+ Any backwards compatible changes to this structure will result in an update in the revision number
+**/
+#define PCH_POLICY_REVISION 15
+
+/**
+ The PCH Policy allows the platform code to publish a set of
+ configuration information that the PCH drivers will use to configure the PCH hardware.
+ The Revision field is used to accommodate backward compatible changes to the PPI/protocol.
+ The Revision should be initialized to PCH_POLICY_REVISION_X
+ by the PPI producer.
+ The BusNumber field is used for platform to assign Bus number with multiple instances.
+
+ All reserved/unused fields must be initialized with zeros.
+**/
+struct _PCH_POLICY {
+ /**
+ This member specifies the revision of the PCH policy PPI. This field is used to
+ indicate backwards compatible changes to the protocol. Platform code that produces
+ this PPI must fill with the correct revision value for the PCH reference code
+ to correctly interpret the content of the PPI fields.
+
+ Revision 1: Original version
+ - Add DciAutoDetect policy in PCH_GENERAL_CONFIG.
+ - Add SbiUnlock policy in PCH_P2SB_CONFIG.
+ - Add the following policies in PCH_ISH_CONFIG:
+ - SpiGpioAssign
+ - Uart0GpioAssign
+ - Uart1GpioAssign
+ - I2c0GpioAssign
+ - I2c1GpioAssign
+ - I2c2GpioAssign
+ - Gp0GpioAssign
+ - Gp1GpioAssign
+ - Gp2GpioAssign
+ - Gp3GpioAssign
+ - Gp4GpioAssign
+ - Gp5GpioAssign
+ - Gp6GpioAssign
+ - Gp7GpioAssign
+ - Add ClkReqSupported and ClkReqDetect in PCH_PCIE_ROOT_PORT_CONFIG.
+ - Add the following in PCH_SKYCAM_CIO2_CONFIG
+ - SkyCamPortATermOvrEnable
+ - SkyCamPortBTermOvrEnable
+ - SkyCamPortCTermOvrEnable
+ - SkyCamPortDTermOvrEnable
+ - Add UartHwFlowCtrl in PCH_SERIAL_IO
+ - Move DciEn and DciAutoDetect to PCH_DCI_CONFIG
+
+
+
+ Revision 2: Updated version
+ - Add Enable policy in PCH_SSIC_CONFIG
+ - Deprecated Target Debugger option of EnableMode in PCH_TRACE_HUB_CONFIG
+ - Deprecated the following policies in PCH_TRACE_HUB_CONFIG
+ - MemReg0WrapEnable
+ - MemReg1WrapEnable
+ - TraceDestination
+ - PtiMode
+ - PtiSpeed
+ - PtiTraining
+ - Deprecated the Usb3PinsTermination and ManualModeUsb30PerPinEnable in PCH_XHCI_CONFIG
+ - Redefine the Enable policy in PCH_HPET_CONFIG
+ - Add EnhancePort8xhDecoding in PCH_LPC_CONFIG
+ - Add PsfUnlock in PCH_P2SB_CONFIG
+ - Add AllowNoLtrIccPllShutdown in PCH_PCIE_CONFIG
+ - Add PdtUnlock in PCH_ISH_CONFIG
+ - Remove PwrmBase from policy since the base address is predefined.
+ - Add DspEndpointDmic, DspEndpointBluetooth, DspEndpointI2s in PCH_HDAUDIO_CONFIG
+ - Add Gen3EqPh3Method abd EqPh3LaneParam in PCH_PCIE_ROOT_PORT_CONFIG/PCH_PCIE_CONFIG
+ - Remove SlotImplemented and PmeInterrupt from PCH_PCIE_ROOT_PORT_CONFIG
+
+
+
+ Revision 3: Updated version
+ - Add PwrBtnOverridePeriod policy in PCH_PM_CONFIG
+ - Add USB20_AFE in PCH_USB20_PORT_CONFIG
+ - Add ClkReqSupported in PCH_LAN_CONFIG
+
+
+
+ Revision 4: Updated version
+ - Add DeviceResetPad and DeviceResetPadActiveHigh in PCH_PCIE_ROOT_PORT_CONFIG
+
+
+ Revision 5: Updated version
+ - Deprecated ScsSdioMode in PCH_SCS_CONFIG
+ - Deprecated PchScsSdioMode (PCH_SCS_DEV_SD_MODE enum) for ScsSdSwitch in PCH_SCS_CONFIG
+ - Add HSIO RX and TX EQ policy for PCIe and SATA
+ - Add ComplianceTestMode in PCH_PCIE_CONFIG
+
+ Revision 6: Updated version
+ - Add DisableEnergyReport in PCH_PM_CONFIG
+
+
+ Revision 7: Updated version
+ - Deprecated Enabled as Acpi device option of DeviceEnable in PCH_SKYCAM_CIO2_CONFIG
+ - Add PCH_SKYCAM_CIO2_FLS_CONFIG with the following elements:
+ - PortACtleEnable
+ - PortBCtleEnable
+ - PortCCtleEnable
+ - PortDCtleEnable
+ - PortACtleCapValue
+ - PortBCtleCapValue
+ - PortCCtleCapValue
+ - PortDCtleCapValue
+ - PortACtleResValue
+ - PortBCtleResValue
+ - PortCCtleResValue
+ - PortDCtleResValue
+ - PortATrimEnable
+ - PortBTrimEnable
+ - PortCTrimEnable
+ - PortDTrimEnable
+ - PortADataTrimValue
+ - PortBDataTrimValue
+ - PortCDataTrimValue
+ - PortDDataTrimValue
+ - PortAClkTrimValue
+ - PortBClkTrimValue
+ - PortCClkTrimValue
+ - PortDClkTrimValue
+ - Rename and reorder the policies for better understanding.
+ - HsioTxOutDownscaleAmpAd3GbsEnable to HsioTxGen1DownscaleAmpEnable
+ - HsioTxOutDownscaleAmpAd6GbsEnable to HsioTxGen2DownscaleAmpEnable
+ - HsioTxOutDownscaleAmpAd3Gbs to HsioTxGen2DownscaleAmp
+ - HsioTxOutDownscaleAmpAd6Gbs to HsioTxGen2DownscaleAmp
+ - Update SerialIo DevMode default to PCI mode.
+
+
+ Revision 8: Updated version
+ - Deprecate GP27WakeFromDeepSx and add LanWakeFromDeepSx to align EDS naming
+ - Add ShowSpiController policy and PCH_SPI_CONFIG.
+ - Add DspUaaCompliance in PCH_HDAUDIO_CONFIG
+ - Add PchPcieEqHardware support in PCH_PCIE_EQ_METHOD
+
+
+ Revision 9: Updated version
+ - Add DebugUartNumber and EnableDebugUartAfterPost in PCH_SERIAL_IO_CONFIG
+ - Add DetectTimeoutMs in PCH_PCIE_CONFIG
+ - Add PciePllSsc in PCH_PM_CONFIG
+
+
+ Revision 10: Updated version
+ - Add HsioTxDeEmph in PCH_USB30_PORT_CONFIG
+ - Add HsioTxDownscaleAmp in PCH_USB30_PORT_CONFIG
+ - Add HsioTxDeEmphEnable in PCH_USB30_PORT_CONFIG
+ - Add HsioTxDownscaleAmpEnable in PCH_USB30_PORT_CONFIG
+
+ - Deprecated PCH_SATA_PORT_CONFIG.HsioRxEqBoostMagAdEnable
+ - Deprecated PCH_SATA_PORT_CONFIG.HsioRxEqBoostMagAd
+ - Deprecated PCH_SATA_PORT_CONFIG.HsioTxGen1DownscaleAmpEnable
+ - Deprecated PCH_SATA_PORT_CONFIG.HsioTxGen1DownscaleAmp
+ - Deprecated PCH_SATA_PORT_CONFIG.HsioTxGen2DownscaleAmpEnable
+ - Deprecated PCH_SATA_PORT_CONFIG.HsioTxGen2DownscaleAmp
+
+ - Add PCH_HSIO_SATA_CONFIG HsioSataConfig in PCH_POLICY
+ - Add HsioRxGen1EqBoostMagEnable in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioRxGen1EqBoostMag in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioRxGen2EqBoostMagEnable in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioRxGen2EqBoostMag in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen1DeEmphEnable in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen1DeEmph in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen2DeEmphEnable in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen2DeEmph in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen3DeEmphEnable in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen3DeEmph in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen3DownscaleAmpEnable in PCH_HSIO_SATA_PORT_LANE
+ - Add HsioTxGen3DownscaleAmp in PCH_HSIO_SATA_PORT_LANE
+
+ - Add PCH_HSIO_PCIE_CONFIG HsioPcieConfig in PCH_POLICY
+ - Deprecated PCH_PCIE_ROOT_PORT_CONFIG.HsioRxSetCtleEnable
+ - Deprecated PCH_PCIE_ROOT_PORT_CONFIG.HsioRxSetCtle
+ - Add HsioRxSetCtleEnable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioRxSetCtle in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen1DownscaleAmpEnable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen1DownscaleAmp in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen2DownscaleAmpEnable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen2DownscaleAmp in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen3DownscaleAmpEnable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen3DownscaleAmp in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen1DeEmphEnable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen1DeEmph in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen2DeEmph3p5Enable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen2DeEmph3p5 in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen2DeEmph6p0Enable in PCH_HSIO_PCIE_LANE_CONFIG
+ - Add HsioTxGen2DeEmph6p0 in PCH_HSIO_PCIE_LANE_CONFIG
+
+ - Add DisableDsxAcPresentPulldown in PCH_PM_CONFIG
+ - Add DynamicPowerGating in PCH_SMBUS_CONFIG
+ - Add ZpOdd in PCH_SATA_PORT_CONFIG
+ - Add Uptp and Dptp in PCH_PCIE_ROOT_PORT_CONFIG
+ - Add PCH_PCIE_CONFIG2 PcieConfig2 in PCH_POLICY
+
+
+ Revision 11: Updated version
+ - Add DisableComplianceMode in PCH_USB_CONFIG
+
+
+ Revision 12: Updated version
+ - Add PmcReadDisable in PCH_PM_CONFIG
+ - Add CapsuleResetType in PCH_PM_CONFIG
+ - Add RpFunctionSwap in PCH_PCIE_CONFIG
+
+
+ Revision 13: Update version
+ - Add DisableNativePowerButton in PCH_PM_CONFIG
+ - Add MaxPayload in PCH_PCIE_ROOT_PORT_CONFIG
+ - Add IDispCodecDisconnect in PCH_HDAUDIO_CONFIG
+ Revision 13a: Server updates
+ - Add HsioIcfgAdjLimitLoEnable
+ - Add HsioIcfgAdjLimitLo
+ - Add HsioSampOffstEvenErrSpEnable
+ - Add HsioSampOffstEvenErrSp
+ - Add HsioRemainingSamplerOffEnable
+ - Add HsioRemainingSamplerOff
+ - Add HsioVgaGainCal
+ in PCH_HSIO_PCIE_LANE_CONFIG
+
+ **/
+ UINT8 Revision;
+
+ UINT8 Port80Route; ///< Control where the Port 80h cycles are sent, <b>0: LPC</b>; 1: PCI.
+ UINT16 AcpiBase; ///< Power management I/O base address. Default is <b>0x1800</b>.
+ UINT32 Rsvd;
+ ///
+ /// PCH General configuration
+ ///
+ PCH_GENERAL_CONFIG PchConfig;
+ ///
+ /// This member describes PCI Express controller's related configuration.
+ ///
+ PCH_PCIE_CONFIG PcieConfig;
+ /**
+ SATA controller's related configuration.
+ SATA configuration that decides which Mode the SATA controller should operate in
+ and whether PCH SATA TEST mode is enabled.
+ **/
+ PCH_SATA_CONFIG SataConfig;
+ ///
+ /// This member describes USB controller's related configuration.
+ ///
+ PCH_USB_CONFIG UsbConfig;
+ /**
+ This member describes IOAPIC related configuration.
+ Determines IO APIC ID and IO APIC Range.
+ **/
+ PCH_IOAPIC_CONFIG IoApicConfig;
+ ///
+ /// This member describes HPET related configuration.
+ ///
+ PCH_HPET_CONFIG HpetConfig;
+ ///
+ /// This member describes the Intel HD Audio (Azalia) related configuration.
+ ///
+ PCH_HDAUDIO_CONFIG HdAudioConfig;
+ ///
+ /// LAN controller settings
+ ///
+ PCH_LAN_CONFIG LanConfig;
+ ///
+ /// This member describes SMBus related configuration.
+ ///
+ PCH_SMBUS_CONFIG SmbusConfig;
+ ///
+ /// This member describes LockDown related configuration.
+ ///
+ PCH_LOCK_DOWN_CONFIG LockDownConfig;
+ ///
+ /// This member describes Thermal related configuration.
+ ///
+ PCH_THERMAL_CONFIG ThermalConfig;
+ ///
+ /// This member describes miscellaneous platform power management configurations.
+ ///
+ PCH_PM_CONFIG PmConfig;
+ ///
+ /// This member describes DMI related configuration.
+ ///
+ PCH_DMI_CONFIG DmiConfig;
+ ///
+ /// This member describes the expected configuration of the PCH for Serial IRQ.
+ ///
+ PCH_LPC_SIRQ_CONFIG SerialIrqConfig;
+ ///
+ /// This member describes interrupt settings for PCH.
+ ///
+ PCH_INTERRUPT_CONFIG PchInterruptConfig;
+ ///
+ /// This member describes TraceHub settings for PCH.
+ ///
+ PCH_TRACE_HUB_CONFIG PchTraceHubConfig;
+ ///
+ /// This member describes the enabling of emulation for port 61h
+ ///
+ PCH_PORT61H_SMM_CONFIG Port61hSmmConfig;
+ ///
+ /// This member describes the Flash Protection related configuration
+ ///
+ PCH_FLASH_PROTECTION_CONFIG FlashProtectConfig;
+ ///
+ /// This member describes the sSata related configuration
+ ///
+ PCH_SATA_CONFIG sSataConfig;
+ ///
+ /// This member contains WDT enable configuration.
+ ///
+ PCH_WDT_CONFIG WdtConfig;
+ ///
+ /// This member contains P2SB configuration.
+ ///
+ PCH_P2SB_CONFIG P2sbConfig;
+ ///
+ /// This member contains DCI configuration.
+ ///
+ PCH_DCI_CONFIG DciConfig;
+
+ ///
+ /// Platform specific common policies that used by several silicon components.
+ ///
+ ///
+ /// Temp Bus Number range available to be assigned to each root port and its downstream
+ /// devices for initialization of these devices before PCI Bus enumeration.
+ ///
+ UINT8 TempPciBusMin;
+ UINT8 TempPciBusMax;
+ ///
+ /// Temporary Memory Base Address for PCI devices to be used to initialize MMIO registers.
+ /// Minimum size is 2MB bytes
+ ///
+ UINT32 TempMemBaseAddr;
+ ///
+ /// This member contains LPC configuration.
+ ///
+ PCH_LPC_CONFIG LpcConfig;
+ ///
+ /// This member describes SkyCam CIO2 FLS registers configuration.
+ ///
+ PCH_SKYCAM_CIO2_FLS_CONFIG PchCio2FlsConfig;
+ ///
+ /// This member contains SPI configuration.
+ ///
+ PCH_SPI_CONFIG SpiConfig;
+ ///
+ /// This member describes HSIO settings for SATA controller
+ ///
+ PCH_HSIO_SATA_CONFIG HsioSataConfig;
+ ///
+ /// This member describes HSIO settings for second SATA controller
+ ///
+ PCH_HSIO_SATA_CONFIG HsiosSataConfig;
+ ///
+ /// This member describes HSIO settings for PCIe controller
+ ///
+ PCH_HSIO_PCIE_CONFIG HsioPcieConfig;
+ ///
+ /// This member describes HSIO settings for FIA WM20 PCIe
+ ///
+ PCH_HSIO_PCIE_WM20_CONFIG HsioPcieConfigFIAWM20;
+ ///
+ /// This is the extension of PCIE CONFIG
+ ///
+ PCH_PCIE_CONFIG2 PcieConfig2;
+
+ PCH_ADR_CONFIG AdrConfig;
+
+
+};
+
+#pragma pack (pop)
+
+#endif // _PCH_POLICY_COMMON_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h
new file mode 100644
index 0000000000..df9762365f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h
@@ -0,0 +1,82 @@
+/** @file
+ PCH preserved MMIO resource definitions.
+
+ @copyright
+ Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_PRESERVED_RESOURCES_H_
+#define _PCH_PRESERVED_RESOURCES_H_
+
+/**
+#ifdef SERVER_BIOS_FLAG
+ SKX map:
+#endif //SERVER_BIOS_FLAG
+ PCH preserved MMIO range, 24 MB, from 0xFD000000 to 0xFE7FFFFF
+
+ Detailed recommended static allocation
+ +-------------------------------------------------------------------------+
+ | Size | Start | End | Usage |
+ | 16 MB | 0xFD000000 | 0xFDFFFFFF | SBREG |
+ | 64 KB | 0xFE000000 | 0xFE00FFFF | PMC MBAR |
+ | 4 KB | 0xFE010000 | 0xFE010FFF | SPI BAR0 |
+ | 88 KB | 0xFE020000 | 0xFE035FFF | SerialIo BAR in ACPI mode |
+ | 24 KB | 0xFE036000 | 0xFE03BFFF | Unused |
+ | 4 KB | 0xFE03C000 | 0xFE03CFFF | Thermal Device in ACPI mode |
+ | 524 KB | 0xFE03D000 | 0xFE0BFFFF | Unused |
+ | 256 KB | 0xFE0C0000 | 0xFE0FFFFF | TraceHub FW BAR |
+ | 1 MB | 0xFE100000 | 0xFE1FFFFF | TraceHub MTB BAR |
+ | 2 MB | 0xFE200000 | 0xFE3FFFFF | TraceHub SW BAR |
+ | 64 KB | 0xFE400000 | 0xFE40FFFF | CIO2 MMIO BAR in ACPI mode |
+ | 2 MB - 64KB | 0xFE410000 | 0xFE5FFFFF | Unused |
+ | 2 MB | 0xFE600000 | 0xFE7FFFFF | Temp address |
+ +-------------------------------------------------------------------------+
+
+#ifdef SERVER_BIOS_FLAG
+ HSX map:
+ PCH preserved MMIO range, from 0xFC000000 to 0xFE7FFFFF
+
+ Detailed recommended static allocation
+ +-------------------------------------------------------------------------+
+ | Size | Start | End | Usage |
+ | 256 KB | 0xFC0C0000 | 0xFC0FFFFF | TraceHub FW BAR |
+ | 1 MB | 0xFC100000 | 0xFC1FFFFF | TraceHub MTB BAR |
+ | 2 MB | 0xFC200000 | 0xFC3FFFFF | TraceHub SW BAR |
+ | 16 MB | 0xFD000000 | 0xFDFFFFFF | SBREG |
+ | 64 KB | 0xFE000000 | 0xFE00FFFF | PMC MBAR |
+ | 4 KB | 0xFE010000 | 0xFE010FFF | SPI BAR0 |
+ | 88 KB | 0xFE020000 | 0xFE035FFF | SerialIo BAR in ACPI mode |
+ | 24 KB | 0xFE036000 | 0xFE03BFFF | Unused |
+ | 4 KB | 0xFE03C000 | 0xFE03CFFF | Thermal Device in ACPI mode |
+ | 524 KB | 0xFE03D000 | 0xFE0BFFFF | Unused |
+ | 64 KB | 0xFE400000 | 0xFE40FFFF | CIO2 MMIO BAR in ACPI mode |
+ | 2 MB - 64KB | 0xFE410000 | 0xFE5FFFFF | Unused |
+ | 2 MB | 0xFE600000 | 0xFE7FFFFF | Temp address |
+ +-------------------------------------------------------------------------+
+#endif //SERVER_BIOS_FLAG
+**/
+#define PCH_PRESERVED_BASE_ADDRESS 0xFD000000 ///< Pch preserved MMIO base address
+#define PCH_PRESERVED_MMIO_SIZE 0x01800000 ///< 24MB
+#define PCH_PCR_BASE_ADDRESS 0xFD000000 ///< SBREG MMIO base address
+#define PCH_PCR_MMIO_SIZE 0x01000000 ///< 16MB
+#define PCH_PWRM_BASE_ADDRESS 0xFE000000 ///< PMC MBAR MMIO base address
+#define PCH_PWRM_MMIO_SIZE 0x00010000 ///< 64KB
+#define PCH_SPI_BASE_ADDRESS 0xFE010000 ///< SPI BAR0 MMIO base address
+#define PCH_SPI_MMIO_SIZE 0x00001000 ///< 4KB
+#define PCH_THERMAL_BASE_ADDRESS 0xFE03C000 ///< Thermal Device in ACPI mode
+#define PCH_THERMAL_MMIO_SIZE 0x00001000 ///< 4KB
+
+#define PCH_TRACE_HUB_FW_BASE_ADDRESS 0xFE0C0000 ///< TraceHub FW MMIO base address
+#define PCH_TRACE_HUB_FW_MMIO_SIZE 0x00040000 ///< 256KB
+#define PCH_TRACE_HUB_MTB_BASE_ADDRESS 0xFE100000 ///< TraceHub MTB MMIO base address
+#define PCH_TRACE_HUB_MTB_MMIO_SIZE 0x00100000 ///< 1MB
+#define PCH_TRACE_HUB_SW_BASE_ADDRESS 0xFE200000 ///< TraceHub SW MMIO base address
+#define PCH_TRACE_HUB_SW_MMIO_SIZE 0x00200000 ///< 2MB
+#define PCH_CIO2_BASE_ADDRESS 0xFE400000 ///< CIO2 MMIO BAR in ACPI mode
+#define PCH_CIO2_MMIO_SIZE 0x00010000 ///< 64KB
+#define PCH_TEMP_BASE_ADDRESS 0xFE600000 ///< preserved temp address for misc usage
+#define PCH_TEMP_MMIO_SIZE 0x00200000 ///< 2MB
+
+#endif // _PCH_PRESERVED_RESOURCES_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h
new file mode 100644
index 0000000000..9ee146b941
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h
@@ -0,0 +1,288 @@
+/** @file
+ Register names for PCIE standard register
+ Conventions:
+ Prefixes:
+ Definitions beginning with "R_" are registers
+ Definitions beginning with "B_" are bits within registers
+ Definitions beginning with "V_" are meaningful values within the bits
+ Definitions beginning with "S_" are register sizes
+ Definitions beginning with "N_" are the bit position
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCIE_REGS_H_
+#define _PCIE_REGS_H_
+
+#include <IndustryStandard/Pci30.h>
+
+//
+// PCI type 0 Header
+//
+#define R_PCI_PI_OFFSET 0x09
+#define R_PCI_SCC_OFFSET 0x0A
+#define R_PCI_BCC_OFFSET 0x0B
+
+//
+// PCI type 1 Header
+//
+#define R_PCI_BRIDGE_BNUM 0x18 ///< Bus Number Register
+#define B_PCI_BRIDGE_BNUM_SBBN 0x00FF0000 ///< Subordinate Bus Number
+#define B_PCI_BRIDGE_BNUM_SCBN 0x0000FF00 ///< Secondary Bus Number
+#define B_PCI_BRIDGE_BNUM_PBN 0x000000FF ///< Primary Bus Number
+#define B_PCI_BRIDGE_BNUM_SBBN_SCBN (B_PCI_BRIDGE_BNUM_SBBN | B_PCI_BRIDGE_BNUM_SCBN)
+
+#define R_PCI_BRIDGE_IOBL 0x1C ///< I/O Base and Limit Register
+
+#define R_PCI_BRIDGE_MBL 0x20 ///< Memory Base and Limit Register
+#define B_PCI_BRIDGE_MBL_ML 0xFFF00000 ///< Memory Limit
+#define B_PCI_BRIDGE_MBL_MB 0x0000FFF0 ///< Memory Base
+
+#define R_PCI_BRIDGE_PMBL 0x24 ///< Prefetchable Memory Base and Limit Register
+#define B_PCI_BRIDGE_PMBL_PML 0xFFF00000 ///< Prefetchable Memory Limit
+#define B_PCI_BRIDGE_PMBL_I64L 0x000F0000 ///< 64-bit Indicator
+#define B_PCI_BRIDGE_PMBL_PMB 0x0000FFF0 ///< Prefetchable Memory Base
+#define B_PCI_BRIDGE_PMBL_I64B 0x0000000F ///< 64-bit Indicator
+
+#define R_PCI_BRIDGE_PMBU32 0x28 ///< Prefetchable Memory Base Upper 32-Bit Register
+#define B_PCI_BRIDGE_PMBU32 0xFFFFFFFF
+
+#define R_PCI_BRIDGE_PMLU32 0x2C ///< Prefetchable Memory Limit Upper 32-Bit Register
+#define B_PCI_BRIDGE_PMLU32 0xFFFFFFFF
+
+//
+// PCIE capabilities register
+//
+#define R_PCIE_CAP_ID_OFFSET 0x00 ///< Capability ID
+#define R_PCIE_CAP_NEXT_PRT_OFFSET 0x01 ///< Next Capability Capability ID Pointer
+
+//
+// PCI Express Capability List Register (CAPID:10h)
+//
+#define R_PCIE_XCAP_OFFSET 0x02 ///< PCI Express Capabilities Register (Offset 02h)
+#define S_PCIE_XCAP 2
+#define B_PCIE_XCAP_SI BIT8 ///< Slot Implemented
+#define B_PCIE_XCAP_DT (BIT7 | BIT6 | BIT5 | BIT4) ///< Device/Port Type
+#define N_PCIE_XCAP_DT 4
+
+#define R_PCIE_DCAP_OFFSET 0x04 ///< Device Capabilities Register (Offset 04h)
+#define S_PCIE_DCAP 4
+#define B_PCIE_DCAP_E1AL (BIT11 | BIT10 | BIT9) ///< Endpoint L1 Acceptable Latency
+#define N_PCIE_DCAP_E1AL 9
+#define B_PCIE_DCAP_E0AL (BIT8 | BIT7 | BIT6) ///< Endpoint L0s Acceptable Latency
+#define N_PCIE_DCAP_E0AL 6
+#define B_PCIE_DCAP_MPS (BIT2 | BIT1 | BIT0) ///< Max_Payload_Size Supported
+
+#define R_PCIE_DCTL_OFFSET 0x08 ///< Device Control Register (Offset 08h)
+#define B_PCIE_DCTL_MPS (BIT7 | BIT6 | BIT5) ///< Max_Payload_Size
+#define N_PCIE_DCTL_MPS 5
+#define B_PCIE_DCTL_URE BIT3 ///< Unsupported Request Reporting Enable
+#define B_PCIE_DCTL_FEE BIT2 ///< Fatal Error Reporting Enable
+#define B_PCIE_DCTL_NFE BIT1 ///< Non-Fatal Error Reporting Enable
+#define B_PCIE_DCTL_CEE BIT0 ///< Correctable Error Reporting Enable
+
+#define R_PCIE_DSTS_OFFSET 0x0A ///< Device Status Register (Offset 0Ah)
+#define B_PCIE_DSTS_TDP BIT5 ///< Transactions Pending
+#define B_PCIE_DSTS_APD BIT4 ///< AUX Power Detected
+#define B_PCIE_DSTS_URD BIT3 ///< Unsupported Request Detected
+#define B_PCIE_DSTS_FED BIT2 ///< Fatal Error Detected
+#define B_PCIE_DSTS_NFED BIT1 ///< Non-Fatal Error Detected
+#define B_PCIE_DSTS_CED BIT0 ///< Correctable Error Detected
+
+#define R_PCIE_LCAP_OFFSET 0x0C ///< Link Capabilities Register (Offset 0Ch)
+#define B_PCIE_LCAP_ASPMOC BIT22 ///< ASPM Optionality Compliance
+#define B_PCIE_LCAP_CPM BIT18 ///< Clock Power Management
+#define B_PCIE_LCAP_EL1 (BIT17 | BIT16 | BIT15) ///< L1 Exit Latency
+#define N_PCIE_LCAP_EL1 15
+#define B_PCIE_LCAP_EL0 (BIT14 | BIT13 | BIT12) ///< L0s Exit Latency
+#define N_PCIE_LCAP_EL0 12
+#define B_PCIE_LCAP_APMS (BIT11 | BIT10) ///< Active State Power Management (ASPM) Support
+#define B_PCIE_LCAP_APMS_L0S BIT10
+#define B_PCIE_LCAP_APMS_L1 BIT11
+#define N_PCIE_LCAP_APMS 10
+#define B_PCIE_LCAP_MLW 0x000003F0 ///< Maximum Link Width
+#define N_PCIE_LCAP_MLW 4
+#define B_PCIE_LCAP_MLS (BIT3 | BIT2 | BIT1 | BIT0) ///< Max Link Speed
+#define V_PCIE_LCAP_MLS_GEN3 3
+
+#define R_PCIE_LCTL_OFFSET 0x10 ///< Link Control Register (Offset 10h)
+#define B_PCIE_LCTL_ECPM BIT8 ///< Enable Clock Power Management
+#define B_PCIE_LCTL_ES BIT7 ///< Extended Synch
+#define B_PCIE_LCTL_CCC BIT6 ///< Common Clock Configuration
+#define B_PCIE_LCTL_RL BIT5 ///< Retrain Link
+#define B_PCIE_LCTL_LD BIT4 ///< Link Disable
+#define B_PCIE_LCTL_ASPM (BIT1 | BIT0) ///< Active State Power Management (ASPM) Control
+#define V_PCIE_LCTL_ASPM_L0S 1
+#define V_PCIE_LCTL_ASPM_L1 2
+#define V_PCIE_LCTL_ASPM_L0S_L1 3
+
+#define R_PCIE_LSTS_OFFSET 0x12 ///< Link Status Register (Offset 12h)
+#define B_PCIE_LSTS_LA BIT13 ///< Data Link Layer Link Active
+#define B_PCIE_LSTS_SCC BIT12 ///< Slot Clock Configuration
+#define B_PCIE_LSTS_LT BIT11 ///< Link Training
+#define B_PCIE_LSTS_NLW 0x03F0 ///< Negotiated Link Width
+#define N_PCIE_LSTS_NLW 4
+#define V_PCIE_LSTS_NLW_1 0x0010
+#define V_PCIE_LSTS_NLW_2 0x0020
+#define V_PCIE_LSTS_NLW_4 0x0040
+#define B_PCIE_LSTS_CLS 0x000F ///< Current Link Speed
+#define V_PCIE_LSTS_CLS_GEN1 1
+#define V_PCIE_LSTS_CLS_GEN2 2
+#define V_PCIE_LSTS_CLS_GEN3 3
+
+#define R_PCIE_SLCAP_OFFSET 0x14 ///< Slot Capabilities Register (Offset 14h)
+#define S_PCIE_SLCAP 4
+#define B_PCIE_SLCAP_PSN 0xFFF80000 ///< Physical Slot Number
+#define B_PCIE_SLCAP_SLS 0x00018000 ///< Slot Power Limit Scale
+#define B_PCIE_SLCAP_SLV 0x00007F80 ///< Slot Power Limit Value
+#define B_PCIE_SLCAP_HPC BIT6 ///< Hot-Plug Capable
+#define B_PCIE_SLCAP_HPS BIT5 ///< Hot-Plug Surprise
+
+#define R_PCIE_SLCTL_OFFSET 0x18 ///< Slot Control Register (Offset 18h)
+#define S_PCIE_SLCTL 2
+#define B_PCIE_SLCTL_HPE BIT5 ///< Hot Plug Interrupt Enable
+#define B_PCIE_SLCTL_PDE BIT3 ///< Presence Detect Changed Enable
+
+#define R_PCIE_SLSTS_OFFSET 0x1A ///< Slot Status Register (Offset 1Ah)
+#define S_PCIE_SLSTS 2
+#define B_PCIE_SLSTS_PDS BIT6 ///< Presence Detect State
+#define B_PCIE_SLSTS_PDC BIT3 ///< Presence Detect Changed
+
+#define R_PCIE_RCTL_OFFSET 0x1C ///< Root Control Register (Offset 1Ch)
+#define S_PCIE_RCTL 2
+#define B_PCIE_RCTL_PIE BIT3 ///< PME Interrupt Enable
+#define B_PCIE_RCTL_SFE BIT2 ///< System Error on Fatal Error Enable
+#define B_PCIE_RCTL_SNE BIT1 ///< System Error on Non-Fatal Error Enable
+#define B_PCIE_RCTL_SCE BIT0 ///< System Error on Correctable Error Enable
+
+#define R_PCIE_RSTS_OFFSET 0x20 ///< Root Status Register (Offset 20h)
+#define S_PCIE_RSTS 4
+
+#define R_PCIE_DCAP2_OFFSET 0x24 ///< Device Capabilities 2 Register (Offset 24h)
+#define B_PCIE_DCAP2_OBFFS (BIT19 | BIT18) ///< OBFF Supported
+#define B_PCIE_DCAP2_LTRMS BIT11 ///< LTR Mechanism Supported
+
+#define R_PCIE_DCTL2_OFFSET 0x28 ///< Device Control 2 Register (Offset 28h)
+#define B_PCIE_DCTL2_OBFFEN (BIT14 | BIT13) ///< OBFF Enable
+#define N_PCIE_DCTL2_OBFFEN 13
+#define V_PCIE_DCTL2_OBFFEN_DIS 0 ///< Disabled
+#define V_PCIE_DCTL2_OBFFEN_WAKE 3 ///< Enabled using WAKE# signaling
+#define B_PCIE_DCTL2_LTREN BIT10 ///< LTR Mechanism Enable
+#define B_PCIE_DCTL2_CTD BIT4 ///< Completion Timeout Disable
+#define B_PCIE_DCTL2_CTV (BIT3 | BIT2 | BIT1 | BIT0) ///< Completion Timeout Value
+#define V_PCIE_DCTL2_CTV_DEFAULT 0x0
+#define V_PCIE_DCTL2_CTV_40MS_50MS 0x5
+#define V_PCIE_DCTL2_CTV_160MS_170MS 0x6
+#define V_PCIE_DCTL2_CTV_400MS_500MS 0x9
+#define V_PCIE_DCTL2_CTV_1P6S_1P7S 0xA
+
+#define R_PCIE_LCTL2_OFFSET 0x30 ///< Link Control 2 Register (Offset 30h)
+#define B_PCIE_LCTL2_SD BIT6 ///< Selectable de-emphasis (0 = -6dB, 1 = -3.5dB)
+#define B_PCIE_LCTL2_TLS (BIT3 | BIT2 | BIT1 | BIT0) ///< Target Link Speed
+#define V_PCIE_LCTL2_TLS_GEN1 1
+#define V_PCIE_LCTL2_TLS_GEN2 2
+#define V_PCIE_LCTL2_TLS_GEN3 3
+
+#define R_PCIE_LSTS2_OFFSET 0x32 ///< Link Status 2 Register (Offset 32h)
+#define B_PCIE_LSTS2_LER BIT5 ///< Link Equalization Request
+#define B_PCIE_LSTS2_EQP3S BIT4 ///< Equalization Phase 3 Successful
+#define B_PCIE_LSTS2_EQP2S BIT3 ///< Equalization Phase 2 Successful
+#define B_PCIE_LSTS2_EQP1S BIT2 ///< Equalization Phase 1 Successful
+#define B_PCIE_LSTS2_EC BIT1 ///< Equalization Complete
+#define B_PCIE_LSTS2_CDL BIT0 ///< Current De-emphasis Level
+
+//
+// PCI Power Management Capability (CAPID:01h)
+//
+#define R_PCIE_PMC_OFFSET 0x02 ///< Power Management Capabilities Register
+#define S_PCIE_PMC 2
+#define B_PCIE_PMC_PMES (BIT15 | BIT14 | BIT13 | BIT12 | BIT11) ///< PME Support
+#define B_PCIE_PMC_PMEC BIT3 ///< PME Clock
+
+#define R_PCIE_PMCS_OFFST 0x04 ///< Power Management Status/Control Register
+#define S_PCIE_PMCS 4
+#define B_PCIE_PMCS_BPCE BIT23 ///< Bus Power/Clock Control Enable
+#define B_PCIE_PMCS_B23S BIT22 ///< B2/B3 Support
+#define B_PCIE_PMCS_PMES BIT15 ///< PME_Status
+#define B_PCIE_PMCS_PMEE BIT8 ///< PME Enable
+#define B_PCIE_PMCS_NSR BIT3 ///< No Soft Reset
+#define B_PCIE_PMCS_PS (BIT1 | BIT0) ///< Power State
+#define V_PCIE_PMCS_PS_D0 0
+#define V_PCIE_PMCS_PS_D3H 3
+
+//
+// PCIE Extension Capability Register
+//
+#define B_PCIE_EXCAP_NCO 0xFFF00000 ///< Next Capability Offset
+#define N_PCIE_EXCAP_NCO 20
+#define V_PCIE_EXCAP_NCO_LISTEND 0
+#define B_PCIE_EXCAP_CV 0x000F0000 ///< Capability Version
+#define N_PCIE_EXCAP_CV 16
+#define B_PCIE_EXCAP_CID 0x0000FFFF ///< Capability ID
+
+//
+// Advanced Error Reporting Capability (CAPID:0001h)
+//
+#define V_PCIE_EX_AEC_CID 0x0001 ///< Capability ID
+#define R_PCIE_EX_UEM_OFFSET 0x08 ///< Uncorrectable Error Mask Register
+#define B_PCIE_EX_UEM_CT BIT14 ///< Completion Timeout Mask
+#define B_PCIE_EX_UEM_UC BIT16 ///< Unexpected Completion
+
+//
+// ACS Extended Capability (CAPID:000Dh)
+//
+#define V_PCIE_EX_ACS_CID 0x000D ///< Capability ID
+#define R_PCIE_EX_ACSCAPR_OFFSET 0x04 ///< ACS Capability Register
+//#define R_PCIE_EX_ACSCTLR_OFFSET 0x08 ///< ACS Control Register (NOTE: register size in PCIE spce is not match the PCH register size)
+
+//
+// Secondary PCI Express Extended Capability Header (CAPID:0019h)
+//
+#define V_PCIE_EX_SPE_CID 0x0019 ///< Capability ID
+#define R_PCIE_EX_LCTL3_OFFSET 0x04 ///< Link Control 3 Register
+#define B_PCIE_EX_LCTL3_PE BIT0 ///< Perform Equalization
+#define R_PCIE_EX_LES_OFFSET 0x08 ///< Lane Error Status
+#define R_PCIE_EX_L01EC_OFFSET 0x0C ///< Lane 0 and Lan 1 Equalization Control Register (Offset 0Ch)
+#define B_PCIE_EX_L01EC_UPL1TP 0x0F000000 ///< Upstream Port Lane 1 Transmitter Preset
+#define N_PCIE_EX_L01EC_UPL1TP 24
+#define B_PCIE_EX_L01EC_DPL1TP 0x000F0000 ///< Downstream Port Lane 1 Transmitter Preset
+#define N_PCIE_EX_L01EC_DPL1TP 16
+#define B_PCIE_EX_L01EC_UPL0TP 0x00000F00 ///< Upstream Port Transmitter Preset
+#define N_PCIE_EX_L01EC_UPL0TP 8
+#define B_PCIE_EX_L01EC_DPL0TP 0x0000000F ///< Downstream Port Transmitter Preset
+#define N_PCIE_EX_L01EC_DPL0TP 0
+
+#define R_PCIE_EX_L23EC_OFFSET 0x10 ///< Lane 2 and Lane 3 Equalization Control Register (Offset 10h)
+#define B_PCIE_EX_L23EC_UPL3TP 0x0F000000 ///< Upstream Port Lane 3 Transmitter Preset
+#define N_PCIE_EX_L23EC_UPL3TP 24
+#define B_PCIE_EX_L23EC_DPL3TP 0x000F0000 ///< Downstream Port Lane 3 Transmitter Preset
+#define N_PCIE_EX_L23EC_DPL3TP 16
+#define B_PCIE_EX_L23EC_UPL2TP 0x00000F00 ///< Upstream Port Lane 2 Transmitter Preset
+#define N_PCIE_EX_L23EC_UPL2TP 8
+#define B_PCIE_EX_L23EC_DPL2TP 0x0000000F ///< Downstream Port Lane 2 Transmitter Preset
+#define N_PCIE_EX_L23EC_DPL2TP 0
+
+
+//
+// L1 Sub-States Extended Capability Register (CAPID:001Eh)
+//
+#define V_PCIE_EX_L1S_CID 0x001E ///< Capability ID
+#define R_PCIE_EX_L1SCAP_OFFSET 0x04 ///< L1 Sub-States Capabilities
+#define R_PCIE_EX_L1SCTL1_OFFSET 0x08 ///< L1 Sub-States Control 1
+#define R_PCIE_EX_L1SCTL2_OFFSET 0x0C ///< L1 Sub-States Control 2
+#define N_PCIE_EX_L1SCTL2_POWT 3
+
+//
+// Base Address Offset
+//
+#define R_BASE_ADDRESS_OFFSET_0 0x0010 ///< Base Address Register 0
+#define R_BASE_ADDRESS_OFFSET_1 0x0014 ///< Base Address Register 1
+#define R_BASE_ADDRESS_OFFSET_2 0x0018 ///< Base Address Register 2
+#define R_BASE_ADDRESS_OFFSET_3 0x001C ///< Base Address Register 3
+#define R_BASE_ADDRESS_OFFSET_4 0x0020 ///< Base Address Register 4
+#define R_BASE_ADDRESS_OFFSET_5 0x0024 ///< Base Address Register 5
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h
new file mode 100644
index 0000000000..d0ade33035
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h
@@ -0,0 +1,31 @@
+/** @file
+ PCH policy PPI produced by a platform driver specifying HSIO PTSS Table.
+ This PPI is consumed by the PCH PEI modules. This is deprecated.
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_HSIO_PTSS_TABLE_H_
+#define _PCH_HSIO_PTSS_TABLE_H_
+
+///
+/// HSIO PTSS table PPI GUID.
+///
+extern EFI_GUID gPchHsioPtssTablePpiGuid;
+
+///
+/// The PCH_SBI_PTSS_HSIO_TABLE block describes HSIO PTSS settings for PCH.
+///
+typedef struct {
+ UINT8 SbPortID;
+ UINT8 LaneNum;
+ UINT8 PhyMode;
+ UINT16 Offset;
+ UINT32 Value;
+ UINT32 BitMask;
+} PCH_SBI_PTSS_HSIO_TABLE;
+
+#endif // _PCH_HSIO_PTSS_TABLE_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h
new file mode 100644
index 0000000000..6766805f68
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h
@@ -0,0 +1,126 @@
+/** @file
+ PCH policy PPI produced by a platform driver specifying PCIe device overrides.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_PCIE_DEVICE_TABLE_H_
+#define _PCH_PCIE_DEVICE_TABLE_H_
+
+
+//
+// PCIe device table PPI GUID.
+//
+extern EFI_GUID gPchPcieDeviceTablePpiGuid;
+
+typedef enum {
+ PchPcieOverrideDisabled = 0,
+ PchPcieL1L2Override = 0x01,
+ PchPcieL1SubstatesOverride = 0x02,
+ PchPcieL1L2AndL1SubstatesOverride = 0x03,
+ PchPcieLtrOverride = 0x04
+} PCH_PCIE_OVERRIDE_CONFIG;
+
+/**
+ PCIe device table entry entry
+
+ The PCIe device table is being used to override PCIe device ASPM settings.
+ To take effect table consisting of such entries must be instelled as PPI
+ on gPchPcieDeviceTablePpiGuid.
+ Last entry VendorId must be 0.
+**/
+typedef struct {
+ UINT16 VendorId; ///< The vendor Id of Pci Express card ASPM setting override, 0xFFFF means any Vendor ID
+ UINT16 DeviceId; ///< The Device Id of Pci Express card ASPM setting override, 0xFFFF means any Device ID
+ UINT8 RevId; ///< The Rev Id of Pci Express card ASPM setting override, 0xFF means all steppings
+ UINT8 BaseClassCode; ///< The Base Class Code of Pci Express card ASPM setting override, 0xFF means all base class
+ UINT8 SubClassCode; ///< The Sub Class Code of Pci Express card ASPM setting override, 0xFF means all sub class
+ UINT8 EndPointAspm; ///< Override device ASPM (see: PCH_PCIE_ASPM_CONTROL)
+ ///< Bit 1 must be set in OverrideConfig for this field to take effect
+ UINT16 OverrideConfig; ///< The override config bitmap (see: PCH_PCIE_OVERRIDE_CONFIG).
+ /**
+ The L1Substates Capability Offset Override. (applicable if bit 2 is set in OverrideConfig)
+ This field can be zero if only the L1 Substate value is going to be override.
+ **/
+ UINT16 L1SubstatesCapOffset;
+ /**
+ L1 Substate Capability Mask. (applicable if bit 2 is set in OverrideConfig)
+ Set to zero then the L1 Substate Capability [3:0] is ignored, and only L1s values are override.
+ Only bit [3:0] are applicable. Other bits are ignored.
+ **/
+ UINT8 L1SubstatesCapMask;
+ /**
+ L1 Substate Port Common Mode Restore Time Override. (applicable if bit 2 is set in OverrideConfig)
+ L1sCommonModeRestoreTime and L1sTpowerOnScale can have a valid value of 0, but not the L1sTpowerOnValue.
+ If L1sTpowerOnValue is zero, all L1sCommonModeRestoreTime, L1sTpowerOnScale, and L1sTpowerOnValue are ignored,
+ and only L1SubstatesCapOffset is override.
+ **/
+ UINT8 L1sCommonModeRestoreTime;
+ /**
+ L1 Substate Port Tpower_on Scale Override. (applicable if bit 2 is set in OverrideConfig)
+ L1sCommonModeRestoreTime and L1sTpowerOnScale can have a valid value of 0, but not the L1sTpowerOnValue.
+ If L1sTpowerOnValue is zero, all L1sCommonModeRestoreTime, L1sTpowerOnScale, and L1sTpowerOnValue are ignored,
+ and only L1SubstatesCapOffset is override.
+ **/
+ UINT8 L1sTpowerOnScale;
+ /**
+ L1 Substate Port Tpower_on Value Override. (applicable if bit 2 is set in OverrideConfig)
+ L1sCommonModeRestoreTime and L1sTpowerOnScale can have a valid value of 0, but not the L1sTpowerOnValue.
+ If L1sTpowerOnValue is zero, all L1sCommonModeRestoreTime, L1sTpowerOnScale, and L1sTpowerOnValue are ignored,
+ and only L1SubstatesCapOffset is override.
+ **/
+ UINT8 L1sTpowerOnValue;
+
+ /**
+ SnoopLatency bit definition
+ Note: All Reserved bits must be set to 0
+
+ BIT[15] - When set to 1b, indicates that the values in bits 9:0 are valid
+ When clear values in bits 9:0 will be ignored
+ BITS[14:13] - Reserved
+ BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
+ 000b - 1 ns
+ 001b - 32 ns
+ 010b - 1024 ns
+ 011b - 32,768 ns
+ 100b - 1,048,576 ns
+ 101b - 33,554,432 ns
+ 110b - Reserved
+ 111b - Reserved
+ BITS[9:0] - Snoop Latency Value. The value in these bits will be multiplied with
+ the scale in bits 12:10
+
+ This field takes effect only if bit 3 is set in OverrideConfig.
+ **/
+ UINT16 SnoopLatency;
+ /**
+ NonSnoopLatency bit definition
+ Note: All Reserved bits must be set to 0
+
+ BIT[15] - When set to 1b, indicates that the values in bits 9:0 are valid
+ When clear values in bits 9:0 will be ignored
+ BITS[14:13] - Reserved
+ BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
+ 000b - 1 ns
+ 001b - 32 ns
+ 010b - 1024 ns
+ 011b - 32,768 ns
+ 100b - 1,048,576 ns
+ 101b - 33,554,432 ns
+ 110b - Reserved
+ 111b - Reserved
+ BITS[9:0] - Non Snoop Latency Value. The value in these bits will be multiplied with
+ the scale in bits 12:10
+
+ This field takes effect only if bit 3 is set in OverrideConfig.
+ **/
+ UINT16 NonSnoopLatency;
+
+ UINT32 Reserved;
+} PCH_PCIE_DEVICE_OVERRIDE;
+
+#endif // _PCH_PCIE_DEVICE_TABLE_H_
+
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h
new file mode 100644
index 0000000000..b75613a5c7
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h
@@ -0,0 +1,23 @@
+/** @file
+ PCH policy PPI produced by a platform driver specifying various
+ expected PCH settings. This PPI is consumed by the PCH PEI modules
+ and carried over to PCH DXE modules.
+
+ @copyright
+ Copyright 2009 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_POLICY_PPI_H_
+#define _PCH_POLICY_PPI_H_
+
+#include <PchAccess.h>
+#include <PchPolicyCommon.h>
+
+extern EFI_GUID gPchPlatformPolicyPpiGuid;
+
+
+typedef struct _PCH_POLICY PCH_POLICY_PPI;
+
+#endif // PCH_POLICY_PPI_H_
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h
new file mode 100644
index 0000000000..2b5afbb929
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h
@@ -0,0 +1,95 @@
+/** @file
+ PCH Reset PPI
+
+ @copyright
+ Copyright 2011 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_RESET_PPI_H_
+#define _PCH_RESET_PPI_H_
+
+//
+// Extern the GUID for PPI users.
+//
+extern EFI_GUID gPchResetPpiGuid;
+extern EFI_GUID gPchResetCallbackPpiGuid;
+
+//
+// Forward reference for ANSI C compatibility
+//
+typedef struct _PCH_RESET_PPI PCH_RESET_PPI;
+typedef struct _PCH_RESET_CALLBACK_PPI PCH_RESET_CALLBACK_PPI;
+
+//
+// Related Definitions
+//
+//
+// PCH Reset Types
+//
+typedef enum {
+ ColdReset,
+ WarmReset,
+ ShutdownReset,
+ PowerCycleReset,
+ GlobalReset,
+ GlobalResetWithEc,
+ PchResetTypeMax
+} PCH_RESET_TYPE;
+
+//
+// Member functions
+//
+/**
+ Execute Pch Reset from the Host controller.
+
+ @param[in] This Pointer to the PCH_RESET_PPI instance.
+ @param[in] PchResetType Pch Reset Types which includes ColdReset, WarmReset, ShutdownReset,
+ PowerCycleReset, GlobalReset, GlobalResetWithEc
+
+ @retval EFI_SUCCESS Successfully completed.
+ @retval EFI_INVALID_PARAMETER If ResetType is invalid.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_RESET_PPI_API) (
+ IN PCH_RESET_PPI *This,
+ IN PCH_RESET_TYPE PchResetType
+ );
+
+/**
+ Execute call back function for Pch Reset.
+
+ @param[in] PchResetType Pch Reset Types which includes PowerCycle, Globalreset.
+
+ @retval EFI_SUCCESS The callback function has been done successfully
+ @retval EFI_NOT_FOUND Failed to find Pch Reset Callback ppi. Or, none of
+ callback ppi is installed.
+ @retval Others Do not do any reset from PCH
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_RESET_CALLBACK) (
+ IN EFI_RESET_TYPE ResetType
+ );
+
+/**
+ Interface structure to execute Pch Reset from the Host controller.
+**/
+struct _PCH_RESET_PPI {
+ PCH_RESET_PPI_API Reset;
+};
+
+/**
+ This ppi is used to execute PCH Reset from the Host controller.
+ The PCH Reset protocol and PCH Reset PPI implement the Intel (R) PCH Reset Interface
+ for DXE and PEI environments, respectively. If other drivers need to run their
+ callback function right before issuing the reset, they can install PCH Reset
+ Callback Protocol/PPI before PCH Reset DXE/PEI driver to achieve that.
+**/
+struct _PCH_RESET_CALLBACK_PPI {
+ PCH_RESET_CALLBACK ResetCallback;
+};
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h
new file mode 100644
index 0000000000..c0f126ef41
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h
@@ -0,0 +1,28 @@
+/** @file
+ This file defines the PCH SPI PPI which implements the
+ Intel(R) PCH SPI Host Controller Compatibility Interface.
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_SPI_PPI_H_
+#define _PCH_SPI_PPI_H_
+
+#include <Protocol/Spi.h>
+
+//
+// Extern the GUID for PPI users.
+//
+extern EFI_GUID gPchSpiPpiGuid;
+
+/**
+ Reuse the PCH_SPI_PROTOCOL definitions
+ This is possible becaues the PPI implementation does not rely on a PeiService pointer,
+ as it uses EDKII Glue Lib to do IO accesses
+**/
+typedef PCH_SPI_PROTOCOL PCH_SPI_PPI;
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h
new file mode 100644
index 0000000000..f93740f4f0
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h
@@ -0,0 +1,458 @@
+/** @file
+ Header file for the PCH SPI Common Driver.
+
+ @copyright
+ Copyright 2008 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_SPI_COMMON_LIB_H_
+#define _PCH_SPI_COMMON_LIB_H_
+
+#include <Protocol/Spi.h>
+
+//
+// Maximum time allowed while waiting the SPI cycle to complete
+// Wait Time = 6 seconds = 6000000 microseconds
+// Wait Period = 10 microseconds
+//
+#define SPI_WAIT_TIME 6000000 ///< Wait Time = 6 seconds = 6000000 microseconds
+#define SPI_WAIT_PERIOD 10 ///< Wait Period = 10 microseconds
+
+///
+/// Flash cycle Type
+///
+typedef enum {
+ FlashCycleRead,
+ FlashCycleWrite,
+ FlashCycleErase,
+ FlashCycleReadSfdp,
+ FlashCycleReadJedecId,
+ FlashCycleWriteStatus,
+ FlashCycleReadStatus,
+ FlashCycleMax
+} FLASH_CYCLE_TYPE;
+
+///
+/// Flash Component Number
+///
+typedef enum {
+ FlashComponent0,
+ FlashComponent1,
+ FlashComponentMax
+} FLASH_COMPONENT_NUM;
+
+///
+/// Private data structure definitions for the driver
+///
+#define PCH_SPI_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'S', 'P', 'I')
+
+typedef struct {
+ UINT32 Signature;
+ EFI_HANDLE Handle;
+ PCH_SPI_PROTOCOL SpiProtocol;
+ UINT16 PchAcpiBase;
+ UINTN PchSpiBase;
+ UINT16 ReadPermission;
+ UINT16 WritePermission;
+ UINT32 SfdpVscc0Value;
+ UINT32 SfdpVscc1Value;
+ UINT16 PchStrapBaseAddr;
+ UINT16 PchStrapSize;
+ UINT16 CpuStrapBaseAddr;
+ UINT16 CpuStrapSize;
+ UINT8 NumberOfComponents;
+ UINT32 Component1StartAddr;
+ UINT32 TotalFlashSize;
+} SPI_INSTANCE;
+
+#define SPI_INSTANCE_FROM_SPIPROTOCOL(a) CR (a, SPI_INSTANCE, SpiProtocol, PCH_SPI_PRIVATE_DATA_SIGNATURE)
+
+//
+// Function prototypes used by the SPI protocol.
+//
+
+/**
+ Initialize an SPI protocol instance.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] SpiInstance Pointer to SpiInstance to initialize
+
+ @retval EFI_SUCCESS The protocol instance was properly initialized
+ @exception EFI_UNSUPPORTED The PCH is not supported by this module
+**/
+EFI_STATUS
+SpiProtocolConstructor (
+ IN UINT8 PchId,
+ IN SPI_INSTANCE *SpiInstance
+ );
+
+/**
+ This function is a hook for Spi to disable BIOS Write Protect
+
+ @param[in] SpiBaseAddress SPI base address
+
+ @retval EFI_SUCCESS The protocol instance was properly initialized
+ @retval EFI_ACCESS_DENIED The BIOS Region can only be updated in SMM phase
+
+**/
+EFI_STATUS
+EFIAPI
+DisableBiosWriteProtect (
+ UINTN SpiBaseAddress
+ );
+
+/**
+ This function is a hook for Spi to enable BIOS Write Protect
+
+ @param[in] SpiBaseAddress SPI base address
+
+**/
+VOID
+EFIAPI
+EnableBiosWriteProtect (
+ UINTN SpiBaseAddress
+ );
+
+/**
+ Acquire pch spi mmio address.
+
+ @param[in] SpiInstance Pointer to SpiInstance to initialize
+
+ @retval PchSpiBar0 return SPI MMIO address
+**/
+UINTN
+AcquireSpiBar0 (
+ IN SPI_INSTANCE *SpiInstance
+ );
+
+/**
+ Release pch spi mmio address.
+
+ @param[in] SpiInstance Pointer to SpiInstance to initialize
+
+ @retval None
+**/
+VOID
+ReleaseSpiBar0 (
+ IN SPI_INSTANCE *SpiInstance
+ );
+
+/**
+ Check if a save and restore of the SPI controller state is necessary
+
+ @retval TRUE It's necessary to save and restore SPI controller state
+ @retval FALSE It's not necessary to save and restore SPI controller state
+**/
+BOOLEAN
+IsSpiControllerSaveRestoreEnabled (
+ VOID
+ );
+
+/**
+ Read data from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[out] Buffer The Pointer to caller-allocated buffer containing the dada received.
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashRead (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ OUT UINT8 *Buffer
+ );
+
+/**
+ Write data to the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[in] Buffer Pointer to caller-allocated buffer containing the data sent during the SPI cycle.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashWrite (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ IN UINT8 *Buffer
+ );
+
+/**
+ Erase some area on the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashErase (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount
+ );
+
+/**
+ Read SFDP data from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ComponentNumber The Componen Number for chip select
+ @param[in] Address The starting byte address for SFDP data read.
+ @param[in] ByteCount Number of bytes in SFDP data portion of the SPI cycle
+ @param[out] SfdpData The Pointer to caller-allocated buffer containing the SFDP data received
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashReadSfdp (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT8 ComponentNumber,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ OUT UINT8 *SfdpData
+ );
+
+/**
+ Read Jedec Id from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ComponentNumber The Componen Number for chip select
+ @param[in] ByteCount Number of bytes in JedecId data portion of the SPI cycle, the data size is 3 typically
+ @param[out] JedecId The Pointer to caller-allocated buffer containing JEDEC ID received
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashReadJedecId (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT8 ComponentNumber,
+ IN UINT32 ByteCount,
+ OUT UINT8 *JedecId
+ );
+
+/**
+ Write the status register in the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
+ @param[in] StatusValue The Pointer to caller-allocated buffer containing the value of Status register writing
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashWriteStatus (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ IN UINT8 *StatusValue
+ );
+
+/**
+ Read status register in the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
+ @param[out] StatusValue The Pointer to caller-allocated buffer containing the value of Status register received.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashReadStatus (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ OUT UINT8 *StatusValue
+ );
+
+/**
+ Get the SPI region base and size, based on the enum type
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for for the base address which is listed in the Descriptor.
+ @param[out] BaseAddress The Flash Linear Address for the Region 'n' Base
+ @param[out] RegionSize The size for the Region 'n'
+
+ @retval EFI_SUCCESS Read success
+ @retval EFI_INVALID_PARAMETER Invalid region type given
+ @retval EFI_DEVICE_ERROR The region is not used
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolGetRegionAddress (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ OUT UINT32 *BaseAddress,
+ OUT UINT32 *RegionSize
+ );
+
+/**
+ Read PCH Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr PCH Soft Strap address offset from FPSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing PCH Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolReadPchSoftStrap (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ );
+
+/**
+ Read CPU Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr CPU Soft Strap address offset from FCPUSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle.
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing CPU Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolReadCpuSoftStrap (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ );
+
+/**
+ Read CPU Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr CPU Soft Strap address offset from FCPUSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle.
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing CPU Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolReadCpuSoftStrap (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ );
+
+/**
+ Function updates entire softstrap region.
+
+ @param[in] This Pointer to the EFI_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle
+ @param[out] Buffer Pointer to the PCH Soft Strap Values to be writen.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @exception EFI_UNSUPPORTED Command not supported.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolUpdatePchSoftStraps (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ OUT UINT8 *Buffer
+ );
+
+/**
+ This function sends the programmed SPI command to the slave device.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SpiRegionType The SPI Region type for flash cycle which is listed in the Descriptor
+ @param[in] FlashCycleType The Flash SPI cycle type list in HSFC (Hardware Sequencing Flash Control Register) register
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[in,out] Buffer Pointer to caller-allocated buffer containing the dada received or sent during the SPI cycle.
+
+ @retval EFI_SUCCESS SPI command completes successfully.
+ @retval EFI_DEVICE_ERROR Device error, the command aborts abnormally.
+ @retval EFI_ACCESS_DENIED Some unrecognized command encountered in hardware sequencing mode
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+**/
+EFI_STATUS
+SendSpiCmd (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN FLASH_CYCLE_TYPE FlashCycleType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ IN OUT UINT8 *Buffer
+ );
+
+/**
+ Wait execution cycle to complete on the SPI interface.
+
+ @param[in] This The SPI protocol instance
+ @param[in] PchSpiBar0 Spi MMIO base address
+ @param[in] ErrorCheck TRUE if the SpiCycle needs to do the error check
+
+ @retval TRUE SPI cycle completed on the interface.
+ @retval FALSE Time out while waiting the SPI cycle to complete.
+ It's not safe to program the next command on the SPI interface.
+**/
+BOOLEAN
+WaitForSpiCycleComplete (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINTN PchSpiBar0,
+ IN BOOLEAN ErrorCheck
+ );
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h
new file mode 100644
index 0000000000..f951b381a6
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h
@@ -0,0 +1,114 @@
+/** @file
+ PCH Reset Protocol
+
+ @copyright
+ Copyright 2011 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_RESET_H_
+#define _PCH_RESET_H_
+
+#include <Ppi/PchReset.h>
+
+#define EFI_CAPSULE_VARIABLE_NAME L"CapsuleUpdateData"
+extern EFI_GUID gEfiCapsuleVendorGuid;
+
+//
+// Extern the GUID for protocol users.
+//
+extern EFI_GUID gPchResetProtocolGuid;
+extern EFI_GUID gPchResetCallbackProtocolGuid;
+extern EFI_GUID gPchPowerCycleResetGuid;
+extern EFI_GUID gPchGlobalResetGuid;
+extern EFI_GUID gPchGlobalResetWithEcGuid;
+//
+// Forward reference for ANSI C compatibility
+//
+typedef struct _PCH_RESET_PROTOCOL PCH_RESET_PROTOCOL;
+
+typedef PCH_RESET_CALLBACK_PPI PCH_RESET_CALLBACK_PROTOCOL;
+
+//
+// Related Definitions
+//
+//
+// PCH Platform Specific ResetData
+//
+#define PCH_POWER_CYCLE_RESET_GUID \
+ { \
+ 0x8d8ee25b, 0x66dd, 0x4ed8, { 0x8a, 0xbd, 0x14, 0x16, 0xe8, 0x8e, 0x1d, 0x24 } \
+ }
+
+#define PCH_GLOBAL_RESET_GUID \
+ { \
+ 0x9db31b4c, 0xf5ef, 0x48bb, { 0x94, 0x2b, 0x18, 0x1f, 0x7e, 0x3a, 0x3e, 0x40 } \
+ }
+
+#define PCH_GLOBAL_RESET_WITH_EC_GUID \
+ { \
+ 0xd22e6b72, 0x53cd, 0x4158, { 0x83, 0x3f, 0x6f, 0xd8, 0x7e, 0xbe, 0xa9, 0x93 } \
+ }
+
+#define PCH_PLATFORM_SPECIFIC_RESET_STRING L"PCH_RESET"
+#define PCH_RESET_DATA_STRING_MAX_LENGTH sizeof (PCH_PLATFORM_SPECIFIC_RESET_STRING)
+
+typedef struct _RESET_DATA {
+ CHAR16 Description[PCH_RESET_DATA_STRING_MAX_LENGTH];
+ EFI_GUID Guid;
+} PCH_RESET_DATA;
+
+
+//
+// Member functions
+//
+/**
+ Execute Pch Reset from the Host controller.
+
+ @param[in] This Pointer to the PCH_RESET_PROTOCOL instance.
+ @param[in] ResetType UEFI defined reset type.
+ @param[in] DataSize The size of ResetData in bytes.
+ @param[in] ResetData Optional element used to introduce a platform specific reset.
+ The exact type of the reset is defined by the EFI_GUID that follows
+ the Null-terminated Unicode string.
+
+ @retval EFI_SUCCESS Successfully completed.
+ @retval EFI_INVALID_PARAMETER If ResetType is invalid.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_RESET) (
+ IN PCH_RESET_PROTOCOL *This,
+ IN PCH_RESET_TYPE ResetType,
+ IN UINTN DataSize,
+ IN VOID *ResetData OPTIONAL
+ );
+
+/**
+ Retrieve PCH platform specific ResetData
+
+ @param[in] Guid PCH platform specific reset GUID.
+ @param[out] DataSize The size of ResetData in bytes.
+
+ @retval ResetData A platform specific reset that the exact type of
+ the reset is defined by the EFI_GUID that follows
+ the Null-terminated Unicode string.
+ @retval NULL If Guid is not defined in PCH platform specific reset.
+**/
+typedef
+VOID *
+(EFIAPI *PCH_RESET_GET_RESET_DATA) (
+ IN EFI_GUID *Guid,
+ OUT UINTN *DataSize
+ );
+
+/**
+ Interface structure to execute Pch Reset from the Host controller.
+**/
+struct _PCH_RESET_PROTOCOL {
+ PCH_RESET Reset;
+ PCH_RESET_GET_RESET_DATA GetResetData;
+};
+
+#endif
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h
new file mode 100644
index 0000000000..45560d67f5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h
@@ -0,0 +1,305 @@
+/** @file
+ This file defines the PCH SPI Protocol which implements the
+ Intel(R) PCH SPI Host Controller Compatibility Interface.
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_SPI_PROTOCOL_H_
+#define _PCH_SPI_PROTOCOL_H_
+
+//
+// Extern the GUID for protocol users.
+//
+extern EFI_GUID gPchSpiProtocolGuid;
+extern EFI_GUID gPchSmmSpiProtocolGuid;
+
+//
+// Forward reference for ANSI C compatibility
+//
+typedef struct _PCH_SPI_PROTOCOL PCH_SPI_PROTOCOL;
+
+//
+// SPI protocol data structures and definitions
+//
+
+/**
+ Flash Region Type
+**/
+typedef enum {
+ FlashRegionDescriptor,
+ FlashRegionBios,
+ FlashRegionMe,
+ FlashRegionGbE,
+ FlashRegionPlatformData,
+ FlashRegionDer,
+ FlashRegionSecondaryBios,
+ FlashRegionuCodePatch,
+ FlashRegionEC,
+ FlashRegionDeviceExpansion2,
+ FlashRegionIE,
+ FlashRegion10Gbe_A,
+ FlashRegion10Gbe_B,
+ FlashRegion13,
+ FlashRegion14,
+ FlashRegion15,
+ FlashRegionAll,
+ FlashRegionMax
+} FLASH_REGION_TYPE;
+
+//
+// Protocol member functions
+//
+
+/**
+ Read data from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[out] Buffer The Pointer to caller-allocated buffer containing the dada received.
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_READ) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ OUT UINT8 *Buffer
+ );
+
+/**
+ Write data to the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[in] Buffer Pointer to caller-allocated buffer containing the data sent during the SPI cycle.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_WRITE) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ IN UINT8 *Buffer
+ );
+
+/**
+ Erase some area on the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_ERASE) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount
+ );
+
+/**
+ Read SFDP data from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ComponentNumber The Componen Number for chip select
+ @param[in] Address The starting byte address for SFDP data read.
+ @param[in] ByteCount Number of bytes in SFDP data portion of the SPI cycle
+ @param[out] SfdpData The Pointer to caller-allocated buffer containing the SFDP data received
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_READ_SFDP) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT8 ComponentNumber,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ OUT UINT8 *SfdpData
+ );
+
+/**
+ Read Jedec Id from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ComponentNumber The Componen Number for chip select
+ @param[in] ByteCount Number of bytes in JedecId data portion of the SPI cycle, the data size is 3 typically
+ @param[out] JedecId The Pointer to caller-allocated buffer containing JEDEC ID received
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_READ_JEDEC_ID) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT8 ComponentNumber,
+ IN UINT32 ByteCount,
+ OUT UINT8 *JedecId
+ );
+
+/**
+ Write the status register in the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
+ @param[in] StatusValue The Pointer to caller-allocated buffer containing the value of Status register writing
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_WRITE_STATUS) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ IN UINT8 *StatusValue
+ );
+
+/**
+ Read status register in the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
+ @param[out] StatusValue The Pointer to caller-allocated buffer containing the value of Status register received.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_FLASH_READ_STATUS) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ OUT UINT8 *StatusValue
+ );
+
+/**
+ Get the SPI region base and size, based on the enum type
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for for the base address which is listed in the Descriptor.
+ @param[out] BaseAddress The Flash Linear Address for the Region 'n' Base
+ @param[out] RegionSize The size for the Region 'n'
+
+ @retval EFI_SUCCESS Read success
+ @retval EFI_INVALID_PARAMETER Invalid region type given
+ @retval EFI_DEVICE_ERROR The region is not used
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_GET_REGION_ADDRESS) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ OUT UINT32 *BaseAddress,
+ OUT UINT32 *RegionSize
+ );
+
+/**
+ Read PCH Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr PCH Soft Strap address offset from FPSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing PCH Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_READ_PCH_SOFTSTRAP) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ );
+
+/**
+ Read CPU Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr CPU Soft Strap address offset from FCPUSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle.
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing CPU Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PCH_SPI_READ_CPU_SOFTSTRAP) (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ );
+
+/**
+ These protocols/PPI allows a platform module to perform SPI operations through the
+ Intel PCH SPI Host Controller Interface.
+**/
+struct _PCH_SPI_PROTOCOL {
+ /**
+ This member specifies the revision of this structure. This field is used to
+ indicate backwards compatible changes to the protocol.
+ **/
+ UINT8 Revision;
+ PCH_SPI_FLASH_READ FlashRead; ///< Read data from the flash part.
+ PCH_SPI_FLASH_WRITE FlashWrite; ///< Write data to the flash part.
+ PCH_SPI_FLASH_ERASE FlashErase; ///< Erase some area on the flash part.
+ PCH_SPI_FLASH_READ_SFDP FlashReadSfdp; ///< Read SFDP data from the flash part.
+ PCH_SPI_FLASH_READ_JEDEC_ID FlashReadJedecId; ///< Read Jedec Id from the flash part.
+ PCH_SPI_FLASH_WRITE_STATUS FlashWriteStatus; ///< Write the status register in the flash part.
+ PCH_SPI_FLASH_READ_STATUS FlashReadStatus; ///< Read status register in the flash part.
+ PCH_SPI_GET_REGION_ADDRESS GetRegionAddress; ///< Get the SPI region base and size
+ PCH_SPI_READ_PCH_SOFTSTRAP ReadPchSoftStrap; ///< Read PCH Soft Strap Values
+ PCH_SPI_READ_CPU_SOFTSTRAP ReadCpuSoftStrap; ///< Read CPU Soft Strap Values
+};
+
+/**
+ PCH SPI PPI/PROTOCOL revision number
+
+ Revision 1: Initial version
+**/
+#define PCH_SPI_SERVICES_REVISION 1
+
+#endif
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 07/17] WhitleySiliconPkg: Add PCH Libraries
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (5 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 06/17] WhitleySiliconPkg: Add PCH Includes Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 08/17] WhitleySiliconPkg: Add Security Includes Nate DeSimone
` (11 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Library/PeiDxeSmmGpioLib/GpioLibrary.h | 224 ++++++++++++++++++
1 file changed, 224 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h
new file mode 100644
index 0000000000..7f22e8b342
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h
@@ -0,0 +1,224 @@
+/** @file
+ Header file for GPIO Lib implementation.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _GPIO_LIBRARY_H_
+#define _GPIO_LIBRARY_H_
+
+#include <Base.h>
+#include <Uefi/UefiBaseType.h>
+#include <Library/IoLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <PchAccess.h>
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+#include <Library/PchInfoLib.h>
+
+typedef struct {
+ GPIO_PAD Pad;
+ GPIO_PAD_MODE Mode;
+} GPIO_PAD_NATIVE_FUNCTION;
+
+
+// BIT15-0 - pad number
+// BIT31-16 - group info
+// BIT23- 16 - group index
+// BIT31- 24 - chipset ID
+#define PAD_INFO_MASK 0x0000FFFF
+#define GROUP_INFO_POSITION 16
+#define GROUP_INFO_MASK 0xFFFF0000
+#define GROUP_INDEX_MASK 0x00FF0000
+#define UNIQUE_ID_MASK 0xFF000000
+#define UNIQUE_ID_POSITION 24
+
+#define GPIO_PAD_DEF(Group,Pad) (UINT32)((Group << 16) + Pad)
+#define GPIO_GROUP_DEF(Index,ChipsetId) (Index | (ChipsetId << 8))
+#define GPIO_GET_GROUP_INDEX(Group) (Group & 0xFF)
+#define GPIO_GET_GROUP_FROM_PAD(Pad) (Pad >> 16)
+#define GPIO_GET_GROUP_INDEX_FROM_PAD(Pad) GPIO_GET_GROUP_INDEX ((Pad >> 16))
+#define GPIO_GET_PAD_NUMBER(Pad) (Pad & 0xFFFF)
+#define GPIO_GET_CHIPSET_ID(Pad) (Pad >> 24)
+#define GPIO_GET_PAD_POSITION(PadNumber) ((PadNumber) % 32)
+#define GPIO_GET_DW_NUM(PadNumber) ((PadNumber) / 32u)
+
+
+//
+// Unique ID used in GpioPad defines
+//
+#define GPIO_SKL_H_CHIPSET_ID 0x1
+#define GPIO_SKL_LP_CHIPSET_ID 0x2
+
+//
+// Below defines are based on GPIO_CONFIG structure fields
+//
+#define GPIO_CONF_PAD_MODE_MASK 0xF
+#define GPIO_CONF_PAD_MODE_BIT_POS 0
+#define GPIO_CONF_HOST_OWN_MASK 0x3
+#define GPIO_CONF_HOST_OWN_BIT_POS 0
+#define GPIO_CONF_DIR_MASK 0x7
+#define GPIO_CONF_DIR_BIT_POS 0
+#define GPIO_CONF_INV_MASK 0x18
+#define GPIO_CONF_INV_BIT_POS 3
+#define GPIO_CONF_OUTPUT_MASK 0x3
+#define GPIO_CONF_OUTPUT_BIT_POS 0
+#define GPIO_CONF_INT_ROUTE_MASK 0x1F
+#define GPIO_CONF_INT_ROUTE_BIT_POS 0
+#define GPIO_CONF_INT_TRIG_MASK 0xE0
+#define GPIO_CONF_INT_TRIG_BIT_POS 5
+#define GPIO_CONF_RESET_MASK 0x7
+#define GPIO_CONF_RESET_BIT_POS 0
+#define GPIO_CONF_TERM_MASK 0x1F
+#define GPIO_CONF_TERM_BIT_POS 0
+#define GPIO_CONF_PADTOL_MASK 0x60
+#define GPIO_CONF_PADTOL_BIT_POS 5
+#define GPIO_CONF_LOCK_MASK 0x7
+#define GPIO_CONF_LOCK_BIT_POS 0
+#define GPIO_CONF_RXRAW_MASK 0x3
+#define GPIO_CONF_RXRAW_BIT_POS 0
+
+//
+// Structure for storing information about registers offset, community,
+// maximal pad number for available groups
+//
+typedef struct {
+ PCH_SBI_PID Community;
+ UINT32 PadOwnOffset;
+ UINT32 HostOwnOffset;
+ UINT32 GpiIsOffset;
+ UINT32 GpiIeOffset;
+ UINT32 GpiGpeStsOffset;
+ UINT32 GpiGpeEnOffset;
+ UINT32 SmiStsOffset;
+ UINT32 SmiEnOffset;
+ UINT32 NmiStsOffset;
+ UINT32 NmiEnOffset;
+ UINT32 PadCfgLockOffset;
+ UINT32 PadCfgLockTxOffset;
+ UINT32 PadCfgOffset;
+ UINT32 PadPerGroup;
+} GPIO_GROUP_INFO;
+
+//
+// If in GPIO_GROUP_INFO structure certain register doesn't exist
+// it will have value equal to NO_REGISTER_FOR_PROPERTY
+//
+#define NO_REGISTER_FOR_PROPERTY (~0u)
+
+
+/**
+ This procedure is used to check if GpioPad is valid for certain chipset
+
+ @param[in] GpioPad GPIO pad
+
+ @retval TRUE This pin is valid on this chipset
+ FALSE Incorrect pin
+**/
+BOOLEAN
+GpioIsCorrectPadForThisChipset (
+ IN GPIO_PAD GpioPad
+ );
+
+
+/**
+ This procedure will retrieve address and length of GPIO info table
+
+ @param[out] GpioGroupInfoTableLength Length of GPIO group table
+
+ @retval Pointer to GPIO group table
+
+**/
+GPIO_GROUP_INFO*
+GpioGetGroupInfoTable (
+ OUT UINTN *GpioGroupInfoTableLength
+ );
+
+/**
+ This procedure will set GPIO mode
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] PadModeValue GPIO pad mode value
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+SetGpioPadMode (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_PAD_MODE PadModeValue
+ );
+
+/**
+ This procedure will get GPIO mode
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[out] PadModeValue GPIO pad mode value
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_INVALID_PARAMETER Invalid group or pad number
+**/
+EFI_STATUS
+GetGpioPadMode (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ OUT GPIO_PAD_MODE *PadModeValue
+ );
+
+/**
+ This function checks if GPIO pin is a GSPI chip select pin
+
+ @param[in] GpioPad GPIO pad
+ @param[in] PadMode GPIO pad mode
+
+ @retval TRUE Pin is in GPIO mode
+ FALSE Pin is in native mode
+**/
+BOOLEAN
+GpioIsGpioPadAGSpiCsbPin (
+ IN GPIO_PAD GpioPad,
+ IN GPIO_PAD_MODE PadMode
+ );
+
+/**
+ This function checks if GPIO pin is a SataDevSlp pin
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GpioPad GPIO pad
+ @param[in] PadMode GPIO pad mode
+
+ @retval TRUE Pin is in GPIO mode
+ FALSE Pin is in native mode
+**/
+BOOLEAN
+GpioIsPadASataDevSlpPin (
+ IN UINT8 PchId,
+ IN GPIO_PAD GpioPad,
+ IN GPIO_PAD_MODE PadMode
+ );
+
+/**
+ Check if given GPIO Pad is locked
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] GroupIndex GPIO group index
+ @param[in] PadNumber GPIO pad number
+
+ @retval TRUE Pad is locked
+ @retval FALSE Pad is not locked
+**/
+BOOLEAN
+GpioIsPadLocked (
+ IN UINT8 PchId,
+ IN UINT32 GroupIndex,
+ IN GPIO_PAD PadNumber
+ );
+
+#endif // _GPIO_LIBRARY_H_
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 08/17] WhitleySiliconPkg: Add Security Includes
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (6 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 07/17] WhitleySiliconPkg: Add PCH Libraries Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 09/17] WhitleySiliconPkg: Add SiliconPolicyInit Nate DeSimone
` (10 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../SecurityIp/SecurityIpMkTme1v0_Inputs.h | 25 ++++++++++++
.../SecurityIp/SecurityIpMkTme1v0_Outputs.h | 18 +++++++++
.../SecurityIp/SecurityIpSgxTem1v0_Inputs.h | 39 +++++++++++++++++++
.../SecurityIp/SecurityIpSgxTem1v0_Outputs.h | 22 +++++++++++
.../Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h | 13 +++++++
.../SecurityIp/SecurityIpTdx1v0_Outputs.h | 11 ++++++
.../Include/Guid/SecurityPolicy_Flat.h | 22 +++++++++++
7 files changed, 150 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h
new file mode 100644
index 0000000000..4c48ca19ee
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h
@@ -0,0 +1,25 @@
+/** @file
+ Provides data structure information used by SiliconIp MK-TME
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// TME
+//
+UINT8 EnableTme; // TME Enable
+UINT8 EnableTmeCR; // Exclude Crystal Ridge memory from encryption.
+
+//
+// MK-TME
+//
+UINT8 EnableMktme; // MK-TME Enable
+
+UINT8 ReservedS234;
+UINT8 ReservedS235;
+UINT64 ReservedS236;
+UINT64 ReservedS237;
+UINT8 ReservedS238;
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h
new file mode 100644
index 0000000000..3a6262a658
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h
@@ -0,0 +1,18 @@
+/** @file
+ Provides data structure information used by SiliconIp MK-TME
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// MK-TME
+//
+// NAK - Not a knob, used just for indication
+UINT8 TmeCapability; // TME Capable
+UINT8 TmeCrSupport; // Flag used to check if Crystal Ridge is supported in UEFI
+UINT8 MktmeCapability; // MK-TME Capable
+UINT16 MktmeMaxKeys; // Max number of keys used for encryption
+UINT8 MkTmeKeyIdBits; // Used to suppress setup menu key-splits
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h
new file mode 100644
index 0000000000..2deabd0b50
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h
@@ -0,0 +1,39 @@
+/** @file
+ Provides data structure information used by SiliconIp SGX-TEM
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// SGX
+//
+UINT8 EnableSgx;
+UINT8 SgxFactoryReset; // Delete all registration data, if SGX enabled force IPE/FirstBinding flow
+UINT64 PrmrrSize; // SGX PRMRR size
+UINT64 ReservedS239;
+UINT8 SgxQoS; // SGX Quality of Service
+UINT8 SgxAutoRegistrationAgent;
+UINT8 SgxPackageInfoInBandAccess; // Expose Package Info to OS
+UINT8 EpochUpdate;
+UINT64 SgxEpoch0; // SGX EPOCH0 value {0 - 0xFFFFFFFFFFFFFFFF}
+UINT64 SgxEpoch1; // SGX EPOCH1 value {0 - 0xFFFFFFFFFFFFFFFF}
+UINT8 SgxLeWr; // Flexible Launch Enclave Policy (Wr En)
+UINT64 SgxLePubKeyHash0; // Launch Enclave Hash 0
+UINT64 SgxLePubKeyHash1; // Launch Enclave Hash 1
+UINT64 SgxLePubKeyHash2; // Launch Enclave Hash 2
+UINT64 SgxLePubKeyHash3; // Launch Enclave Hash 3
+// Client SGX - unused in server
+UINT8 SgxSinitNvsData; // SGX NVS data from Flash passed during previous boot using CPU_INFO_PROTOCOL.SGX_INFO;
+ // Pass value of zero if there is not data saved or when SGX is disabled.
+UINT8 SgxSinitDataFromTpm; // SGX SVN data from TPM; 0: when SGX is disabled or TPM is not present or no data
+ // is present in TPM.
+UINT8 SgxDebugMode;
+
+UINT8 ReservedS240;
+UINT8 ReservedS241;
+UINT8 ReservedS242;
+UINT8 ReservedS243;
+UINT8 ReservedS244;
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h
new file mode 100644
index 0000000000..45b63b21c5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h
@@ -0,0 +1,22 @@
+/** @file
+ Provides data structure information used by SiliconIp SGX-TEM
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+// NAK - Not a knob, used just for indication
+UINT8 IsSgxCapable;
+UINT8 IsHwCongifSupportedBySgx; // ## PRODUCED by SgxPreMemInit
+UINT8 CrDimmsPresent;
+UINT64 ValidPrmrrBitMap;
+UINT64 SprspOrLaterPrmSizeBitmap; // ## PRODUCED by SgxPreMemInit
+UINT8 ShowEpoch;
+UINT8 SkipSignalPpmDone; // ## PRODUCED by SgxEarlyInit
+
+UINT8 SprspOrLaterIsPrmSizeInvalidated; // ## PRODUCED by SgxPreMemInit
+UINT8 SprspOrLaterAreHardwarePreconditionsMet; // ## PRODUCED by SgxPreMemInit
+UINT8 SprspOrLaterAreMemoryPreconditionsMet; // ## PRODUCED by SgxPreMeminit
+UINT8 SprspOrLaterAreSetupPreconditionsMet; // ## PRODUCED by SgxPreMemInit
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h
new file mode 100644
index 0000000000..db5081c0aa
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h
@@ -0,0 +1,13 @@
+/** @file
+ Provides data structure information used by SiliconIp TDX
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+UINT8 EnableTdx; // TDX Enable
+UINT8 KeySplit; // TDX/MK-TME key split
+
+UINT8 ReservedS245;
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h
new file mode 100644
index 0000000000..d744baefb5
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h
@@ -0,0 +1,11 @@
+/** @file
+ Provides data structure information used by SiliconIp TDX
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+// NAK - Not a knob, used just for indication
+UINT8 TdxCapability; // TDX socket capability
\ No newline at end of file
diff --git a/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h
new file mode 100644
index 0000000000..ba62b8c3ab
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h
@@ -0,0 +1,22 @@
+/** @file
+ Provides data structure information used by ServerSecurity features in literally all products
+ Header is flat and injected directly in SecurityPolicy sructuture and SOCKET_PROCESSORCORE_CONFIGURATION.
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+ // Header is flat and injected directly in SecurityPolicy sructuture and SOCKET_PROCESSORCORE_CONFIGURATION.
+ // Put common definitons here either directly or via intermediate header file..
+
+// SECURITY_IP_MKTME_1V0 MkTme;
+#include "SecurityIp/SecurityIpMkTme1v0_Inputs.h"
+#include "SecurityIp/SecurityIpMkTme1v0_Outputs.h"
+// SECURITY_IP_SGXTEM_1V0 SgxTem;
+#include "SecurityIp/SecurityIpSgxTem1v0_Inputs.h"
+#include "SecurityIp/SecurityIpSgxTem1v0_Outputs.h"
+// SECURITY_IP_TDX_1V0 Tdx;
+#include "SecurityIp/SecurityIpTdx1v0_Inputs.h"
+#include "SecurityIp/SecurityIpTdx1v0_Outputs.h"
\ No newline at end of file
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 09/17] WhitleySiliconPkg: Add SiliconPolicyInit
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (7 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 08/17] WhitleySiliconPkg: Add Security Includes Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 10/17] WhitleyOpenBoardPkg: Add Includes and Libraries Nate DeSimone
` (9 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../SiliconPolicyInit/SiliconPolicyInitLate.c | 52 +++++++++++++++
.../SiliconPolicyInitLate.inf | 49 +++++++++++++++
.../SiliconPolicyInitPreAndPostMem.c | 63 +++++++++++++++++++
.../SiliconPolicyInitPreAndPostMem.inf | 48 ++++++++++++++
4 files changed, 212 insertions(+)
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf
diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c
new file mode 100644
index 0000000000..d5c1828cce
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c
@@ -0,0 +1,52 @@
+/** @file
+ SiliconPolicyInitLib DXE.
+
+ This driver initializes silicon policy with the defaults from the silicon provider.
+ It publishes a protocol that is consumed by a shim library instance that provides the functions used by the
+ common MinPlatformPkg PolicyInit late policy initialization code.
+
+ @copyright
+ Copyright 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiDxe.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/DriverEntryPoint.h>
+#include <Library/SiliconPolicyInitLib.h>
+#include <Guid/SiliconPolicyInitLibInterface.h>
+
+STATIC SILICON_POLICY_INIT_LIB_PROTOCOL mSiliconPolicyInitLibProtocol = {
+ SiliconPolicyInitLate,
+ SiliconPolicyDoneLate
+};
+
+/**
+ Entry point function
+
+ @param ImageHandle - Handle for the image of this driver.
+ @param SystemTable - Pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS - Protocol installed sucessfully.
+**/
+EFI_STATUS
+EFIAPI
+SiliconPolicyInitLateDxeEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ EFI_HANDLE Handle;
+
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (&Handle, &gSiliconPolicyInitLibInterfaceGuid, EFI_NATIVE_INTERFACE, &mSiliconPolicyInitLibProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf
new file mode 100644
index 0000000000..d6ef987f5b
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf
@@ -0,0 +1,49 @@
+## @file
+# SiliconPolicyInitLate DXE Boot Services Driver
+#
+# This driver initializes silicon policy with the defaults from the silicon provider.
+# It publishes a protocol that is consumed by a shim library instance that provides the functions used by the
+# common MinPlatformPkg PolicyInit late silicon init code.
+# This driver produces SiliconPolicyInit LATE services. A PEIM provides the PRE and POST memory services.
+#
+# @copyright
+# Copyright 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SiliconPolicyInitLate
+ FILE_GUID = ff6216f2-d911-44a5-9f48-c174223acc7c
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = SiliconPolicyInitLateDxeEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = X64
+#
+
+[Sources]
+ SiliconPolicyInitLate.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleyOpenboardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ DriverEntryPoint
+ UefiBootServicesTableLib
+ SiliconPolicyInitLib
+
+[Guids]
+ gSiliconPolicyInitLibInterfaceGuid ## ALWAYS_PRODUCES a PROTOCOL with this GUID
+
+[Depex]
+ TRUE
diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c
new file mode 100644
index 0000000000..5bc410f21f
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c
@@ -0,0 +1,63 @@
+/** @file
+ SiliconPolicyInit PEIM.
+
+ This PEIM initializes silicon policy with the defaults from the silicon provider.
+ We publish a PPI that is consumed by a shim library instance that provides the functions used by the
+ common MinPlatformPkg PolicyInit pre and post memory code.
+
+ @copyright
+ Copyright 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/SiliconPolicyInitLib.h>
+#include <Guid/SiliconPolicyInitLibInterface.h>
+
+STATIC SILICON_POLICY_INIT_LIB_PPI mSiliconPolicyInitLibPpi = {
+ SiliconPolicyInitPreMem,
+ SiliconPolicyDonePreMem,
+ SiliconPolicyInitPostMem,
+ SiliconPolicyDonePostMem
+};
+
+STATIC EFI_PEI_PPI_DESCRIPTOR mSiliconPolicyInitLibPpiDescriptor = {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gSiliconPolicyInitLibInterfaceGuid,
+ &mSiliconPolicyInitLibPpi
+ };
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+**/
+EFI_STATUS
+EFIAPI
+SiliconPolicyInitPreAndPostMemPeimEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ //
+ // Just produce our PPI
+ //
+ Status = PeiServicesInstallPpi (&mSiliconPolicyInitLibPpiDescriptor);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "EntryPoint: failed to register PPI!\n"));
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf
new file mode 100644
index 0000000000..6416457fdb
--- /dev/null
+++ b/Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf
@@ -0,0 +1,48 @@
+## @file
+# SiliconPolicyInitPreAndPostMem PEIM.
+#
+# This PEIM initializes silicon policy with the defaults from the silicon provider.
+# We publish a PPI that is consumed by a shim library instance that provides the functions used by the
+# common MinPlatformPkg PolicyInit pre and post memory code.
+# This PEIM produces SiliconPolicyInit PRE and POST memory services. A DXE driver provides the LATE services.
+#
+# @copyright
+# Copyright 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SiliconPolicyInitPreAndPostMem
+ FILE_GUID = ca8efb69-d7dc-4e94-aad6-9fb373649161
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = SiliconPolicyInitPreAndPostMemPeimEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+ SiliconPolicyInitPreAndPostMem.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ SiliconPolicyInitLib
+
+[Guids]
+ gSiliconPolicyInitLibInterfaceGuid ## ALWAYS_PRODUCES a PPI with this GUID
+
+[Depex]
+ TRUE
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 10/17] WhitleyOpenBoardPkg: Add Includes and Libraries
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (8 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 09/17] WhitleySiliconPkg: Add SiliconPolicyInit Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 11/17] WhitleyOpenBoardPkg: Add Platform Modules Nate DeSimone
` (8 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Include/Dsc/CoreDxeInclude.dsc | 135 ++
...blePerformanceMonitoringInfrastructure.dsc | 40 +
.../Include/Dsc/EnableRichDebugMessages.dsc | 50 +
.../Include/Fdf/CommonNvStorageFtwWorking.fdf | 20 +
| 24 +
...anceMonitoringInfrastructurePostMemory.fdf | 14 +
...manceMonitoringInfrastructurePreMemory.fdf | 11 +
.../Include/Fdf/NvStorage512K.fdf | 46 +
.../Include/GpioInitData.h | 26 +
.../Include/Guid/PlatformVariableCommon.h | 33 +
.../Include/Guid/SetupVariable.h | 720 ++++++++
.../Include/Guid/UbaCfgHob.h | 74 +
.../WhitleyOpenBoardPkg/Include/IoApic.h | 23 +
.../Include/Library/MultiPlatSupportLib.h | 67 +
.../Include/Library/PeiPlatformHooklib.h | 17 +
.../Include/Library/PlatformClocksLib.h | 87 +
.../Include/Library/PlatformOpromPolicyLib.h | 83 +
.../Library/PlatformSetupVariableSyncLib.h | 60 +
.../Include/Library/PlatformVariableHookLib.h | 47 +
.../Include/Library/ReadFfsLib.h | 58 +
.../Include/Library/SetupLib.h | 134 ++
.../Include/Library/UbaAcpiUpdateLib.h | 38 +
.../Include/Library/UbaBoardSioInfoLib.h | 47 +
.../Include/Library/UbaClkGenUpdateLib.h | 49 +
.../Include/Library/UbaClocksConfigLib.h | 51 +
.../Include/Library/UbaGpioInitLib.h | 26 +
.../Include/Library/UbaGpioPlatformConfig.h | 259 +++
.../Include/Library/UbaGpioUpdateLib.h | 51 +
.../Library/UbaHsioPtssTableConfigLib.h | 52 +
.../Include/Library/UbaIioConfigLib.h | 227 +++
.../Library/UbaIioPortBifurcationInitLib.h | 47 +
.../Include/Library/UbaOpromUpdateLib.h | 115 ++
.../Include/Library/UbaPcdUpdateLib.h | 44 +
.../Include/Library/UbaPchEarlyUpdateLib.h | 63 +
.../Library/UbaPcieBifurcationUpdateLib.h | 130 ++
.../Include/Library/UbaPlatLib.h | 25 +
.../Include/Library/UbaSlotUpdateLib.h | 124 ++
.../Include/Library/UbaSoftStrapUpdateLib.h | 57 +
.../Include/Library/UbaSystemBoardInfoLib.h | 36 +
.../Library/UbaSystemConfigUpdateLib.h | 42 +
.../Include/Library/UbaUsbOcUpdateLib.h | 51 +
.../Include/OnboardNicStructs.h | 98 ++
.../Include/PchSetupVariable.h | 10 +
.../Include/PchSetupVariableLbg.h | 372 ++++
.../WhitleyOpenBoardPkg/Include/PlatDevData.h | 183 ++
.../Include/PlatPirqData.h | 36 +
.../Include/Ppi/ExReportStatusCodeHandler.h | 38 +
.../Include/Ppi/SmbusPolicy.h | 29 +
.../Include/Ppi/UbaCfgDb.h | 144 ++
.../Include/Protocol/LegacyBios.h | 1550 +++++++++++++++++
.../Include/Protocol/LegacyBiosPlatform.h | 752 ++++++++
.../Include/Protocol/PciIovPlatform.h | 72 +
.../Include/Protocol/PlatformType.h | 48 +
.../Include/Protocol/UbaCfgDb.h | 114 ++
.../Include/Protocol/UbaDevsUpdateProtocol.h | 86 +
.../Include/Protocol/UbaMakerProtocol.h | 22 +
.../WhitleyOpenBoardPkg/Include/SetupTable.h | 25 +
.../WhitleyOpenBoardPkg/Include/SioRegs.h | 251 +++
.../WhitleyOpenBoardPkg/Include/SystemBoard.h | 75 +
.../WhitleyOpenBoardPkg/Include/UbaKti.h | 29 +
.../BoardAcpiLib/DxeBoardAcpiTableLib.c | 37 +
.../BoardAcpiLib/DxeBoardAcpiTableLib.inf | 44 +
.../BoardAcpiLib/DxeMtOlympusAcpiTableLib.c | 54 +
.../BoardAcpiLib/SmmBoardAcpiEnableLib.c | 51 +
.../BoardAcpiLib/SmmBoardAcpiEnableLib.inf | 48 +
.../BoardAcpiLib/SmmSiliconAcpiEnableLib.c | 138 ++
.../Library/BoardInitLib/BoardInitDxeLib.c | 299 ++++
.../Library/BoardInitLib/BoardInitDxeLib.inf | 72 +
.../Library/BoardInitLib/BoardInitDxeLib.uni | 29 +
.../Library/BoardInitLib/BoardInitPreMemLib.c | 450 +++++
.../BoardInitLib/BoardInitPreMemLib.inf | 66 +
.../MultiPlatSupportLib/MultiPlatSupport.h | 48 +
.../MultiPlatSupportLib/MultiPlatSupportLib.c | 255 +++
.../MultiPlatSupportLib.inf | 49 +
.../FspWrapperHobProcessLib.c | 722 ++++++++
.../PeiFspWrapperHobProcessLib.inf | 99 ++
.../PeiPlatformHookLib/PeiPlatformHooklib.c | 43 +
.../PeiPlatformHookLib/PeiPlatformHooklib.inf | 34 +
.../Library/PeiReportFvLib/PeiReportFvLib.c | 270 +++
.../Library/PeiReportFvLib/PeiReportFvLib.inf | 65 +
.../PeiUbaGpioPlatformConfigLib.c | 518 ++++++
.../Library/PeiUbaPlatLib/PeiUbaPlatLib.inf | 60 +
.../PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c | 61 +
.../PeiUbaPlatLib/UbaBoardSioInfoLib.c | 54 +
.../PeiUbaPlatLib/UbaClkGenUpdateLib.c | 134 ++
.../PeiUbaPlatLib/UbaClocksConfigLib.c | 59 +
.../Library/PeiUbaPlatLib/UbaGpioUpdateLib.c | 68 +
.../PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c | 58 +
.../PeiUbaPlatLib/UbaIioConfigLibPei.c | 219 +++
.../UbaIioPortBifurcationInitLib.c | 55 +
.../Library/PeiUbaPlatLib/UbaPcdUpdateLib.c | 69 +
.../PeiUbaPlatLib/UbaPchEarlyUpdateLib.c | 108 ++
.../PeiUbaPlatLib/UbaPchPcieBifurcationLib.c | 57 +
.../PeiUbaPlatLib/UbaSlotUpdateLibPei.c | 156 ++
.../PeiUbaPlatLib/UbaSoftStrapUpdateLib.c | 95 +
.../PlatformClocksLib/Pei/PlatformClocksLib.c | 347 ++++
.../Pei/PlatformClocksLib.inf | 40 +
.../PlatformCmosAccessLib.c | 73 +
.../PlatformCmosAccessLib.inf | 45 +
.../Library/PlatformHooksLib/PlatformHooks.c | 203 +++
.../PlatformHooksLib/PlatformHooksLib.inf | 28 +
.../PlatformOpromPolicyLibNull.c | 88 +
.../PlatformOpromPolicyLibNull.inf | 29 +
.../PlatformSetupVariableSyncLibNull.c | 81 +
.../PlatformSetupVariableSyncLibNull.inf | 28 +
.../PlatformVariableHookLibNull.c | 55 +
.../PlatformVariableHookLibNull.inf | 24 +
.../Library/ReadFfsLib/ReadFfsLib.c | 446 +++++
.../Library/ReadFfsLib/ReadFfsLib.inf | 34 +
.../Library/SerialPortLib/Ns16550.h | 46 +
.../Library/SerialPortLib/SerialPortLib.c | 1023 +++++++++++
.../Library/SerialPortLib/SerialPortLib.inf | 55 +
.../Library/SetCacheMtrrLib/SetCacheMtrrLib.c | 867 +++++++++
.../SetCacheMtrrLib/SetCacheMtrrLib.inf | 55 +
.../PchPolicyUpdateUsb.c | 152 ++
.../SiliconPolicyUpdateLib.c | 778 +++++++++
.../SiliconPolicyUpdateLib.inf | 64 +
.../SiliconPolicyUpdateLibFsp.c | 770 ++++++++
.../SiliconPolicyUpdateLibFsp.inf | 68 +
.../SmmSpiFlashCommonLib.inf | 57 +
.../SmmSpiFlashCommonLib/SpiFlashCommon.c | 237 +++
.../SpiFlashCommonSmmLib.c | 55 +
.../DxeTcg2PhysicalPresenceLib.c | 41 +
.../DxeTcg2PhysicalPresenceLib.inf | 29 +
.../Library/UbaGpioInitLib/UbaGpioInitLib.c | 145 ++
.../Library/UbaGpioInitLib/UbaGpioInitLib.inf | 46 +
126 files changed, 17890 insertions(+)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
new file mode 100644
index 0000000000..13f65ff43d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
@@ -0,0 +1,135 @@
+## @file
+# Platform description.
+#
+# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+
+ #
+ # Generic EDKII Driver
+ #
+ MdeModulePkg/Core/Dxe/DxeMain.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
+ }
+ MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
+ <LibraryClasses>
+ PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+ }
+
+ MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
+ MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
+
+ UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
+ MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
+ PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
+ MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
+
+ MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
+ MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
+ MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
+ NULL|MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiLib.inf
+ NULL|MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf
+ }
+
+
+ MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
+
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+ MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf
+ MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf {
+ <LibraryClasses>
+!if gMinPlatformPkgTokenSpaceGuid.PcdUefiSecureBootEnable == TRUE
+ NULL|SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificationLib.inf
+!endif
+!if gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable == TRUE
+ NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
+!endif
+ }
+
+ MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
+
+ #UefiCpuPkg/CpuDxe/CpuDxe.inf
+
+ MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+
+ #MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
+ MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
+
+ #MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
+ #MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
+ #MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
+ MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
+ MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
+ MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
+ MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
+ MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+ MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
+
+ MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
+ MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
+ MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
+ FatPkg/EnhancedFatDxe/Fat.inf
+
+ #MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputDxe.inf
+ MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
+
+ MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
+ MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
+
+ MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
+
+ MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
+
+ MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
+ MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
+
+ MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
+
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
+ MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf {
+ <LibraryClasses>
+ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+ }
+
+ MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
+ MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
+
+ MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
+ MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf
+
+ #UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
+
+ UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
+ MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf
+
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+ MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
+
+ SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
+
+!if gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable == TRUE
+ SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
+ SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf {
+ <LibraryClasses>
+ Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibRouter/Tpm2DeviceLibRouterDxe.inf
+ NULL|SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf
+ NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
+ }
+ SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf
+ SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf
+!endif
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
new file mode 100644
index 0000000000..c308e0df4f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
@@ -0,0 +1,40 @@
+## @file EnablePerformanceMonitoringInfrastructure.dsc
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+!if $(PERFORMANCE_ENABLE) == TRUE
+
+[PcdsFixedAtBuild]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdEdkiiFpdtStringRecordEnableOnly|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|100
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries16|100
+ gEfiMdeModulePkgTokenSpaceGuid.PcdExtFpdtBootRecordPadSize|0x10000
+ gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x1
+
+[LibraryClasses.X64]
+ PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
+ TimerLib|PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf
+
+[LibraryClasses.X64.DXE_CORE]
+ PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
+
+[LibraryClasses.X64.DXE_SMM_DRIVER]
+ PerformanceLib|MdeModulePkg/Library/SmmPerformanceLib/SmmPerformanceLib.inf
+
+[LibraryClasses.X64.SMM_CORE]
+ PerformanceLib|MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.inf
+
+[Components.IA32]
+ MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf
+
+[Components.X64]
+ MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf
+ MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf
+ MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
+ ShellPkg/DynamicCommand/DpDynamicCommand/DpApp.inf
+
+!endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc
new file mode 100644
index 0000000000..6a66f2ebbb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc
@@ -0,0 +1,50 @@
+## @file EnableRichDebugMessages.dsc
+# This takes care to turn on a higher level of debug messages that produces a
+# balance between performance and greater levels of detail.
+# This also customizes cores to use BaseDebugLibSerialPort for maximum
+# messaging.
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#
+# Customize debug messages
+#
+[PcdsFixedAtBuild]
+ ## This flag is used to control the built in Debug messages.
+ # BIT0 - Initialization message.<BR>
+ # BIT1 - Warning message.<BR>
+ # BIT2 - Load Event message.<BR>
+ # BIT3 - File System message.<BR>
+ # BIT4 - Allocate or Free Pool message.<BR>
+ # BIT5 - Allocate or Free Page message.<BR>
+ # BIT6 - Information message.<BR>
+ # BIT7 - Dispatcher message.<BR>
+ # BIT8 - Variable message.<BR>
+ # BIT10 - Boot Manager message.<BR>
+ # BIT12 - BlockIo Driver message.<BR>
+ # BIT14 - Network Driver message.<BR>
+ # BIT16 - UNDI Driver message
+ # BIT17 - LoadFile message.<BR>
+ # BIT19 - Event message.<BR>
+ # BIT20 - Global Coherency Database changes message.<BR>
+ # BIT21 - Memory range cachability changes message.<BR>
+ # BIT22 - Detailed debug message.<BR>
+ # BIT31 - Error message.<BR>
+ gEfiMdePkgTokenSpaceGuid.PcdFixedDebugPrintErrorLevel|0x802A00C7
+
+[PcdsPatchableInModule]
+ #
+ # This flag is used to control the displayed Debug messages.
+ # For simplification, we like to ensure both built in and enabled are in sync
+ #
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|gEfiMdePkgTokenSpaceGuid.PcdFixedDebugPrintErrorLevel
+
+[LibraryClasses.IA32.PEI_CORE]
+ DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
+
+[LibraryClasses.X64.DXE_CORE]
+ DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
new file mode 100644
index 0000000000..97c7c2a28f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
@@ -0,0 +1,20 @@
+## @file CommonNvStorageFtwWorking.fdf
+# FV contents for FTW Working block FV
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#NV_FTW_WORKING
+DATA = {
+ # EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER->Signature = gEdkiiWorkingBlockSignatureGuid =
+ # { 0x9e58292b, 0x7c68, 0x497d, { 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95 }}
+ 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49,
+ 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95,
+ # Crc:UINT32 #WorkingBlockValid:1, WorkingBlockInvalid:1, Reserved
+ 0xE2, 0x33, 0xF2, 0x03, 0xFE, 0xFF, 0xFF, 0xFF,
+ # WriteQueueSize: UINT64
+ 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+}
--git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
new file mode 100644
index 0000000000..08f8b95938
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
@@ -0,0 +1,24 @@
+## @file CommonSpiFvHeaderInfo.fdf
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+FvAlignment = 16 #FV alignment and FV attributes setting.
+ERASE_POLARITY = 1
+MEMORY_MAPPED = TRUE
+STICKY_WRITE = TRUE
+LOCK_CAP = TRUE
+LOCK_STATUS = TRUE
+WRITE_DISABLED_CAP = TRUE
+WRITE_ENABLED_CAP = TRUE
+WRITE_STATUS = TRUE
+WRITE_LOCK_CAP = TRUE
+WRITE_LOCK_STATUS = TRUE
+READ_DISABLED_CAP = TRUE
+READ_ENABLED_CAP = TRUE
+READ_STATUS = TRUE
+READ_LOCK_CAP = TRUE
+READ_LOCK_STATUS = TRUE
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
new file mode 100644
index 0000000000..a3576bd7a8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
@@ -0,0 +1,14 @@
+## @file EnablePerformanceMonitoringInfrastructurePostMemory.fdf
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+!if $(PERFORMANCE_ENABLE) == TRUE
+ INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf
+ INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf
+ INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
+ INF ShellPkg/DynamicCommand/DpDynamicCommand/DpApp.inf
+!endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
new file mode 100644
index 0000000000..dbc98f6f1f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
@@ -0,0 +1,11 @@
+## @file EnablePerformanceMonitoringInfrastructurePreMemory.fdf
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+!if $(PERFORMANCE_ENABLE) == TRUE
+ INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf
+!endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
new file mode 100644
index 0000000000..089d9bbf06
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
@@ -0,0 +1,46 @@
+## @file NvStorage512K.fdf
+# FV contents for NV storage variable and fault tolerant write usage.
+# The size and block layout here must match the actual layout built by the build tools.
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#NV_VARIABLE_STORE
+DATA = {
+ ## This is the EFI_FIRMWARE_VOLUME_HEADER
+ # ZeroVector []
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ # FileSystemGuid: gEfiSystemNvDataFvGuid =
+ # { 0xFFF12B8D, 0x7696, 0x4C8B, { 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50 }}
+ 0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C,
+ 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50,
+ # FvLength: 0x80000
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ #Signature "_FVH" #Attributes
+ 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00,
+ #HeaderLength #CheckSum #ExtHeaderOffset #Reserved #Revision
+ 0x48, 0x00, 0x2A, 0x09, 0x00, 0x00, 0x00, 0x02,
+ #Blockmap[0]: 8 Blocks * 0x10000 Bytes / Block
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ #Blockmap[1]: End
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ ## This is the VARIABLE_STORE_HEADER
+ !if $(SECURE_BOOT_ENABLE) == TRUE
+ # Signature: gEfiAuthenticatedVariableGuid = { 0xaaf32c78, 0x947b, 0x439a, { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 } }
+ 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43,
+ 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92,
+ !else
+ # Signature: gEfiVariableGuid = { 0xddcf3616, 0x3275, 0x4164, { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d }}
+ 0x16, 0x36, 0xcf, 0xdd, 0x75, 0x32, 0x64, 0x41,
+ 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d,
+ !endif
+ #Size: 0x3C000 (gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize) - 0x48 (size of EFI_FIRMWARE_VOLUME_HEADER) = 0x3BFB8
+ # This can speed up the Variable Dispatch a bit.
+ 0xB8, 0xBF, 0x03, 0x00,
+ #FORMATTED: 0x5A #HEALTHY: 0xFE #Reserved: UINT16 #Reserved1: UINT32
+ 0x5A, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h
new file mode 100644
index 0000000000..2e25c4b6c5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h
@@ -0,0 +1,26 @@
+/** @file
+ Platform specific information
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "Platform.h"
+
+#ifndef __GPIO_INIT_DATA_H__
+#define __GPIO_INIT_DATA_H__
+
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+
+
+//
+// SKX_TODO: Platform Update GPIO table
+//
+//
+// SKX_TODO: Create GPIO tables for LBG platforms (PCH_GPIO_CONFIG type)
+//
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h
new file mode 100644
index 0000000000..aab9856c66
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h
@@ -0,0 +1,33 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_VARIABLE_COMMON_H_
+#define _PLATFORM_VARIABLE_COMMON_H_
+
+
+#ifndef PLATFORM_SETUP_VARIABLE_NAME
+#define PLATFORM_SETUP_VARIABLE_NAME L"Setup"
+#endif
+
+#define CMOS_CLEAR_EVENT BIT0
+#define CMOS_BAD_CHECKSUM_EVENT BIT1
+#define MFG_MODE_EVENT BIT2
+#define RECOVERY_MODE_EVENT BIT3
+#define LOAD_FAILSAFE_EVENT BIT4
+#define LOAD_CUSTOMIZED_EVENT BIT5
+#define NULL_VARIABLE_EVENT BIT6
+
+#define PLATFORM_VARIABLE_HOB_GUID { 0x71e6d4bc, 0x4837, 0x45f1, { 0xa2, 0xd7, 0x3f, 0x93, 0x8, 0xb1, 0x7e, 0xd7 } }
+
+extern EFI_GUID gPlatformVariableHobGuid;
+
+#define LOAD_FAILSAFE_VARIABLE_NAME L"LoadEPSDConfigurationDefaults"
+#define LOAD_CUSTOMIZED_VARIABLE_NAME L"LoadSystemConfigurationDefaults"
+
+#endif
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h
new file mode 100644
index 0000000000..c47f040ca3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h
@@ -0,0 +1,720 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __SETUP_VARIABLE_H__
+#define __SETUP_VARIABLE_H__
+
+// ---------------------------------------------------------------------------
+//
+// Driver Configuration
+//
+// ---------------------------------------------------------------------------
+//
+//Copied from client SetupVariable.h
+#ifndef PLATFORM_SETUP_VARIABLE_NAME
+#define PLATFORM_SETUP_VARIABLE_NAME L"Setup"
+#endif
+
+#ifndef PCH_SETUP_VARIABLE
+#define PCH_SETUP_VARIABLE_NAME L"PchSetup"
+#endif
+
+#define EFI_EPG_GENERIC_VARIABLE_GUID \
+ { \
+ 0x8302cc54, 0xbb1a, 0x4564, {0x92, 0xdc, 0xae, 0x1a, 0xbb, 0x15, 0x5f, 0x35} \
+ }
+
+//
+// {EC87D643-EBA4-4bb5-A1E5-3F3E36B20DA9}
+//
+#define SYSTEM_CONFIGURATION_GUID \
+ { \
+ 0xec87d643, 0xeba4, 0x4bb5, {0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0xd, 0xa9} \
+ }
+
+#define PCH_SETUP_GUID \
+ { \
+ 0x4570b7f1, 0xade8, 0x4943, {0x8d, 0xc3, 0x40, 0x64, 0x72, 0x84, 0x23, 0x84} \
+ }
+
+#define FAKE_VARSTORE_GUID \
+ { \
+ 0xe57d5cb9, 0x148f, 0x444d, {0x9e, 0xcb, 0x9d, 0xf8, 0x65, 0x30, 0xa0, 0xb4} \
+ }
+
+#define SYSTEM_CONFIGURATION_CONTROL_GUID \
+ { \
+ 0x8d247131, 0x385e, 0x491f, {0xba, 0x68, 0x8d, 0xe9, 0x55, 0x30, 0xb3, 0xa6} \
+ }
+
+#define SYSTEM_CONFIGURATION_ICHPCIE_GUID \
+ { \
+ 0x10e023a7, 0x4ce5, 0x4a6a, {0xa1, 0xbb, 0xbd, 0xd0, 0x8d, 0x16, 0x37, 0x57} \
+ }
+
+#define SYSTEM_DEFAULT_CONFIGURATION_GUID \
+ { \
+ 0x99a96812, 0x4730, 0x4290, {0x8b, 0xfe, 0x7b, 0x4e, 0x51, 0x4f, 0xf9, 0x3b} \
+ }
+
+#define RESERVEMEMFLAG_VARIABLE_GUID \
+{\
+ 0xb87aa73f, 0xdcb3, 0x4533, {0x83, 0x98, 0x6c, 0x12, 0x84, 0x27, 0x28, 0x40} \
+}
+
+#define BMC_ENABLE_FLAG_GUID \
+{\
+ 0x7bb08ce4, 0x6988, 0x4c59, {0xb5, 0x37, 0xb4, 0xb1, 0xd5, 0xbe, 0xb0, 0x6e} \
+}
+
+#define MAX_PCH_PCI_EXPRESS_ROOT_PORTS 8
+#define PASSWORD_MAX_SIZE 16
+#define SHA256_DIGEST_LENGTH 32
+#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
+
+#define FAKE_VARSTORE_ID 0x1234
+#define ME_SETUP_STORAGE_ID 0x1235
+#define ICC_SETUP_ID 0x1236
+
+extern EFI_GUID gReserveMemFlagVariableGuid;
+
+#pragma pack(1)
+
+typedef struct {
+
+ UINT8 UserPassword[SHA256_DIGEST_LENGTH];
+ UINT8 AdminPassword[SHA256_DIGEST_LENGTH];
+ UINT8 Access;
+
+ //
+ // Keyboard
+ //
+ UINT8 Numlock;
+ UINT8 Ps2PortSwap;
+
+ //
+ // TPM
+ //
+ UINT8 TpmEnable;
+ UINT8 TpmState;
+ UINT8 MorState;
+
+ //
+ // XmlCli
+ //
+ UINT8 XmlCliSupport;
+ UINT8 SkipXmlComprs;
+ UINT8 PublishSetupPgPtr;
+ UINT32 XmlCLiDramCmosAddr;
+
+ //
+ // Breakpoints
+ //
+ UINT8 ValidationBreakpointType;
+ UINT16 bsdBreakpoint;
+
+ //
+ // Power State
+ //
+ UINT8 PowerState;
+
+ //
+ // Wake On Lan
+ //
+ UINT8 WakeOnLanS5;
+
+ //
+ // Boot from Network
+ //
+ UINT8 BootNetwork;
+
+ //
+ // Video
+ //
+ UINT8 VideoSelect;
+ UINT8 EfiWindowsInt10Workaround;
+ UINT8 UefiOptimizedBootToggle;
+
+ //
+ // Fan PWM Offset
+ //
+ UINT8 FanPwmOffset;
+
+ //
+ // Benchmark
+ //
+ UINT8 ApplicationProfile;
+
+ //
+ // PCI Minimum Secondary Bus Number
+ //
+ UINT8 PCIe_MultiSeg_Support;
+
+ //
+ UINT8 WakeOnLanSupport;
+ //
+ // Enable/disable for PCIe LOM by using GPO44/45
+ // NOT PCH LAN
+ //
+ UINT8 LomDisableByGpio;
+
+ UINT8 FpkPortConfig[4];
+ UINT8 FpkPortConfigPrev[4];
+ UINT8 FpkPortPresent[4];
+
+ // RTC WAKE
+ //
+ UINT8 WakeOnRTCS4S5;
+ UINT8 RTCWakeupTimeHour;
+ UINT8 RTCWakeupTimeMinute;
+ UINT8 RTCWakeupTimeSecond;
+ // PCI_EXPRESS_CONFIG, ROOT PORTS
+ //
+ // AJW: these cross the line, but depend on Platform Info
+ UINT8 PcieClockGatingDisabled ;
+ UINT8 PcieDmiAspm;
+ UINT8 PcieSBDE;
+ UINT8 GbePciePortNum;
+ UINT8 PciePortConfig1;
+ UINT8 PciePortConfig2;
+ UINT8 PciePortConfig3;
+ UINT8 PciePortConfig4;
+ UINT8 PciePortConfig5;
+
+ // GBE
+ UINT8 GbeEnabled;
+
+ // PCH Stepping
+ UINT8 PchStepping;
+
+ //
+ // XHCI Wake On USB
+ //
+ UINT8 XhciWakeOnUsbEnabled;
+
+ //
+ // EventLog
+ //
+//
+// SKX_TODO: add these for RAS, may be best to find new home for them in a new setup variable and setup page
+//
+ UINT8 SystemErrorEn;
+ //Viral, and IoMca are not supported in EP. Will need to wrap in an EX flag
+ UINT8 RasLogLevel;
+ UINT8 PoisonEn;
+ UINT8 ViralEn;
+ UINT8 CloakDevHideRegistersOs;
+ UINT8 ClearViralStatus;
+ UINT8 CloakingEn;
+ UINT8 UboxToPcuMcaEn;
+ UINT8 FatalErrSpinLoopEn;
+
+ UINT8 EmcaEn;
+ UINT8 EmcaIgnOptin;
+ UINT8 EmcaCsmiEn;
+ UINT16 EmcaCsmiThreshold;
+ UINT8 CsmiDynamicDisable;
+ UINT8 EmcaMsmiEn;
+ UINT8 ElogCorrErrEn;
+ UINT8 ElogMemErrEn;
+ UINT8 ElogProcErrEn;
+ UINT8 LmceEn;
+ UINT8 HideWriteDataParityLogs;
+ UINT8 UboxErrorMask;
+
+ UINT8 WheaSupportEn;
+ UINT8 WheaLogMemoryEn;
+ UINT8 WheaLogProcEn;
+
+ UINT8 WheaLogPciEn;
+ UINT8 AEPErrorInjEn;
+ UINT8 WheaErrorInjSupportEn;
+ UINT8 McaBankErrInjEn;
+ UINT8 WheaErrInjEn;
+ UINT8 WheaPcieErrInjEn;
+ UINT8 MeSegErrorInjEn;
+ UINT8 SgxErrorInjEn;
+ UINT8 PcieErrInjActionTable;
+
+ UINT8 MemErrEn;
+ UINT8 CorrMemErrEn;
+ UINT8 SpareIntSelect;
+ UINT8 PfdEn;
+ UINT8 DcpmmEccModeSwitch;
+ UINT8 FnvErrorEn;
+ UINT8 FnvErrorLowPrioritySignal; // 0 - No Log, 1 - SMI, 2 - ERR0#, 3 - BOTH
+ UINT8 FnvErrorHighPrioritySignal; // 0 - No Log, 1 - SMI, 2 - ERR0#, 3 - BOTH
+ UINT8 NgnAddressRangeScrub;
+ UINT8 NgnHostAlertDpa; //Signal Poison or Viral upon receiving DIMM Physical Address Error
+ UINT8 NgnHostAlertPatrolScrubUNC; //Signal DDRT interrupt upon receiving Uncorrectable Error for NGN Patrol Scrub
+ UINT8 ReportAlertSPA; //Include SPA when reporting DDRT alert. Only to disable for MCE recovery test.
+ UINT8 DcpmmUncPoison; // Poison media location for Uncorrectable error on Read (via patrol scrubber..)
+ UINT8 DdrtInternalAlertEn;
+
+ UINT8 IioErrorEn;
+ UINT8 OsNativeAerSupport;
+ UINT8 IoMcaEn;
+ UINT8 IioSev1Pcc;
+ UINT8 IioErrRegistersClearEn;
+ UINT8 IioErrorPin0En;
+ UINT8 IioErrorPin1En;
+ UINT8 IioErrorPin2En;
+ UINT8 LerEn;
+ UINT8 DisableMAerrorLoggingDueToLER;
+ UINT8 EdpcEn;
+ UINT8 EdpcInterrupt;
+ UINT8 EdpcErrCorMsg;
+ UINT8 PciePtlpEgrBlk;
+
+ UINT8 IioIrpErrorEn;
+ UINT8 IioMiscErrorEn;
+ UINT8 IioVtdErrorEn;
+ UINT8 IioDmaErrorEn;
+ UINT8 IioDmiErrorEn;
+ UINT8 IioPcieAddCorrErrorEn;
+ UINT8 IioPcieAddUnCorrEn;
+ UINT8 IioPcieAddRcvComWithUr;
+ UINT8 IioPcieAerSpecCompEn;
+ UINT8 ItcOtcCaMaEnable;
+ UINT8 PsfUrEnable;
+ UINT8 PmsbRouterParityErrEn;
+ UINT8 PcieErrEn;
+ UINT8 PcieCorrErrEn;
+ UINT8 PcieUncorrErrEn;
+ UINT8 PcieFatalErrEn;
+ UINT8 PcieCorErrCntr;
+ UINT16 PcieCorErrThres;
+ UINT8 PcieCorErrLimitEn;
+ UINT32 PcieCorErrLimit;
+ UINT8 PcieAerCorrErrEn;
+ UINT8 PcieAerAdNfatErrEn;
+ UINT8 PcieAerNfatErrEn;
+ UINT8 PcieAerFatErrEn;
+ UINT8 PcieAerEcrcEn;
+ UINT8 PcieAerSurpriseLinkDownEn;
+ UINT8 PcieAerUreEn;
+ UINT8 McaSpinLoop;
+ UINT8 IioOOBMode;
+
+// Endof RAS add
+ //Viral, and IoMca are not supported in EP. Will need to wrap in an EX flag
+
+ UINT8 McBankWarmBootClearError;
+ UINT8 ShutdownSuppression;
+ UINT8 KTIFailoverSmiEn;
+
+ UINT8 irpp0_parityError;
+ UINT8 irpp0_qtOverflow;
+ UINT8 irpp0_unexprsp;
+ UINT8 irpp0_csraccunaligned;
+ UINT8 irpp0_unceccCs1;
+ UINT8 irpp0_unceccCs0;
+ UINT8 irpp0_rcvdpoison;
+ UINT8 irpp0_crreccCs1;
+ UINT8 irpp0_crreccCs0;
+
+ UINT8 PropagateSerr;
+ UINT8 PropagatePerr;
+
+ //
+ // Boot Options
+ //
+ UINT8 serialDebugMsgLvl;
+ UINT8 serialDebugTrace;
+ UINT8 serialDebugMsgLvlTrainResults;
+ UINT8 ResetOnMemMapChange;
+ UINT8 ForceSetup;
+ UINT8 BiosGuardEnabled;
+ UINT8 BiosGuardPlatformSupported;
+ UINT8 EnableAntiFlashWearout;
+ UINT8 AntiFlashWearoutSupported;
+ UINT8 ReservedS1;
+
+ UINT8 Use1GPageTable;
+ //
+ // UINT8 QuietBoot;
+ //
+ UINT8 FastBoot;
+
+ // PFR {
+ UINT8 PfrSupported;
+ UINT8 PfrCpldRotReleaseVersion;
+ UINT8 PfrCpldRotSvn;
+ UINT8 PfrPchPfrActiveSvn;
+ UINT8 PfrPchPfmActiveMajorVersion;
+ UINT8 PfrPchPfmActiveMinorVersion;
+ UINT8 PfrBmcPfrActiveSvn;
+ UINT8 PfrBmcPfmActiveMajorVersion;
+ UINT8 PfrBmcPfmActiveMinorVersion;
+ UINT8 PfrPchPfrRecoverySvn;
+ UINT8 PfrPchPfmRecoveryMajorVersion;
+ UINT8 PfrPchPfmRecoveryMinorVersion;
+ UINT8 PfrBmcPfrRecoverySvn;
+ UINT8 PfrBmcPfmRecoveryMajorVersion;
+ UINT8 PfrBmcPfmRecoveryMinorVersion;
+ UINT8 PfrLockStatus;
+ UINT8 PfrProvisionStatus;
+ UINT8 PfrPitL1Status;
+ UINT8 PfrPitL2Status;
+ UINT8 PfrLock;
+ UINT8 PfrProvision;
+ UINT8 PfrUnProvision;
+ UINT8 PfrPitL1;
+ UINT8 PfrPitL2;
+ // PFR }
+
+ //
+ // Reserve Memory that is hidden from the OS.
+ //
+ UINT8 ReserveMem;
+ UINT64 ReserveStartAddr;
+ //
+ // Reserve TAGEC Memory
+ //
+ UINT8 TagecMem;
+
+ //Usb Configdata
+ UINT8 UsbMassDevNum;
+ UINT8 UsbLegacySupport;
+ UINT8 UsbEmul6064;
+ UINT8 UsbMassResetDelay;
+ UINT8 UsbNonBoot;
+ UINT8 UsbEmu1;
+ UINT8 UsbEmu2;
+ UINT8 UsbEmu3;
+ UINT8 UsbEmu4;
+ UINT8 UsbEmu5;
+ UINT8 UsbEmu6;
+ UINT8 UsbEmu7;
+ UINT8 UsbEmu8;
+ UINT8 UsbEmu9;
+ UINT8 UsbEmu10;
+ UINT8 UsbEmu11;
+ UINT8 UsbEmu12;
+ UINT8 UsbEmu13;
+ UINT8 UsbEmu14;
+ UINT8 UsbEmu15;
+ UINT8 UsbEmu16;
+ UINT8 UsbStackSupport;
+
+ // Console Redirection
+ UINT8 ConsoleRedirection;
+ UINT8 FlowControl;
+ UINT64 BaudRate;
+ UINT8 TerminalType;
+ UINT8 LegacyOsRedirection;
+ UINT8 TerminalResolution;
+ UINT8 DataBits;
+ UINT8 Parity;
+ UINT8 StopBits;
+
+#ifdef EFI_PCI_IOV_SUPPORT
+ UINT8 SystemPageSize;
+ UINT8 ARIEnable;
+ UINT8 ARIForward;
+ UINT8 SRIOVEnable;
+ UINT8 MRIOVEnable;
+#endif
+ //
+ // RAS
+ //
+
+//
+// Network setup entries - start here <><><><><>
+//
+ UINT8 LegacyPxeRom;
+ UINT8 EfiNetworkSupport;
+//
+// Network setup entries - end here <><><><><>
+//
+
+//
+// SERIALPORT BAUD RATE: Begin
+//
+ UINT32 SerialBaudRate;
+//
+// SERIALPORT BAUD RATE: END
+//
+
+ UINT8 BootAllOptions;
+ UINT8 SetShellFirst;
+ UINT8 ShellEntryTime;
+
+ //
+ // Overclocking related setup variables
+ //
+ UINT8 PlatformOCSupport;
+ UINT8 FilterPll;
+ UINT8 OverclockingSupport;
+
+ UINT8 CoreMaxOcRatio;
+ UINT8 CoreVoltageMode;
+ UINT16 CoreVoltageOverride;
+ UINT16 CoreVoltageOffset;
+ UINT8 CoreVoltageOffsetPrefix;
+ UINT16 CoreExtraTurboVoltage;
+
+ //
+ // OC related
+ //
+ UINT8 MemoryVoltage;
+ UINT8 MemoryVoltageDefault;
+ UINT8 tCL;
+
+ //
+ // CLR Related
+ //
+ UINT8 ClrMaxOcRatio;
+ UINT8 ClrVoltageMode;
+ UINT16 ClrVoltageOverride;
+ UINT16 ClrVoltageOffset;
+ UINT8 ClrVoltageOffsetPrefix;
+ UINT16 ClrExtraTurboVoltage;
+
+ //
+ // Uncore Related
+ //
+ UINT16 UncoreVoltageOffset;
+ UINT8 UncoreVoltageOffsetPrefix;
+ UINT16 IoaVoltageOffset;
+ UINT8 IoaVoltageOffsetPrefix;
+ UINT16 IodVoltageOffset;
+ UINT8 IodVoltageOffsetPrefix;
+
+ //
+ // SVID and FIVR Related
+ //
+ UINT8 SvidEnable;
+ UINT16 SvidVoltageOverride;
+ UINT8 FivrFaultsEnable;
+ UINT8 FivrEfficiencyEnable;
+
+//
+// UBA_START
+//
+ UINT8 SataInterfaceRAIDMode;
+ UINT8 sSataInterfaceRAIDMode;
+//
+// UBA_END
+//
+ UINT16 C01MemoryVoltage;
+ UINT16 C23MemoryVoltage;
+
+ UINT16 CpuVccInVoltage;
+
+ UINT8 VccIoVoltage;
+
+ UINT16 VariablePlatId;
+
+ //XTU 3.0
+
+ UINT8 FlexRatioOverrideDefault;
+ UINT8 RatioLimit1Default;
+ UINT8 RatioLimit2Default;
+ UINT8 RatioLimit3Default;
+ UINT8 RatioLimit4Default;
+ UINT8 OverclockingLockDefault;
+ UINT8 DdrRefClkDefault;
+ UINT8 DdrRatioDefault;
+ UINT8 tCLDefault;
+ UINT8 tCWLDefault;
+ UINT16 tFAWDefault;
+ UINT16 tRASDefault;
+ UINT16 tRCDefault;
+ UINT8 tRCDDefault;
+ UINT16 tREFIDefault;
+ UINT16 tRFCDefault;
+ UINT8 tRPDefault;
+ UINT8 tRPabDefault;
+ UINT8 tRRDDefault;
+ UINT8 tRTPDefault;
+ UINT8 tWRDefault;
+ UINT8 tWTRDefault;
+ UINT8 NModeDefault;
+ UINT8 CoreMaxOcRatioDefault;
+ UINT8 CoreVoltageModeDefault;
+ UINT16 CoreVoltageOverrideDefault;
+ UINT16 CoreVoltageOffsetDefault;
+ UINT8 CoreVoltageOffsetPrefixDefault;
+ UINT16 CoreExtraTurboVoltageDefault;
+ UINT8 GtOcSupportDefault;
+ UINT8 GtOcFrequencyDefault;
+ UINT16 GtExtraTurboVoltageDefault;
+ UINT16 GtOcVoltageDefault;
+ UINT8 GtVoltageModeDefault;
+ UINT16 GtVoltageOverrideDefault;
+ UINT16 GtVoltageOffsetDefault;
+ UINT8 GtVoltageOffsetPrefixDefault;
+ UINT8 ClrMaxOcRatioDefault;
+ UINT8 ClrVoltageModeDefault;
+ UINT16 ClrVoltageOverrideDefault;
+ UINT16 ClrVoltageOffsetDefault;
+ UINT8 ClrVoltageOffsetPrefixDefault;
+ UINT16 ClrExtraTurboVoltageDefault;
+ UINT16 UncoreVoltageOffsetDefault;
+ UINT8 UncoreVoltageOffsetPrefixDefault;
+ UINT16 IoaVoltageOffsetDefault;
+ UINT8 IoaVoltageOffsetPrefixDefault;
+ UINT16 IodVoltageOffsetDefault;
+ UINT8 IodVoltageOffsetPrefixDefault;
+ UINT8 SvidEnableDefault;
+ UINT16 SvidVoltageOverrideDefault;
+ UINT8 FivrFaultsEnableDefault;
+ UINT8 FivrEfficiencyEnableDefault;
+ UINT16 VrCurrentLimitDefault;
+ UINT8 EnableGvDefault;
+ UINT8 TurboModeDefault;
+ UINT8 PowerLimit1TimeDefault;
+ UINT16 PowerLimit1Default;
+ UINT16 PowerLimit2Default;
+
+
+ UINT8 RatioLimit1; //ratiolimit handling has changed in SKX. knobs might need to change too. Will have to revisit again.
+ UINT8 RatioLimit2;
+ UINT8 RatioLimit3;
+ UINT8 RatioLimit4;
+ UINT8 CpuRatio; // need to understand what is the difference between maxnonturboratio and cpuratio. if cpuratiooverride is 0, then cpuratio is same as maxnonturboratio. add this to platform cpu policy or socketsetup.
+ UINT8 CpuRatioOverride;
+ UINT8 IsTurboRatioDefaultsInitalized; // related to initializing all the vardefault. is this flow needed for HEDT/intended only for clients? no need for set up creation.
+
+
+ UINT8 DdrRefClk; //cant find any in purley. new one?
+ UINT8 PcieRatioDisabled;//need to check if this is applicable to HEDT. also no need to create a setup variable.
+ UINT8 NMode ;
+
+ UINT16 GtVoltageOffset; //existing but no set up option
+ UINT16 VrCurrentLimit;//done
+ //UINT8 SpdProfileSelected; same as XMPMode
+ UINT8 NModeSupport;
+ UINT8 WDTSupportforNextOSBoot; // no setup option needed
+ UINT16 TimeforNextOSBoot; // no setup optiom needed
+ UINT8 PlatformUnstable; // no set up option needed. this decides if all the vardefaults are needed.
+ UINT8 GtVoltageMode; //existing but no set up option
+ UINT8 DdrRatio;
+ UINT8 GtOcFrequency;
+ UINT16 GtExtraTurboVoltage; //existing but no set up option
+ UINT16 GtVoltageOverride; //existing but no set up option
+ UINT8 GtVoltageOffsetPrefix;
+ UINT8 GtOcSupport;
+ //
+ // CPU releated
+ //
+ UINT8 FlexOverrideEnable;
+ UINT8 FlexRatioOverride;
+ UINT8 PowerLimit3Override;
+ UINT32 PowerLimit3;
+ UINT8 PowerLimit3Time;
+ UINT8 PowerLimit3DutyCycle;
+ UINT8 PowerLimit3Lock;
+ UINT8 MemoryVoltageOverride;
+
+ //
+ // ICC Related
+ //
+ UINT8 BClkOverride;
+ UINT8 BclkAdjustable;
+ UINT8 DmiPegRatio;
+ UINT8 ReservedS2;
+ UINT8 ReservedS3;
+
+ UINT8 StorageOpROMSuppression;
+ UINT8 RsaSupport;
+
+ UINT8 ReservedS4;
+ UINT8 ReservedS5;
+
+ //
+ // PCIe Leaky Bucket Feature (requires Gen4 IP)
+ //
+ UINT64 ExpectedBer;
+ UINT32 Gen12TimeWindow;
+ UINT8 Gen34TimeWindow;
+ UINT8 Gen12ErrorThreshold;
+ UINT8 Gen34ErrorThreshold;
+ UINT8 Gen34ReEqualization;
+ UINT8 Gen2LinkDegradation;
+ UINT8 Gen3LinkDegradation;
+ UINT8 Gen4LinkDegradation;
+
+ //
+ // Crash Log Feature
+ //
+ UINT8 CrashLogFeature;
+ UINT8 CrashLogOnAllReset;
+ UINT8 CrashLogClear;
+ UINT8 CrashLogReArm;
+
+ //
+ // Error Control
+ //
+ UINT8 Ce2LmLoggingEn;
+ UINT8 KtiFirstCeLatchEn;
+ UINT8 PatrolScrubErrorReporting;
+ UINT8 LlcEwbErrorControl;
+ UINT8 KcsAccessPolicy;
+
+ //
+ // Platform Deep S5 Feature
+ //
+ UINT8 PlatformDeepS5;
+ UINT8 DeepS5DelayTime;
+
+ UINT8 EnableClockSpreadSpec;
+
+ //
+ // TCC Mode
+ //
+ UINT8 TccMode;
+} SYSTEM_CONFIGURATION;
+
+typedef struct {
+ UINT8 FakeItem;
+} FAKE_VARSTORE;
+
+#pragma pack()
+
+#define EFI_HDD_PRESENT 0x01
+#define EFI_HDD_NOT_PRESENT 0x00
+#define EFI_CD_PRESENT 0x02
+#define EFI_CD_NOT_PRESENT 0x00
+
+#define EFI_HDD_WARNING_ON 0x01
+#define EFI_CD_WARNING_ON 0x02
+#define EFI_SMART_WARNING_ON 0x04
+#define EFI_HDD_WARNING_OFF 0x00
+#define EFI_CD_WARNING_OFF 0x00
+#define EFI_SMART_WARNING_OFF 0x00
+
+
+extern EFI_GUID gMainPkgListGuid;
+extern EFI_GUID gAdvancedPkgListGuid;
+extern EFI_GUID gTpmPkgListGuid;
+extern EFI_GUID gSecurityPkgListGuid;
+extern EFI_GUID gBootOptionsPkgListGuid;
+extern EFI_GUID gServerMgmtPkgListGuid;
+
+
+#ifndef VFRCOMPILE
+
+extern EFI_GUID gEfiSetupVariableGuid;
+extern EFI_GUID gEfiSetupVariableDefaultGuid;
+extern EFI_GUID gEfiGlobalVariableControlGuid;
+
+typedef struct {
+ UINT8 ProcessController;
+} SYSTEM_CONFIGURATION_CONTROL;
+
+#endif
+
+#define SYSTEM_PASSWORD_ADMIN 0
+#define SYSTEM_PASSWORD_USER 1
+
+#define PASSWORD_ADMIN_NAME L"AdminName"
+#define PASSWORD_USER_NAME L"UserName"
+
+#endif // #ifndef _SETUP_VARIABLE
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h
new file mode 100644
index 0000000000..b5c8510f8c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h
@@ -0,0 +1,74 @@
+/** @file
+ uba config database head file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CONFIG_DATABASE_HOB_H_
+#define _UBA_CONFIG_DATABASE_HOB_H_
+
+
+#define UBA_CONFIG_HOB_SIGNATURE SIGNATURE_32('U', 'B', 'A', 'H')
+#define UBA_CONFIG_HOB_VERSION 0x01
+
+#define UBA_BOARD_SIGNATURE SIGNATURE_32('S', 'K', 'U', 'D')
+#define UBA_BOARD_VERSION 0x01
+
+//
+// Interface data between PEI & DXE
+// Should keep same align
+//
+#pragma pack (1)
+
+typedef struct _UBA_CONFIG_HOB_FIELD {
+ UINT32 Signature;
+ UINT32 Version;
+ EFI_GUID ResId;
+ UINT64 DataOffset;
+ UINT32 Size;
+} UBA_CONFIG_HOB_FIELD;
+
+typedef struct _UBA_CONFIG_HOB_HEADER {
+ UINT32 Signature;
+ UINT32 Version;
+ EFI_GUID DataGuid;
+ UINT32 HobLength;
+ UINT32 BoardId;
+ EFI_GUID BoardGuid;
+ CHAR8 BoardName[16];
+ UINT32 DataCount;
+ UBA_CONFIG_HOB_FIELD HobField[1];
+} UBA_CONFIG_HOB_HEADER;
+
+
+typedef struct _UBA_BOARD_NODE {
+ UINT32 Signature;
+ UINT32 Version;
+ LIST_ENTRY DataLinkHead;
+
+ UINT32 BoardId;
+ EFI_GUID BoardGuid;
+ CHAR8 BoardName[16];
+ UINT32 DataCount;
+} UBA_BOARD_NODE;
+
+typedef struct _UBA_CONFIG_NODE {
+ UINT32 Signature;
+ UINT32 Version;
+ LIST_ENTRY DataLink;
+
+ EFI_HANDLE Handle;
+ EFI_GUID ResId;
+ UINT32 Size;
+ VOID *Data;
+} UBA_CONFIG_NODE;
+
+#pragma pack ()
+
+#define BOARD_NODE_INSTANCE_FROM_THIS(p) CR(p, UBA_BOARD_NODE, DataLinkHead, UBA_BOARD_SIGNATURE)
+#define CONFIG_NODE_INSTANCE_FROM_THIS(p) CR(p, UBA_CONFIG_NODE, DataLink, UBA_BOARD_SIGNATURE)
+
+#endif // _UBA_CONFIG_DATABASE_HOB_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h
new file mode 100644
index 0000000000..47d73172bc
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h
@@ -0,0 +1,23 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IOAPIC_H_
+#define _IOAPIC_H_
+
+#define EFI_IO_APIC_INDEX_OFFSET 0x00
+#define EFI_IO_APIC_DATA_OFFSET 0x10
+#define EFI_IO_APIC_IRQ_ASSERTION_OFFSET 0x20
+#define EFI_IO_APIC_EOI_OFFSET 0x40
+
+#define EFI_IO_APIC_ID_REGISTER 0x0
+#define EFI_IO_APIC_ID_BITSHIFT 24
+#define EFI_IO_APIC_VER_REGISTER 0x1
+#define EFI_IO_APIC_BOOT_CONFIG_REGISTER 0x3
+#define EFI_IO_APIC_FSB_INT_DELIVERY 0x1
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h
new file mode 100644
index 0000000000..6389c393d6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h
@@ -0,0 +1,67 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MULTI_PLATFORM_SUPPORT_LIB_H_
+#define _MULTI_PLATFORM_SUPPORT_LIB_H_
+
+#define MAX_TEMP_BUFFER 0x5000
+//#define MULTI_PLATFORM_DEBUG TRUE
+
+
+
+
+/*++
+Description:
+
+ This function finds the matched default data and create GUID hob for it.
+
+Arguments:
+
+ DefaultId - Specifies the type of defaults to retrieve.
+ BoardId - Specifies the platform board of defaults to retrieve.
+
+Returns:
+
+ EFI_SUCCESS - The matched default data is found.
+ EFI_NOT_FOUND - The matched default data is not found.
+ EFI_OUT_OF_RESOURCES - No enough resource to create HOB.
+
+--*/
+
+EFI_STATUS
+CreateDefaultVariableHob (
+ IN UINT16 DefaultId,
+ IN UINT16 BoardId
+ );
+
+
+
+/**
+ Gets a vairable store header from FFS inserted by FCE
+
+ Arguments:
+
+ DefaultId - Specifies the type of defaults to retrieve.
+ BoardId - Specifies the platform board of defaults to retrieve.
+
+
+ @return The start address of VARIABLE_STORE_HEADER *. Null if cannot find it
+
+**/
+
+VOID * FindDefaultHobinFfs (
+ IN UINT16 DefaultId,
+ IN UINT16 BoardId
+ );
+
+
+
+
+
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h
new file mode 100644
index 0000000000..d94a483f89
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h
@@ -0,0 +1,17 @@
+/** @file
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+/**
+ Configure GPIO and SIO
+
+ @retval EFI_SUCCESS Operation success.
+**/
+
+EFI_STATUS
+BoardInit (
+ );
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h
new file mode 100644
index 0000000000..0dc9c690fe
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h
@@ -0,0 +1,87 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __PLATFORM_CLOCKS_LIB__
+#define __PLATFORM_CLOCKS_LIB__
+
+//
+// Known clock generator types
+//
+typedef enum {
+ ClockGeneratorCk410,
+ ClockGeneratorCk420,
+ ClockGeneratorCk440,
+ ClockGeneratorCk505,
+ ClockGeneratorMax
+} CLOCK_GENERATOR_TYPE;
+
+#define CLOCK_GENERATOR_ADDRESS 0xD2
+//
+// Clock generator details table
+//
+typedef struct {
+ CLOCK_GENERATOR_TYPE ClockType;
+ UINT8 ClockId;
+ UINT8 SpreadSpectrumByteOffset;
+ UINT8 SpreadSpectrumBitOffset;
+} CLOCK_GENERATOR_DETAILS;
+
+//
+// An arbitrary maximum length for clock generator buffers
+//
+#define MAX_CLOCK_GENERATOR_BUFFER_LENGTH 0x20
+
+//
+// CK410 Definitions
+//
+#define CK410_GENERATOR_ID 0x65
+#define CK410_GENERATOR_SPREAD_SPECTRUM_BYTE 1
+#define CK410_GENERATOR_SPREAD_SPECTRUM_BIT BIT0
+#define CK410_GENERATOR_CLOCK_FREERUN_BYTE 4
+#define CK410_GENERATOR_CLOCK_FREERUN_BIT (BIT0 | BIT1 | BIT2)
+
+//
+// CK420 Definitions
+//
+#define CK420_GENERATOR_ID 0x11 // IDT ICS932SQ420B
+#define CK420_GENERATOR_SPREAD_SPECTRUM_BYTE 1
+#define CK420_GENERATOR_SPREAD_SPECTRUM_BIT BIT0
+
+//
+// CK440 Definitions
+//
+#define CK440_GENERATOR_ID 0x12
+#define CK440_GENERATOR_SPREAD_SPECTRUM_BYTE 6
+#define CK440_GENERATOR_SPREAD_SPECTRUM_BIT BIT2
+
+//
+// CK505 Definitions
+//
+#define CK505_GENERATOR_ID 0x26 // Silego SLG505YC264B
+#define CK505_GENERATOR_SPREAD_SPECTRUM_BYTE 4
+#define CK505_GENERATOR_SPREAD_SPECTRUM_BIT (BIT0 | BIT1)
+
+#define CLOCK_GENERATOR_SETTINGS_PLATFORMSRP {0xFF, 0x9E, 0x3F, 0x00, 0x00, 0x0F, 0x08, 0x31, 0x0A, 0x17, 0xFF, 0xFE}
+#define CLOCK_GENERATOR_SETTINGS_PLATFORMDVP {0xFF, 0x9E, 0x3F, 0x00, 0x00, 0x0F, 0x08, 0x31, 0x0A, 0x17}
+
+EFI_STATUS
+ConfigureClockGenerator (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN CLOCK_GENERATOR_TYPE ClockType,
+ IN UINT8 ClockAddress,
+ IN UINTN ConfigurationTableLength,
+ IN OUT UINT8 *ConfigurationTable,
+ IN BOOLEAN EnableSpreadSpectrum,
+ IN CLOCK_GENERATOR_DETAILS *mSupportedClockGeneratorT,
+ IN BOOLEAN SecondarySmbus
+ );
+
+#define PEI_STALL_RESOLUTION 1
+
+#endif
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h
new file mode 100644
index 0000000000..16ea3d7493
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h
@@ -0,0 +1,83 @@
+/** @file
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLAT_OPROM_
+#define _PLAT_OPROM_
+#include <Protocol/PciIo.h>
+
+typedef enum _OPROM_LOAD_POLICY
+{
+ DONT_LOAD,
+ EXCLUSIVE_LOAD,
+ INCLUSIVE_LOAD
+} OPROM_LOAD_POLICY;
+
+/**
+ Decide if BIOS embdded option roms should be loaded for a certain PCI device.
+
+ @param PciIo PCI device to return the ROM image for.
+
+ @retval TRUE BIOS embedded option roms should not be loaded for the PCI device.
+ @retval FALSE BIOS embedded option roms could be loaded for the PCI device.
+**/
+
+BOOLEAN
+PlatformOpromLoadDevicePolicy (
+ IN EFI_PCI_IO_PROTOCOL *PciIo
+ );
+
+/**
+ For devices that support multiple option roms like FCoE, PXE, iSCSI etc., this function decides if one of these BIOS embdded option roms should be loaded for a certain PCI device based on platform choices.
+
+ @param PciHandle PCI device to return the ROM image for.
+ @param TableIndex The index pointing to the option rom in the platform option rom table for the PCI device.
+
+ @retval FALSE The specific BIOS embedded option rom should not be loaded for the PCI device.
+ @retval TRUE The specific BIOS embedded option rom could be loaded for a certain PCI device.
+**/
+
+OPROM_LOAD_POLICY
+PlatformOpromLoadTypePolicy (
+ IN EFI_HANDLE PciHandle,
+ IN UINTN TableIndex
+ );
+
+/**
+ Decide if a PCIe device option rom should be dispacthed.
+
+ @param PciHandle PCI device handle.
+
+ @retval FALSE The specific PCIe option rom should not be dispatched for the PCI device.
+ @retval TRUE The specific PCIe option rom could be dispatched for a certain PCI device.
+
+**/
+
+BOOLEAN
+PlatformOpromDispatchPolicy (
+ IN EFI_HANDLE DeviceHandle
+);
+
+/**
+ Enable the legacy console redirection before dispatch the legacy ORPOM or disable the legacy console redirection after dispatch
+ the legacy ORPOM based on setup option and SOL status.
+
+ @param Mode Subfunction.
+ @param CheckIsAhciRom If the device is legacy Ahci device.
+
+ @retval
+
+**/
+
+VOID
+PlatformOpromLegacyCRPolicy (
+ IN UINTN Mode,
+ IN BOOLEAN CheckIsAhciRom
+);
+
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h
new file mode 100644
index 0000000000..02c8411007
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h
@@ -0,0 +1,60 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __PLATFORM_SETUP_VAR_SYNC
+#define __PLATFORM_SETUP_VAR_SYNC
+#include <Base.h>
+#include "Uefi/UefiBaseType.h"
+
+/**
+ THis function can sync PC/OEM setup variable value to Rp setup variable before variable service is ready
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID* Header, - The input paramter should be VARIABLE_STORE_HEADER *VarStoreHeader.
+ Since we don't know whether SECURE_BOOT_ENABLE is used, we don't know to include which ***VariableFormat.h
+ So just use VOID* to pass to platform library
+ IN BOOLEAN CreateHobDataForRpDefaults - whether need to create a hob for RP setup variable only,
+ in normal boot case, we should set this to TRUE to make sure RP setup variable can always sync latest PC variable value
+
+
+
+ @return The number of Unicode characters.
+
+**/
+EFI_STATUS SyncSetupVariable (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID* Header,
+ IN BOOLEAN CreateHobDataForRpDefaults
+);
+
+
+/*++
+Description:
+
+ This function finds the matched default data and create GUID hob only for RP variable .
+ This is used to sync Pc variable to RP variable value
+
+Arguments:
+
+ DefaultId - Specifies the type of defaults to retrieve.
+ BoardId - Specifies the platform board of defaults to retrieve.
+
+Returns:
+
+ EFI_SUCCESS - The matched default data is found.
+ EFI_NOT_FOUND - The matched default data is not found.
+ EFI_OUT_OF_RESOURCES - No enough resource to create HOB.
+
+--*/
+
+EFI_STATUS
+CreateRPVariableHob (
+ IN UINT16 DefaultId,
+ IN UINT16 BoardId
+ );
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h
new file mode 100644
index 0000000000..82582bcd45
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h
@@ -0,0 +1,47 @@
+/** @file
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Library/IoLib.h>
+
+
+
+
+/*++
+Description:
+
+ This function is a hook for PlatformVariableInitPeiEntry
+
+--*/
+VOID PlatformVariableHookForEntry(
+ VOID
+);
+
+
+/*++
+Description:
+
+ This function allow platform to generate variable hob base on different event.
+
+Arguments:
+ IN VOID *Interface -point to EFI_PEI_READ_ONLY_VARIABLE2_PPI
+ IN OUT UINT8 *phobdata, -pont to hob data
+ IN OUT UINT16 *pDefaultId -pointer to defautlID
+
+Returns:
+ TRUE:platform have its own variable hob that need be createn
+ FALSE:platform don;t need to create variable hob in this case
+
+
+--*/
+BOOLEAN PlatformVariableHookForHobGeneration(
+ IN VOID *Interface,
+ IN OUT UINT8 *phobdata,
+ IN OUT UINT16 *pDefaultId
+);
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h
new file mode 100644
index 0000000000..ca8a2994c2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h
@@ -0,0 +1,58 @@
+/** @file
+ Read FFS Library.
+
+ @copyright
+ Copyright 2009 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __READ_FFS__
+#define __READ_FFS__
+#include <Base.h>
+#include <Pi/PiFirmwareVolume.h>
+
+#define MAX_COMPRESS_ITEM 196
+#define MAX_FFS_BUFFER_SIZE 8*1024
+#define COMPRESS_DUPLICATE 1
+#define COMPRESS_SINGLE 2
+
+#pragma pack(1)
+typedef struct {
+ UINT16 Value;
+ UINT16 Length;
+ UINT8 Type;
+ UINT16 Offset;
+} COMPRESS_ITEM;
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Count;
+ //COMPRESS_ITEM item[Count];
+} COMPRESS_HOBO_DATA;
+#pragma pack()
+
+
+BOOLEAN NormalHobToCompressHob(IN OUT VOID* hobAddr,IN OUT UINTN* size);
+BOOLEAN CompressHobToNormalHob(IN OUT VOID* hobAddr,OUT UINTN* size);
+
+//read a FFS from FV.
+UINT8*
+PreMemReadFFSFile (
+ IN EFI_FIRMWARE_VOLUME_HEADER* FwVolHeader,
+ IN EFI_GUID FFSGuid,
+ IN UINT32 FFSDataSize,
+ IN BOOLEAN skipheader
+ );
+
+EFI_STATUS
+ReadFFSFile (
+ IN EFI_FIRMWARE_VOLUME_HEADER* FwVolHeader,
+ IN EFI_GUID FFSGuid,
+ IN UINT32 FFSDataSize,
+ IN OUT VOID *FFSData,
+ OUT UINT32 *FFSSize,
+ IN BOOLEAN skipheader
+ );
+EFI_STATUS ValidateCommonFvHeader ( EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader );
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h
new file mode 100644
index 0000000000..43eb60e6ca
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h
@@ -0,0 +1,134 @@
+/** @file
+ This library abstracts read/write access for basic type data those values may be
+ stored into the different media.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SETUP_LIB_H_
+#define _SETUP_LIB_H_
+
+#include <SetupTable.h>
+
+typedef struct {
+ EFI_GUID *GuidValue;
+ CHAR16 *SetupName;
+ UINTN VariableSize;
+} GROUP_INFO;
+
+/**
+ This function provides a means by which to retrieve a value for a given option.
+
+ Returns the data, data type and data size specified by Guid and OptionNumber.
+
+ @param[in] Guid Pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] OptionNumber The option number to retrieve a current value for.
+ @param[out] DataType A pointer to basic data type of the retrieved data.
+ It is optional. It could be NULL.
+ @param[in, out] Data A pointer to the buffer to be retrieved.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid is NULL or DataSize is NULL or OptionNumber is invalid.
+ @retval EFI_BUFFER_TOO_SMALL Input data buffer is not enough.
+ @retval EFI_NOT_FOUND The given option is not found.
+
+**/
+EFI_STATUS
+EFIAPI
+GetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN OUT VOID *Data,
+ IN OUT UINTN DataSize
+ );
+
+/**
+ This function provides a means by which to set a value for a given option number.
+
+ Sets a buffer for the data specified by Guid and OptionNumber to the value specified by
+ Data and DataSize.
+ If DataSize is greater than the maximum size support by OptionNumber,
+ then set DataSize to the maximum size supported by OptionNumber.
+
+ @param[in] Guid Pointer to a 128-bit unique value that
+ designates which namespace to set a value from.
+ @param[in] OptionNumber The option number to set a current value for.
+ @param[in] Data A pointer to the buffer to set.
+ @param[in, out] DataSize The size, in bytes, of Buffer.
+
+ @retval EFI_SUCCESS Data is successfully updated.
+ @retval EFI_INVALID_PARAMETER OptionNumber is invalid, Guid is NULL, or Data is NULL, or DataSize is NULL.
+ @retval EFI_NOT_FOUND The given option is not found.
+ @retval EFI_UNSUPPORTED Set action is not supported.
+**/
+EFI_STATUS
+EFIAPI
+SetOptionData (
+ IN EFI_GUID *Guid,
+ IN UINTN OptionNumber,
+ IN VOID *Data,
+ IN UINTN DataSize
+ );
+
+/**
+ Get all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+GetEntireConfig (
+ IN OUT SETUP_DATA *SetupData
+ );
+
+/**
+ Set all data in the setup
+
+ @retval EFI_SUCCESS Data is committed successfully.
+ @retval EFI_INVALID_PARAMETER Guid is NULL.
+ @retval EFI_NOT_FOUND Guid is not found.
+ @retval EFI_DEVICE_ERROR Data can't be committed.
+**/
+EFI_STATUS
+EFIAPI
+SetEntireConfig (
+ IN SETUP_DATA *SetupData
+ );
+
+/**
+ Get Specified data in the setup
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid or Variable is null.
+ @retval EFI_NOT_FOUND The given option is not found.
+**/
+EFI_STATUS
+EFIAPI
+GetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ IN OUT VOID *Variable
+ );
+
+/**
+ Set Specified data in the setup
+
+ @retval EFI_SUCCESS Data is successfully reterieved.
+ @retval EFI_INVALID_PARAMETER Guid or Variable is null.
+ @retval EFI_NOT_FOUND The given option is not found.
+**/
+EFI_STATUS
+EFIAPI
+SetSpecificConfigGuid (
+ IN EFI_GUID *Guid,
+ IN VOID *Variable
+ );
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h
new file mode 100644
index 0000000000..291f687db3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h
@@ -0,0 +1,38 @@
+/** @file
+
+ @copyright
+ Copyright 2008 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_ACPI_UPDATE_LIB_H
+#define _PLATFORM_ACPI_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#define PLATFORM_ACPI_FIX_UPDATE_SIGNATURE SIGNATURE_32 ('A', 'C', 'P', 'F')
+#define PLATFORM_ACPI_FIX_UPDATE_VERSION 01
+
+
+// {81129EF8-391D-4f63-AE99-58517EC077E3}
+#define PLATFORM_ACPI_FIX_TABLE_GUID \
+{ 0x81129ef8, 0x391d, 0x4f63, { 0xae, 0x99, 0x58, 0x51, 0x7e, 0xc0, 0x77, 0xe3 } }
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ VOID *TablePtr;
+
+} ACPI_FIX_UPDATE_TABLE;
+
+EFI_STATUS
+PlatformGetAcpiFixTableDataPointer (
+ IN VOID **TablePtr
+);
+
+STATIC EFI_GUID gPlatformAcpiFixTableGuid = PLATFORM_ACPI_FIX_TABLE_GUID;
+
+#endif //_PLATFORM_ACPI_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h
new file mode 100644
index 0000000000..92b50c78dd
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h
@@ -0,0 +1,47 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_BOARD_SIO_INFO_H_
+#define _UBA_BOARD_SIO_INFO_H_
+
+#include <SioRegs.h>
+
+#define BOARD_SIO_INFO_DATA_SIGNATURE SIGNATURE_32 ('P', 'S', 'I', 'O')
+#define BOARD_SIO_INFO_DATA_VERSION 01
+
+// {32C1F731-C2CD-4325-888B-60A0C3DEBB30}
+#define PLATFORM_BOARD_SIO_INFO_DATA_GUID \
+{ 0x32c1f731, 0xc2cd, 0x4325, { 0x88, 0x8b, 0x60, 0xa0, 0xc3, 0xde, 0xbb, 0x30 } }
+
+//
+// board sio information table
+//
+typedef struct _PEI_BOARD_SIO_INFO{
+ //
+ // Header information
+ //
+ INT32 Signature;
+ INT32 Version;
+ //
+ // SIO initialization table
+ //
+ UINT8 SioIndexPort; // SIO Index Port value
+ UINT8 SioDataPort; // SIO Data Port value
+ SIO_INDEX_DATA *mSioInitTable; // SIO init table
+ UINT8 NumSioItems; // Number of items in the SIO init table.
+} PEI_BOARD_SIO_INFO;
+
+EFI_STATUS
+PlatformGetBoardSioInfo (
+ OUT PEI_BOARD_SIO_INFO *BoardSioInfoData
+);
+
+STATIC EFI_GUID gPlatformBoardSioInfoDataGuid = PLATFORM_BOARD_SIO_INFO_DATA_GUID;
+
+#endif
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h
new file mode 100644
index 0000000000..b5f97c9b1e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h
@@ -0,0 +1,49 @@
+/** @file
+ UBA ClockGen Update Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CLOCKGEN_UPDATE_LIB_H
+#define _UBA_CLOCKGEN_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#define PLATFORM_CLOCKGEN_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'C', 'L', 'K')
+#define PLATFORM_CLOCKGEN_UPDATE_VERSION 0x01
+
+// {CF3845B1-7EB0-44ef-9D67-A80ECE6FED73}
+#define PLATFORM_CLOCKGEN_CONFIG_DATA_GUID \
+{ 0xcf3845b1, 0x7eb0, 0x44ef, { 0x9d, 0x67, 0xa8, 0xe, 0xce, 0x6f, 0xed, 0x73 } }
+
+#define PLATFORM_NUMBER_OF_CLOCKGEN_DATA 20
+#define PLATFORM_CLOCKGEN_NO_ID 0xFF
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ UINTN IdOffset; // Clockgen ID register offset
+ UINT8 Id; // Clockgen ID
+ UINTN DataLength; // Number of clockgen data for write
+
+ UINTN SpreadSpectrumByteOffset;
+ UINT8 SpreadSpectrumValue;
+
+ UINT8 Data[PLATFORM_NUMBER_OF_CLOCKGEN_DATA];
+
+} PLATFORM_CLOCKGEN_UPDATE_TABLE;
+
+
+EFI_STATUS
+PlatformUpdateClockgen (
+ IN BOOLEAN EnableSpreadSpectrum
+);
+
+STATIC EFI_GUID gPlatformClockgenConfigDataGuid = PLATFORM_CLOCKGEN_CONFIG_DATA_GUID;
+
+#endif //_UBA_CLOCKGEN_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h
new file mode 100644
index 0000000000..c4114a0d54
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h
@@ -0,0 +1,51 @@
+/** @file
+ UBA Clocks Config Library Header File.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CLOCKS_CONFIG_LIB_H
+#define _UBA_CLOCKS_CONFIG_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+
+#define PLATFORM_CLOCKS_CONFIG_SIGNATURE SIGNATURE_32 ('P', 'C', 'L', 'K')
+#define PLATFORM_CLOCKS_CONFIG_VERSION 01
+
+// {34F1B964-49C7-4CB6-B9BD-7043B37C90BE}
+#define PLATFORM_CLOCKS_CONFIG_DATA_GUID \
+{ 0x34f1b964, 0x49c7, 0x4cb6, { 0xb9, 0xbd, 0x70, 0x43, 0xb3, 0x7c, 0x90, 0xbe } }
+
+typedef
+EFI_STATUS
+(*CLOCKS_CONFIG_CALLBACK) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *Ppi
+);
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ CLOCKS_CONFIG_CALLBACK CallUpdate;
+
+} PLATFORM_CLOCKS_CONFIG_TABLE;
+
+EFI_STATUS
+ConfigurePlatformClock (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *SmbusPpi
+);
+
+STATIC EFI_GUID gPlatformClocksConfigDataGuid = PLATFORM_CLOCKS_CONFIG_DATA_GUID;
+
+#endif //_UBA_CLOCKS_CONFIG_LIB_H
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h
new file mode 100644
index 0000000000..d8c692c17d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h
@@ -0,0 +1,26 @@
+/** @file
+ UBA GPIO Initializtion Library Header File.
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_GPIO_INIT_LIB_H
+#define _UBA_GPIO_INIT_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+// {9282563E-AE17-4E12-B1DC-070F29F37120}
+#define PLATFORM_GPIO_INIT_DATA_GUID { 0x9282563e, 0xae17, 0x4e12, { 0xb1, 0xdc, 0x7, 0xf, 0x29, 0xf3, 0x71, 0x20 } }
+
+EFI_STATUS
+PlatformInitGpios (
+ VOID
+);
+
+extern EFI_GUID gPlatformGpioInitDataGuid;
+
+#endif //_UBA_GPIO_INIT_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h
new file mode 100644
index 0000000000..e227a75c94
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h
@@ -0,0 +1,259 @@
+/** @file
+ UBA GPIO Platform Specific functions Library Header File.
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_GPIO_PLATFORM_CONFIG_LIB_H
+#define _UBA_GPIO_PLATFORM_CONFIG_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Library/GpioLib.h>
+
+#define PLATFORM_GPIO_CONFIG_SIGNATURE SIGNATURE_32 ('P', 'G', 'P', 'O')
+#define PLATFORM_GPIO_CONFIG_VERSION 01
+
+
+// {d2c2adab-80c0-4a13-a0f8-adede1a51740}
+#define PLATFORM_GPIO_PLATFORM_CONFIG_DATA_GUID \
+{ 0xd2c2adab, 0x80c0, 0x4a13, { 0xa0, 0xf8, 0xad, 0xed, 0xe1, 0xa5, 0x17, 0x40 } }
+
+//Use this define to skip the usage of a gpio in PLATFORM_GPIO_CONFIG_TABLE
+#define UNUSED_GPIO 0x0
+
+typedef struct _PLATFORM_GPIO_CONFIG_TABLE{
+ //
+ // Header information
+ //
+ INT32 Signature;
+ INT32 Version;
+
+ GPIO_INIT_CONFIG GpioMfgPad;
+ GPIO_PAD ReservedM;
+ GPIO_PAD RcvJumper;
+
+ //
+ // ADR pads
+ //
+ GPIO_PAD FmAdrTrigger;
+ GPIO_PAD AdrEnable;
+
+ //
+ // OemProcMemInit pad
+ //
+ GPIO_PAD ForceTo1SConfigModePad;
+
+ //
+ // Used by PC Platforms
+ //
+ GPIO_PAD QATGpio;
+
+ //
+ // Used by PC platforms. This is the first GPIO pad of the pad series to indicate Board ID
+ //
+ GPIO_PAD BoardID0Gpio;
+
+ //
+ // Used to indicate proper pin to for WHEA SCI detection
+ //
+ GPIO_PAD WheaSciPad;
+
+ //
+ // Used to generate CPU HP SMI
+ //
+ GPIO_PAD CpuHpSmiPad;
+
+ //
+ // Used to signal FPGA error
+ //
+ GPIO_PAD FpgaErrorSingnalPad1;
+
+ //
+ // Used to signal FPGA error
+ //
+ GPIO_PAD FpgaErrorSingnalPad2;
+
+ // Flash Security override
+ GPIO_PAD FlashSecOverride;
+} PLATFORM_GPIO_CONFIG_TABLE;
+
+
+/**
+
+ Reads GPIO pin to get Flash Security Override jumper status
+
+ @param[out] Jumper - The pointer to the jumper output
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetFlashSecOvrdVal (
+ OUT UINT32 *Jumper
+);
+/**
+
+ Reads GPIO pin to get recovery jumper status
+
+ @param[out] RcvJumper - The pointer to the Recovery jumper input
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetRcvPadVal (
+ OUT UINT32 *RcvJumper
+);
+
+
+/**
+
+ Reads GPIO pin to get FM ADR trigger pin
+
+ @param[out] FmAdrTrigger - The pointer to the ADR trigger input
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetFmAdrTriggerPadVal (
+ OUT UINT32 *FmAdrTrigger
+);
+
+/**
+
+ Sets GPIO pin to enable ADR on the board
+
+ @param Set[in] - If TRUE means the pas should go 'high', otherwise 'low'
+
+ @retval Status - Success if GPIO set properly
+
+**/
+EFI_STATUS
+GpioSetAdrEnablePadOutVal (
+ IN BOOLEAN Set
+);
+
+/**
+
+ Reads GPIO pin to Force to S1 config mode pad
+
+ @param[out] ForceS1ConfigPad - Input value of the Froce S1 Config pad
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetForcetoS1ConfigModePadVal (
+ OUT UINT32 *ForceS1ConfigPad
+);
+
+/**
+
+ Reads GPIO pin related to QAT
+
+ @param[out] QATPad - Input value of the QAT pad
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetQATPadVal (
+ OUT UINT32 *QATPad
+);
+
+
+/**
+
+ Get GPIO pin for SCI detection for WHEA RAS functionality
+
+ @param[out] WheaSciPad - Input value of the Whea SCI pad
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetWheaSciPad (
+ OUT UINT32 *WheaSciPad
+);
+
+/**
+
+ Get GPIO pin for FPGA error detection RAS functionality
+
+ @param[out] FpgaErrorPad -The input value of the FPGA error 1 pad
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetFpgaErrorPad1 (
+ OUT UINT32 *FpgaErrorPad
+);
+
+
+/**
+
+ Get GPIO pin for FPGA error detection RAS functionality
+
+ @param[out] FpgaErrorPad -The input value of the FPGA error 2 pad
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetFpgaErrorPad2 (
+ OUT UINT32 *FpgaErrorPad
+);
+
+/**
+
+ Get GPIO pin for CPU HP SMI detection for RAS functionality
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetCpuHpSmiPad (
+ OUT UINT32 *CpuHpSmiPad
+);
+
+
+/**
+
+ Reads GPIO pin that is first bit of the Board ID indication word
+
+ @param[out] BoardID0Gpio - Input value of the first Board ID pad
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetBoardId0PadVal (
+ OUT UINT32 *BoardID0Gpio
+);
+
+
+/**
+
+ Checks whether the MDF jumper has been set
+
+ @param None
+
+ @retval ManufacturingMode - TRUE when MFG jumper is on, FALSE otherwise
+
+**/
+BOOLEAN
+IsManufacturingMode (
+ VOID
+);
+
+
+STATIC EFI_GUID gPlatformGpioPlatformConfigDataGuid = PLATFORM_GPIO_PLATFORM_CONFIG_DATA_GUID;
+
+#endif //_UBA_GPIO_PLATFORM_CONFIG_LIB_H
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h
new file mode 100644
index 0000000000..72c3766908
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h
@@ -0,0 +1,51 @@
+/** @file
+ UBA GPIO Update Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_GPIO_UPDATE_LIB_H
+#define _UBA_GPIO_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#define PLATFORM_GPIO_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'G', 'P', 'O')
+#define PLATFORM_GPIO_UPDATE_VERSION 01
+
+// {E02C2982-0009-46f6-AF19-DF52BB9742BF}
+#define PLATFORM_GPIO_CONFIG_DATA_GUID \
+{ 0xe02c2982, 0x9, 0x46f6, { 0xaf, 0x19, 0xdf, 0x52, 0xbb, 0x97, 0x42, 0xbf } }
+
+#define PLATFORM_NUMBER_OF_GPIO_REGISTERS 20
+#define PLATFORM_END_OF_GPIO_LIST 0xFFFFFFFF
+
+#define GPIO_NO_OR 0
+#define GPIO_NO_AND 0xFFFFFFFF
+
+
+typedef struct {
+ UINT32 Register;
+ UINT32 Value;
+} GPIO_DATA;
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ GPIO_DATA Gpios[PLATFORM_NUMBER_OF_GPIO_REGISTERS];
+
+} PLATFORM_GPIO_UPDATE_TABLE;
+
+
+EFI_STATUS
+PlatformUpdateGpios (
+ VOID
+);
+
+STATIC EFI_GUID gPlatformGpioConfigDataGuid = PLATFORM_GPIO_CONFIG_DATA_GUID;
+
+#endif //_UBA_GPIO_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h
new file mode 100644
index 0000000000..49204ca2b1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h
@@ -0,0 +1,52 @@
+/** @file
+ UBA Hsio Ptss Table Config Library Header File.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_HSIO_PTSS_TABLE_CONFIG_LIB_H
+#define _UBA_HSIO_PTSS_TABLE_CONFIG_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/PchPolicy.h>
+#include <PchSetupVariable.h>
+
+#define PLATFORM_HSIO_PTSS_TABLE_SIGNATURE SIGNATURE_32 ('P', 'H', 'P', 'T')
+#define PLATFORM_HSIO_PTSS_TABLE_VERSION 01
+
+// {47EA4CA7-F89A-42E6-89F0-20F4B72BA616}
+#define PLATFORM_HSIO_PTSS_TABLE_GUID \
+{ 0x47ea4ca7, 0xf89a, 0x42e6, { 0x89, 0xf0, 0x20, 0xf4, 0xb7, 0x2b, 0xa6, 0x16 } }
+
+typedef
+VOID
+(*HSIO_PTSS_TABLE_CONFIG_CALLBACK) (
+ IN PCH_SETUP *PchSetup,
+ IN OUT PCH_POLICY_PPI *PchPolicy
+
+);
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ HSIO_PTSS_TABLE_CONFIG_CALLBACK CallUpdate;
+
+} PLATFORM_HSIO_PTSS_CONFIG_TABLE;
+
+EFI_STATUS
+InstallPlatformHsioPtssTable (
+ IN PCH_SETUP *PchSetup,
+ IN OUT PCH_POLICY_PPI *PchPolicy
+);
+
+STATIC EFI_GUID gPlatformHsioPtssTableGuid = PLATFORM_HSIO_PTSS_TABLE_GUID;
+
+#endif //_UBA_HSIO_PTSS_TABLE_CONFIG_LIB_H
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h
new file mode 100644
index 0000000000..dc47de6bd7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h
@@ -0,0 +1,227 @@
+/** @file
+ UBA IIO Config Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_IIO_CONFIG_LIB_H
+#define _UBA_IIO_CONFIG_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <IioPlatformData.h>
+
+#define PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'I', 'I', 'O')
+#define PLATFORM_IIO_CONFIG_UPDATE_VERSION 01
+#define PLATFORM_IIO_CONFIG_UPDATE_VERSION_2 02
+#define PLATFORM_IIO_CONFIG_UPDATE_VERSION_3 03
+#define PLATFORM_IIO_CONFIG_UPDATE_VERSION_UNSUPPORTED 0x20
+
+// {EB35ED63-EACA-4e29-9516-7EDF1F818837}
+#define PLATFORM_IIO_CONFIG_DATA_GUID \
+{ 0xeb35ed63, 0xeaca, 0x4e29, { 0x95, 0x16, 0x7e, 0xdf, 0x1f, 0x81, 0x88, 0x37 } }
+
+// {3093F83B-5934-473e-8523-24BF297EE684}
+#define PLATFORM_IIO_CONFIG_DATA_GUID_1 \
+{ 0x3093f83b, 0x5934, 0x473e, { 0x85, 0x23, 0x24, 0xbf, 0x29, 0x7e, 0xe6, 0x84 } }
+
+// {1C5267A4-634B-4bf2-BFF8-9A1164E6D198}
+#define PLATFORM_IIO_CONFIG_DATA_GUID_2 \
+{ 0x1c5267a4, 0x634b, 0x4bf2, { 0xbf, 0xf8, 0x9a, 0x11, 0x64, 0xe6, 0xd1, 0x98 } }
+
+// {1E486CCA-048E-4702-B28C-0B677201683A}
+#define PLATFORM_IIO_CONFIG_DATA_GUID_3 \
+{ 0x1e486cca, 0x48e, 0x4702, { 0xb2, 0x8c, 0xb, 0x67, 0x72, 0x1, 0x68, 0x3a } }
+
+// {6FE6C559-4F35-4111-98E1-332A251512F3}
+#define PLATFORM_IIO_CONFIG_DATA_DXE_GUID \
+{ 0x6fe6c559, 0x4f35, 0x4111, { 0x98, 0xe1, 0x33, 0x2a, 0x25, 0x15, 0x12, 0xf3 } }
+
+// {0F722F2A-650F-448a-ABB7-04EECD75BB30}
+#define PLATFORM_IIO_CONFIG_DATA_DXE_GUID_1 \
+{ 0xf722f2a, 0x650f, 0x448a, { 0xab, 0xb7, 0x4, 0xee, 0xcd, 0x75, 0xbb, 0x30 } }
+
+// {EBD11A00-8C5C-4f71-BB9E-5394032B01F4}
+#define PLATFORM_IIO_CONFIG_DATA_DXE_GUID_2 \
+{ 0xebd11a00, 0x8c5c, 0x4f71, { 0xbb, 0x9e, 0x53, 0x94, 0x3, 0x2b, 0x1, 0xf4 } }
+
+// {123BD082-3201-465c-B139-0CB8C77208F8}
+#define PLATFORM_IIO_CONFIG_DATA_DXE_GUID_3 \
+{ 0x123bd082, 0x3201, 0x465c, { 0xb1, 0x39, 0xc, 0xb8, 0xc7, 0x72, 0x8, 0xf8 } }
+
+#define ENABLE 1
+#define DISABLE 0
+#define NO_SLT_IMP 0xFF
+#define SLT_IMP 1
+#define HIDE 1
+#define NOT_HIDE 0
+#define VPP_PORT_MAX 0xFF
+#define VPP_ADDR_MAX 0xFF
+#define PWR_VAL_MAX 0xFF
+#define PWR_SCL_MAX 0xFF
+#define SMB_ADDR_MAX 0xFF
+#define SMB_DATA_MAX 0xFF
+#define NO_BIF_INPUT 0xFF
+#define NOT_EXIST 0xFF
+
+typedef
+EFI_STATUS
+(*IIO_VAR_UPDATE_CALLBACK) (
+ IN IIO_GLOBALS *IioGlobalData
+);
+
+typedef struct _PLATFORM_IIO_BIFURCATION_ENTRY {
+ UINT8 Socket;
+ UINT8 IouNumber;
+ UINT8 Bifurcation;
+} IIO_BIFURCATION_DATA_ENTRY;
+
+typedef struct _PLATFORM_IIO_BIFURCATION_ENTRY_EX {
+ UINT8 Socket;
+ UINT8 IouNumber;
+ UINT8 Bifurcation;
+ UINT8 ExtnCardSMBusPort; //SMBus Port for the PCIe extension card - use to dynamically determine PCIe bifurcation
+ UINT8 ExtnCardSMBusAddress; //SMBus address for the PCIe extension card - use to dynamically determine PCIe bifurcation
+ UINT8 MuxSMBusAddress; // SMBus address for the Mux - used to communicate to different group of devices
+ UINT8 MuxSMBusChannel; // SMBus channel for the Mux - used to select the channel that will be used to communicate to the different group of devices.
+} IIO_BIFURCATION_DATA_ENTRY_EX;
+
+typedef struct _PLATFORM_IIO_SLOT_ENTRY {
+ UINT8 PortIndex;
+ UINT16 SlotNumber; // 0xff if slot not implemented , Slot number if slot implemented
+ BOOLEAN InterLockPresent;
+ UINT8 SlotPowerLimitScale;
+ UINT8 SlotPowerLimitValue;
+ BOOLEAN HotPlugCapable;
+ UINT8 VppPort; // 0xff if Vpp not enabled
+ UINT8 VppAddress;
+ BOOLEAN PcieSSDCapable;
+ UINT8 PcieSSDVppPort; // 0xff if Vpp not enabled
+ UINT8 PcieSSDVppAddress;
+ BOOLEAN Hidden;
+} IIO_SLOT_CONFIG_DATA_ENTRY;
+
+typedef struct _PLATFORM_IIO_SLOT_ENTRY_EX {
+ UINT8 PortIndex; //( {1,2,3,4} = {1A,,1B,,1C,1D} ), ( {5,6,7,8} = {2A,2B,2C,2D} ), ( {9,10,11,12} = {3A,3B,3C,3D}),...
+ UINT16 SlotNumber; // 0xff if slot not implemented , Slot number if slot implemented
+ BOOLEAN InterLockPresent; // Yes / No
+ UINT8 SlotPowerLimitScale;
+ UINT8 SlotPowerLimitValue;
+ BOOLEAN HotPlugCapable; // Yes / No
+ UINT8 VppPort; // 0xff if Vpp not enabled
+ UINT8 VppAddress;
+ BOOLEAN PcieSSDCapable; // Yes / No
+ UINT8 PcieSSDVppPort; // 0xff if Vpp not enabled
+ UINT8 PcieSSDVppAddress; // 0xff if Vpp not enabled
+ BOOLEAN Hidden; // deprecate this as it should be purely based on bifurcation
+
+ BOOLEAN CommonClock; // Yes / No - whether the both side of the link are in same clock domain or not
+ BOOLEAN SRIS; // Yes / No - in case of distinct clocking whether the separate ref. clk supports SSC or not
+ BOOLEAN UplinkPortConnected; // Yes / No - indicate the PCIe RP is connected to Uplink port of another chip
+ BOOLEAN RetimerConnected; // Yes / No - BIOS would have overhead to bifurcate the retimers explicitly
+ UINT8 RetimerSMBusAddress; // SMBus address to read the retimer status and bifurcate if required
+ UINT8 RetimerSMBusChannel; // SMBus Mux channel to read the retimer status and bifurcate if required
+ UINT8 RetimerWidth; // Retimer width to determine adjacent Retimers for the same PCIe slot
+ UINT8 MuxSMBusAddress; // SMBus address for the Mux - used to communicate to different group of devices
+ UINT8 MuxSMBusChannel; // SMBus channel for the Mux - used to select the channel that will be used to communicate to the different group of devices.
+
+ BOOLEAN ExtensionCardSupport; // Yes / No, any PCIe Port extension card which are supported in board thro' SMBus address (typically BW5)
+ UINT8 ExtnCardSMBusPort; //SMBus Port for the PCIe extension card - use to dynamically determine PCIe bifurcation
+ UINT8 ExtnCardSMBusAddress; //SMBus address for the PCIe extension card - use to dynamically determine PCIe bifurcation
+ BOOLEAN ExtnCardRetimerSupport; //yes - retimer on this PCIe extension card (BW5), or No
+ UINT8 ExtnCardRetimerSMBusAddress; // SMBus address to read the retimer status and bifurcate if required
+ UINT8 ExtnCardRetimerWidth; // use to determine adjacent Retimers to the x16 PCIe slot on which this Riser is mounted
+ BOOLEAN ExtnCardHotPlugCapable; // yes / No, independent of board, indicates slot in which this PCIe extn. Card is mounted
+ UINT8 ExtnCardHPVppPort; // 0xff if VPP not enabled
+ UINT8 ExtnCardHPVppAddress; // 0xff if VPP not enabled
+
+ UINT8 RetimerConnectCount; // number of Retimers (1 or 2) intercepted between the PCIe port and the slot device. Retimer may appear mutually exclusive.
+} IIO_SLOT_CONFIG_DATA_ENTRY_EX;
+
+
+typedef struct _PLATFORM_IIO_CONFIG_UPDATE_TABLE {
+ UINT32 Signature;
+ UINT32 Version;
+ IIO_BIFURCATION_DATA_ENTRY *IioBifurcationTablePtr;
+ UINTN IioBifurcationTableSize;
+ IIO_VAR_UPDATE_CALLBACK CallUpdate;
+ IIO_SLOT_CONFIG_DATA_ENTRY *IioSlotTablePtr;
+ UINTN IioSlotTableSize;
+} PLATFORM_IIO_CONFIG_UPDATE_TABLE;
+
+typedef struct _PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX {
+ UINT32 Signature;
+ UINT32 Version;
+ IIO_BIFURCATION_DATA_ENTRY_EX *IioBifurcationTablePtr;
+ UINTN IioBifurcationTableSize;
+ IIO_VAR_UPDATE_CALLBACK CallUpdate;
+ IIO_SLOT_CONFIG_DATA_ENTRY_EX *IioSlotTablePtr;
+ UINTN IioSlotTableSize;
+} PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX;
+
+typedef struct {
+ UINT8 MuxSmbAddress;
+ UINT8 MuxSmbChannel;
+ UINT8 SmbAddress0;
+ UINT8 SmbAddress1;
+ UINT8 RegOffset;
+ UINT8 RegValue;
+} MUX_SMB_ADDR;
+
+typedef struct _PLATFORM_IIO_CONFIG_UPDATE_TABLE_3 {
+ UINT32 Signature;
+ UINT32 Version;
+ IIO_BIFURCATION_DATA_ENTRY_EX *IioBifurcationTablePtr;
+ UINTN IioBifurcationTableSize;
+ IIO_VAR_UPDATE_CALLBACK CallUpdate;
+ IIO_SLOT_CONFIG_DATA_ENTRY_EX *IioSlotTablePtr;
+ UINTN IioSlotTableSize;
+ MUX_SMB_ADDR *RetimerInitTablePtr;
+} PLATFORM_IIO_CONFIG_UPDATE_TABLE_3;
+
+typedef struct {
+ UINT8 PortHide[8];
+} PCIE_PORT_HIDE_TABLE;
+
+EFI_STATUS
+PlatformIioConfigInit (
+ IN OUT IIO_BIFURCATION_DATA_ENTRY **BifurcationTable,
+ IN OUT UINT8 *BifurcationEntries,
+ IN OUT IIO_SLOT_CONFIG_DATA_ENTRY **SlotTable,
+ IN OUT UINT8 *SlotEntries
+);
+
+EFI_STATUS
+PlatformIioConfigInit2 (
+ IN UINT8 SkuPersonalityType,
+ IN OUT IIO_BIFURCATION_DATA_ENTRY **BifurcationTable,
+ IN OUT UINT8 *BifurcationEntries,
+ IN OUT IIO_SLOT_CONFIG_DATA_ENTRY **SlotTable,
+ IN OUT UINT8 *SlotEntries
+);
+
+EFI_STATUS
+PlatformUpdateIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+);
+
+EFI_STATUS
+PlatformUpdateIioConfig_EX (
+ IN IIO_GLOBALS *IioGlobalData
+);
+
+STATIC EFI_GUID gPlatformIioConfigDataGuid = PLATFORM_IIO_CONFIG_DATA_GUID;
+STATIC EFI_GUID gPlatformIioConfigDataGuid_1 = PLATFORM_IIO_CONFIG_DATA_GUID_1;
+STATIC EFI_GUID gPlatformIioConfigDataGuid_2 = PLATFORM_IIO_CONFIG_DATA_GUID_2;
+STATIC EFI_GUID gPlatformIioConfigDataGuid_3 = PLATFORM_IIO_CONFIG_DATA_GUID_3;
+
+STATIC EFI_GUID gPlatformIioConfigDataDxeGuid = PLATFORM_IIO_CONFIG_DATA_DXE_GUID;
+STATIC EFI_GUID gPlatformIioConfigDataDxeGuid_1 = PLATFORM_IIO_CONFIG_DATA_DXE_GUID_1;
+STATIC EFI_GUID gPlatformIioConfigDataDxeGuid_2 = PLATFORM_IIO_CONFIG_DATA_DXE_GUID_2;
+STATIC EFI_GUID gPlatformIioConfigDataDxeGuid_3 = PLATFORM_IIO_CONFIG_DATA_DXE_GUID_3;
+
+#endif //_UBA_IIO_CONFIG_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h
new file mode 100644
index 0000000000..874be715f9
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h
@@ -0,0 +1,47 @@
+/** @file
+ UBA Iio Port Bifurcation Init Library Header File.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_IIO_PORT_BIFURCATION_INIT_LIB_H
+#define _UBA_IIO_PORT_BIFURCATION_INIT_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Uefi/UefiSpec.h>
+#include <IioPlatformData.h>
+
+#define IIO_PORT_BIFURCATION_INIT_SIGNATURE SIGNATURE_32 ('P', 'B', 'I', 'F')
+#define IIO_PORT_BIFURCATION_INIT_VERSION 01
+
+// {853E5958-B3D6-4D98-A77C-100BB4ED940B}
+#define IIO_PORT_BIFURCATION_INIT_GUID \
+{ 0x853e5958, 0xb3d6, 0x4d98, { 0xa7, 0x7c, 0x10, 0xb, 0xb4, 0xed, 0x94, 0xb } }
+
+typedef
+VOID
+(*IIO_PORT_BIFURCATION_INIT_CALLBACK) (
+ IN IIO_GLOBALS *IioGlobalData
+);
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ IIO_PORT_BIFURCATION_INIT_CALLBACK CallUpdate;
+
+} IIO_PORT_BIFURCATION_INIT_TABLE;
+
+EFI_STATUS
+IioPortBifurcationInit (
+ IN IIO_GLOBALS *IioGlobalData
+);
+
+STATIC EFI_GUID gIioPortBifurcationInitDataGuid = IIO_PORT_BIFURCATION_INIT_GUID;
+
+#endif //_UBA_IIO_PORT_BIFURCATION_INIT_LIB_H
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h
new file mode 100644
index 0000000000..8984a70f9f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h
@@ -0,0 +1,115 @@
+/** @file
+
+ @copyright
+ Copyright 2008 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_OPTION_ROM_UPDATE_LIB_
+#define _PLATFORM_OPTION_ROM_UPDATE_LIB_
+
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Guid/SetupVariable.h>
+#include <Guid/SocketVariable.h>
+#include "OnboardNicStructs.h"
+
+#define PLATFORM_OPTION_ROM_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'B', 'D', 'S')
+#define PLATFORM_OPTION_ROM_UPDATE_VERSION 01
+
+
+// {371BD79C-DE79-4c5f-AA2B-BC9EBEFA988F}
+STATIC EFI_GUID gPlatformOptionRomUpdateConfigDataGuid =
+{ 0x371bd79c, 0xde79, 0x4c5f, { 0xaa, 0x2b, 0xbc, 0x9e, 0xbe, 0xfa, 0x98, 0x8f } };
+
+
+typedef struct {
+ EFI_GUID FileName;
+ UINTN Segment;
+ UINTN Bus;
+ UINTN Device;
+ UINTN Function;
+ UINT16 VendorId;
+ UINT16 DeviceId;
+} PC_PCI_OPTION_ROM_TABLE;
+
+
+typedef
+BOOLEAN
+(*PLATFORM_PCIE_ROOT_PORT_CHECK_CALLBACK) (
+ IN UINTN Bus,
+ IN UINT32 PcieSlotOpromBitMap
+ );
+
+typedef
+EFI_STATUS
+(*PLATFORM_GET_OPTIONROM_TABLE) (
+ IN PC_PCI_OPTION_ROM_TABLE **OptionRomTable
+ );
+
+typedef
+EFI_STATUS
+(*PLATFORM_GET_NIC_SETUP_CONFIG) (
+ IN NIC_SETUP_CONFIGURATION_STUCT **NicSetupConfigTable,
+ IN UINTN *NumOfConfig
+ );
+
+typedef
+EFI_STATUS
+(*PLATFORM_GET_NIC_CAPABILITY_TABLE) (
+ IN NIC_OPTIONROM_CAPBILITY_STRUCT **NicCapabilityTable,
+ IN UINTN *NumOfNicCapTable
+ );
+
+typedef
+EFI_STATUS
+(*PLATFORM_SETUP_PCIE_SLOT_NUMBER ) (
+ OUT UINT8 *PcieSlotItemCtrl
+ );
+
+typedef struct
+{
+ UINT32 Signature;
+ UINT32 Version;
+
+ PLATFORM_PCIE_ROOT_PORT_CHECK_CALLBACK CallCheckRootPort;
+ PLATFORM_GET_OPTIONROM_TABLE GetOptionRomTable;
+ PLATFORM_GET_NIC_SETUP_CONFIG GetNicSetupConfigTable;
+ PLATFORM_GET_NIC_CAPABILITY_TABLE GetNicCapabilityTable;
+ PLATFORM_SETUP_PCIE_SLOT_NUMBER SetupSlotNumber;
+
+} PLATFORM_OPTION_ROM_UPDATE_DATA;
+
+
+BOOLEAN
+PlatformCheckPcieRootPort (
+ IN UINTN Bus,
+ IN UINT32 PcieSlotOpromBitMap
+);
+
+EFI_STATUS
+PlatformGetOptionRomTable (
+ IN PC_PCI_OPTION_ROM_TABLE **OptionRomTable
+);
+
+EFI_STATUS
+PlatformGetNicSetupConfigTable (
+ IN NIC_SETUP_CONFIGURATION_STUCT **NicSetupConfigTable,
+ IN UINTN *NumOfConfig
+ );
+
+EFI_STATUS
+PlatformGetNicCapabilityTable (
+ IN NIC_OPTIONROM_CAPBILITY_STRUCT **NicCapabilityTable,
+ IN UINTN *NumOfNicCapTable
+ );
+
+EFI_STATUS
+PlatformSetupPcieSlotNumber (
+ OUT UINT8 *PcieSlotItemCtrl
+);
+
+#endif //_PLATFORM_OPTION_ROM_UPDATE_LIB_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h
new file mode 100644
index 0000000000..23e4c146b7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h
@@ -0,0 +1,44 @@
+/** @file
+ UBA PCD Update Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_PCD_UPDATE_LIB_H
+#define _UBA_PCD_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#define PLATFORM_PCD_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'P', 'C', 'D')
+#define PLATFORM_PCD_UPDATE_VERSION 01
+
+// {D5081573-B3B6-4a1f-9FBC-C3DEDA04CD49}
+#define PLATFORM_PCD_CONFIG_DATA_GUID \
+{ 0xd5081573, 0xb3b6, 0x4a1f, { 0x9f, 0xbc, 0xc3, 0xde, 0xda, 0x4, 0xcd, 0x49 } }
+
+typedef
+EFI_STATUS
+(*PCD_UPDATE_CALLBACK) (
+ VOID
+);
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+
+ PCD_UPDATE_CALLBACK CallUpdate;
+
+} PLATFORM_PCD_UPDATE_TABLE;
+
+EFI_STATUS
+PlatformUpdatePcds (
+ VOID
+);
+
+STATIC EFI_GUID gPlatformPcdConfigDataGuid = PLATFORM_PCD_CONFIG_DATA_GUID;
+
+#endif //_UBA_PCD_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h
new file mode 100644
index 0000000000..f6bcd535cb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h
@@ -0,0 +1,63 @@
+/** @file
+
+ @copyright
+ Copyright 2008 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_PCH_EARLY_UPDATE_LIB_H
+#define _PLATFORM_PCH_EARLY_UPDATE_LIB_H
+
+
+#include <Base.h>
+#include <PiPei.h>
+
+#include <Guid/SetupVariable.h>
+
+#define PLATFORM_PCH_EARLY_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'P', 'C', 'H')
+#define PLATFORM_PCH_EARLY_UPDATE_VERSION 01
+
+
+// {1763F1D2-6A47-43f8-8279-3765A6929060}
+#define PLATFORM_PCH_EARLY_CONFIG_DATA_GUID \
+{ 0x1763f1d2, 0x6a47, 0x43f8, { 0x82, 0x79, 0x37, 0x65, 0xa6, 0x92, 0x90, 0x60 } }
+
+
+typedef
+EFI_STATUS
+(*PLATFORM_PCH_LAN_CONFIG) (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+);
+
+typedef
+EFI_STATUS
+(*PLATFORM_EARLY_INIT_HOOK) (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+);
+
+typedef struct
+{
+ UINT32 Signature;
+ UINT32 Version;
+
+ PLATFORM_PCH_LAN_CONFIG ConfigLan;
+ PLATFORM_EARLY_INIT_HOOK InitLateHook;
+
+} PLATFORM_PCH_EARLY_UPDATE_TABLE;
+
+
+EFI_STATUS
+PlatformPchLanConfig (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+);
+
+EFI_STATUS
+PlatformInitLateHook (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+);
+
+
+STATIC EFI_GUID gPlatformPchEarlyConfigDataGuid = PLATFORM_PCH_EARLY_CONFIG_DATA_GUID;
+
+#endif //_PLATFORM_PCH_EARLY_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h
new file mode 100644
index 0000000000..e8a64a7a10
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h
@@ -0,0 +1,130 @@
+/** @file
+ PCH PCIe Bifurcation Update Library Header File.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_PCIE_BIFURCATION_UPDATE_LIB_H
+#define _UBA_PCIE_BIFURCATION_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Library/PchPcieRpLib.h>
+
+#define PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'P', 'C', 'I')
+#define PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_VERSION 01
+
+typedef struct {
+ UINT8 PortIndex;
+ UINT16 SlotNumber; // 0xff if slot not implemented , Slot number if slot implemented
+ BOOLEAN InterLockPresent; // Yes / No
+ UINT8 SlotPowerLimitScale;
+ UINT8 SlotPowerLimitValue;
+ BOOLEAN HotPlugCapable; // Yes / No
+ UINT8 VppPort; // 0xff if Vpp not enabled
+ UINT8 VppAddress;
+ BOOLEAN PcieSSDCapable; // Yes / No
+ UINT8 PcieSSDVppPort; // 0xff if Vpp not enabled
+ UINT8 PcieSSDVppAddress; // 0xff if Vpp not enabled
+ BOOLEAN Hidden; // deprecate this as it should be purely based on bifurcation
+
+ BOOLEAN CommonClock; // Yes / No - whether the both side of the link are in same clock domain or not
+ BOOLEAN UplinkPortConnected; // Yes / No - indicate the PCIe RP is connected to Uplink port of another chip
+ BOOLEAN RetimerConnected; // Yes / No - BIOS would have overhead to bifurcate the retimers explicitly
+ UINT8 RetimerSMBusAddress; // SNBus address to read the retimer status and bifurcate if required
+
+ BOOLEAN ExtensionCardSupport; // Yes / No, any PCIe Port extension card which are supported in board thro' SMBus address (typically BW5)
+ UINT8 ExtnCardSMBusPort; //SMBus Port for the PCIe extension card - use to dynamically determine PCIe bifurcation
+ UINT8 ExtnCardSMBusAddress; //SNBus address for the PCIe extension card - use to dynamically determine PCIe bifurcation
+ BOOLEAN ExtnCardRetimerSupport; //yes - retimer on this PCIe extension card (BW5), or No
+ UINT8 ExtnCardRetimerSMBusAddress; // SNBus address to read the retimer status and bifurcate if required
+ BOOLEAN ExtnCardHotPlugCapable; // yes / No, independent of board, indicates slot in which this PCIe extn. Card is mounted
+ UINT8 ExtnCardHPVppPort; // 0xff if VPP not enabled
+ UINT8 ExtnCardHPVppAddress; // 0xff if VPP not enabled
+
+ UINT8 RetimerConnectCount; // number of Retimers (1 or 2) intercepted between the PCIe port and the slot device. Retimer may appear mutually exclusive.
+} PCH_SLOT_CONFIG_DATA_ENTRY_EX;
+
+// {187576ac-fec1-41bf-91f6-7d1ace7f2bee}
+#define PLATFORM_UBA_PCIE_BIFURCATION_GUID \
+{ 0x187576ac, 0xfec1, 0x41bf, { 0x91, 0xf6, 0x7d, 0x1a, 0xce, 0x7f, 0x2b, 0xee } }
+
+typedef
+EFI_STATUS
+(*PCIE_BIFURCATION_UPDATE_CALLBACK) (
+ IN OUT PCIE_BIFURCATION_CONFIG **PchPcieBifurcationConfig,
+ IN OUT PCH_SLOT_CONFIG_DATA_ENTRY_EX **PchSlotConfig
+);
+
+typedef struct _PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_TABLE{
+ UINT32 Signature;
+ UINT32 Version;
+ PCIE_BIFURCATION_UPDATE_CALLBACK CallPcieBifurcationUpdate;
+} PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_TABLE;
+
+#define ENABLE 1
+#define DISABLE 0
+#define NO_SLT_IMP 0xFF
+#define SLT_IMP 1
+#define HIDE 1
+#define NOT_HIDE 0
+#define VPP_PORT_0 0
+#define VPP_PORT_1 1
+#define VPP_PORT_MAX 0xFF
+#define VPP_ADDR_MAX 0xFF
+#define PWR_VAL_MAX 0xFF
+#define PWR_SCL_MAX 0xFF
+#define SMB_ADDR_MAX 0xFF
+#define NO_BIF_INPUT 0xFF
+#define PORT_0_INDEX 0
+#define PORT_1_INDEX 1
+#define PORT_2_INDEX 2
+#define PORT_3_INDEX 3
+#define PORT_4_INDEX 4
+#define PORT_5_INDEX 5
+#define PORT_6_INDEX 6
+#define PORT_7_INDEX 7
+#define PORT_8_INDEX 8
+#define PORT_9_INDEX 9
+#define PORT_10_INDEX 10
+#define PORT_11_INDEX 11
+#define PORT_12_INDEX 12
+#define PORT_13_INDEX 13
+#define PORT_14_INDEX 14
+#define PORT_15_INDEX 15
+#define PORT_16_INDEX 16 // Added dummy ports(16-27) TODO_FHF
+#define PORT_17_INDEX 17
+#define PORT_18_INDEX 18
+#define PORT_19_INDEX 19
+#define PORT_20_INDEX 20
+#define PORT_21_INDEX 21
+#define PORT_22_INDEX 22
+#define PORT_23_INDEX 23
+#define PORT_24_INDEX 24
+#define PORT_25_INDEX 25
+#define PORT_26_INDEX 26
+#define PORT_27_INDEX 27
+
+//-----------------------------------------------------------------------------------
+// PCIE port index for SKX
+//------------------------------------------------------------------------------------
+#define SOCKET_0_INDEX 0
+#define SOCKET_1_INDEX 21
+#define SOCKET_2_INDEX 42
+#define SOCKET_3_INDEX 63
+#define SOCKET_4_INDEX 84
+#define SOCKET_5_INDEX 105
+#define SOCKET_6_INDEX 126
+#define SOCKET_7_INDEX 147
+
+EFI_STATUS
+PlatformGetPchPcieBifurcationConfig (
+ IN OUT PCIE_BIFURCATION_CONFIG **PchPcieBifurcationConfig,
+ IN OUT PCH_SLOT_CONFIG_DATA_ENTRY_EX **PchSlotConfig
+);
+STATIC EFI_GUID gPlatformUbaPcieBifurcationGuid = PLATFORM_UBA_PCIE_BIFURCATION_GUID;
+
+#endif //_UBA_PCIE_BIFURCATION_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h
new file mode 100644
index 0000000000..429e63e6ec
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h
@@ -0,0 +1,25 @@
+/** @file
+ Uba Liarary Definition Header File.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_PLAT_LIB_H_
+#define _UBA_PLAT_LIB_H_
+
+#include "UbaAcpiUpdateLib.h"
+#include "UbaOpromUpdateLib.h"
+#include "UbaPchEarlyUpdateLib.h"
+#include "UbaClkGenUpdateLib.h"
+#include "UbaGpioUpdateLib.h"
+#include "UbaPcdUpdateLib.h"
+#include "UbaSoftStrapUpdateLib.h"
+#include "UbaIioConfigLib.h"
+#include "UbaSlotUpdateLib.h"
+#include "UbaSystemBoardInfoLib.h"
+#include "UbaSystemConfigUpdateLib.h"
+
+#endif // _UBA_PLAT_LIB_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h
new file mode 100644
index 0000000000..54272ae2d2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h
@@ -0,0 +1,124 @@
+/** @file
+ UBA Slot Update Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_SLOT_UPDATE_LIB_H
+#define _UBA_SLOT_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+
+#define PLATFORM_SLOT_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'S', 'L', 'T')
+#define PLATFORM_SLOT_UPDATE_VERSION 01
+
+// {BE1CC570-03FC-4a44-8068-5B6E36CAEBB2}
+#define PLATFORM_SLOT_DATA_GUID \
+{ 0xbe1cc570, 0x03fc, 0x4a44, { 0x80, 0x68, 0x5b, 0x6e, 0x36, 0xca, 0xeb, 0xb2 } }
+
+// {226763AE-972C-4e3c-80D1-73B25E8CBBA3}
+#define PLATFORM_SLOT_DATA_GUID2 \
+{ 0x226763ae, 0x972c, 0x4e3c, { 0x80, 0xd1, 0x73, 0xb2, 0x5e, 0x8c, 0xbb, 0xa3 } };
+
+// {56F676D3-24DF-4c77-A336-009DAE693598}
+#define PLATFORM_SLOT_DATA_GUID2_1 \
+{ 0x56f676d3, 0x24df, 0x4c77, { 0xa3, 0x36, 0x01, 0x9d, 0xae, 0x69, 0x35, 0x98 } };
+
+
+// {B93613E1-48F0-4b32-B3A8-4FEDFC7C1365}
+#define PLATFORM_SLOT_DATA_DXE_GUID \
+{ 0xb93613e1, 0x48f0, 0x4b32, { 0xb3, 0xa8, 0x4f, 0xed, 0xfc, 0x7c, 0x13, 0x65 } }
+
+// {8185B70E-9A20-4fc4-A1D6-77D54A736518}
+#define PLATFORM_SLOT_DATA_DXE_GUID2 \
+{ 0x8185b70e, 0x9a20, 0x4fc4, { 0xa1, 0xd6, 0x77, 0xd5, 0x4a, 0x73, 0x65, 0x18 } };
+
+// {A87C540B-3D69-4c3b-B7F7-6383589C21CE}
+#define PLATFORM_SLOT_DATA_DXE_GUID2_1 \
+{ 0xa87c540b, 0x3d69, 0x4c3b, { 0xb7, 0xf7, 0x63, 0x83, 0x58, 0x9c, 0x21, 0xce } };
+
+// {B4CB70B3-558D-4478-84CA-22616034EA16}
+#define PLATFORM_PCI_SLOT_IMPLEMENTED_GUID \
+{ 0xb4cb70b3, 0x558d, 0x4478, { 0x84, 0xca, 0x22, 0x61, 0x60, 0x34, 0xea, 0x16 } };
+
+typedef struct _IIO_BROADWAY_ADDRESS_DATA_ENTRY {
+ UINT8 Socket;
+ UINT8 IouNumber;
+ UINT8 BroadwayAddress; // 0xff, no override bifurcation settings.
+ // 0-2 BW5 card can be present
+} IIO_BROADWAY_ADDRESS_DATA_ENTRY;
+
+typedef
+UINT8
+(*PLATFORM_GET_IOU_SETTING) (
+ IN UINT8 IOU2Data
+);
+
+typedef
+UINT8
+(*PLATFORM_GET_IOU2_SETTING) (
+ IN UINT8 SkuPersonalityType,
+ IN UINT8 IOU2Data
+);
+
+typedef struct _PLATFORM_SLOT_UPDATE_TABLE {
+ UINT32 Signature;
+ UINT32 Version;
+ IIO_BROADWAY_ADDRESS_DATA_ENTRY *BroadwayTablePtr;
+ PLATFORM_GET_IOU_SETTING GetIOU2Setting;
+ UINT8 FlagValue;
+} PLATFORM_SLOT_UPDATE_TABLE;
+
+typedef struct _PLATFORM_SLOT_UPDATE_TABLE2 {
+ UINT32 Signature;
+ UINT32 Version;
+ IIO_BROADWAY_ADDRESS_DATA_ENTRY *BroadwayTablePtr;
+ PLATFORM_GET_IOU_SETTING GetIOU0Setting;
+ UINT8 FlagValue;
+ PLATFORM_GET_IOU2_SETTING GetIOU2Setting;
+} PLATFORM_SLOT_UPDATE_TABLE2;
+
+typedef struct _PLATFORM_PCH_PCI_SLOT_IMPLEMENTED_UPDATE_TABLE {
+ UINT32 Signature;
+ UINT32 Version;
+ UINT8 *SlotImplementedTableDataPtr;
+} PLATFORM_PCH_PCI_SLOT_IMPLEMENTED_UPDATE_TABLE;
+
+EFI_STATUS
+PlatformGetSlotTableData (
+ IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
+ IN OUT UINT8 *IOU2Setting,
+ IN OUT UINT8 *FlagValue
+);
+
+EFI_STATUS
+PlatformGetSlotTableData2 (
+ IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
+ IN OUT UINT8 *IOU0Setting,
+ IN OUT UINT8 *FlagValue,
+ IN OUT UINT8 *IOU2Setting,
+ IN UINT8 SkuPersonalityType
+);
+
+EFI_STATUS
+PlatformPchGetPciSlotImplementedTableData (
+ IN OUT UINT8 **SlotImplementedTable
+);
+
+STATIC EFI_GUID gPlatformSlotDataGuid = PLATFORM_SLOT_DATA_GUID;
+STATIC EFI_GUID gPlatformSlotDataGuid2 = PLATFORM_SLOT_DATA_GUID2;
+STATIC EFI_GUID gPlatformSlotDataGuid2_1 = PLATFORM_SLOT_DATA_GUID2_1;
+
+
+STATIC EFI_GUID gPlatformSlotDataDxeGuid = PLATFORM_SLOT_DATA_DXE_GUID;
+STATIC EFI_GUID gPlatformSlotDataDxeGuid2 = PLATFORM_SLOT_DATA_DXE_GUID2;
+STATIC EFI_GUID gPlatformSlotDataDxeGuid2_1 = PLATFORM_SLOT_DATA_DXE_GUID2_1;
+
+STATIC EFI_GUID gPlatformPciSlotImplementedGuid = PLATFORM_PCI_SLOT_IMPLEMENTED_GUID;
+
+
+#endif //_UBA_SLOT_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h
new file mode 100644
index 0000000000..a790b7c55a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h
@@ -0,0 +1,57 @@
+/** @file
+ UBA PCH Softstrap Update Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_SOFT_STRAP_UPDATE_LIB_H
+#define _UBA_SOFT_STRAP_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Protocol/Spi.h>
+
+#define PLATFORM_SOFT_STRAP_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'S', 'T', 'P')
+#define PLATFORM_SOFT_STRAP_UPDATE_VERSION 02
+
+// {F06383FE-54BD-4ae1-9C99-1DC83B6A7277}
+#define PLATFORM_PCH_SOFTSTRAP_CONFIG_DATA_GUID \
+{ 0xf06383fe, 0x54bd, 0x4ae1, { 0x9c, 0x99, 0x1d, 0xc8, 0x3b, 0x6a, 0x72, 0x77 } }
+
+STATIC EFI_GUID gPlatformPchSoftStrapConfigDataGuid = PLATFORM_PCH_SOFTSTRAP_CONFIG_DATA_GUID;
+
+typedef struct _PLATFORM_PCH_SOFTSTRAP_FIXUP_ENTRY {
+ UINT8 SoftStrapNumber;
+ UINT8 BitfieldOffset;
+ UINT8 BitfieldLength;
+ UINT32 Value;
+} PLATFORM_PCH_SOFTSTRAP_FIXUP_ENTRY;
+
+typedef
+VOID
+(*PLATFORM_SPECIFIC_PCH_SOFTSTRAP_UPDATE) (
+ IN UINT8 *FlashDescriptorCopy
+ );
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Version;
+ PLATFORM_PCH_SOFTSTRAP_FIXUP_ENTRY *PchSoftStrapTablePtr;
+ PLATFORM_SPECIFIC_PCH_SOFTSTRAP_UPDATE PchSoftStrapPlatformSpecificUpdate;
+} PLATFORM_PCH_SOFTSTRAP_UPDATE;
+
+
+EFI_STATUS
+GetPchSoftSoftStrapTable (
+ IN VOID **PchSoftStrapTable
+ );
+
+VOID
+PlatformSpecificPchSoftStrapUpdate (
+ IN OUT UINT8 *FlashDescriptorCopy
+ );
+
+#endif //_UBA_SOFT_STRAP_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h
new file mode 100644
index 0000000000..e4c980e170
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h
@@ -0,0 +1,36 @@
+/** @file
+ UBA System Board Info Library Header File.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_SYSTEM_BOARD_INFO_LIB_H
+#define _UBA_SYSTEM_BOARD_INFO_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <SystemBoard.h>
+
+#define SYSTEM_SYSTEM_BOARD_INFO_SIGNATURE SIGNATURE_32 ('I', 'N', 'F', 'O')
+#define SYSTEM_SYSTEM_BOARD_INFO_VERSION 01
+
+typedef DXE_SYSTEM_BOARD_INFO *(*SYSTEM_BOARD_INFO_CALLBACK) ();
+
+typedef struct
+{
+ UINT32 Signature;
+ UINT32 Version;
+ SYSTEM_BOARD_INFO_CALLBACK CallUpdate;
+} SYSTEM_BOARD_INFO_DATA;
+
+EFI_STATUS
+GetSystemBoardInfo (
+ IN OUT DXE_SYSTEM_BOARD_INFO **SystemboardInfoTableBuffer
+ );
+
+extern EFI_GUID gSystemBoardInfoConfigDataGuid;
+
+#endif //_UBA_SYSTEM_BOARD_INFO_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h
new file mode 100644
index 0000000000..fd8f30daee
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h
@@ -0,0 +1,42 @@
+/** @file
+ UBA System Config Update Library Header File.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_SYSTEM_CONFIG_UPDATE_LIB_H_
+#define _UBA_SYSTEM_CONFIG_UPDATE_LIB_H_
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Guid/SetupVariable.h>
+
+#define SYSTEM_CONFIG_UPDATE_SIGNATURE SIGNATURE_32 ('S', 'C', 'O', 'N')
+#define SYSTEM_CONFIG_UPDATE_VERSION 01
+
+STATIC EFI_GUID gSystemConfigUpdateDataGuid =
+{ 0x41037136, 0x8834, 0x4F35, { 0xBB, 0x10, 0x28, 0x0, 0x87, 0xAD, 0xB2, 0x22 } };
+
+typedef
+VOID
+(*IIO_DEFAULT_CONFIG_UPDATE_CALLBACK) (
+ IN SYSTEM_CONFIGURATION *Default
+ );
+
+typedef struct
+{
+ UINT32 Signature;
+ UINT32 Version;
+ IIO_DEFAULT_CONFIG_UPDATE_CALLBACK CallUpdateIioConfig;
+} SYSTEM_CONFIG_UPDATE_DATA;
+
+EFI_STATUS
+UpdateIioDefaultConfig (
+ IN SYSTEM_CONFIGURATION *Default
+ );
+
+#endif //_UBA_SYSTEM_CONFIG_UPDATE_LIB_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h
new file mode 100644
index 0000000000..96cabc7dd8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h
@@ -0,0 +1,51 @@
+/** @file
+ UBA USB OC Update Library Header File.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_USBOC_UPDATE_LIB_H
+#define _UBA_USBOC_UPDATE_LIB_H
+
+#include <Base.h>
+#include <Uefi.h>
+#include <ConfigBlock/UsbConfig.h>
+#include <ConfigBlock/Usb2PhyConfig.h>
+
+#define PLATFORM_USBOC_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'U', 'S', 'B')
+#define PLATFORM_USBOC_UPDATE_VERSION 02
+
+// {88238275-5922-46b6-9e35-656df55df44c}
+#define PEI_PLATFORM_USBOC_CONFIG_DATA_GUID \
+{ 0x88238275, 0x5922, 0x46f6, { 0x9e, 0x35, 0x65, 0x6d, 0xf5, 0x5d, 0xf4, 0x4c } }
+// {2638009e-3850-4e4b-b05d-042a32dbb9d1}
+#define DXE_PLATFORM_USBOC_CONFIG_DATA_GUID \
+{ 0x2638009e, 0x3850, 0x4e4b, { 0xb0, 0x5d, 0x04, 0x2a, 0x32, 0xdb, 0xb9, 0xd1 } }
+
+typedef
+EFI_STATUS
+(*USBOC_UPDATE_CALLBACK) (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+);
+
+typedef struct _PLATFORM_USBOC_UPDATE_TABLE{
+ UINT32 Signature;
+ UINT32 Version;
+ USBOC_UPDATE_CALLBACK CallUsbOcUpdate;
+} PLATFORM_USBOC_UPDATE_TABLE;
+
+EFI_STATUS
+PlatformGetUsbOcMappings (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+);
+STATIC EFI_GUID gPeiPlatformUbaOcConfigDataGuid = PEI_PLATFORM_USBOC_CONFIG_DATA_GUID;
+STATIC EFI_GUID gDxePlatformUbaOcConfigDataGuid = DXE_PLATFORM_USBOC_CONFIG_DATA_GUID;
+
+#endif //_UBA_USBOC_UPDATE_LIB_H
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h
new file mode 100644
index 0000000000..b9f7acdc86
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h
@@ -0,0 +1,98 @@
+/** @file
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _ONBOARD_NIC_STRUCTS_H
+#define _ONBOARD_NIC_STRUCTS_H
+
+#include <Protocol/UbaDevsUpdateProtocol.h>
+
+#pragma pack(1)
+typedef struct {
+
+ NIC_TYPE NicType; //Onboard or IO modue?
+ UINT8 NicIndex; //Nic index in setup page, 1 for Nic 1, 2 for Nic 2.....
+ //
+ //Parent
+ //
+ UINT8 RootPortBusNo; //Who is connected to?
+ UINT8 RootPortDevNo;
+ UINT8 RootPortFunNo;
+
+ //
+ //Nic controller for Onboard Nic
+ //
+ UINT16 NicVID; //Vendor ID
+ UINT16 NicDID; //Device ID
+ UINT8 PortNumbers; //How many ports inside NIC?
+ UINT8 DescriptionIndex; //Index to Nic description list
+
+ //
+ //Disable Method for Onboard Nic
+ //
+ UINT8 IsGpioCtrl; //Disable by Gpio?
+ UINT32 GpioForDev; //Ctrl Gpio Pin number for device
+ UINT8 GpioForDevValue; //what value is used to enable?
+
+ UINT32 PortEnableGPIO[4]; //Ctrl Gpio Pin number for this port
+ UINT8 PortEnableGPIOValue[4];//what value is used to enable the port
+ UINT8 IsPchNIC;
+
+} NIC_SETUP_CONFIGURATION_STUCT;
+
+typedef struct {
+ UINT16 NicDID; // Device ID
+ UINT16 SubDID; // Subsystem ID, if preset to 0xFFFF, then negore this field during detection
+ UINT8 NIC10Gb; // 10Gbe Pxe Seupported
+ UINT8 PXE_Support; // Pxe supported?
+ UINT8 iSCSI_Support; // iScsi supported?
+ UINT8 FCoE_Support; // FCoe supported?
+ UINT8 InfB_Support; // InfiniBand supported?
+ UINT8 PchNIC; //PCH integrated NIC?
+} NIC_OPTIONROM_CAPBILITY_STRUCT;
+
+typedef struct {
+ UINT16 IOM1DID; //Device ID for IOM1
+ UINT16 IOM1SubDID; //Subsystem ID for IOM1
+ UINT16 IOM2DID; //Device ID for IOM2
+ UINT16 IOM2SubDID; //Subsystem ID for IOM2
+ UINT16 IOM3DID; //Device ID for IOM3
+ UINT16 IOM3SubDID; //Subsystem ID for IOM3
+ UINT16 IOM4DID; //Device ID for IOM4
+ UINT16 IOM4SubDID; //Subsystem ID for IOM4
+} IOMS_NV_VARIABLE;
+
+typedef struct {
+ UINT8 PXE10GPreValue;
+ UINT8 PXE1GPreValue;
+ UINT8 Reserved[6];
+} PXE_PREVIOUS_SETTINGS;
+
+#pragma pack()
+
+#define NIC_CHARACTER_NUMBER_FOR_VALUE 30
+
+#define CPU0_IIO_BUS 0x00
+#define IIO_PCIE_PORT_1A_DEV 0x1
+#define IIO_PCIE_PORT_1A_FUN 0x0
+#define IIO_PCIE_PORT_1B_DEV 0x1
+#define IIO_PCIE_PORT_1B_FUN 0x1
+#define IIO_PCIE_PORT_2A_DEV 0x2
+#define IIO_PCIE_PORT_2A_FUN 0x0
+#define IIO_PCIE_PORT_3A_DEV 0x3
+#define IIO_PCIE_PORT_3A_FUN 0x0
+#define IIO_PCIE_PORT_3C_DEV 0x3
+#define IIO_PCIE_PORT_3C_FUN 0x2
+
+#define OB_NIC_POWERVILLE_DID 0x1521
+
+#define INTEL_MAC_ADDRESS_REG 0x5400
+
+#define VENDOR_ID_MELLANOX 0x15B3
+#define DEVICE_ID_MELLANOX 0x1003
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h
new file mode 100644
index 0000000000..a46ed4d1e1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h
@@ -0,0 +1,10 @@
+/** @file
+ Intermediate header file.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PchSetupVariableLbg.h"
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h
new file mode 100644
index 0000000000..f87999a71f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h
@@ -0,0 +1,372 @@
+/** @file
+ Data format for Universal Data Structure
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SETUP_VARIABLE_LBG_H_
+#define _SETUP_VARIABLE_LBG_H_
+
+// for PCH_RC_CONFIGURATION
+extern EFI_GUID gEfiPchSetupGuid;
+#define PCH_SETUP_NAME L"PchSetup"
+
+
+#include <PchLimits.h>
+#define HDAUDIO_FEATURES 3
+#define HDAUDIO_PP_MODULES 2
+
+#define SATA_MODE_AHCI 0
+#define SATA_MODE_RAID 1
+#define SATA_TEST_MODE_ENABLE 1
+
+
+/// sSATA max ports for Wellsburg
+#define PCH_MAX_SSATA_PORTS 6
+
+#pragma pack(1)
+typedef struct {
+ UINT8 Dwr_Enable;
+ UINT8 Dwr_Stall;
+ UINT8 Dwr_BmcRootPort;
+
+ UINT8 DwrEn_PMCGBL;
+ UINT8 DwrEn_MEWDT;
+ UINT8 DwrEn_IEWDT;
+
+ UINT8 Dwr_MeResetPrepDone;
+ UINT8 Dwr_IeResetPrepDone;
+
+ //
+ // PCH_DEVICE_ENABLES
+ //
+ UINT8 DeepSxMode;
+ UINT8 Gp27WakeFromDeepSx;
+ UINT8 GbeRegionInvalid;
+ UINT8 LomLanSupported;
+ UINT8 PchWakeOnLan;
+ UINT8 PchSlpLanLowDc;
+ UINT8 PchCrid;
+ UINT8 PchRtcLock;
+ UINT8 PchBiosLock;
+ UINT8 PchAllUnLock;
+ UINT8 PchThermalUnlock;
+ UINT8 PchSerm;
+
+ UINT8 Hpet;
+ UINT8 PchPort80Route;
+ UINT8 EnableClockSpreadSpec;
+ UINT8 IchPort80Route;
+ UINT8 PchSirqMode;
+
+ //
+ // Usb Config
+ //
+ UINT8 PchUsbManualMode;
+ UINT8 PchGpioLockDown;
+ UINT8 Usb3PinsTermination;
+ UINT8 EnableUsb3Pin[10];
+ UINT8 PchUsbHsPort[16];
+ UINT8 PchUsbSsPort[10];
+ UINT8 PchUsbPortDisable;
+ UINT8 UsbSensorHub;
+ UINT8 UsbSsicSupport[2];
+ UINT8 XhciDisMSICapability;
+ UINT8 PchUsbPerPortCtl;
+ UINT8 PchUsb30Port[6];
+ UINT8 UsbPrecondition;
+ UINT8 XhciIdleL1;
+ UINT8 Btcg;
+ UINT8 PchUsbDegradeBar;
+ //
+ // XHCI OC Map
+ //
+ UINT8 XhciOcMapEnabled;
+ //
+ // xDCI Config
+ //
+ UINT8 PchXdciSupport;
+ //
+ // Sata CONFIG
+ //
+ UINT8 PchSata;
+ //
+ // Sata Interface Mode
+ // 0 - IDE 1 - RAID 2 - AHCI
+ //
+ UINT8 SataInterfaceMode;
+ UINT8 SataPort[PCH_MAX_SATA_PORTS];
+ UINT8 SataHotPlug[PCH_MAX_SATA_PORTS];
+ UINT8 SataMechanicalSw[PCH_MAX_SATA_PORTS];
+ UINT8 SataSpinUp[PCH_MAX_SATA_PORTS];
+ UINT8 SataExternal[PCH_MAX_SATA_PORTS];
+ UINT8 SataType[PCH_MAX_SATA_PORTS];
+ UINT8 SataRaidR0;
+ UINT8 SataRaidR1;
+ UINT8 SataRaidR10;
+ UINT8 SataRaidR5;
+ UINT8 SataRaidIrrt;
+ UINT8 SataRaidOub;
+ UINT8 SataHddlk;
+ UINT8 SataLedl;
+ UINT8 SataRaidIooe;
+ UINT8 SataRaidSrt;
+ UINT8 SataRaidLoadEfiDriver[PCH_MAX_SATA_CONTROLLERS];
+ UINT8 SataRaidOromDelay;
+ UINT8 SataAlternateId;
+ UINT8 SataSalp;
+ UINT8 SataTestMode;
+ UINT8 PxDevSlp[PCH_MAX_SATA_PORTS];
+ UINT8 EnableDitoConfig[PCH_MAX_SATA_PORTS];
+ UINT16 DitoVal[PCH_MAX_SATA_PORTS];
+ UINT8 DmVal[PCH_MAX_SATA_PORTS];
+ UINT8 SataTopology[PCH_MAX_SATA_PORTS];
+
+ //
+ // sSata CONFIG
+ //
+ UINT8 PchsSata;
+ //
+ // Sata Interface Mode
+ // 0 - IDE 1 - RAID 2 - AHCI
+ //
+ UINT8 sSataInterfaceMode;
+ UINT8 sSataPort[PCH_MAX_SSATA_PORTS];
+ UINT8 sSataHotPlug[PCH_MAX_SSATA_PORTS];
+ UINT8 sSataSpinUp[PCH_MAX_SSATA_PORTS];
+ UINT8 sSataExternal[PCH_MAX_SSATA_PORTS];
+ UINT8 sPxDevSlp[PCH_MAX_SSATA_PORTS];
+ UINT8 sSataType[PCH_MAX_SSATA_PORTS];
+ UINT8 sSataRaidR0;
+ UINT8 sSataRaidR1;
+ UINT8 sSataRaidR10;
+ UINT8 sSataRaidR5;
+ UINT8 sSataRaidIrrt;
+ UINT8 sSataRaidOub;
+ UINT8 sSataHddlk;
+ UINT8 sSataLedl;
+ UINT8 sSataRaidIooe;
+ UINT8 sSataRaidSrt;
+ UINT8 sSataRaidOromDelay;
+ UINT8 sSataAlternateId;
+ UINT8 sSataSalp;
+ UINT8 sSataTestMode;
+ UINT8 sEnableDitoConfig[PCH_MAX_SSATA_PORTS];
+ UINT8 sDmVal[PCH_MAX_SSATA_PORTS];
+ UINT8 sDitoVal[PCH_MAX_SSATA_PORTS];
+ UINT8 sSataTopology[PCH_MAX_SSATA_PORTS];
+
+ //PCH THERMAL SENSOR
+ UINT8 ThermalDeviceEnable;
+ UINT8 PchCrossThrottling;
+
+ UINT8 PchDmiExtSync;
+ UINT8 PcieDmiExtSync;
+ // AcpiDebug Setup Options
+ UINT8 PciDelayOptimizationEcr;
+ UINT8 PchPcieGlobalAspm;
+
+ UINT8 PcieDmiStopAndScreamEnable;
+ UINT8 DmiLinkDownHangBypass;
+ UINT8 XTpmLen;
+ UINT8 PcieRootPort8xhDecode;
+ UINT8 Pcie8xhDecodePortIndex;
+ UINT8 PcieRootPortPeerMemoryWriteEnable;
+ UINT8 PcieComplianceTestMode;
+
+
+ UINT8 PcieRootPortSBDE;
+ UINT8 PcieSBDEPort;
+
+ UINT8 RstPcieStorageRemap[PCH_MAX_RST_PCIE_STORAGE_CR];
+ UINT8 RstPcieStorageRemapPort[PCH_MAX_RST_PCIE_STORAGE_CR];
+ UINT8 PcieRootPortFunctionSwapping;
+ UINT8 PcieRootPortEn[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortAspm[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortURE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortFEE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortNFE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortCEE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortMaxPayLoadSize[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortAER[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieTopology[PCH_MAX_PCIE_ROOT_PORTS];
+
+ UINT8 PcieLaneCm[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieLaneCp[PCH_MAX_PCIE_ROOT_PORTS];
+
+ UINT8 PcieSwEqOverride;
+ UINT8 PcieSwEqCoeffCm[PCH_PCIE_SWEQ_COEFFS_MAX];
+ UINT8 PcieSwEqCoeffCp[PCH_PCIE_SWEQ_COEFFS_MAX];
+ UINT8 PchPcieUX8MaxPayloadSize;
+ UINT8 PchPcieUX16MaxPayloadSize;
+ UINT8 PcieRootPortCompletionTimeout[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieClockGatingDisabled;
+ UINT8 PcieUsbGlitchWa;
+ UINT8 PcieRootPortPIE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortACS[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortEqPh3Method[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortMaxReadRequestSize;
+ UINT8 PcieRootPortSFE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortSNE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortSCE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortPMCE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortHPE[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortSpeed[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PcieRootPortTHS[PCH_MAX_PCIE_ROOT_PORTS];
+
+ //
+ // PCI Bridge Resources
+ //
+ UINT8 PcieRootPortL1SubStates[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 MemoryThermalManagement;
+ UINT8 ExttsViaTsOnBoard;
+ UINT8 ExttsViaTsOnDimm;
+ UINT8 FixupPlatformSpecificSoftstraps;
+
+ //
+ // SMBUS Configuration
+ //
+ UINT8 TestSmbusSpdWriteDisable;
+
+ //
+ // HD-Audio Configuration
+ //
+ UINT8 PchHdAudio;
+ UINT8 PchHdAudioDsp;
+ UINT8 PchHdAudioPme;
+ UINT8 PchHdAudioIoBufferOwnership;
+ UINT8 PchHdAudioIoBufferVoltage;
+ UINT8 PchHdAudioCodecSelect;
+ UINT8 PchHdAudioFeature[HDAUDIO_FEATURES];
+ UINT8 PchHdAudioPostProcessingMod[HDAUDIO_PP_MODULES];
+
+ UINT8 DfxHdaVcType;
+ //
+ // DMI Configuration
+ //
+ UINT8 TestDmiAspmCtrl;
+
+
+ //
+ //
+ // PCIe LTR Configuration
+ //
+ UINT8 PchPcieLtrEnable[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PchPcieSnoopLatencyOverrideMode[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PchPcieSnoopLatencyOverrideMultiplier[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PchPcieNonSnoopLatencyOverrideMode[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PchPcieNonSnoopLatencyOverrideMultiplier[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT16 PchPcieSnoopLatencyOverrideValue[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT16 PchPcieNonSnoopLatencyOverrideValue[PCH_MAX_PCIE_ROOT_PORTS];
+
+ UINT8 PchPcieForceLtrOverride[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PchSataLtrOverride;
+ UINT8 PchSataLtrEnable;
+ UINT16 PchSataSnoopLatencyOverrideValue;
+ UINT8 PchSataSnoopLatencyOverrideMultiplier;
+ UINT8 PchSataLtrConfigLock;
+
+ UINT8 PchSSataLtrOverride;
+ UINT16 PchSSataSnoopLatencyOverrideValue;
+ UINT8 PchSSataSnoopLatencyOverrideMultiplier;
+ UINT8 PchSSataLtrEnable;
+ UINT8 PchSSataLtrConfigLock;
+
+ UINT8 PchPcieUX16CompletionTimeout;
+ UINT8 PchPcieUX8CompletionTimeout;
+
+ //
+ // Interrupt Configuration
+ //
+ UINT8 PchIoApic24119Entries;
+ UINT8 ShutdownPolicySelect;
+
+ //
+ // DPTF SETUP items begin
+ //
+ UINT8 EnableDptf;
+ UINT8 EnablePchDevice;
+
+ //
+ // Miscellaneous options
+ //
+ UINT8 SlpLanLowDc;
+ UINT8 PchLanK1Off;
+ UINT8 PchWakeOnWlan;
+ UINT8 PchWakeOnWlanDeepSx;
+ UINT8 StateAfterG3;
+ UINT8 PciePllSsc;
+ UINT8 FirmwareConfiguration;
+ UINT8 DciEn;
+ UINT8 PchDciAutoDetect;
+
+ // Acpi.sd
+ UINT8 CSNotifyEC;
+ UINT8 EcLowPowerMode;
+
+ //
+ // TraceHub Setup Options
+ //
+ UINT8 PchTraceHubMode;
+ UINT32 PchTraceHubMemReg0Size;
+ UINT32 PchTraceHubMemReg1Size;
+ UINT8 AetEnableMode;
+
+ //
+ // PCH P2SB hide and lock options
+ //
+ UINT8 PchP2sbDevReveal;
+ UINT8 PchP2sbUnlock;
+
+ //
+ // PCH SPI hide and lock options
+ //
+ UINT8 ShowSpiController;
+ UINT8 FlashLockDown;
+
+ //
+ // PCH PMC DFX options
+ //
+ UINT8 PmcReadDisable;
+
+
+ //
+ // ADR Configuration
+ //
+ UINT8 PchAdrEn;
+ UINT8 AdrTimerEn;
+ UINT8 AdrTimerVal;
+ UINT8 AdrMultiplierVal;
+ UINT8 AdrGpioSel;
+ UINT8 AdrHostPartitionReset;
+ UINT8 AdrSysPwrOk;
+ UINT8 AdrOverClockingWdt;
+ UINT8 AdrCpuThermalWdt;
+ UINT8 AdrPmcParityError;
+
+ //
+ // Audio DSP Configuration
+ //
+ UINT8 PchAudioDsp;
+ UINT8 PchAudioDspD3PowerGating;
+ UINT8 PchAudioDspAcpiMode;
+ UINT8 PchAudioDspBluetooth;
+ UINT8 PchAudioDspAcpiInterruptMode;
+
+ //
+ // DFX Configuration
+ //
+ UINT8 PchEvaMrom0HookEnable;
+ UINT8 PchEvaMrom1HookEnable;
+ UINT8 TestMctpBroadcastCycle;
+ UINT8 PchEvaLockDown;
+ UINT8 PchTraceHubHide;
+} PCH_SETUP;
+#pragma pack()
+
+#endif
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h
new file mode 100644
index 0000000000..0082cf0fa9
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h
@@ -0,0 +1,183 @@
+/** @file
+ EFI Platform Device Data Definition Header File.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_PLAT_DEVICE_DATA_H_
+#define _EFI_PLAT_DEVICE_DATA_H_
+
+#include <Protocol/PciRootBridgeIo.h>
+#include <Protocol/PciIo.h>
+
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/Pci.h>
+
+
+typedef struct {
+ UINT8 Dev; // Device numbers of a chain of bridges starting at PCI Bus, behind which this device is located.
+ UINT8 Fun; // Function numbers of a chain of bridges starting at PCI Bus, behind which this device is located.
+} DEVICE_DATA_DEV_PATH;
+
+typedef struct {
+ UINT32 UID; // The Root Bridge ID as appears in the device path for that bridge.
+} DEVICE_DATA_RBRG_PATH;
+
+typedef struct {
+ DEVICE_DATA_RBRG_PATH RootBridgePath; // Path to starting PCI Bus from which the SourceBusPath begins. This is used if there are multiple root bridges. Each such bridge will originate a lowest level PCI bus.
+ DEVICE_DATA_DEV_PATH BridgePath[4]; // Pairs of device/function numbers of a chain of bridges starting at PCI Bus, behind which this device is located. Must terminate with Dev = 0xFF. The size of 3 may be bumped up if there is more bus depth levels than 3 on a particular platform.
+} DEVICE_DATA_BUS_PATH;
+
+//
+// Holds live system PCI Root Bridge info.
+//
+typedef struct {
+ EFI_HANDLE Handle; // Handle to the PCI device.
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRbIoProt; // Root Bridge IO protocol.
+ EFI_DEVICE_PATH_PROTOCOL *DevPath; // Device path to the bridge.
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Resources; // Bus/IO/Mem ranges exposed via the root bridge.
+} DEVICE_DATA_PCI_RBRG;
+
+//
+// Holds live system PCI device info.
+//
+typedef struct {
+ UINTN Seg;
+ UINTN Bus;
+ UINTN Dev;
+ UINTN Fun;
+} LOCATION;
+
+typedef struct {
+ EFI_HANDLE Handle; // Handle to the PCI device.
+ EFI_PCI_IO_PROTOCOL *PciIoProt;
+ LOCATION Location; // Bus/Dev/Fun location of this device.
+ PCI_TYPE_GENERIC ConfSpace; // First 40h bytes of PCI config space for each device.
+} DEVICE_DATA_PCI_DEV;
+
+//
+// Holds live system CPU device info.
+//
+typedef struct {
+ UINTN PackageNumber;
+ UINTN CoreNumber;
+ UINTN ThreadNumber;
+ UINT8 Present;
+ UINT8 Enabled;
+ UINT8 Stepping;
+ UINT8 Model;
+ UINT8 Family;
+ UINT8 Bsp;
+ UINT8 Apic;
+ UINT8 ApicId;
+ UINT8 ApicVer;
+ UINT8 Fpu;
+ UINT8 Mce;
+ UINT8 Cx8;
+} DEVICE_DATA_CPU;
+
+//
+// Platform hardwired data describing all I/O APICs in the system.
+//
+typedef struct {
+ UINT8 Enabled;
+ UINT32 Address;
+ UINT8 Id;
+ UINT8 Version;
+} DEVICE_DATA_HW_IO_APIC;
+
+//
+// Platform hardwired data describing connection of interrupt sources to local APICs.
+//
+typedef struct {
+ DEVICE_DATA_BUS_PATH SourceBusPath;
+ UINT8 SourceBusIrq;
+ UINT8 DestApicId;
+ UINT8 DestApicIntIn;
+ UINT8 IntType;
+ UINT16 Polarity;
+ UINT16 Trigger;
+} DEVICE_DATA_HW_LOCAL_INT;
+
+//
+// Platform hardwired data describing the built-in devices.
+//
+typedef struct {
+ DEVICE_DATA_BUS_PATH BusPath; // Path to the device, includes root bridge and P2P bridge chain.
+ DEVICE_DATA_DEV_PATH DevFun; // Device/function number of the built-in PCI device being described. 0xff if not applicable e.g., it's an ISA device.
+ UINT8 DestApicId; // Destination APIC.
+ UINT8 DestApicIntIn; // The pin of the destination APIC the interrupt wire is connected to.
+ UINT8 IntType; // As defined in the MPS.
+ UINT16 Polarity; // As defined in the MPS.
+ UINT16 Trigger; // As defined in the MPS.
+} DEVICE_DATA_HW_BUILT_IN;
+
+//
+// Platform hardwired data describing the add-in devices.
+// An add-in device is defined here as a pluggable into a PCI slot.
+// Thus there must be as many entries as there are slots in the system.
+// The devices as defined above may have any complexity (wile complying
+// with the PCI spec) including possibly multiple levels of bridges and buses
+// possibly with multiple devices possibly with multiple functions.
+// The routing of the interrupts from such functions is governed by the
+// PCI-to-PCI Bridge Architecture Specification.
+// It short it requires that functions rotate mod 4 the interrupt assignments
+// (A/B/C/D) with PCI devices of single function devices and that the bus depth
+// does not cause such a rotation.
+//
+typedef struct {
+ DEVICE_DATA_BUS_PATH BusPath; // Path to the device, includes root bridge and P2P bridge chain.
+ UINT8 Dev; // Device number of the slot being described.
+ UINT8 DestApicId; // Destination APIC. As defined in the MPS.
+ UINT8 DestApicIntIn[4]; // Interrupt pins to destination APIC, indexes correspond to PCI interrupt pins A/B/C/D.
+} DEVICE_DATA_HW_PCI_SLOT;
+
+//
+// Platform hardwired data describing the address space mapping.
+//
+typedef struct {
+ DEVICE_DATA_RBRG_PATH RootBridgePath;
+ UINT8 AddressType;
+ UINT64 AddressBase;
+ UINT64 AddressLength;
+} DEVICE_DATA_HW_ADDR_SPACE_MAPPING;
+
+//
+// This is the module global containing platform device data.
+//
+typedef struct {
+ DEVICE_DATA_HW_LOCAL_INT *LocalIntData;
+ UINTN LocalIntDataSize;
+ DEVICE_DATA_HW_ADDR_SPACE_MAPPING *AddrDataMapping;
+ UINTN AddrDataMappingSize;
+
+ DEVICE_DATA_PCI_RBRG *PciRBridgeInfo; // Info for PCI Root Bridges in the system.
+ DEVICE_DATA_PCI_DEV *PciDevInfo; // Info for PCI devices in the system.
+ UINT8 PciBusNo; // Number of PCI buses. Assumes that PCI bus numbers are continous and start from 0.
+ UINT8 LegacyBusIdx; // Bus number of the legacy bus like ISA. EISA etc. There could only be one legacy bus. It has to be the last bus after all the PCI buses.
+ DEVICE_DATA_CPU *CpuInfo; // Info for all processors.
+ UINTN CpuMax;
+} DEVICE_DATA;
+
+//
+// This is the module global containing platform device data.
+//
+typedef struct {
+ DEVICE_DATA_HW_PCI_SLOT *HwPciSlotUpdate;
+ UINTN HwPciSlotUpdateSize;
+ DEVICE_DATA_HW_BUILT_IN *HwBuiltInUpdate;
+ UINTN HwBuiltInUpdateSize;
+} DEVICE_UPDATE_DATA;
+
+
+typedef struct _MP_TABLE_CPU_INFO {
+ UINT8 ApicVersion;
+ UINT32 CpuSignature;
+ UINT32 FeatureFlags;
+} MP_TABLE_CPU_INFO;
+
+#endif //_EFI_PLAT_DEVICE_DATA_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h
new file mode 100644
index 0000000000..f2fd18bf16
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h
@@ -0,0 +1,36 @@
+/** @file
+ EFI Platform Pirq Data Definition Header File.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_PLATF_PIRQ_DATA_H_
+#define _EFI_PLATF_PIRQ_DATA_H_
+
+#include <Protocol/LegacyBiosPlatform.h>
+
+#define EFI_PIRQ_TABLE_SIGNATURE 0x52495024
+#define EFI_PIRQ_TABLE_VERSION 0x100
+
+//
+// Common path types.
+//
+typedef struct {
+ EFI_LEGACY_PIRQ_TABLE_HEADER PirqTable;
+} EFI_LEGACY_PIRQ_TABLE;
+
+//
+// This is the module global containing platform PIRQ data.
+//
+typedef struct {
+ EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY *PriorityTable;
+ UINTN PriorityTableSize;
+ EFI_LEGACY_PIRQ_TABLE *TableHead;
+ UINTN TableHeadSize;
+} PLATFORM_PIRQ_DATA;
+
+#endif //_EFI_PLATF_PIRQ_DATA_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h
new file mode 100644
index 0000000000..37c7e19e38
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h
@@ -0,0 +1,38 @@
+/** @file
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __EX_REPORT_STATUS_CODE_HANDLER_PPI_H__
+#define __EX_REPORT_STATUS_CODE_HANDLER_PPI_H__
+
+
+/**
+ Registers ExSerialStatusCodeReportWorker as callback function for ReportStatusCode() notification.
+
+
+ @param[in] PeiServices Pointer to PEI Services Table.
+
+ @retval EFI_SUCCESS Function was successfully registered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be
+ registered.
+ @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_EX_RSC_HANDLER_REGISTER)(
+ IN CONST EFI_PEI_SERVICES **PeiServices
+);
+
+typedef struct _EFI_EX_PEI_RSC_HANDLER_PPI {
+ EFI_PEI_EX_RSC_HANDLER_REGISTER RegisterExStatusCodeHandler;
+} EFI_PEI_EX_RSC_HANDLER_PPI;
+
+extern EFI_GUID gEfiPeiExStatusCodeHandlerPpiGuid;
+
+#endif // __EX_REPORT_STATUS_CODE_HANDLER_PPI_H__
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h
new file mode 100644
index 0000000000..4b9c8b677f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h
@@ -0,0 +1,29 @@
+/** @file
+ Smbus Policy PPI as defined in EFI 2.0
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PEI_SMBUS_POLICY_PPI_H
+#define _PEI_SMBUS_POLICY_PPI_H
+
+#define PEI_SMBUS_POLICY_PPI_GUID \
+ { \
+ 0x63b6e435, 0x32bc, 0x49c6, { 0x81, 0xbd, 0xb7, 0xa1, 0xa0, 0xfe, 0x1a, 0x6c } \
+ }
+
+typedef struct _PEI_SMBUS_POLICY_PPI PEI_SMBUS_POLICY_PPI;
+
+typedef struct _PEI_SMBUS_POLICY_PPI {
+ UINTN BaseAddress;
+ UINT32 PciAddress;
+ UINT8 NumRsvdAddress;
+ UINT8 *RsvdAddress;
+} PEI_SMBUS_POLICY_PPI;
+
+extern EFI_GUID gPeiSmbusPolicyPpiGuid;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h
new file mode 100644
index 0000000000..2db2ac8b9a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h
@@ -0,0 +1,144 @@
+/** @file
+ uba central config database PPI
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CONFIG_DATABASE_PPI_H_
+#define _UBA_CONFIG_DATABASE_PPI_H_
+
+// {C1176733-159F-42d5-BCB9-320660B17310}
+#define UBA_CONFIG_DATABASE_PPI_GUID \
+ { 0xc1176733, 0x159f, 0x42d5, { 0xbc, 0xb9, 0x32, 0x6, 0x60, 0xb1, 0x73, 0x10 } }
+
+typedef struct _UBA_CONFIG_DATABASE_PPI UBA_CONFIG_DATABASE_PPI;
+
+#define UBA_CONFIG_PPI_VERSION 01
+#define UBA_CONFIG_PPI_SIGNATURE SIGNATURE_32('U', 'S', 'K', 'U')
+
+//
+// Functions
+//
+
+/**
+ Set board's GUID and user friendly name by BoardId.
+
+ If the BoardId is not exist in database, it will create a new platform.
+
+ @param This uba Ppi instance.
+ @param BoardId The platform type, same define as Platform.h.
+ @param BoardGuid The GUID for this platform.
+ @param BoardName The user friendly name for this platform.
+
+ @retval EFI_ALREADY_STARTED Create new for an exist platform.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_UBA_CONFIG_INIT_BOARD) (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN UINT32 BoardId,
+ IN EFI_GUID *BoardGuid, OPTIONAL
+ IN CHAR8 *BoardName OPTIONAL
+ );
+
+/**
+ Get board's GUID and user friendly name by BoardId.
+
+ This is used when you need a BoardGuid to Add/Get platform data
+
+ Core will create a new platform for you if the BoardId is not
+ recorded in database, and assgin a unique GUID for this platform.
+
+ @param This uba Ppi instance.
+ @param BoardId The platform type, same define as Platform.h.
+ @param BoardGuid The GUID for this platform.
+ @param BoardName The user friendly name for this platform.
+
+ @retval EFI_ALREADY_STARTED Create new for an exist platform.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_UBA_CONFIG_GET_BOARD) (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ OUT UINT32 *BoardId,
+ OUT EFI_GUID *BoardGuid, OPTIONAL
+ OUT CHAR8 *BoardName OPTIONAL
+ );
+
+/**
+ Add configuration data to uba configuration database.
+
+ @param This uba Ppi instance.
+ @param BoardGuid The GUID for this platform.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize Size of data want to add into database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_UBA_CONFIG_ADD_DATA) (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN EFI_GUID *ResId,
+ IN VOID *Data,
+ IN UINTN DataSize
+ );
+
+/**
+ Get configuration data from uba configuration database.
+
+ @param This uba Ppi instance.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize IN:Size of data want to get, OUT: Size of data in database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_BUFFER_TOO_SMALL The DataSize of Data buffer is too small to get this configuration data
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform or data not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_UBA_CONFIG_GET_DATA) (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN EFI_GUID *ResId,
+ OUT VOID *Data,
+ IN OUT UINTN *DataSize
+ );
+
+
+//
+// Multi Sku config database PPI
+//
+struct _UBA_CONFIG_DATABASE_PPI {
+ UINT32 Signature;
+ UINT32 Version;
+
+ PEI_UBA_CONFIG_INIT_BOARD InitSku;
+ PEI_UBA_CONFIG_GET_BOARD GetSku;
+
+ PEI_UBA_CONFIG_ADD_DATA AddData;
+ PEI_UBA_CONFIG_GET_DATA GetData;
+};
+
+extern EFI_GUID gUbaConfigDatabasePpiGuid;
+
+#endif // _UBA_CONFIG_DATABASE_PPI_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h
new file mode 100644
index 0000000000..b0bd90d1cb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h
@@ -0,0 +1,1550 @@
+/** @file
+ The EFI Legacy BIOS Protocol is used to abstract legacy Option ROM usage
+ under EFI and Legacy OS boot. This file also includes all the related
+ COMPATIBILIY16 structures and defintions.
+
+ Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow
+ well known naming conventions.
+
+ Thunk is the code that switches from 32-bit protected environment into the 16-bit real-mode
+ environment. Reverse thunk is the code that does the opposite.
+
+ @copyright
+ Copyright 2007 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_LEGACY_BIOS_H_
+#define _EFI_LEGACY_BIOS_H_
+
+///
+///
+///
+#pragma pack(1)
+
+typedef UINT8 SERIAL_MODE;
+typedef UINT8 PARALLEL_MODE;
+
+#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$')
+
+///
+/// There is a table located within the traditional BIOS in either the 0xF000:xxxx or 0xE000:xxxx
+/// physical address range. It is located on a 16-byte boundary and provides the physical address of the
+/// entry point for the Compatibility16 functions. These functions provide the platform-specific
+/// information that is required by the generic EfiCompatibility code. The functions are invoked via
+/// thunking by using EFI_LEGACY_BIOS_PROTOCOL.FarCall86() with the 32-bit physical
+/// entry point.
+///
+typedef struct {
+ ///
+ /// The string "$EFI" denotes the start of the EfiCompatibility table. Byte 0 is "I," byte
+ /// 1 is "F," byte 2 is "E," and byte 3 is "$" and is normally accessed as a DWORD or UINT32.
+ ///
+ UINT32 Signature;
+
+ ///
+ /// The value required such that byte checksum of TableLength equals zero.
+ ///
+ UINT8 TableChecksum;
+
+ ///
+ /// The length of this table.
+ ///
+ UINT8 TableLength;
+
+ ///
+ /// The major EFI revision for which this table was generated.
+ ///
+ UINT8 EfiMajorRevision;
+
+ ///
+ /// The minor EFI revision for which this table was generated.
+ ///
+ UINT8 EfiMinorRevision;
+
+ ///
+ /// The major revision of this table.
+ ///
+ UINT8 TableMajorRevision;
+
+ ///
+ /// The minor revision of this table.
+ ///
+ UINT8 TableMinorRevision;
+
+ ///
+ /// Reserved for future usage.
+ ///
+ UINT16 Reserved;
+
+ ///
+ /// The segment of the entry point within the traditional BIOS for Compatibility16 functions.
+ ///
+ UINT16 Compatibility16CallSegment;
+
+ ///
+ /// The offset of the entry point within the traditional BIOS for Compatibility16 functions.
+ ///
+ UINT16 Compatibility16CallOffset;
+
+ ///
+ /// The segment of the entry point within the traditional BIOS for EfiCompatibility
+ /// to invoke the PnP installation check.
+ ///
+ UINT16 PnPInstallationCheckSegment;
+
+ ///
+ /// The Offset of the entry point within the traditional BIOS for EfiCompatibility
+ /// to invoke the PnP installation check.
+ ///
+ UINT16 PnPInstallationCheckOffset;
+
+ ///
+ /// EFI system resources table. Type EFI_SYSTEM_TABLE is defined in the IntelPlatform
+ ///Innovation Framework for EFI Driver Execution Environment Core Interface Specification (DXE CIS).
+ ///
+ UINT32 EfiSystemTable;
+
+ ///
+ /// The address of an OEM-provided identifier string. The string is null terminated.
+ ///
+ UINT32 OemIdStringPointer;
+
+ ///
+ /// The 32-bit physical address where ACPI RSD PTR is stored within the traditional
+ /// BIOS. The remained of the ACPI tables are located at their EFI addresses. The size
+ /// reserved is the maximum for ACPI 2.0. The EfiCompatibility will fill in the ACPI
+ /// RSD PTR with either the ACPI 1.0b or 2.0 values.
+ ///
+ UINT32 AcpiRsdPtrPointer;
+
+ ///
+ /// The OEM revision number. Usage is undefined but provided for OEM module usage.
+ ///
+ UINT16 OemRevision;
+
+ ///
+ /// The 32-bit physical address where INT15 E820 data is stored within the traditional
+ /// BIOS. The EfiCompatibility code will fill in the E820Pointer value and copy the
+ /// data to the indicated area.
+ ///
+ UINT32 E820Pointer;
+
+ ///
+ /// The length of the E820 data and is filled in by the EfiCompatibility code.
+ ///
+ UINT32 E820Length;
+
+ ///
+ /// The 32-bit physical address where the $PIR table is stored in the traditional BIOS.
+ /// The EfiCompatibility code will fill in the IrqRoutingTablePointer value and
+ /// copy the data to the indicated area.
+ ///
+ UINT32 IrqRoutingTablePointer;
+
+ ///
+ /// The length of the $PIR table and is filled in by the EfiCompatibility code.
+ ///
+ UINT32 IrqRoutingTableLength;
+
+ ///
+ /// The 32-bit physical address where the MP table is stored in the traditional BIOS.
+ /// The EfiCompatibility code will fill in the MpTablePtr value and copy the data
+ /// to the indicated area.
+ ///
+ UINT32 MpTablePtr;
+
+ ///
+ /// The length of the MP table and is filled in by the EfiCompatibility code.
+ ///
+ UINT32 MpTableLength;
+
+ ///
+ /// The segment of the OEM-specific INT table/code.
+ ///
+ UINT16 OemIntSegment;
+
+ ///
+ /// The offset of the OEM-specific INT table/code.
+ ///
+ UINT16 OemIntOffset;
+
+ ///
+ /// The segment of the OEM-specific 32-bit table/code.
+ ///
+ UINT16 Oem32Segment;
+
+ ///
+ /// The offset of the OEM-specific 32-bit table/code.
+ ///
+ UINT16 Oem32Offset;
+
+ ///
+ /// The segment of the OEM-specific 16-bit table/code.
+ ///
+ UINT16 Oem16Segment;
+
+ ///
+ /// The offset of the OEM-specific 16-bit table/code.
+ ///
+ UINT16 Oem16Offset;
+
+ ///
+ /// The segment of the TPM binary passed to 16-bit CSM.
+ ///
+ UINT16 TpmSegment;
+
+ ///
+ /// The offset of the TPM binary passed to 16-bit CSM.
+ ///
+ UINT16 TpmOffset;
+
+ ///
+ /// A pointer to a string identifying the independent BIOS vendor.
+ ///
+ UINT32 IbvPointer;
+
+ ///
+ /// This field is NULL for all systems not supporting PCI Express. This field is the base
+ /// value of the start of the PCI Express memory-mapped configuration registers and
+ /// must be filled in prior to EfiCompatibility code issuing the Compatibility16 function
+ /// Compatibility16InitializeYourself().
+ /// Compatibility16InitializeYourself() is defined in Compatability16
+ /// Functions.
+ ///
+ UINT32 PciExpressBase;
+
+ ///
+ /// Maximum PCI bus number assigned.
+ ///
+ UINT8 LastPciBus;
+
+ ///
+ /// Start Address of Upper Memory Area (UMA) to be set as Read/Write. If
+ /// UmaAddress is a valid address in the shadow RAM, it also indicates that the region
+ /// from 0xC0000 to (UmaAddress - 1) can be used for Option ROM.
+ ///
+ UINT32 UmaAddress;
+
+ ///
+ /// Upper Memory Area size in bytes to be set as Read/Write. If zero, no UMA region
+ /// will be set as Read/Write (i.e. all Shadow RAM is set as Read-Only).
+ ///
+ UINT32 UmaSize;
+
+ ///
+ /// Start Address of high memory that can be used for permanent allocation. If zero,
+ /// high memory is not available for permanent allocation.
+ ///
+ UINT32 HiPermanentMemoryAddress;
+
+ ///
+ /// Size of high memory that can be used for permanent allocation in bytes. If zero,
+ /// high memory is not available for permanent allocation.
+ ///
+ UINT32 HiPermanentMemorySize;
+} EFI_COMPATIBILITY16_TABLE;
+
+///
+/// Functions provided by the CSM binary which communicate between the EfiCompatibility
+/// and Compatability16 code.
+///
+/// Inconsistent with the specification here:
+/// The member's name started with "Compatibility16" [defined in Intel Framework
+/// Compatibility Support Module Specification / 0.97 version]
+/// has been changed to "Legacy16" since keeping backward compatible.
+///
+typedef enum {
+ ///
+ /// Causes the Compatibility16 code to do any internal initialization required.
+ /// Input:
+ /// AX = Compatibility16InitializeYourself
+ /// ES:BX = Pointer to EFI_TO_COMPATIBILITY16_INIT_TABLE
+ /// Return:
+ /// AX = Return Status codes
+ ///
+ Legacy16InitializeYourself = 0x0000,
+
+ ///
+ /// Causes the Compatibility16 BIOS to perform any drive number translations to match the boot sequence.
+ /// Input:
+ /// AX = Compatibility16UpdateBbs
+ /// ES:BX = Pointer to EFI_TO_COMPATIBILITY16_BOOT_TABLE
+ /// Return:
+ /// AX = Returned status codes
+ ///
+ Legacy16UpdateBbs = 0x0001,
+
+ ///
+ /// Allows the Compatibility16 code to perform any final actions before booting. The Compatibility16
+ /// code is read/write.
+ /// Input:
+ /// AX = Compatibility16PrepareToBoot
+ /// ES:BX = Pointer to EFI_TO_COMPATIBILITY16_BOOT_TABLE structure
+ /// Return:
+ /// AX = Returned status codes
+ ///
+ Legacy16PrepareToBoot = 0x0002,
+
+ ///
+ /// Causes the Compatibility16 BIOS to boot. The Compatibility16 code is Read/Only.
+ /// Input:
+ /// AX = Compatibility16Boot
+ /// Output:
+ /// AX = Returned status codes
+ ///
+ Legacy16Boot = 0x0003,
+
+ ///
+ /// Allows the Compatibility16 code to get the last device from which a boot was attempted. This is
+ /// stored in CMOS and is the priority number of the last attempted boot device.
+ /// Input:
+ /// AX = Compatibility16RetrieveLastBootDevice
+ /// Output:
+ /// AX = Returned status codes
+ /// BX = Priority number of the boot device.
+ ///
+ Legacy16RetrieveLastBootDevice = 0x0004,
+
+ ///
+ /// Allows the Compatibility16 code rehook INT13, INT18, and/or INT19 after dispatching a legacy OpROM.
+ /// Input:
+ /// AX = Compatibility16DispatchOprom
+ /// ES:BX = Pointer to EFI_DISPATCH_OPROM_TABLE
+ /// Output:
+ /// AX = Returned status codes
+ /// BX = Number of non-BBS-compliant devices found. Equals 0 if BBS compliant.
+ ///
+ Legacy16DispatchOprom = 0x0005,
+
+ ///
+ /// Finds a free area in the 0xFxxxx or 0xExxxx region of the specified length and returns the address
+ /// of that region.
+ /// Input:
+ /// AX = Compatibility16GetTableAddress
+ /// BX = Allocation region
+ /// 00 = Allocate from either 0xE0000 or 0xF0000 64 KB blocks.
+ /// Bit 0 = 1 Allocate from 0xF0000 64 KB block
+ /// Bit 1 = 1 Allocate from 0xE0000 64 KB block
+ /// CX = Requested length in bytes.
+ /// DX = Required address alignment. Bit mapped. First non-zero bit from the right is the alignment.
+ /// Output:
+ /// AX = Returned status codes
+ /// DS:BX = Address of the region
+ ///
+ Legacy16GetTableAddress = 0x0006,
+
+ ///
+ /// Enables the EfiCompatibility module to do any nonstandard processing of keyboard LEDs or state.
+ /// Input:
+ /// AX = Compatibility16SetKeyboardLeds
+ /// CL = LED status.
+ /// Bit 0 Scroll Lock 0 = Off
+ /// Bit 1 NumLock
+ /// Bit 2 Caps Lock
+ /// Output:
+ /// AX = Returned status codes
+ ///
+ Legacy16SetKeyboardLeds = 0x0007,
+
+ ///
+ /// Enables the EfiCompatibility module to install an interrupt handler for PCI mass media devices that
+ /// do not have an OpROM associated with them. An example is SATA.
+ /// Input:
+ /// AX = Compatibility16InstallPciHandler
+ /// ES:BX = Pointer to EFI_LEGACY_INSTALL_PCI_HANDLER structure
+ /// Output:
+ /// AX = Returned status codes
+ ///
+ Legacy16InstallPciHandler = 0x0008
+} EFI_COMPATIBILITY_FUNCTIONS;
+
+
+///
+/// EFI_DISPATCH_OPROM_TABLE
+///
+typedef struct {
+ UINT16 PnPInstallationCheckSegment; ///< A pointer to the PnpInstallationCheck data structure.
+ UINT16 PnPInstallationCheckOffset; ///< A pointer to the PnpInstallationCheck data structure.
+ UINT16 OpromSegment; ///< The segment where the OpROM was placed. Offset is assumed to be 3.
+ UINT8 PciBus; ///< The PCI bus.
+ UINT8 PciDeviceFunction; ///< The PCI device * 0x08 | PCI function.
+ UINT8 NumberBbsEntries; ///< The number of valid BBS table entries upon entry and exit. The IBV code may
+ ///< increase this number, if BBS-compliant devices also hook INTs in order to force the
+ ///< OpROM BIOS Setup to be executed.
+ UINT32 BbsTablePointer; ///< A pointer to the BBS table.
+ UINT16 RuntimeSegment; ///< The segment where the OpROM can be relocated to. If this value is 0x0000, this
+ ///< means that the relocation of this run time code is not supported.
+ ///< Inconsistent with specification here:
+ ///< The member's name "OpromDestinationSegment" [defined in Intel Framework Compatibility Support Module Specification / 0.97 version]
+ ///< has been changed to "RuntimeSegment" since keeping backward compatible.
+
+} EFI_DISPATCH_OPROM_TABLE;
+
+///
+/// EFI_TO_COMPATIBILITY16_INIT_TABLE
+///
+typedef struct {
+ ///
+ /// Starting address of memory under 1 MB. The ending address is assumed to be 640 KB or 0x9FFFF.
+ ///
+ UINT32 BiosLessThan1MB;
+
+ ///
+ /// The starting address of the high memory block.
+ ///
+ UINT32 HiPmmMemory;
+
+ ///
+ /// The length of high memory block.
+ ///
+ UINT32 HiPmmMemorySizeInBytes;
+
+ ///
+ /// The segment of the reverse thunk call code.
+ ///
+ UINT16 ReverseThunkCallSegment;
+
+ ///
+ /// The offset of the reverse thunk call code.
+ ///
+ UINT16 ReverseThunkCallOffset;
+
+ ///
+ /// The number of E820 entries copied to the Compatibility16 BIOS.
+ ///
+ UINT32 NumberE820Entries;
+
+ ///
+ /// The amount of usable memory above 1 MB, e.g., E820 type 1 memory.
+ ///
+ UINT32 OsMemoryAbove1Mb;
+
+ ///
+ /// The start of thunk code in main memory. Memory cannot be used by BIOS or PMM.
+ ///
+ UINT32 ThunkStart;
+
+ ///
+ /// The size of the thunk code.
+ ///
+ UINT32 ThunkSizeInBytes;
+
+ ///
+ /// Starting address of memory under 1 MB.
+ ///
+ UINT32 LowPmmMemory;
+
+ ///
+ /// The length of low Memory block.
+ ///
+ UINT32 LowPmmMemorySizeInBytes;
+} EFI_TO_COMPATIBILITY16_INIT_TABLE;
+
+///
+/// DEVICE_PRODUCER_SERIAL.
+///
+typedef struct {
+ UINT16 Address; ///< I/O address assigned to the serial port.
+ UINT8 Irq; ///< IRQ assigned to the serial port.
+ SERIAL_MODE Mode; ///< Mode of serial port. Values are defined below.
+} DEVICE_PRODUCER_SERIAL;
+
+///
+/// DEVICE_PRODUCER_SERIAL's modes.
+///@{
+#define DEVICE_SERIAL_MODE_NORMAL 0x00
+#define DEVICE_SERIAL_MODE_IRDA 0x01
+#define DEVICE_SERIAL_MODE_ASK_IR 0x02
+#define DEVICE_SERIAL_MODE_DUPLEX_HALF 0x00
+#define DEVICE_SERIAL_MODE_DUPLEX_FULL 0x10
+///@)
+
+///
+/// DEVICE_PRODUCER_PARALLEL.
+///
+typedef struct {
+ UINT16 Address; ///< I/O address assigned to the parallel port.
+ UINT8 Irq; ///< IRQ assigned to the parallel port.
+ UINT8 Dma; ///< DMA assigned to the parallel port.
+ PARALLEL_MODE Mode; ///< Mode of the parallel port. Values are defined below.
+} DEVICE_PRODUCER_PARALLEL;
+
+///
+/// DEVICE_PRODUCER_PARALLEL's modes.
+///@{
+#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY 0x00
+#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01
+#define DEVICE_PARALLEL_MODE_MODE_EPP 0x02
+#define DEVICE_PARALLEL_MODE_MODE_ECP 0x03
+///@}
+
+///
+/// DEVICE_PRODUCER_FLOPPY
+///
+typedef struct {
+ UINT16 Address; ///< I/O address assigned to the floppy.
+ UINT8 Irq; ///< IRQ assigned to the floppy.
+ UINT8 Dma; ///< DMA assigned to the floppy.
+ UINT8 NumberOfFloppy; ///< Number of floppies in the system.
+} DEVICE_PRODUCER_FLOPPY;
+
+///
+/// LEGACY_DEVICE_FLAGS
+///
+typedef struct {
+ UINT32 A20Kybd : 1; ///< A20 controller by keyboard controller.
+ UINT32 A20Port90 : 1; ///< A20 controlled by port 0x92.
+ UINT32 Reserved : 30; ///< Reserved for future usage.
+} LEGACY_DEVICE_FLAGS;
+
+///
+/// DEVICE_PRODUCER_DATA_HEADER
+///
+typedef struct {
+ DEVICE_PRODUCER_SERIAL Serial[4]; ///< Data for serial port x. Type DEVICE_PRODUCER_SERIAL is defined below.
+ DEVICE_PRODUCER_PARALLEL Parallel[3]; ///< Data for parallel port x. Type DEVICE_PRODUCER_PARALLEL is defined below.
+ DEVICE_PRODUCER_FLOPPY Floppy; ///< Data for floppy. Type DEVICE_PRODUCER_FLOPPY is defined below.
+ UINT8 MousePresent; ///< Flag to indicate if mouse is present.
+ LEGACY_DEVICE_FLAGS Flags; ///< Miscellaneous Boolean state information passed to CSM.
+} DEVICE_PRODUCER_DATA_HEADER;
+
+///
+/// ATAPI_IDENTIFY
+///
+typedef struct {
+ UINT16 Raw[256]; ///< Raw data from the IDE IdentifyDrive command.
+} ATAPI_IDENTIFY;
+
+///
+/// HDD_INFO
+///
+typedef struct {
+ ///
+ /// Status of IDE device. Values are defined below. There is one HDD_INFO structure
+ /// per IDE controller. The IdentifyDrive is per drive. Index 0 is master and index
+ /// 1 is slave.
+ ///
+ UINT16 Status;
+
+ ///
+ /// PCI bus of IDE controller.
+ ///
+ UINT32 Bus;
+
+ ///
+ /// PCI device of IDE controller.
+ ///
+ UINT32 Device;
+
+ ///
+ /// PCI function of IDE controller.
+ ///
+ UINT32 Function;
+
+ ///
+ /// Command ports base address.
+ ///
+ UINT16 CommandBaseAddress;
+
+ ///
+ /// Control ports base address.
+ ///
+ UINT16 ControlBaseAddress;
+
+ ///
+ /// Bus master address.
+ ///
+ UINT16 BusMasterAddress;
+
+ UINT8 HddIrq;
+
+ ///
+ /// Data that identifies the drive data; one per possible attached drive.
+ ///
+ ATAPI_IDENTIFY IdentifyDrive[2];
+} HDD_INFO;
+
+///
+/// HDD_INFO status bits
+///
+#define HDD_PRIMARY 0x01
+#define HDD_SECONDARY 0x02
+#define HDD_MASTER_ATAPI_CDROM 0x04
+#define HDD_SLAVE_ATAPI_CDROM 0x08
+#define HDD_MASTER_IDE 0x20
+#define HDD_SLAVE_IDE 0x40
+#define HDD_MASTER_ATAPI_ZIPDISK 0x10
+#define HDD_SLAVE_ATAPI_ZIPDISK 0x80
+
+///
+/// BBS_STATUS_FLAGS;\.
+///
+typedef struct {
+ UINT16 OldPosition : 4; ///< Prior priority.
+ UINT16 Reserved1 : 4; ///< Reserved for future use.
+ UINT16 Enabled : 1; ///< If 0, ignore this entry.
+ UINT16 Failed : 1; ///< 0 = Not known if boot failure occurred.
+ ///< 1 = Boot attempted failed.
+
+ ///
+ /// State of media present.
+ /// 00 = No bootable media is present in the device.
+ /// 01 = Unknown if a bootable media present.
+ /// 10 = Media is present and appears bootable.
+ /// 11 = Reserved.
+ ///
+ UINT16 MediaPresent : 2;
+ UINT16 Reserved2 : 4; ///< Reserved for future use.
+} BBS_STATUS_FLAGS;
+
+///
+/// BBS_TABLE, device type values & boot priority values.
+///
+typedef struct {
+ ///
+ /// The boot priority for this boot device. Values are defined below.
+ ///
+ UINT16 BootPriority;
+
+ ///
+ /// The PCI bus for this boot device.
+ ///
+ UINT32 Bus;
+
+ ///
+ /// The PCI device for this boot device.
+ ///
+ UINT32 Device;
+
+ ///
+ /// The PCI function for the boot device.
+ ///
+ UINT32 Function;
+
+ ///
+ /// The PCI class for this boot device.
+ ///
+ UINT8 Class;
+
+ ///
+ /// The PCI Subclass for this boot device.
+ ///
+ UINT8 SubClass;
+
+ ///
+ /// Segment:offset address of an ASCIIZ description string describing the manufacturer.
+ ///
+ UINT16 MfgStringOffset;
+
+ ///
+ /// Segment:offset address of an ASCIIZ description string describing the manufacturer.
+ ///
+ UINT16 MfgStringSegment;
+
+ ///
+ /// BBS device type. BBS device types are defined below.
+ ///
+ UINT16 DeviceType;
+
+ ///
+ /// Status of this boot device. Type BBS_STATUS_FLAGS is defined below.
+ ///
+ BBS_STATUS_FLAGS StatusFlags;
+
+ ///
+ /// Segment:Offset address of boot loader for IPL devices or install INT13 handler for
+ /// BCV devices.
+ ///
+ UINT16 BootHandlerOffset;
+
+ ///
+ /// Segment:Offset address of boot loader for IPL devices or install INT13 handler for
+ /// BCV devices.
+ ///
+ UINT16 BootHandlerSegment;
+
+ ///
+ /// Segment:offset address of an ASCIIZ description string describing this device.
+ ///
+ UINT16 DescStringOffset;
+
+ ///
+ /// Segment:offset address of an ASCIIZ description string describing this device.
+ ///
+ UINT16 DescStringSegment;
+
+ ///
+ /// Reserved.
+ ///
+ UINT32 InitPerReserved;
+
+ ///
+ /// The use of these fields is IBV dependent. They can be used to flag that an OpROM
+ /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI
+ /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup
+ ///
+ UINT32 AdditionalIrq13Handler;
+
+ ///
+ /// The use of these fields is IBV dependent. They can be used to flag that an OpROM
+ /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI
+ /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup
+ ///
+ UINT32 AdditionalIrq18Handler;
+
+ ///
+ /// The use of these fields is IBV dependent. They can be used to flag that an OpROM
+ /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI
+ /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup
+ ///
+ UINT32 AdditionalIrq19Handler;
+
+ ///
+ /// The use of these fields is IBV dependent. They can be used to flag that an OpROM
+ /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI
+ /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup
+ ///
+ UINT32 AdditionalIrq40Handler;
+ UINT8 AssignedDriveNumber;
+ UINT32 AdditionalIrq41Handler;
+ UINT32 AdditionalIrq46Handler;
+ UINT32 IBV1;
+ UINT32 IBV2;
+} BBS_TABLE;
+
+///
+/// BBS device type values
+///@{
+#define BBS_FLOPPY 0x01
+#define BBS_HARDDISK 0x02
+#define BBS_CDROM 0x03
+#define BBS_PCMCIA 0x04
+#define BBS_USB 0x05
+#define BBS_EMBED_NETWORK 0x06
+#define BBS_BEV_DEVICE 0x80
+#define BBS_UNKNOWN 0xff
+///@}
+
+///
+/// BBS boot priority values
+///@{
+#define BBS_DO_NOT_BOOT_FROM 0xFFFC
+#define BBS_LOWEST_PRIORITY 0xFFFD
+#define BBS_UNPRIORITIZED_ENTRY 0xFFFE
+#define BBS_IGNORE_ENTRY 0xFFFF
+///@}
+
+///
+/// SMM_ATTRIBUTES
+///
+typedef struct {
+ ///
+ /// Access mechanism used to generate the soft SMI. Defined types are below. The other
+ /// values are reserved for future usage.
+ ///
+ UINT16 Type : 3;
+
+ ///
+ /// The size of "port" in bits. Defined values are below.
+ ///
+ UINT16 PortGranularity : 3;
+
+ ///
+ /// The size of data in bits. Defined values are below.
+ ///
+ UINT16 DataGranularity : 3;
+
+ ///
+ /// Reserved for future use.
+ ///
+ UINT16 Reserved : 7;
+} SMM_ATTRIBUTES;
+
+///
+/// SMM_ATTRIBUTES type values.
+///@{
+#define STANDARD_IO 0x00
+#define STANDARD_MEMORY 0x01
+///@}
+
+///
+/// SMM_ATTRIBUTES port size constants.
+///@{
+#define PORT_SIZE_8 0x00
+#define PORT_SIZE_16 0x01
+#define PORT_SIZE_32 0x02
+#define PORT_SIZE_64 0x03
+///@}
+
+///
+/// SMM_ATTRIBUTES data size constants.
+///@{
+#define DATA_SIZE_8 0x00
+#define DATA_SIZE_16 0x01
+#define DATA_SIZE_32 0x02
+#define DATA_SIZE_64 0x03
+///@}
+
+///
+/// SMM_FUNCTION & relating constants.
+///
+typedef struct {
+ UINT16 Function : 15;
+ UINT16 Owner : 1;
+} SMM_FUNCTION;
+
+///
+/// SMM_FUNCTION Function constants.
+///@{
+#define INT15_D042 0x0000
+#define GET_USB_BOOT_INFO 0x0001
+#define DMI_PNP_50_57 0x0002
+///@}
+
+///
+/// SMM_FUNCTION Owner constants.
+///@{
+#define STANDARD_OWNER 0x0
+#define OEM_OWNER 0x1
+///@}
+
+///
+/// This structure assumes both port and data sizes are 1. SmmAttribute must be
+/// properly to reflect that assumption.
+///
+typedef struct {
+ ///
+ /// Describes the access mechanism, SmmPort, and SmmData sizes. Type
+ /// SMM_ATTRIBUTES is defined below.
+ ///
+ SMM_ATTRIBUTES SmmAttributes;
+
+ ///
+ /// Function Soft SMI is to perform. Type SMM_FUNCTION is defined below.
+ ///
+ SMM_FUNCTION SmmFunction;
+
+ ///
+ /// SmmPort size depends upon SmmAttributes and ranges from2 bytes to 16 bytes.
+ ///
+ UINT8 SmmPort;
+
+ ///
+ /// SmmData size depends upon SmmAttributes and ranges from2 bytes to 16 bytes.
+ ///
+ UINT8 SmmData;
+} SMM_ENTRY;
+
+///
+/// SMM_TABLE
+///
+typedef struct {
+ UINT16 NumSmmEntries; ///< Number of entries represented by SmmEntry.
+ SMM_ENTRY SmmEntry; ///< One entry per function. Type SMM_ENTRY is defined below.
+} SMM_TABLE;
+
+///
+/// UDC_ATTRIBUTES
+///
+typedef struct {
+ ///
+ /// This bit set indicates that the ServiceAreaData is valid.
+ ///
+ UINT8 DirectoryServiceValidity : 1;
+
+ ///
+ /// This bit set indicates to use the Reserve Area Boot Code Address (RACBA) only if
+ /// DirectoryServiceValidity is 0.
+ ///
+ UINT8 RabcaUsedFlag : 1;
+
+ ///
+ /// This bit set indicates to execute hard disk diagnostics.
+ ///
+ UINT8 ExecuteHddDiagnosticsFlag : 1;
+
+ ///
+ /// Reserved for future use. Set to 0.
+ ///
+ UINT8 Reserved : 5;
+} UDC_ATTRIBUTES;
+
+///
+/// UD_TABLE
+///
+typedef struct {
+ ///
+ /// This field contains the bit-mapped attributes of the PARTIES information. Type
+ /// UDC_ATTRIBUTES is defined below.
+ ///
+ UDC_ATTRIBUTES Attributes;
+
+ ///
+ /// This field contains the zero-based device on which the selected
+ /// ServiceDataArea is present. It is 0 for master and 1 for the slave device.
+ ///
+ UINT8 DeviceNumber;
+
+ ///
+ /// This field contains the zero-based index into the BbsTable for the parent device.
+ /// This index allows the user to reference the parent device information such as PCI
+ /// bus, device function.
+ ///
+ UINT8 BbsTableEntryNumberForParentDevice;
+
+ ///
+ /// This field contains the zero-based index into the BbsTable for the boot entry.
+ ///
+ UINT8 BbsTableEntryNumberForBoot;
+
+ ///
+ /// This field contains the zero-based index into the BbsTable for the HDD diagnostics entry.
+ ///
+ UINT8 BbsTableEntryNumberForHddDiag;
+
+ ///
+ /// The raw Beer data.
+ ///
+ UINT8 BeerData[128];
+
+ ///
+ /// The raw data of selected service area.
+ ///
+ UINT8 ServiceAreaData[64];
+} UD_TABLE;
+
+#define EFI_TO_LEGACY_MAJOR_VERSION 0x02
+#define EFI_TO_LEGACY_MINOR_VERSION 0x00
+#define MAX_IDE_CONTROLLER 8
+
+///
+/// EFI_TO_COMPATIBILITY16_BOOT_TABLE
+///
+typedef struct {
+ UINT16 MajorVersion; ///< The EfiCompatibility major version number.
+ UINT16 MinorVersion; ///< The EfiCompatibility minor version number.
+ UINT32 AcpiTable; ///< The location of the RSDT ACPI table. < 4G range.
+ UINT32 SmbiosTable; ///< The location of the SMBIOS table in EFI memory. < 4G range.
+ UINT32 SmbiosTableLength;
+ //
+ // Legacy SIO state
+ //
+ DEVICE_PRODUCER_DATA_HEADER SioData; ///< Standard traditional device information.
+ UINT16 DevicePathType; ///< The default boot type.
+ UINT16 PciIrqMask; ///< Mask of which IRQs have been assigned to PCI.
+ UINT32 NumberE820Entries; ///< Number of E820 entries. The number can change from the
+ ///< Compatibility16InitializeYourself() function.
+ //
+ // Controller & Drive Identify[2] per controller information
+ //
+ HDD_INFO HddInfo[MAX_IDE_CONTROLLER]; ///< Hard disk drive information, including raw Identify Drive data.
+ UINT32 NumberBbsEntries; ///< Number of entries in the BBS table
+ UINT32 BbsTable; ///< A pointer to the BBS table. Type BBS_TABLE is defined below.
+ UINT32 SmmTable; ///< A pointer to the SMM table. Type SMM_TABLE is defined below.
+ UINT32 OsMemoryAbove1Mb; ///< The amount of usable memory above 1 MB, i.e. E820 type 1 memory. This value can
+ ///< differ from the value in EFI_TO_COMPATIBILITY16_INIT_TABLE as more
+ ///< memory may have been discovered.
+ UINT32 UnconventionalDeviceTable; ///< Information to boot off an unconventional device like a PARTIES partition. Type
+ ///< UD_TABLE is defined below.
+} EFI_TO_COMPATIBILITY16_BOOT_TABLE;
+
+///
+/// EFI_LEGACY_INSTALL_PCI_HANDLER
+///
+typedef struct {
+ UINT8 PciBus; ///< The PCI bus of the device.
+ UINT8 PciDeviceFun; ///< The PCI device in bits 7:3 and function in bits 2:0.
+ UINT8 PciSegment; ///< The PCI segment of the device.
+ UINT8 PciClass; ///< The PCI class code of the device.
+ UINT8 PciSubclass; ///< The PCI subclass code of the device.
+ UINT8 PciInterface; ///< The PCI interface code of the device.
+ //
+ // Primary section
+ //
+ UINT8 PrimaryIrq; ///< The primary device IRQ.
+ UINT8 PrimaryReserved; ///< Reserved.
+ UINT16 PrimaryControl; ///< The primary device control I/O base.
+ UINT16 PrimaryBase; ///< The primary device I/O base.
+ UINT16 PrimaryBusMaster; ///< The primary device bus master I/O base.
+ //
+ // Secondary Section
+ //
+ UINT8 SecondaryIrq; ///< The secondary device IRQ.
+ UINT8 SecondaryReserved; ///< Reserved.
+ UINT16 SecondaryControl; ///< The secondary device control I/O base.
+ UINT16 SecondaryBase; ///< The secondary device I/O base.
+ UINT16 SecondaryBusMaster; ///< The secondary device bus master I/O base.
+} EFI_LEGACY_INSTALL_PCI_HANDLER;
+
+//
+// Restore default pack value
+//
+#pragma pack()
+
+#define EFI_LEGACY_BIOS_PROTOCOL_GUID \
+ { \
+ 0xdb9a1e3d, 0x45cb, 0x4abb, {0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d } \
+ }
+
+typedef struct _EFI_LEGACY_BIOS_PROTOCOL EFI_LEGACY_BIOS_PROTOCOL;
+
+///
+/// Flags returned by CheckPciRom().
+///
+#define NO_ROM 0x00
+#define ROM_FOUND 0x01
+#define VALID_LEGACY_ROM 0x02
+#define ROM_WITH_CONFIG 0x04 ///< Not defined in the Framework CSM Specification.
+
+///
+/// The following macros do not appear in the Framework CSM Specification and
+/// are kept for backward compatibility only. They convert 32-bit address (_Adr)
+/// to Segment:Offset 16-bit form.
+///
+///@{
+#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000)
+#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff)
+///@}
+
+#define CARRY_FLAG 0x01
+
+///
+/// EFI_EFLAGS_REG
+///
+typedef struct {
+ UINT32 CF:1;
+ UINT32 Reserved1:1;
+ UINT32 PF:1;
+ UINT32 Reserved2:1;
+ UINT32 AF:1;
+ UINT32 Reserved3:1;
+ UINT32 ZF:1;
+ UINT32 SF:1;
+ UINT32 TF:1;
+ UINT32 IF:1;
+ UINT32 DF:1;
+ UINT32 OF:1;
+ UINT32 IOPL:2;
+ UINT32 NT:1;
+ UINT32 Reserved4:2;
+ UINT32 VM:1;
+ UINT32 Reserved5:14;
+} EFI_EFLAGS_REG;
+
+///
+/// EFI_DWORD_REGS
+///
+typedef struct {
+ UINT32 EAX;
+ UINT32 EBX;
+ UINT32 ECX;
+ UINT32 EDX;
+ UINT32 ESI;
+ UINT32 EDI;
+ EFI_EFLAGS_REG EFlags;
+ UINT16 ES;
+ UINT16 CS;
+ UINT16 SS;
+ UINT16 DS;
+ UINT16 FS;
+ UINT16 GS;
+ UINT32 EBP;
+ UINT32 ESP;
+} EFI_DWORD_REGS;
+
+///
+/// EFI_FLAGS_REG
+///
+typedef struct {
+ UINT16 CF:1;
+ UINT16 Reserved1:1;
+ UINT16 PF:1;
+ UINT16 Reserved2:1;
+ UINT16 AF:1;
+ UINT16 Reserved3:1;
+ UINT16 ZF:1;
+ UINT16 SF:1;
+ UINT16 TF:1;
+ UINT16 IF:1;
+ UINT16 DF:1;
+ UINT16 OF:1;
+ UINT16 IOPL:2;
+ UINT16 NT:1;
+ UINT16 Reserved4:1;
+} EFI_FLAGS_REG;
+
+///
+/// EFI_WORD_REGS
+///
+typedef struct {
+ UINT16 AX;
+ UINT16 ReservedAX;
+ UINT16 BX;
+ UINT16 ReservedBX;
+ UINT16 CX;
+ UINT16 ReservedCX;
+ UINT16 DX;
+ UINT16 ReservedDX;
+ UINT16 SI;
+ UINT16 ReservedSI;
+ UINT16 DI;
+ UINT16 ReservedDI;
+ EFI_FLAGS_REG Flags;
+ UINT16 ReservedFlags;
+ UINT16 ES;
+ UINT16 CS;
+ UINT16 SS;
+ UINT16 DS;
+ UINT16 FS;
+ UINT16 GS;
+ UINT16 BP;
+ UINT16 ReservedBP;
+ UINT16 SP;
+ UINT16 ReservedSP;
+} EFI_WORD_REGS;
+
+///
+/// EFI_BYTE_REGS
+///
+typedef struct {
+ UINT8 AL, AH;
+ UINT16 ReservedAX;
+ UINT8 BL, BH;
+ UINT16 ReservedBX;
+ UINT8 CL, CH;
+ UINT16 ReservedCX;
+ UINT8 DL, DH;
+ UINT16 ReservedDX;
+} EFI_BYTE_REGS;
+
+///
+/// EFI_IA32_REGISTER_SET
+///
+typedef union {
+ EFI_DWORD_REGS E;
+ EFI_WORD_REGS X;
+ EFI_BYTE_REGS H;
+} EFI_IA32_REGISTER_SET;
+
+/**
+ Thunk to 16-bit real mode and execute a software interrupt with a vector
+ of BiosInt. Regs will contain the 16-bit register context on entry and
+ exit.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] BiosInt The processor interrupt vector to invoke.
+ @param[in,out] Reg Register contexted passed into (and returned) from thunk to
+ 16-bit mode.
+
+ @retval TRUE Thunk completed with no BIOS errors in the target code. See Regs for status.
+ @retval FALSE There was a BIOS error in the target code.
+**/
+typedef
+BOOLEAN
+(EFIAPI *EFI_LEGACY_BIOS_INT86)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN UINT8 BiosInt,
+ IN OUT EFI_IA32_REGISTER_SET *Regs
+ );
+
+/**
+ Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the
+ 16-bit register context on entry and exit. Arguments can be passed on
+ the Stack argument
+
+ @param[in] This The protocol instance pointer.
+ @param[in] Segment The segemnt of 16-bit mode call.
+ @param[in] Offset The offset of 16-bit mdoe call.
+ @param[in] Reg Register contexted passed into (and returned) from thunk to
+ 16-bit mode.
+ @param[in] Stack The caller allocated stack used to pass arguments.
+ @param[in] StackSize The size of Stack in bytes.
+
+ @retval FALSE Thunk completed with no BIOS errors in the target code. See Regs for status. @retval TRUE There was a BIOS error in the target code.
+**/
+typedef
+BOOLEAN
+(EFIAPI *EFI_LEGACY_BIOS_FARCALL86)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN UINT16 Segment,
+ IN UINT16 Offset,
+ IN EFI_IA32_REGISTER_SET *Regs,
+ IN VOID *Stack,
+ IN UINTN StackSize
+ );
+
+/**
+ Test to see if a legacy PCI ROM exists for this device. Optionally return
+ the Legacy ROM instance for this PCI device.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] PciHandle The PCI PC-AT OPROM from this devices ROM BAR will be loaded
+ @param[out] RomImage Return the legacy PCI ROM for this device.
+ @param[out] RomSize The size of ROM Image.
+ @param[out] Flags Indicates if ROM found and if PC-AT. Multiple bits can be set as follows:
+ - 00 = No ROM.
+ - 01 = ROM Found.
+ - 02 = ROM is a valid legacy ROM.
+
+ @retval EFI_SUCCESS The Legacy Option ROM available for this device
+ @retval EFI_UNSUPPORTED The Legacy Option ROM is not supported.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_CHECK_ROM)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN EFI_HANDLE PciHandle,
+ OUT VOID **RomImage, OPTIONAL
+ OUT UINTN *RomSize, OPTIONAL
+ OUT UINTN *Flags
+ );
+
+/**
+ Load a legacy PC-AT OPROM on the PciHandle device. Return information
+ about how many disks were added by the OPROM and the shadow address and
+ size. DiskStart & DiskEnd are INT 13h drive letters. Thus 0x80 is C:
+
+ @param[in] This The protocol instance pointer.
+ @param[in] PciHandle The PCI PC-AT OPROM from this devices ROM BAR will be loaded.
+ This value is NULL if RomImage is non-NULL. This is the normal
+ case.
+ @param[in] RomImage A PCI PC-AT ROM image. This argument is non-NULL if there is
+ no hardware associated with the ROM and thus no PciHandle,
+ otherwise is must be NULL.
+ Example is PXE base code.
+ @param[out] Flags The type of ROM discovered. Multiple bits can be set, as follows:
+ - 00 = No ROM.
+ - 01 = ROM found.
+ - 02 = ROM is a valid legacy ROM.
+ @param[out] DiskStart The disk number of first device hooked by the ROM. If DiskStart
+ is the same as DiskEnd no disked were hooked.
+ @param[out] DiskEnd disk number of the last device hooked by the ROM.
+ @param[out] RomShadowAddress Shadow address of PC-AT ROM.
+ @param[out] RomShadowSize Size of RomShadowAddress in bytes.
+
+ @retval EFI_SUCCESS Thunk completed, see Regs for status.
+ @retval EFI_INVALID_PARAMETER PciHandle not found
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_INSTALL_ROM)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN EFI_HANDLE PciHandle,
+ IN VOID **RomImage,
+ OUT UINTN *Flags,
+ OUT UINT8 *DiskStart, OPTIONAL
+ OUT UINT8 *DiskEnd, OPTIONAL
+ OUT VOID **RomShadowAddress, OPTIONAL
+ OUT UINT32 *ShadowedRomSize OPTIONAL
+ );
+
+/**
+ This function attempts to traditionally boot the specified BootOption. If the EFI context has
+ been compromised, this function will not return. This procedure is not used for loading an EFI-aware
+ OS off a traditional device. The following actions occur:
+ - Get EFI SMBIOS data structures, convert them to a traditional format, and copy to
+ Compatibility16.
+ - Get a pointer to ACPI data structures and copy the Compatibility16 RSD PTR to F0000 block.
+ - Find the traditional SMI handler from a firmware volume and register the traditional SMI
+ handler with the EFI SMI handler.
+ - Build onboard IDE information and pass this information to the Compatibility16 code.
+ - Make sure all PCI Interrupt Line registers are programmed to match 8259.
+ - Reconfigure SIO devices from EFI mode (polled) into traditional mode (interrupt driven).
+ - Shadow all PCI ROMs.
+ - Set up BDA and EBDA standard areas before the legacy boot.
+ - Construct the Compatibility16 boot memory map and pass it to the Compatibility16 code.
+ - Invoke the Compatibility16 table function Compatibility16PrepareToBoot(). This
+ invocation causes a thunk into the Compatibility16 code, which sets all appropriate internal
+ data structures. The boot device list is a parameter.
+ - Invoke the Compatibility16 Table function Compatibility16Boot(). This invocation
+ causes a thunk into the Compatibility16 code, which does an INT19.
+ - If the Compatibility16Boot() function returns, then the boot failed in a graceful
+ manner--meaning that the EFI code is still valid. An ungraceful boot failure causes a reset because the state
+ of EFI code is unknown.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] BootOption The EFI Device Path from BootXXXX variable.
+ @param[in] LoadOptionSize The size of LoadOption in size.
+ @param[in] LoadOption LThe oadOption from BootXXXX variable.
+
+ @retval EFI_DEVICE_ERROR Failed to boot from any boot device and memory is uncorrupted. Note: This function normally does not returns. It will either boot the OS or reset the system if memory has been "corrupted" by loading a boot sector and passing control to it.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_BOOT)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN BBS_BBS_DEVICE_PATH *BootOption,
+ IN UINT32 LoadOptionsSize,
+ IN VOID *LoadOptions
+ );
+
+/**
+ This function takes the Leds input parameter and sets/resets the BDA accordingly.
+ Leds is also passed to Compatibility16 code, in case any special processing is required.
+ This function is normally called from EFI Setup drivers that handle user-selectable
+ keyboard options such as boot with NUM LOCK on/off. This function does not
+ touch the keyboard or keyboard LEDs but only the BDA.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] Leds The status of current Scroll, Num & Cap lock LEDS:
+ - Bit 0 is Scroll Lock 0 = Not locked.
+ - Bit 1 is Num Lock.
+ - Bit 2 is Caps Lock.
+
+ @retval EFI_SUCCESS The BDA was updated successfully.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN UINT8 Leds
+ );
+
+/**
+ Retrieve legacy BBS info and assign boot priority.
+
+ @param[in] This The protocol instance pointer.
+ @param[out] HddCount The number of HDD_INFO structures.
+ @param[out] HddInfo Onboard IDE controller information.
+ @param[out] BbsCount The number of BBS_TABLE structures.
+ @param[in,out] BbsTable Points to List of BBS_TABLE.
+
+ @retval EFI_SUCCESS Tables were returned.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_GET_BBS_INFO)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ OUT UINT16 *HddCount,
+ OUT HDD_INFO **HddInfo,
+ OUT UINT16 *BbsCount,
+ IN OUT BBS_TABLE **BbsTable
+ );
+
+/**
+ Assign drive number to legacy HDD drives prior to booting an EFI
+ aware OS so the OS can access drives without an EFI driver.
+
+ @param[in] This The protocol instance pointer.
+ @param[out] BbsCount The number of BBS_TABLE structures
+ @param[out] BbsTable List of BBS entries
+
+ @retval EFI_SUCCESS Drive numbers assigned.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ OUT UINT16 *BbsCount,
+ OUT BBS_TABLE **BbsTable
+ );
+
+/**
+ To boot from an unconventional device like parties and/or execute
+ HDD diagnostics.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] Attributes How to interpret the other input parameters.
+ @param[in] BbsEntry The 0-based index into the BbsTable for the parent
+ device.
+ @param[in] BeerData A pointer to the 128 bytes of ram BEER data.
+ @param[in] ServiceAreaData A pointer to the 64 bytes of raw Service Area data. The
+ caller must provide a pointer to the specific Service
+ Area and not the start all Service Areas.
+
+ @retval EFI_INVALID_PARAMETER If error. Does NOT return if no error.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN UDC_ATTRIBUTES Attributes,
+ IN UINTN BbsEntry,
+ IN VOID *BeerData,
+ IN VOID *ServiceAreaData
+ );
+
+/**
+ Shadow all legacy16 OPROMs that haven't been shadowed.
+ Warning: Use this with caution. This routine disconnects all EFI
+ drivers. If used externally, then the caller must re-connect EFI
+ drivers.
+
+ @param[in] This The protocol instance pointer.
+
+ @retval EFI_SUCCESS OPROMs were shadowed.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This
+ );
+
+/**
+ Get a region from the LegacyBios for S3 usage.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] LegacyMemorySize The size of required region.
+ @param[in] Region The region to use.
+ 00 = Either 0xE0000 or 0xF0000 block.
+ - Bit0 = 1 0xF0000 block.
+ - Bit1 = 1 0xE0000 block.
+ @param[in] Alignment Address alignment. Bit mapped. The first non-zero
+ bit from right is alignment.
+ @param[out] LegacyMemoryAddress The Region Assigned
+
+ @retval EFI_SUCCESS The Region was assigned.
+ @retval EFI_ACCESS_DENIED The function was previously invoked.
+ @retval Other The Region was not assigned.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_GET_LEGACY_REGION)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN UINTN LegacyMemorySize,
+ IN UINTN Region,
+ IN UINTN Alignment,
+ OUT VOID **LegacyMemoryAddress
+ );
+
+/**
+ Get a region from the LegacyBios for Tiano usage. Can only be invoked once.
+
+ @param[in] This The protocol instance pointer.
+ @param[in] LegacyMemorySize The size of data to copy.
+ @param[in] LegacyMemoryAddress The Legacy Region destination address.
+ Note: must be in region assigned by
+ LegacyBiosGetLegacyRegion.
+ @param[in] LegacyMemorySourceAddress The source of the data to copy.
+
+ @retval EFI_SUCCESS The Region assigned.
+ @retval EFI_ACCESS_DENIED Destination was outside an assigned region.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_COPY_LEGACY_REGION)(
+ IN EFI_LEGACY_BIOS_PROTOCOL *This,
+ IN UINTN LegacyMemorySize,
+ IN VOID *LegacyMemoryAddress,
+ IN VOID *LegacyMemorySourceAddress
+ );
+
+///
+/// Abstracts the traditional BIOS from the rest of EFI. The LegacyBoot()
+/// member function allows the BDS to support booting a traditional OS.
+/// EFI thunks drivers that make EFI bindings for BIOS INT services use
+/// all the other member functions.
+///
+struct _EFI_LEGACY_BIOS_PROTOCOL {
+ ///
+ /// Performs traditional software INT. See the Int86() function description.
+ ///
+ EFI_LEGACY_BIOS_INT86 Int86;
+
+ ///
+ /// Performs a far call into Compatibility16 or traditional OpROM code.
+ ///
+ EFI_LEGACY_BIOS_FARCALL86 FarCall86;
+
+ ///
+ /// Checks if a traditional OpROM exists for this device.
+ ///
+ EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom;
+
+ ///
+ /// Loads a traditional OpROM in traditional OpROM address space.
+ ///
+ EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom;
+
+ ///
+ /// Boots a traditional OS.
+ ///
+ EFI_LEGACY_BIOS_BOOT LegacyBoot;
+
+ ///
+ /// Updates BDA to reflect the current EFI keyboard LED status.
+ ///
+ EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus;
+
+ ///
+ /// Allows an external agent, such as BIOS Setup, to get the BBS data.
+ ///
+ EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo;
+
+ ///
+ /// Causes all legacy OpROMs to be shadowed.
+ ///
+ EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms;
+
+ ///
+ /// Performs all actions prior to boot. Used when booting an EFI-aware OS
+ /// rather than a legacy OS.
+ ///
+ EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi;
+
+ ///
+ /// Allows EFI to reserve an area in the 0xE0000 or 0xF0000 block.
+ ///
+ EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion;
+
+ ///
+ /// Allows EFI to copy data to the area specified by GetLegacyRegion.
+ ///
+ EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion;
+
+ ///
+ /// Allows the user to boot off an unconventional device such as a PARTIES partition.
+ ///
+ EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice;
+};
+
+//
+// Legacy BIOS needs to access memory in page 0 (0-4095), which is disabled if
+// NULL pointer detection feature is enabled. Following macro can be used to
+// enable/disable page 0 before/after accessing it.
+//
+#define ACCESS_PAGE0_CODE(statements) \
+ do { \
+ EFI_STATUS Status_; \
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc_; \
+ \
+ Desc_.Attributes = 0; \
+ Status_ = gDS->GetMemorySpaceDescriptor (0, &Desc_); \
+ ASSERT_EFI_ERROR (Status_); \
+ if ((Desc_.Attributes & EFI_MEMORY_RP) != 0) { \
+ Status_ = gDS->SetMemorySpaceAttributes ( \
+ 0, \
+ EFI_PAGES_TO_SIZE(1), \
+ Desc_.Attributes & ~(UINT64)EFI_MEMORY_RP \
+ ); \
+ ASSERT_EFI_ERROR (Status_); \
+ } \
+ \
+ { \
+ statements; \
+ } \
+ \
+ if ((Desc_.Attributes & EFI_MEMORY_RP) != 0) { \
+ Status_ = gDS->SetMemorySpaceAttributes ( \
+ 0, \
+ EFI_PAGES_TO_SIZE(1), \
+ Desc_.Attributes \
+ ); \
+ ASSERT_EFI_ERROR (Status_); \
+ } \
+ } while (FALSE)
+
+extern EFI_GUID gEfiLegacyBiosProtocolGuid;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h
new file mode 100644
index 0000000000..b52ad94c3e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h
@@ -0,0 +1,752 @@
+/** @file
+ The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
+ implementation with this EFI code. The EFI driver that produces
+ the Legacy BIOS protocol is generic and consumes this protocol.
+ A driver that matches the Legacy16 produces this protocol
+
+ @copyright
+ Copyright 2007 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_LEGACY_BIOS_PLATFORM_H_
+#define _EFI_LEGACY_BIOS_PLATFORM_H_
+
+///
+/// Legacy BIOS Platform depends on HDD_INFO and EFI_COMPATIBILITY16_TABLE that
+/// are defined with the Legacy BIOS Protocol
+///
+#include <Protocol/LegacyBios.h>
+
+#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
+ { \
+ 0x783658a3, 0x4172, 0x4421, {0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4 } \
+ }
+
+typedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;
+
+/**
+ This enum specifies the Mode param values for GetPlatformInfo()
+**/
+typedef enum {
+ ///
+ /// This mode is invoked twice. The first invocation has LegacySegment and
+ /// LegacyOffset set to 0. The mode returns the MP table address in EFI memory, along with its size.
+ /// The second invocation has LegacySegment and LegacyOffset set to the location
+ /// in the 0xF0000 or 0xE0000 block to which the MP table is to be copied. The second
+ /// invocation allows any MP table address fixes to occur in the EFI memory copy of the
+ /// MP table. The caller, not EfiGetPlatformBinaryMpTable, copies the modified MP
+ /// table to the allocated region in 0xF0000 or 0xE0000 block after the second invocation.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Table Pointer to the MP table.
+ ///
+ /// TableSize Size in bytes of the MP table.
+ ///
+ /// Location Location to place table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
+ /// Bit 0 = 1 0xF0000 64 KB block.
+ /// Bit 1 = 1 0xE0000 64 KB block.
+ /// Multiple bits can be set.
+ ///
+ /// Alignment Bit-mapped address alignment granularity.
+ /// The first nonzero bit from the right is the address granularity.
+ ///
+ // LegacySegment Segment in which EfiCompatibility code will place the MP table.
+ ///
+ /// LegacyOffset Offset in which EfiCompatibility code will place the MP table.
+ ///
+ /// The return values associated with this mode are:
+ ///
+ /// EFI_SUCCESS The MP table was returned.
+ ///
+ /// EFI_UNSUPPORTED The MP table is not supported on this platform.
+ ///
+ EfiGetPlatformBinaryMpTable = 0,
+ ///
+ /// This mode returns a block of data. The content and usage is IBV or OEM defined.
+ /// OEMs or IBVs normally use this function for nonstandard Compatibility16 runtime soft
+ /// INTs. It is the responsibility of this routine to coalesce multiple OEM 16 bit functions, if
+ /// they exist, into one coherent package that is understandable by the Compatibility16 code.
+ /// This function is invoked twice. The first invocation has LegacySegment and
+ /// LegacyOffset set to 0. The function returns the table address in EFI memory, as well as its size.
+ /// The second invocation has LegacySegment and LegacyOffset set to the location
+ /// in the 0xF0000 or 0xE0000 block to which the data (table) is to be copied. The second
+ /// invocation allows any data (table) address fixes to occur in the EFI memory copy of
+ /// the table. The caller, not GetOemIntData(), copies the modified data (table) to the
+ /// allocated region in 0xF0000 or 0xE0000 block after the second invocation.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Table Pointer to OEM legacy 16 bit code or data.
+ ///
+ /// TableSize Size of data.
+ ///
+ /// Location Location to place table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
+ /// Bit 0 = 1 0xF0000 64 KB block.
+ /// Bit 1 = 1 0xE0000 64 KB block.
+ /// Multiple bits can be set.
+ ///
+ /// Alignment Bit mapped address alignment granularity.
+ /// The first nonzero bit from the right is the address granularity.
+ ///
+ /// LegacySegment Segment in which EfiCompatibility code will place the table or data.
+ ///
+ /// LegacyOffset Offset in which EfiCompatibility code will place the table or data.
+ ///
+ /// The return values associated with this mode are:
+ ///
+ /// EFI_SUCCESS The data was returned successfully.
+ ///
+ /// EFI_UNSUPPORTED Oem INT is not supported on this platform.
+ ///
+ EfiGetPlatformBinaryOemIntData = 1,
+ ///
+ /// This mode returns a block of data. The content and usage is IBV defined. OEMs or
+ /// IBVs normally use this mode for nonstandard Compatibility16 runtime 16 bit routines. It
+ /// is the responsibility of this routine to coalesce multiple OEM 16 bit functions, if they
+ /// exist, into one coherent package that is understandable by the Compatibility16 code.
+ ///
+ /// Example usage: A legacy mobile BIOS that has a pre-existing runtime
+ /// interface to return the battery status to calling applications.
+ ///
+ /// This mode is invoked twice. The first invocation has LegacySegment and
+ /// LegacyOffset set to 0. The mode returns the table address in EFI memory and its size.
+ /// The second invocation has LegacySegment and LegacyOffset set to the location
+ /// in the 0xF0000 or 0xE0000 block to which the table is to be copied. The second
+ /// invocation allows any table address fixes to occur in the EFI memory copy of the table.
+ /// The caller, not EfiGetPlatformBinaryOem16Data, copies the modified table to
+ /// the allocated region in 0xF0000 or 0xE0000 block after the second invocation.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Table Pointer to OEM legacy 16 bit code or data.
+ ///
+ /// TableSize Size of data.
+ ///
+ /// Location Location to place the table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
+ /// Bit 0 = 1 0xF0000 64 KB block.
+ /// Bit 1 = 1 0xE0000 64 KB block.
+ /// Multiple bits can be set.
+ ///
+ /// Alignment Bit mapped address alignment granularity.
+ /// The first nonzero bit from the right is the address granularity.
+ ///
+ /// LegacySegment Segment in which EfiCompatibility code will place the table or data.
+ ///
+ /// LegacyOffset Offset in which EfiCompatibility code will place the table or data.
+ ///
+ /// The return values associated with this mode are:
+ ///
+ /// EFI_SUCCESS The data was returned successfully.
+ ///
+ /// EFI_UNSUPPORTED Oem16 is not supported on this platform.
+ ///
+ EfiGetPlatformBinaryOem16Data = 2,
+///
+/// This mode returns a block of data. The content and usage are IBV defined. OEMs or
+/// IBVs normally use this mode for nonstandard Compatibility16 runtime 32 bit routines. It
+/// is the responsibility of this routine to coalesce multiple OEM 32 bit functions, if they
+/// exist, into one coherent package that is understandable by the Compatibility16 code.
+///
+/// Example usage: A legacy mobile BIOS that has a pre existing runtime
+/// interface to return the battery status to calling applications.
+///
+/// This mode is invoked twice. The first invocation has LegacySegment and
+/// LegacyOffset set to 0. The mode returns the table address in EFI memory and its size.
+///
+/// The second invocation has LegacySegment and LegacyOffset set to the location
+/// in the 0xF0000 or 0xE0000 block to which the table is to be copied. The second
+/// invocation allows any table address fix ups to occur in the EFI memory copy of the table.
+/// The caller, not EfiGetPlatformBinaryOem32Data, copies the modified table to
+/// the allocated region in 0xF0000 or 0xE0000 block after the second invocation..
+///
+/// Note: There are two generic mechanisms by which this mode can be used.
+/// Mechanism 1: This mode returns the data and the Legacy BIOS Protocol copies
+/// the data into the F0000 or E0000 block in the Compatibility16 code. The
+/// EFI_COMPATIBILITY16_TABLE entries Oem32Segment and Oem32Offset can
+/// be viewed as two UINT16 entries.
+/// Mechanism 2: This mode directly fills in the EFI_COMPATIBILITY16_TABLE with
+/// a pointer to the INT15 E820 region containing the 32 bit code. It returns
+/// EFI_UNSUPPORTED. The EFI_COMPATIBILITY16_TABLE entries,
+/// Oem32Segment and Oem32Offset, can be viewed as two UINT16 entries or
+/// as a single UINT32 entry as determined by the IBV.
+///
+/// The function parameters associated with this mode are:
+///
+/// TableSize Size of data.
+///
+/// Location Location to place the table. 0x00 or 0xE0000 or 0xF0000 64 KB blocks.
+/// Bit 0 = 1 0xF0000 64 KB block.
+/// Bit 1 = 1 0xE0000 64 KB block.
+/// Multiple bits can be set.
+///
+/// Alignment Bit mapped address alignment granularity.
+/// The first nonzero bit from the right is the address granularity.
+///
+/// LegacySegment Segment in which EfiCompatibility code will place the table or data.
+///
+/// LegacyOffset Offset in which EfiCompatibility code will place the table or data.
+///
+/// The return values associated with this mode are:
+/// EFI_SUCCESS The data was returned successfully.
+/// EFI_UNSUPPORTED Oem32 is not supported on this platform.
+///
+EfiGetPlatformBinaryOem32Data = 3,
+ ///
+ /// This mode returns a TPM binary image for the onboard TPM device.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Table TPM binary image for the onboard TPM device.
+ ///
+ /// TableSize Size of BinaryImage in bytes.
+ ///
+ /// Location Location to place the table. 0x00. Either 0xE0000 or 0xF0000 64 KB blocks.
+ /// Bit 0 = 1 0xF0000 64 KB block.
+ /// Bit 1 = 1 0xE0000 64 KB block.
+ /// Multiple bits can be set.
+ ///
+ /// Alignment Bit mapped address alignment granularity.
+ /// The first nonzero bit from the right is the address granularity.
+ ///
+ /// LegacySegment Segment in which EfiCompatibility code will place the table or data.
+ ///
+ /// LegacyOffset Offset in which EfiCompatibility code will place the table or data.
+ ///
+ /// The return values associated with this mode are:
+ ///
+ /// EFI_SUCCESS BinaryImage is valid.
+ ///
+ /// EFI_UNSUPPORTED Mode is not supported on this platform.
+ ///
+ /// EFI_NOT_FOUND No BinaryImage was found.
+ ///
+ EfiGetPlatformBinaryTpmBinary = 4,
+ ///
+ /// The mode finds the Compatibility16 Rom Image.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// System ROM image for the platform.
+ ///
+ /// TableSize Size of Table in bytes.
+ ///
+ /// Location Ignored.
+ ///
+ /// Alignment Ignored.
+ ///
+ /// LegacySegment Ignored.
+ ///
+ /// LegacyOffset Ignored.
+ ///
+ /// The return values associated with this mode are:
+ ///
+ /// EFI_SUCCESS ROM image found.
+ ///
+ /// EFI_NOT_FOUND ROM not found.
+ ///
+ EfiGetPlatformBinarySystemRom = 5,
+ ///
+ /// This mode returns the Base address of PciExpress memory mapped configuration
+ /// address space.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Table System ROM image for the platform.
+ ///
+ /// TableSize Size of Table in bytes.
+ ///
+ /// Location Ignored.
+ ///
+ /// Alignment Ignored.
+ ///
+ /// LegacySegment Ignored.
+ ///
+ /// LegacyOffset Ignored.
+ ///
+ /// The return values associated with this mode are:
+ ///
+ /// EFI_SUCCESS Address is valid.
+ ///
+ /// EFI_UNSUPPORTED System does not PciExpress.
+ ///
+ EfiGetPlatformPciExpressBase = 6,
+ ///
+ EfiGetPlatformPmmSize = 7,
+ ///
+ EfiGetPlatformEndOpromShadowAddr = 8,
+ ///
+} EFI_GET_PLATFORM_INFO_MODE;
+
+/**
+ This enum specifies the Mode param values for GetPlatformHandle().
+**/
+typedef enum {
+ ///
+ /// This mode returns the Compatibility16 policy for the device that should be the VGA
+ /// controller used during a Compatibility16 boot.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0x00.
+ ///
+ /// HandleBuffer Buffer of all VGA handles found.
+ ///
+ /// HandleCount Number of VGA handles found.
+ ///
+ /// AdditionalData NULL.
+ ///
+ EfiGetPlatformVgaHandle = 0,
+ ///
+ /// This mode returns the Compatibility16 policy for the device that should be the IDE
+ /// controller used during a Compatibility16 boot.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0x00.
+ ///
+ /// HandleBuffer Buffer of all IDE handles found.
+ ///
+ /// HandleCount Number of IDE handles found.
+ ///
+ /// AdditionalData Pointer to HddInfo.
+ /// Information about all onboard IDE controllers.
+ ///
+ EfiGetPlatformIdeHandle = 1,
+ ///
+ /// This mode returns the Compatibility16 policy for the device that should be the ISA bus
+ /// controller used during a Compatibility16 boot.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0x00.
+ ///
+ /// HandleBuffer Buffer of all ISA bus handles found.
+ ///
+ /// HandleCount Number of ISA bus handles found.
+ ///
+ /// AdditionalData NULL.
+ ///
+ EfiGetPlatformIsaBusHandle = 2,
+ ///
+ /// This mode returns the Compatibility16 policy for the device that should be the USB
+ /// device used during a Compatibility16 boot.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0x00.
+ ///
+ /// HandleBuffer Buffer of all USB handles found.
+ ///
+ /// HandleCount Number of USB bus handles found.
+ ///
+ /// AdditionalData NULL.
+ ///
+ EfiGetPlatformUsbHandle = 3
+} EFI_GET_PLATFORM_HANDLE_MODE;
+
+/**
+ This enum specifies the Mode param values for PlatformHooks().
+ Note: Any OEM defined hooks start with 0x8000.
+**/
+typedef enum {
+ ///
+ /// This mode allows any preprocessing before scanning OpROMs.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0.
+ ///
+ /// DeviceHandle Handle of device OpROM is associated with.
+ ///
+ /// ShadowAddress Address where OpROM is shadowed.
+ ///
+ /// Compatibility16Table NULL.
+ ///
+ /// AdditionalData NULL.
+ ///
+ EfiPlatformHookPrepareToScanRom = 0,
+ ///
+ /// This mode shadows legacy OpROMS that may not have a physical device associated with
+ /// them. It returns EFI_SUCCESS if the ROM was shadowed.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0.
+ ///
+ /// DeviceHandle 0.
+ ///
+ /// ShadowAddress First free OpROM area, after other OpROMs have been dispatched..
+ ///
+ /// Compatibility16Table Pointer to the Compatability16 Table.
+ ///
+ /// AdditionalData NULL.
+ ///
+ EfiPlatformHookShadowServiceRoms= 1,
+ ///
+ /// This mode allows platform to perform any required operation after an OpROM has
+ /// completed its initialization.
+ ///
+ /// The function parameters associated with this mode are:
+ ///
+ /// Type 0.
+ ///
+ /// DeviceHandle Handle of device OpROM is associated with.
+ ///
+ /// ShadowAddress Address where OpROM is shadowed.
+ ///
+ /// Compatibility16Table NULL.
+ ///
+ /// AdditionalData NULL.
+ ///
+ EfiPlatformHookAfterRomInit = 2
+} EFI_GET_PLATFORM_HOOK_MODE;
+
+///
+/// This IRQ has not been assigned to PCI.
+///
+#define PCI_UNUSED 0x00
+///
+/// This IRQ has been assigned to PCI.
+///
+#define PCI_USED 0xFF
+///
+/// This IRQ has been used by an SIO legacy device and cannot be used by PCI.
+///
+#define LEGACY_USED 0xFE
+
+#pragma pack(1)
+
+typedef struct {
+ ///
+ /// IRQ for this entry.
+ ///
+ UINT8 Irq;
+ ///
+ /// Status of this IRQ.
+ ///
+ /// PCI_UNUSED 0x00. This IRQ has not been assigned to PCI.
+ ///
+ /// PCI_USED 0xFF. This IRQ has been assigned to PCI.
+ ///
+ /// LEGACY_USED 0xFE. This IRQ has been used by an SIO legacy
+ /// device and cannot be used by PCI.
+ ///
+ UINT8 Used;
+} EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY;
+
+//
+// Define PIR table structures
+//
+#define EFI_LEGACY_PIRQ_TABLE_SIGNATURE SIGNATURE_32 ('$', 'P', 'I', 'R')
+
+typedef struct {
+ ///
+ /// $PIR.
+ ///
+ UINT32 Signature;
+ ///
+ /// 0x00.
+ ///
+ UINT8 MinorVersion;
+ ///
+ /// 0x01 for table version 1.0.
+ ///
+ UINT8 MajorVersion;
+ ///
+ /// 0x20 + RoutingTableEntries * 0x10.
+ ///
+ UINT16 TableSize;
+ ///
+ /// PCI interrupt router bus.
+ ///
+ UINT8 Bus;
+ ///
+ /// PCI interrupt router device/function.
+ ///
+ UINT8 DevFun;
+ ///
+ /// If nonzero, bit map of IRQs reserved for PCI.
+ ///
+ UINT16 PciOnlyIrq;
+ ///
+ /// Vendor ID of a compatible PCI interrupt router.
+ ///
+ UINT16 CompatibleVid;
+ ///
+ /// Device ID of a compatible PCI interrupt router.
+ ///
+ UINT16 CompatibleDid;
+ ///
+ /// If nonzero, a value passed directly to the IRQ miniport's Initialize function.
+ ///
+ UINT32 Miniport;
+ ///
+ /// Reserved for future usage.
+ ///
+ UINT8 Reserved[11];
+ ///
+ /// This byte plus the sum of all other bytes in the LocalPirqTable equal 0x00.
+ ///
+ UINT8 Checksum;
+} EFI_LEGACY_PIRQ_TABLE_HEADER;
+
+
+typedef struct {
+ ///
+ /// If nonzero, a value assigned by the IBV.
+ ///
+ UINT8 Pirq;
+ ///
+ /// If nonzero, the IRQs that can be assigned to this device.
+ ///
+ UINT16 IrqMask;
+} EFI_LEGACY_PIRQ_ENTRY;
+
+typedef struct {
+ ///
+ /// PCI bus of the entry.
+ ///
+ UINT8 Bus;
+ ///
+ /// PCI device of this entry.
+ ///
+ UINT8 Device;
+ ///
+ /// An IBV value and IRQ mask for PIRQ pins A through D.
+ ///
+ EFI_LEGACY_PIRQ_ENTRY PirqEntry[4];
+ ///
+ /// If nonzero, the slot number assigned by the board manufacturer.
+ ///
+ UINT8 Slot;
+ ///
+ /// Reserved for future use.
+ ///
+ UINT8 Reserved;
+} EFI_LEGACY_IRQ_ROUTING_ENTRY;
+
+#pragma pack()
+
+
+/**
+ Finds the binary data or other platform information.
+
+ @param This The protocol instance pointer.
+ @param Mode Specifies what data to return. See See EFI_GET_PLATFORM_INFO_MODE enum.
+ @param Table Mode specific. See EFI_GET_PLATFORM_INFO_MODE enum.
+ @param TableSize Mode specific. See EFI_GET_PLATFORM_INFO_MODE enum.
+ @param Location Mode specific. See EFI_GET_PLATFORM_INFO_MODE enum.
+ @param Alignment Mode specific. See EFI_GET_PLATFORM_INFO_MODE enum.
+ @param LegacySegment Mode specific. See EFI_GET_PLATFORM_INFO_MODE enum.
+ @param LegacyOffset Mode specific. See EFI_GET_PLATFORM_INFO_MODE enum.
+
+ @retval EFI_SUCCESS Data returned successfully.
+ @retval EFI_UNSUPPORTED Mode is not supported on the platform.
+ @retval EFI_NOT_FOUND Binary image or table not found.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ IN EFI_GET_PLATFORM_INFO_MODE Mode,
+ OUT VOID **Table,
+ OUT UINTN *TableSize,
+ OUT UINTN *Location,
+ OUT UINTN *Alignment,
+ IN UINT16 LegacySegment,
+ IN UINT16 LegacyOffset
+ );
+
+/**
+ Returns a buffer of handles for the requested subfunction.
+
+ @param This The protocol instance pointer.
+ @param Mode Specifies what handle to return. See EFI_GET_PLATFORM_HANDLE_MODE enum.
+ @param Type Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
+ @param HandleBuffer Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
+ @param HandleCount Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
+ @param AdditionalData Mode specific. See EFI_GET_PLATFORM_HANDLE_MODE enum.
+
+ @retval EFI_SUCCESS Handle is valid.
+ @retval EFI_UNSUPPORTED Mode is not supported on the platform.
+ @retval EFI_NOT_FOUND Handle is not known.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ IN EFI_GET_PLATFORM_HANDLE_MODE Mode,
+ IN UINT16 Type,
+ OUT EFI_HANDLE **HandleBuffer,
+ OUT UINTN *HandleCount,
+ IN VOID **AdditionalData OPTIONAL
+ );
+
+/**
+ Load and initialize the Legacy BIOS SMM handler.
+
+ @param This The protocol instance pointer.
+ @param EfiToLegacy16BootTable A pointer to Legacy16 boot table.
+
+ @retval EFI_SUCCESS SMM code loaded.
+ @retval EFI_DEVICE_ERROR SMM code failed to load
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ IN VOID *EfiToLegacy16BootTable
+ );
+
+/**
+ Allows platform to perform any required action after a LegacyBios operation.
+ Invokes the specific sub function specified by Mode.
+
+ @param This The protocol instance pointer.
+ @param Mode Specifies what handle to return. See EFI_GET_PLATFORM_HOOK_MODE enum.
+ @param Type Mode specific. See EFI_GET_PLATFORM_HOOK_MODE enum.
+ @param DeviceHandle Mode specific. See EFI_GET_PLATFORM_HOOK_MODE enum.
+ @param ShadowAddress Mode specific. See EFI_GET_PLATFORM_HOOK_MODE enum.
+ @param Compatibility16Table Mode specific. See EFI_GET_PLATFORM_HOOK_MODE enum.
+ @param AdditionalData Mode specific. See EFI_GET_PLATFORM_HOOK_MODE enum.
+
+ @retval EFI_SUCCESS The operation performed successfully. Mode specific.
+ @retval EFI_UNSUPPORTED Mode is not supported on the platform.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ IN EFI_GET_PLATFORM_HOOK_MODE Mode,
+ IN UINT16 Type,
+ IN EFI_HANDLE DeviceHandle, OPTIONAL
+ IN OUT UINTN *ShadowAddress, OPTIONAL
+ IN EFI_COMPATIBILITY16_TABLE *Compatibility16Table, OPTIONAL
+ OUT VOID **AdditionalData OPTIONAL
+ );
+
+/**
+ Returns information associated with PCI IRQ routing.
+ This function returns the following information associated with PCI IRQ routing:
+ * An IRQ routing table and number of entries in the table.
+ * The $PIR table and its size.
+ * A list of PCI IRQs and the priority order to assign them.
+
+ @param This The protocol instance pointer.
+ @param RoutingTable The pointer to PCI IRQ Routing table.
+ This location is the $PIR table minus the header.
+ @param RoutingTableEntries The number of entries in table.
+ @param LocalPirqTable $PIR table.
+ @param PirqTableSize $PIR table size.
+ @param LocalIrqPriorityTable A list of interrupts in priority order to assign.
+ @param IrqPriorityTableEntries The number of entries in the priority table.
+
+ @retval EFI_SUCCESS Data was successfully returned.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ OUT VOID **RoutingTable,
+ OUT UINTN *RoutingTableEntries,
+ OUT VOID **LocalPirqTable, OPTIONAL
+ OUT UINTN *PirqTableSize, OPTIONAL
+ OUT VOID **LocalIrqPriorityTable, OPTIONAL
+ OUT UINTN *IrqPriorityTableEntries OPTIONAL
+ );
+
+/**
+ Translates the given PIRQ accounting for bridge.
+ This function translates the given PIRQ back through all buses, if required,
+ and returns the true PIRQ and associated IRQ.
+
+ @param This The protocol instance pointer.
+ @param PciBus The PCI bus number for this device.
+ @param PciDevice The PCI device number for this device.
+ @param PciFunction The PCI function number for this device.
+ @param Pirq Input is PIRQ reported by device, and output is true PIRQ.
+ @param PciIrq The IRQ already assigned to the PIRQ, or the IRQ to be
+ assigned to the PIRQ.
+
+ @retval EFI_SUCCESS The PIRQ was translated.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ IN UINTN PciBus,
+ IN UINTN PciDevice,
+ IN UINTN PciFunction,
+ IN OUT UINT8 *Pirq,
+ OUT UINT8 *PciIrq
+ );
+
+/**
+ Attempt to legacy boot the BootOption. If the EFI contexted has been
+ compromised this function will not return.
+
+ @param This The protocol instance pointer.
+ @param BbsDevicePath The EFI Device Path from BootXXXX variable.
+ @param BbsTable The Internal BBS table.
+ @param LoadOptionSize The size of LoadOption in size.
+ @param LoadOption The LoadOption from BootXXXX variable
+ @param EfiToLegacy16BootTable A pointer to BootTable structure
+
+ @retval EFI_SUCCESS Ready to boot.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT)(
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
+ IN BBS_BBS_DEVICE_PATH *BbsDevicePath,
+ IN VOID *BbsTable,
+ IN UINT32 LoadOptionsSize,
+ IN VOID *LoadOptions,
+ IN VOID *EfiToLegacy16BootTable
+ );
+
+/**
+ This protocol abstracts the platform portion of the traditional BIOS.
+**/
+struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
+ ///
+ /// Gets binary data or other platform information.
+ ///
+ EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO GetPlatformInfo;
+ ///
+ /// Returns a buffer of all handles matching the requested subfunction.
+ ///
+ EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE GetPlatformHandle;
+ ///
+ /// Loads and initializes the traditional BIOS SMM handler.
+ EFI_LEGACY_BIOS_PLATFORM_SMM_INIT SmmInit;
+ ///
+ /// Allows platform to perform any required actions after a LegacyBios operation.
+ ///
+ EFI_LEGACY_BIOS_PLATFORM_HOOKS PlatformHooks;
+ ///
+ /// Gets $PIR table.
+ EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE GetRoutingTable;
+ ///
+ /// Translates the given PIRQ to the final value after traversing any PCI bridges.
+ ///
+ EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ TranslatePirq;
+ ///
+ /// Final platform function before the system attempts to boot to a traditional OS.
+ ///
+ EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT PrepareToBoot;
+};
+
+extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h
new file mode 100644
index 0000000000..77423481ce
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h
@@ -0,0 +1,72 @@
+/** @file
+ This file declares PCI IOV platform protocols.
+
+ @copyright
+ Copyright 2005 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_IOV_PLATFORM_H_
+#define _PCI_IOV_PLATFORM_H_
+
+
+//
+// Protocol for GUID.
+//
+
+typedef struct _EFI_PCI_IOV_PLATFORM_PROTOCOL EFI_PCI_IOV_PLATFORM_PROTOCOL;
+
+typedef UINT32 EFI_PCI_IOV_PLATFORM_POLICY;
+
+#define EFI_PCI_IOV_POLICY_ARI 0x0001
+#define EFI_PCI_IOV_POLICY_SRIOV 0x0002
+#define EFI_PCI_IOV_POLICY_MRIOV 0x0004
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_IOV_PLATFORM_GET_SYSTEM_LOWEST_PAGE_SIZE) (
+ IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
+ OUT UINT32 *SystemLowestPageSize
+)
+/**
+
+ The GetSystemLowestPageSize() function retrieves the system lowest page size.
+
+ @param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
+ @param SystemLowestPageSize - The system lowest page size. (This system supports a
+ page size of 2^(n+12) if bit n is set.)
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_INVALID_PARAMETER - SystemLowestPageSize is NULL.
+
+**/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_IOV_PLATFORM_GET_PLATFORM_POLICY) (
+ IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_IOV_PLATFORM_POLICY *PciIovPolicy
+)
+/**
+
+ The GetPlatformPolicy() function retrieves the platform policy regarding PCI IOV.
+
+ @param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
+ @param PciIovPolicy - The platform policy for PCI IOV configuration.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_INVALID_PARAMETER - PciPolicy is NULL.
+
+**/
+;
+
+typedef struct _EFI_PCI_IOV_PLATFORM_PROTOCOL {
+ EFI_PCI_IOV_PLATFORM_GET_SYSTEM_LOWEST_PAGE_SIZE GetSystemLowestPageSize;
+ EFI_PCI_IOV_PLATFORM_GET_PLATFORM_POLICY GetPlatformPolicy;
+} EFI_PCI_IOV_PLATFORM_PROTOCOL;
+
+extern EFI_GUID gEfiPciIovPlatformProtocolGuid;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h
new file mode 100644
index 0000000000..6fdfea0fde
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h
@@ -0,0 +1,48 @@
+/** @file
+ This file defines platform policies for Platform Type.
+
+ @copyright
+ Copyright 1996 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_TYPE_H_
+#define _PLATFORM_TYPE_H_
+
+#include <Guid/PlatformInfo.h>
+
+typedef struct _EFI_PLATFORM_TYPE_PROTOCOL {
+ UINT8 SystemUuid[16]; // 16 bytes
+ UINT32 Signature; // "$PIT" 0x54495024
+ UINT32 Size; // Size of the table
+ UINT16 Revision; // Revision of the table
+ UINT16 Type; // Platform Type
+ UINT32 CpuType; // Cpu Type
+ UINT8 CpuStepping; // Cpu Stepping
+ UINT32 TypeRevisionId; // Board Revision ID
+ UINT16 IioSku;
+ UINT16 IioRevision;
+ UINT16 PchSku;
+ UINT16 PchRevision;
+ UINT16 PchType; // Retrive PCH SKU type installed
+ BOOLEAN ExtendedInfoValid; // If TRUE then below fields are Valid
+ UINT8 Checksum; // Checksum minus SystemUuid is valid in DXE only.
+ UINT64 TypeStringPtr;
+ UINT64 IioStringPtr;
+ UINT64 PchStringPtr;
+ EFI_PLATFORM_PCI_DATA PciData;
+ EFI_PLATFORM_CPU_DATA CpuData;
+ EFI_PLATFORM_MEM_DATA MemData;
+ EFI_PLATFORM_SYS_DATA SysData;
+ EFI_PLATFORM_PCH_DATA PchData;
+ UINT8 IioRiserId;
+ UINT8 BoardId;
+ UINT8 PcieRiser1Type;
+ UINT8 PcieRiser2Type;
+ UINT8 Emulation; // 100b = Simics
+} EFI_PLATFORM_TYPE_PROTOCOL;
+
+extern EFI_GUID gEfiPlatformTypeProtocolGuid;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h
new file mode 100644
index 0000000000..658188e467
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h
@@ -0,0 +1,114 @@
+/** @file
+ uba central config database Protocol
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CONFIG_DATABASE_H_
+#define _UBA_CONFIG_DATABASE_H_
+
+// {E03E0D46-5263-4845-B0A4-58D57B3177E2}
+#define UBA_CONFIG_DATABASE_PROTOCOL_GUID \
+ { 0xe03e0d46, 0x5263, 0x4845, { 0xb0, 0xa4, 0x58, 0xd5, 0x7b, 0x31, 0x77, 0xe2 } }
+
+
+typedef struct _UBA_CONFIG_DATABASE_PROTOCOL UBA_CONFIG_DATABASE_PROTOCOL;
+
+#define UBA_CONFIG_PROTOCOL_SIGNATURE SIGNATURE_32('M', 'S', 'K', 'P')
+#define UBA_CONFIG_PROTOCOL_VERSION 0x01
+
+/**
+ Get platform's GUID and user friendly name by PlatformType.
+
+ This is used when you need a PlatformId to Add/Get platform data
+
+ Core will create a new platform for you if the PlatformType is not
+ recorded in database, and assgin a unique GUID for this platform.
+
+ @param This uba Protocol instance.
+ @param PlatformType The platform type, same define as Platform.h.
+ @param PlatformId The GUID for this platform.
+ @param PlatformName The user friendly name for this platform.
+
+ @retval EFI_ALREADY_STARTED Create new for an exist platform.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *UBA_CONFIG_GET_PLATFORM) (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ OUT UINT32 *PlatformType,
+ OUT EFI_GUID *PlatformId,
+ OUT CHAR8 *PlatformName
+ );
+
+/**
+ Add configuration data to uba configuration database.
+
+ @param This uba Protocol instance.
+ @param PlatformId The GUID for this platform.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize Size of data want to add into database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *UBA_CONFIG_ADD_DATA) (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN EFI_GUID *ResId,
+ IN VOID *Data,
+ IN UINTN DataSize
+ );
+
+/**
+ Get configuration data from uba configuration database.
+
+ @param This uba Protocol instance.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize IN:Size of data want to get, OUT: Size of data in database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_BUFFER_TOO_SMALL The DataSize of Data buffer is too small to get this configuration data
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform or data not found.
+ @retval EFI_SUCCESS Operation success.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *UBA_CONFIG_GET_DATA) (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN EFI_GUID *ResId,
+ OUT VOID *Data,
+ OUT UINTN *DataSize
+ );
+
+
+//
+// UbaConfigDatabaseProtocol
+//
+struct _UBA_CONFIG_DATABASE_PROTOCOL {
+ UINT32 Signature;
+ UINT32 Version;
+
+ UBA_CONFIG_GET_PLATFORM GetSku;
+ UBA_CONFIG_ADD_DATA AddData;
+ UBA_CONFIG_GET_DATA GetData;
+};
+
+extern EFI_GUID gUbaConfigDatabaseProtocolGuid;
+
+#endif // __UBA_CONFIG_DATABASE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h
new file mode 100644
index 0000000000..ee7fabc719
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h
@@ -0,0 +1,86 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLT_DEVS_UPDATE_H_
+#define _PLT_DEVS_UPDATE_H_
+
+// {1E22C6FA-B39E-419a-A071-D60B672B21C8}
+#define EFI_PLT_DEVS_UPDATE_GUID \
+ { \
+ 0x1e22c6fa, 0xb39e, 0x419a, { 0xa0, 0x71, 0xd6, 0xb, 0x67, 0x2b, 0x21, 0xc8 }\
+ }
+
+#define PORTNUMMAX 8
+
+typedef struct _EFI_PLT_DEVS_UPDATE_PROTOCOL EFI_PLT_DEVS_UPDATE_PROTOCOL;
+
+typedef enum {
+ NET_PXE_1GB = 0,
+ NET_PXE_10GB = 1,
+ NET_ISCSI = 2,
+ NET_FCOE = 3,
+ NET_INFINITBADN = 4
+} OPROM_FILE_TYPE;
+
+typedef enum {
+ HIDDEN = 0,
+ ONBOARD_NIC = 1,
+ IO_MODULE_NIC = 2,
+} NIC_TYPE;
+
+typedef enum {
+ UNDEF = 0,
+ ETHERNET = 1,
+ INFIBAND = 2
+} NIC_SUB_TYPE;
+
+#define DFT_MAC_SIZE 0x20
+#define DFT_GUID_SIZE 0x64
+
+#define PXE1GBit 0x1
+#define PXE10GBit 0x2
+#define FcoeBit 0x4
+#define iSCSIBit 0x8
+
+#pragma pack(1)
+typedef struct _PLAT_NIC_SETUP_INFO{
+ NIC_TYPE NicType; //Onboard or IO module
+ NIC_SUB_TYPE NicSubType; //Ethernect or Infinitband controller
+ UINT8 NicIndex; //Onboard Nic1,2,3 or IOM 1, 2,3 per setup option
+ UINT8 RootPortBusNo; //Root Bridge Bus No
+ UINT8 RootPortDevNo; //Root Bridge device No
+ UINT8 RootPortFunNo; //Root Bridge Function No
+ UINT16 NicVID; //Nic Vendor ID
+ UINT16 NicDID; //Nic Device ID
+ UINT16 SubDID; //Nic Subsystem ID
+ UINT8 PortNumbers; //Ports numbder after detection
+ CHAR8 NicDescription[64]; //Nic description defined in Eps
+ EFI_MAC_ADDRESS PortMacAddress[PORTNUMMAX];
+ EFI_GUID InfinitbandGuid;
+ UINT8 OpROMCapMap;
+ UINT8 IsPchNIC;
+}PLAT_NIC_SETUP_INFO;
+#pragma pack()
+
+typedef EFI_STATUS (*PLATFORM_HKS_GET_EMBEDED_OPTIONROM) (IN EFI_PLT_DEVS_UPDATE_PROTOCOL *This, IN EFI_HANDLE PciHandle,OPROM_FILE_TYPE OpRomType);
+typedef EFI_STATUS (*PLATFORM_HKS_DISPATCH_OPTIONROM) (IN EFI_PLT_DEVS_UPDATE_PROTOCOL *This, IN EFI_HANDLE PciHandle);
+typedef EFI_STATUS (*PLATFORM_HKS_BDS_UPDATE_MAC) (IN EFI_PLT_DEVS_UPDATE_PROTOCOL *This);
+typedef EFI_STATUS (*PLATFORM_HKS_ON_ENTER_SETUP) (IN EFI_PLT_DEVS_UPDATE_PROTOCOL *This, OUT PLAT_NIC_SETUP_INFO **NicInfo, OUT UINT8 *NicNum);
+
+typedef struct _EFI_PLT_DEVS_UPDATE_PROTOCOL {
+ PLATFORM_HKS_GET_EMBEDED_OPTIONROM PlatformHooksOnGettingEmbedOpRom;
+ PLATFORM_HKS_DISPATCH_OPTIONROM PlatformHooksOnDispatchOpRom;
+ PLATFORM_HKS_BDS_UPDATE_MAC PlatformHooksBdsUpdateMac;
+ PLATFORM_HKS_ON_ENTER_SETUP PlatformHooksGetNicInfo;
+} EFI_PLT_DEVS_UPDATE_PROTOCOL;
+
+extern EFI_GUID gEfiPlatformDevsUpdateProtocolGuid;
+extern EFI_GUID gEfiVMDDriverProtocolGuid;
+extern EFI_GUID gEfiHfiPcieGen3ProtocolGuid;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h
new file mode 100644
index 0000000000..31ad158860
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h
@@ -0,0 +1,22 @@
+/** @file
+ GUID variable for multi-boards support in DXE phase.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __UBA_MAKER_PROTOCOL_H__
+#define __UBA_MAKER_PROTOCOL_H__
+
+
+extern EFI_GUID gEfiPlatformTypeNeonCityEPRPProtocolGuid;
+extern EFI_GUID gEfiPlatformTypeHedtCRBProtocolGuid;
+extern EFI_GUID gEfiPlatformTypeLightningRidgeEXRPProtocolGuid;
+extern EFI_GUID gEfiPlatformTypeLightningRidgeEX8S1NProtocolGuid;
+extern EFI_GUID gEfiPlatformTypeWilsonCityRPProtocolGuid;
+extern EFI_GUID gEfiPlatformTypeWilsonCityModularProtocolGuid;
+extern EFI_GUID gEfiPlatformTypeIsoscelesPeakProtocolGuid;
+
+#endif // #ifndef __UBA_MAKER_PROTOCOL_H__
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h
new file mode 100644
index 0000000000..c3a8e931d5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h
@@ -0,0 +1,25 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SETUP_TABLE_H_
+#define _SETUP_TABLE_H_
+#include <Guid/SocketVariable.h>
+#include <Guid/SetupVariable.h>
+
+#include <PchSetupVariable.h>
+#include <Guid/FpgaSocketVariable.h>
+#include <Guid/MemBootHealthGuid.h>
+
+typedef struct {
+ SOCKET_CONFIGURATION SocketConfig;
+ SYSTEM_CONFIGURATION SystemConfig;
+ PCH_SETUP PchSetup;
+ MEM_BOOT_HEALTH_CONFIG MemBootHealthConfig;
+} SETUP_DATA;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h
new file mode 100644
index 0000000000..6f848d536d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h
@@ -0,0 +1,251 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SIO_REG_H_
+#define _SIO_REG_H_
+
+typedef struct {
+ UINT8 Index;
+ UINT8 Value;
+} SIO_INDEX_DATA;
+
+#define REG_LOGICAL_DEVICE 0x07
+#define ACTIVATE 0x30
+
+//
+// COM (Serial) Port Base address
+//
+#define SIO_BASE_COM1 0x3F8
+#define SIO_BASE_COM2 0x2F8
+
+#define BASE_ADDRESS_HIGH0 0x60
+#define BASE_ADDRESS_LOW0 0x61
+#define PRIMARY_INTERRUPT_SELECT 0x70
+#define INTERRUPT_TYPE 0x71
+
+//
+//ASPEED AST2500 register
+//
+#define ASPEED2500_SIO_INDEX_PORT 0x2E
+#define ASPEED2500_SIO_DATA_PORT (ASPEED2500_SIO_INDEX_PORT+1)
+
+#define ASPEED2500_SIO_UART1 0x02
+#define ASPEED2500_SIO_UART2 0x03
+#define ASPEED2500_SIO_SMI 0x0D
+#define ASPEED2500_SIO_MAILBOX 0x0E
+
+#define SCU7C 0x1e6e207c
+
+#define ASPEED2500_SIO_UNLOCK 0xA5
+#define ASPEED2500_SIO_LOCK 0xAA
+
+//
+// Port address for PILOT-IV
+//
+#define PILOTIV_CHIP_ID 0x03
+#define PILOTIV_SIO_INDEX_PORT 0x2E
+#define PILOTIV_SIO_DATA_PORT (PILOTIV_SIO_INDEX_PORT+1)
+
+#define PILOTIV_SIO_UNLOCK 0x5A
+#define PILOTIV_SIO_LOCK 0xA5
+#define PILOTIV_UNLOCK 0x5A
+#define PILOTIV_LOCK 0xA5
+
+#define PILOTIV_SIO_PSR 0x00
+#define PILOTIV_SIO_COM2 0x01
+#define PILOTIV_SIO_COM1 0x02
+#define PILOTIV_SIO_SWCP 0x03
+#define PILOTIV_SIO_GPIO 0x04
+#define PILOTIV_SIO_WDT 0x05
+
+#define PILOTIV_SIO_KCS3 0x08
+#define PILOTIV_SIO_KCS4 0x09
+#define PILOTIV_SIO_KCS5 0x0A
+#define PILOTIV_SIO_BT 0x0B
+#define PILOTIV_SIO_SMIC 0x0C
+#define PILOTIV_SIO_MAILBOX 0x0D
+#define PILOTIV_SIO_RTC 0x0E
+#define PILOTIV_SIO_SPI 0x0F
+#define PILOTIV_SIO_TAP 0x10
+
+//
+// Register for Pilot IV
+//
+#define PILOTIV_CHIP_ID_REG 0x20
+#define PILOTIV_LOGICAL_DEVICE REG_LOGICAL_DEVICE
+#define PILOTIV_ACTIVATE ACTIVATE
+#define PILOTIV_BASE_ADDRESS_HIGH0 BASE_ADDRESS_HIGH0
+#define PILOTIV_BASE_ADDRESS_LOW0 BASE_ADDRESS_LOW0
+#define PILOTIV_BASE_ADDRESS_HIGH1 BASE_ADDRESS_HIGH1
+#define PILOTIV_BASE_ADDRESS_LOW1 BASE_ADDRESS_LOW1
+#define PILOTIV_PRIMARY_INTERRUPT_SELECT PRIMARY_INTERRUPT_SELECT
+
+
+//
+// Port address for PC8374
+//
+#define PC8374_CHIP_ID 0xF1
+#define PC8374_SIO_INDEX_PORT 0x02E
+#define PC8374_SIO_DATA_PORT (PC8374_SIO_INDEX_PORT+1)
+
+//
+// Logical device in PC8374
+//
+#define PC8374_SIO_FLOPPY 0x00
+#define PC8374_SIO_PARA 0x01
+#define PC8374_SIO_COM2 0x02
+#define PC8374_SIO_COM1 0x03
+#define PC8374_SIO_MOUSE 0x05
+#define PC8374_SIO_KYBD 0x06
+#define PC8374_SIO_GPIO 0x07
+
+//
+// Registers specific for PC8374
+//
+#define PC8374_CLOCK_SELECT 0x2D
+#define PC8374_CLOCK_CONFIG 0x29
+
+//
+// Registers for PC8374
+//
+#define PC8374_LOGICAL_DEVICE REG_LOGICAL_DEVICE
+#define PC8374_ACTIVATE ACTIVATE
+#define PC8374_BASE_ADDRESS_HIGH0 BASE_ADDRESS_HIGH0
+#define PC8374_BASE_ADDRESS_LOW0 BASE_ADDRESS_LOW0
+#define PC8374_PRIMARY_INTERRUPT_SELECT PRIMARY_INTERRUPT_SELECT
+#define PC8374_DMA_CHANNEL_SELECT DMA_CHANNEL_SELECT0
+#define PC8374_CHIP_ID_REG 0x20
+
+#define PC87427_SERVERIO_CNF2 0x22
+
+
+
+//
+// Port address for NCT5104D
+//
+#define NCT5104D_SIO_INDEX_PORT 0x4E
+#define NCT5104D_SIO_DATA_PORT (NCT5104D_SIO_INDEX_PORT+1)
+
+//
+// Registers for NCT5104D
+//
+#define NCT5104D_CHIP_ID_REG 0x20
+#define NCT5104D_CHIP_ID 0xC4
+#define NCT5104D_LOGICAL_DEVICE REG_LOGICAL_DEVICE
+#define NCT5104D_ACTIVATE ACTIVATE
+#define NCT5104D_SIO_UARTA 2
+#define NCT5104D_SIO_COM1 3
+#define NCT5104D_BASE_ADDRESS_HIGH0 BASE_ADDRESS_HIGH0
+#define NCT5104D_BASE_ADDRESS_LOW0 BASE_ADDRESS_LOW0
+#define NCT5104D_WAKEUP_ON_IRQ_EN 0x70
+#define NCT5104D_ENTER_THE_EXTENDED_FUNCTION_MODE 0x87
+#define NCT5104D_EXIT_THE_EXTENDED_FUNCTION_MODE 0xAA
+//
+// Port address for W83527
+//
+#define W83527_SIO_INDEX_PORT 0x02E
+#define W83527_SIO_DATA_PORT (W83527_SIO_INDEX_PORT+1)
+
+//
+// Logical device in W83527
+//
+#define W83527_SIO_KYBD 0x05
+#define W83527_SIO_WDTO 0x08
+#define W83527_SIO_GPIO 0x09
+#define W83527_SIO_ACPI 0x0A
+#define W83527_SIO_HWM 0x0B
+#define W83527_SIO_PCEI 0x0C
+
+//
+// Registers for W83527
+//
+#define W83527_EXT_MODE_START 0x87
+#define W83527_EXT_MODE_STOP 0xAA
+#define W83527_LOGICAL_DEVICE REG_LOGICAL_DEVICE
+#define W83527_ACTIVATE_REG 0x30
+#define W83527_ACTIVATE ACTIVATE
+#define W83527_CHIP_ID_REG 0x20
+#define W83527_CHIP_ID 0xB0
+#define W83527_CLOCK_REG 0x24
+#define W83527_KBC_BASE1_HI_ADDR_REG 0x60
+#define W83527_KBC_BASE1_LO_ADDR_REG 0x61
+#define W83527_KBC_BASE2_HI_ADDR_REG 0x62
+#define W83527_KBC_BASE2_LO_ADDR_REG 0x63
+#define W83527_KBC_BASE1_HI_ADDR 0x00
+#define W83527_KBC_BASE1_LO_ADDR 0x60
+#define W83527_KBC_BASE2_HI_ADDR 0x00
+#define W83527_KBC_BASE2_LO_ADDR 0x64
+#define W83527_KBC_KB_IRQ_REG 0x70
+#define W83527_KBC_KB_IRQ 0x01
+#define W83527_KBC_MS_IRQ_REG 0x72
+#define W83527_KBC_MS_IRQ 0x0C
+#define W83527_KBC_CFG_REG 0xF0
+#define W83527_KBC_CFG 0x83
+#define W83527_KBC_CLOCK 0x01
+#define W83527_EXT_MODE_START 0x87
+#define W83527_EXT_MODE_END 0xAA
+
+
+//
+// Select Clock for W83527, 0 / 1 for 24MHz / 48MHz
+//
+#define W83527_CLOCK_BIT 0x06
+#define W83527_CLOCK 0x01
+
+//
+// Initialize Key Board Controller
+//
+#define W83527_KeyBoard 1
+
+
+//
+// Pilot II Mailbox Data Register definitions
+//
+#define MBDAT00_OFFSET 0x00
+#define MBDAT01_OFFSET 0x01
+#define MBDAT02_OFFSET 0x02
+#define MBDAT03_OFFSET 0x03
+#define MBDAT04_OFFSET 0x04
+#define MBDAT05_OFFSET 0x05
+#define MBDAT06_OFFSET 0x06
+#define MBDAT07_OFFSET 0x07
+#define MBDAT08_OFFSET 0x08
+#define MBDAT09_OFFSET 0x09
+#define MBDAT10_OFFSET 0x0A
+#define MBDAT11_OFFSET 0x0B
+#define MBDAT12_OFFSET 0x0C
+#define MBDAT13_OFFSET 0x0D
+#define MBDAT14_OFFSET 0x0E
+#define MBDAT15_OFFSET 0x0F
+#define MBST0_OFFSET 0x10
+#define MBST1_OFFSET 0x11
+
+//
+// If both are there, use the default one
+//
+
+#define ASPEED_EXIST BIT4
+#define NCT5104D_EXIST BIT3
+#define W83527_EXIST BIT2
+#define PC8374_EXIST BIT1
+#define PILOTIV_EXIST BIT0
+#define DEFAULT_SIO PILOTIV_EXIST
+#define DEFAULT_KDB PC8374_EXIST
+
+#define IPMI_DEFAULT_SMM_IO_BASE 0xca2
+#define PILOTIV_SWC_BASE_ADDRESS 0xA00
+#define PILOTIV_PM1b_EVT_BLK_BASE_ADDRESS 0x0A80
+#define PILOTIV_PM1b_CNT_BLK_BASE_ADDRESS 0x0A84
+#define PILOTIV_GPE1_BLK_BASE_ADDRESS 0x0A86
+#define PILOTIV_KCS3_DATA_BASE_ADDRESS 0x0CA4
+#define PILOTIV_KCS3_CMD_BASE_ADDRESS 0x0CA5
+#define PILOTIV_KCS4_DATA_BASE_ADDRESS 0x0CA2
+#define PILOTIV_KCS4_CMD_BASE_ADDRESS 0x0CA3
+#define PILOTIV_MAILBOX_BASE_ADDRESS 0x0600
+#define PILOTIV_MAILBOX_MASK 0xFFE0
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h
new file mode 100644
index 0000000000..fda7ccf523
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h
@@ -0,0 +1,75 @@
+/** @file
+ This protocol is EFI compatible.
+
+ @copyright
+ Copyright 2005 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _DXE_SYSTEM_BOARD_H_
+#define _DXE_SYSTEM_BOARD_H_
+
+#include <PlatPirqData.h>
+#include <PlatDevData.h>
+#include <Ppi/PchPolicy.h>
+
+#define PCI_DEVICE_NUMBER_IMC0_CH_0 0x08
+#define PCI_FUNCTION_NUMBER_IMC0_CH_0 0
+#define PCI_DEVICE_ID_IMC0_CH_0 0x2014
+#define BIOSGUARD_SUPPORT_ENABLED BIT0
+#define OC_SUPPORT_ENABLED BIT1
+
+#ifndef __AML_OFFSET_TABLE_H
+#define __AML_OFFSET_TABLE_H
+
+typedef struct {
+ char *Pathname; /* Full pathname (from root) to the object */
+ unsigned short ParentOpcode; /* AML opcode for the parent object */
+ unsigned long NamesegOffset; /* Offset of last nameseg in the parent namepath */
+ unsigned char Opcode; /* AML opcode for the data */
+ unsigned long Offset; /* Offset for the data */
+ unsigned long long Value; /* Original value of the data (as applicable) */
+} AML_OFFSET_TABLE_ENTRY;
+#endif
+
+//
+// Global variables for Option ROMs
+//
+#define NULL_ROM_FILE_GUID \
+ { \
+ 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } \
+ }
+
+typedef struct {
+ EFI_GUID FileName;
+ UINTN Segment;
+ UINTN Bus;
+ UINTN Device;
+ UINTN Function;
+ UINT16 VendorId;
+ UINT16 DeviceId;
+} PCI_OPTION_ROM_TABLE;
+
+//
+// System board information table
+//
+typedef struct {
+ //
+ // Pci option ROM data
+ //
+ PCI_OPTION_ROM_TABLE *PciOptionRomTable;
+
+ //
+ // System CPU data
+ //
+ UINT32 CpuSocketCount;
+
+ //
+ // System device and irq routing data
+ //
+ DEVICE_DATA *DeviceData;
+ PLATFORM_PIRQ_DATA *SystemPirqData;
+} DXE_SYSTEM_BOARD_INFO;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h b/Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h
new file mode 100644
index 0000000000..c7802d6451
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h
@@ -0,0 +1,29 @@
+/** @file
+ UBA KTI header file
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Upi/KtiHost.h>
+
+#ifndef _UBA_KTI_H_
+#define _UBA_KTI_H_
+
+#define PLATFORM_KTIEP_UPDATE_SIGNATURE SIGNATURE_32 ('P', 'K', 'T', 'I')
+#define PLATFORM_KTIEP_UPDATE_VERSION 01
+
+typedef struct _PLATFORM_KTI_EPARAM_UPDATE_TABLE {
+ UINT32 Signature;
+ UINT32 Version;
+ ALL_LANES_EPARAM_LINK_INFO *AllLanesEparamTablePtr;
+ UINT32 SizeOfAllLanesEparamTable;
+ PER_LANE_EPARAM_LINK_INFO *PerLaneEparamTablePtr;
+ UINT32 SizeOfPerLaneEparamTable;
+} PLATFORM_KTI_EPARAM_UPDATE_TABLE;
+#endif //_UBA_KTI_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c
new file mode 100644
index 0000000000..dfa0c994dc
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c
@@ -0,0 +1,37 @@
+/** @file
+ Platform Hook Library instances
+
+ @copyright
+ Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Library/BaseLib.h>
+#include <Library/IoLib.h>
+#include <Library/BoardAcpiTableLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+
+EFI_STATUS
+EFIAPI
+MtOlympusBoardUpdateAcpiTable (
+ IN OUT EFI_ACPI_COMMON_HEADER *Table,
+ IN OUT EFI_ACPI_TABLE_VERSION *Version
+ );
+
+EFI_STATUS
+EFIAPI
+BoardUpdateAcpiTable (
+ IN OUT EFI_ACPI_COMMON_HEADER *Table,
+ IN OUT EFI_ACPI_TABLE_VERSION *Version
+ )
+{
+ MtOlympusBoardUpdateAcpiTable (Table, Version);
+
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
new file mode 100644
index 0000000000..3186c6c91e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
@@ -0,0 +1,44 @@
+### @file
+# Platform Hook Library instance for SandyBridge Mobile/Desktop CRB.
+#
+# @copyright
+# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = DxeBoardAcpiTableLib
+ FILE_GUID = 6562E0AE-90D8-4D41-8C97-81286B4BE7D2
+ VERSION_STRING = 1.0
+ MODULE_TYPE = BASE
+ LIBRARY_CLASS = BoardAcpiTableLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[LibraryClasses]
+ BaseLib
+ IoLib
+ PciLib
+ PcdLib
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+
+[Pcd]
+ gOemSkuTokenSpaceGuid.PcdAcpiGnvsAddress
+
+[Sources]
+ DxeMtOlympusAcpiTableLib.c
+ DxeBoardAcpiTableLib.c
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c
new file mode 100644
index 0000000000..09b917083c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c
@@ -0,0 +1,54 @@
+/** @file
+ Platform Hook Library instances
+
+ @copyright
+ Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Library/BaseLib.h>
+#include <Library/IoLib.h>
+#include <Library/BoardAcpiTableLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Protocol/GlobalNvsArea.h>
+
+GLOBAL_REMOVE_IF_UNREFERENCED BIOS_ACPI_PARAM *mGlobalNvsArea;
+
+VOID
+MtOlympusUpdateGlobalNvs (
+ VOID
+ )
+{
+
+ //
+ // Allocate and initialize the NVS area for SMM and ASL communication.
+ //
+ mGlobalNvsArea = (VOID *)(UINTN)PcdGet64 (PcdAcpiGnvsAddress);
+
+ //
+ // Update global NVS area for ASL and SMM init code to use
+ //
+
+
+}
+
+EFI_STATUS
+EFIAPI
+MtOlympusBoardUpdateAcpiTable (
+ IN OUT EFI_ACPI_COMMON_HEADER *Table,
+ IN OUT EFI_ACPI_TABLE_VERSION *Version
+ )
+{
+ if (Table->Signature == EFI_ACPI_2_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) {
+ MtOlympusUpdateGlobalNvs ();
+ }
+
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c
new file mode 100644
index 0000000000..09a6b00877
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c
@@ -0,0 +1,51 @@
+/** @file
+ Platform Hook Library instances
+
+ @copyright
+ Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Library/BaseLib.h>
+#include <Library/IoLib.h>
+#include <Library/BoardAcpiEnableLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+
+EFI_STATUS
+EFIAPI
+SiliconEnableAcpi (
+ IN BOOLEAN EnableSci
+ );
+
+EFI_STATUS
+EFIAPI
+SiliconDisableAcpi (
+ IN BOOLEAN DisableSci
+ );
+
+EFI_STATUS
+EFIAPI
+BoardEnableAcpi (
+ IN BOOLEAN EnableSci
+ )
+{
+ SiliconEnableAcpi (EnableSci);
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+BoardDisableAcpi (
+ IN BOOLEAN DisableSci
+ )
+{
+ SiliconDisableAcpi (DisableSci);
+ return EFI_SUCCESS;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
new file mode 100644
index 0000000000..fcbc94cc50
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
@@ -0,0 +1,48 @@
+### @file
+# Platform Hook Library instance
+#
+# @copyright
+# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = SmmBoardAcpiEnableLib
+ FILE_GUID = 549E69AE-D3B3-485B-9C17-AF16E20A58AD
+ VERSION_STRING = 1.0
+ MODULE_TYPE = BASE
+ LIBRARY_CLASS = BoardAcpiEnableLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[LibraryClasses]
+ BaseLib
+ IoLib
+ PciLib
+ UefiBootServicesTableLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[Sources]
+ SmmSiliconAcpiEnableLib.c
+ SmmBoardAcpiEnableLib.c
+
+[Protocols]
+ gDynamicSiLibraryProtocolGuid ## CONSUMES
+
+[Depex]
+ gDynamicSiLibraryProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c
new file mode 100644
index 0000000000..2b8a35c7e8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c
@@ -0,0 +1,138 @@
+/** @file
+ Platform Hook Library instances
+
+ @copyright
+ Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Library/BaseLib.h>
+#include <Library/IoLib.h>
+#include <Library/BoardAcpiEnableLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <PchAccess.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+/**
+ Clear Port 80h
+
+ SMI handler to enable ACPI mode
+
+ Dispatched on reads from APM port with value EFI_ACPI_ENABLE_SW_SMI
+
+ Disables the SW SMI Timer.
+ ACPI events are disabled and ACPI event status is cleared.
+ SCI mode is then enabled.
+
+ Clear SLP SMI status
+ Enable SLP SMI
+
+ Disable SW SMI Timer
+
+ Clear all ACPI event status and disable all ACPI events
+
+ Disable PM sources except power button
+ Clear status bits
+
+ Disable GPE0 sources
+ Clear status bits
+
+ Disable GPE1 sources
+ Clear status bits
+
+ Guarantee day-of-month alarm is invalid (ACPI 1.0 section 4.7.2.4)
+
+ Enable SCI
+**/
+EFI_STATUS
+EFIAPI
+SiliconEnableAcpi (
+ IN BOOLEAN EnableSci
+ )
+{
+ UINT32 SmiEn;
+ UINT16 Pm1En;
+ UINT16 Pm1Cnt;
+ UINT16 PchPmBase;
+ EFI_STATUS Status;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ //
+ // Init Power Management I/O Base aka ACPI Base
+ //
+ PchPmBase = DynamicSiLibraryProtocol->PmcGetAcpiBase ();
+
+ SmiEn = IoRead32 (PchPmBase + R_ACPI_IO_SMI_EN);
+
+ //
+ // Disable SW SMI Timer and legacy USB
+ //
+ SmiEn &= ~(B_ACPI_IO_SMI_EN_SWSMI_TMR | B_ACPI_IO_SMI_EN_LEGACY_USB | B_ACPI_IO_SMI_EN_LEGACY_USB2);
+
+ //
+ // And enable SMI on write to B_PCH_ACPI_PM1_CNT_SLP_EN when SLP_TYP is written
+ //
+ SmiEn |= B_ACPI_IO_SMI_EN_ON_SLP_EN ;
+ IoWrite32 (PchPmBase + R_ACPI_IO_SMI_EN, SmiEn);
+
+ //
+ // Disable PM sources except power button
+ //
+ Pm1En = B_ACPI_IO_PM1_EN_PWRBTN;
+ IoWrite16 (PchPmBase + R_ACPI_IO_PM1_EN, Pm1En);
+
+ //
+ // Enable SCI
+ //
+ Pm1Cnt = IoRead16 (PchPmBase + R_ACPI_IO_PM1_CNT);
+ Pm1Cnt |= B_ACPI_IO_PM1_CNT_SCI_EN;
+ IoWrite16 (PchPmBase + R_ACPI_IO_PM1_CNT, Pm1Cnt);
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+SiliconDisableAcpi (
+ IN BOOLEAN DisableSci
+ )
+{
+ UINT16 Pm1Cnt;
+ UINT16 PchPmBase;
+ EFI_STATUS Status;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ //
+ // Init Power Management I/O Base aka ACPI Base
+ //
+ PchPmBase = DynamicSiLibraryProtocol->PmcGetAcpiBase ();
+
+ Pm1Cnt = IoRead16 (PchPmBase + R_ACPI_IO_PM1_CNT);
+
+ //
+ // Disable SCI
+ //
+ Pm1Cnt &= ~B_ACPI_IO_PM1_CNT_SCI_EN;
+
+ IoWrite16 (PchPmBase + R_ACPI_IO_PM1_CNT, Pm1Cnt);
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c
new file mode 100644
index 0000000000..d31c9292a6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c
@@ -0,0 +1,299 @@
+/** @file
+Library for Board Init.
+
+@copyright
+Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi.h>
+#include <PiDxe.h>
+#include <Guid/SetupVariable.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/HiiLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootManagerLib.h>
+#include <Protocol/MpService.h>
+#include <Protocol/ReportStatusCodeHandler.h>
+#include <IioUniversalData.h>
+#include <PchAccess.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+#include <Cpu/CpuIds.h>
+
+IIO_UDS *mIioUds;
+
+/**
+ Connects Root Bridge
+**/
+VOID
+ConnectRootBridge (
+ BOOLEAN Recursive
+ );
+
+
+VOID
+ProgramDPRregs (
+ VOID
+);
+
+/**
+ A hook for board-specific initialization after PCI enumeration.
+
+ @retval EFI_SUCCESS The board initialization was successful.
+ @retval EFI_NOT_READY The board has not been detected yet.
+**/
+EFI_STATUS
+EFIAPI
+BoardInitAfterPciEnumeration (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ A hook for board-specific functionality for the ReadyToBoot event.
+
+ @retval EFI_SUCCESS The board initialization was successful.
+ @retval EFI_NOT_READY The board has not been detected yet.
+**/
+EFI_STATUS
+EFIAPI
+BoardInitReadyToBoot (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ A hook for board-specific functionality for the ExitBootServices event.
+
+ @retval EFI_SUCCESS The board initialization was successful.
+ @retval EFI_NOT_READY The board has not been detected yet.
+**/
+EFI_STATUS
+EFIAPI
+BoardInitEndOfFirmware (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ This function will retrieve the DPR data from HOBs produced by MRC
+ and will use it to program the DPR registers in IIO and in PCH
+
+ @param VOID
+ @retval VOID
+
+**/
+VOID
+ProgramDprRegs (
+ VOID
+ )
+{
+ return;
+}
+
+/**
+ Function to set the WPE bit of the BIOS Info Flags MSR to enable Anti-Flash wearout
+ protection within BIOS Guard before booting to the OS
+
+ @param[in] EFI_EVENT Event
+ @param[in] VOID *Context
+
+ @retval None
+
+**/
+VOID
+EFIAPI
+EnableAntiFlashWearout (
+ EFI_EVENT Event,
+ VOID *Context
+ )
+{
+ EFI_STATUS Status;
+ EFI_MP_SERVICES_PROTOCOL *MpServices = NULL;
+ SYSTEM_CONFIGURATION SetupData;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ CopyMem (&SetupData, PcdGetPtr(PcdSetup), sizeof(SYSTEM_CONFIGURATION));
+
+ //
+ // First check if Anti-flash wearout feature is supported by platform and Setup variable is enabled
+ //
+ if (SetupData.AntiFlashWearoutSupported == TRUE && SetupData.EnableAntiFlashWearout) {
+ Status = gBS->LocateProtocol (
+ &gEfiMpServiceProtocolGuid,
+ NULL,
+ (VOID **) &MpServices
+ );
+ ASSERT_EFI_ERROR(Status);
+
+ //
+ // Set WPE on BSP, then all other APs
+ //
+ DynamicSiLibraryProtocol->SetBiosInfoFlagWpe();
+
+ MpServices->StartupAllAPs (
+ MpServices,
+ (EFI_AP_PROCEDURE) DynamicSiLibraryProtocol->SetBiosInfoFlagWpe,
+ FALSE,
+ NULL,
+ 0,
+ NULL,
+ NULL
+ );
+ }
+}
+
+/**
+ Before console after trusted console event callback
+
+ @param[in] Event The Event this notify function registered to.
+ @param[in] Context Pointer to the context data registered to the Event.
+**/
+VOID
+BdsBoardBeforeConsoleAfterTrustedConsoleCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+ VOID *Interface;
+
+ DEBUG ((DEBUG_INFO, "Board gBdsEventBeforeConsoleBeforeEndOfDxeGuid callback starts\n"));
+ //
+ // make sure root bridge is already connected before EndOfDxe.
+ // Try to locate gEfiPciEnumerationCompleteProtocolGuid to see if PciBus scan already executed.
+ //
+ Status = gBS->LocateProtocol (
+ &gEfiPciEnumerationCompleteProtocolGuid,
+ NULL,
+ &Interface
+ );
+ if (EFI_ERROR (Status)) {
+ ConnectRootBridge (FALSE);
+ }
+}
+
+EFI_STATUS
+EFIAPI
+BoardNotificationInit (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_EVENT EndOfDxeEvent;
+ UINT32 BspCpuidSignature;
+ UINT32 RegEax, RegEbx, RegEcx, RegEdx;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ IIO_UDS *UdsHobPtr;
+ EFI_BOOT_MODE BootMode;
+ EFI_GUID UniversalDataGuid = IIO_UNIVERSAL_DATA_GUID;
+ EFI_EVENT BeforeConsoleAfterTrustedConsoleEvent;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ DEBUG((DEBUG_INFO, "PlatformEarlyDxeEntry \n"));
+
+ //
+ // Get the IIO_UDS data HOB
+ //
+ GuidHob = GetFirstGuidHob (&UniversalDataGuid);
+ ASSERT(GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ UdsHobPtr = GET_GUID_HOB_DATA(GuidHob);
+ //
+ // Allocate Memory Pool buffer for IIO_UDS data
+ //
+ Status = gBS->AllocatePool ( EfiBootServicesData, sizeof (IIO_UDS), (VOID **) &mIioUds );
+ ASSERT_EFI_ERROR (Status);
+ //
+ // Initialize the Memory Pool buffer with the data from the Hand-Off-Block
+ //
+ CopyMem(mIioUds, UdsHobPtr, sizeof(IIO_UDS));
+
+ //
+ // Get the boot mode that we are currently in
+ //
+ BootMode = GetBootModeHob();
+
+ //
+ // Program DPR registers with the range from Memory Init
+ //
+ ProgramDprRegs ();
+
+ //
+ // Program the GenProtRange registers for BIOS Guard
+ //
+ DynamicSiLibraryProtocol->ProgramGenProtRangeRegs (mIioUds);
+
+ //
+ // Program the IMR registers for ME IMR region
+ //
+ DynamicSiLibraryProtocol->ProgramImrRegs (mIioUds);
+
+ //
+ // Program the IMR2 registers for CPM & nCPM IMR region
+ //
+ DynamicSiLibraryProtocol->ProgramImr2Regs (mIioUds);
+
+ //
+ // Get BSP CPU ID
+ // Shift out the stepping
+ //
+ AsmCpuid (0x01, &RegEax, &RegEbx, &RegEcx, &RegEdx);
+ BspCpuidSignature = (RegEax >> 4) & 0x0000FFFF;
+ if ( (BspCpuidSignature == CPU_FAMILY_SKX) && (BootMode != BOOT_ON_FLASH_UPDATE)) {
+ //
+ // Register event to set WPE bit in Bios Info Flags MSR to enable Anti Flash wearout
+ //
+ Status = gBS->CreateEventEx (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ EnableAntiFlashWearout,
+ NULL,
+ &gEfiEndOfDxeEventGroupGuid,
+ &EndOfDxeEvent
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Create BeforeConsoleAfterTrustedConsole event callback
+ //
+ Status = gBS->CreateEventEx (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ BdsBoardBeforeConsoleAfterTrustedConsoleCallback,
+ NULL,
+ &gBdsEventBeforeConsoleAfterTrustedConsoleGuid,
+ &BeforeConsoleAfterTrustedConsoleEvent
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf
new file mode 100644
index 0000000000..219512566c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf
@@ -0,0 +1,72 @@
+## @file
+#
+# @copyright
+# Copyright 2009 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BoardInitDxeLib
+ FILE_GUID = DDD75880-C38A-4D6B-B84E-FAC1122560BF
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = BoardInitLib
+ CONSTRUCTOR = BoardNotificationInit
+
+[Sources]
+ BoardInitDxeLib.c
+ BoardInitDxeLib.uni
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ IoLib
+ PcdLib
+ HobLib
+ UefiLib
+ BaseMemoryLib
+ HiiLib
+ UefiBootManagerLib
+ BoardBdsHookLib
+
+[Guids]
+ gEfiPlatformTxtDeviceMemoryGuid
+ gEfiDprRegsProgrammedGuid
+ gEfiSetupVariableGuid
+ gEfiEndOfDxeEventGroupGuid
+ gEfiEventExitBootServicesGuid
+ gImr2BaseAddressHobGuid
+ gBdsEventBeforeConsoleAfterTrustedConsoleGuid
+
+[Protocols]
+ gEfiMpServiceProtocolGuid
+ gEfiPciEnumerationCompleteProtocolGuid
+ gDynamicSiLibraryProtocolGuid ## CONSUMES
+
+[Pcd]
+ gPlatformTokenSpaceGuid.PcdImr0Enable
+ gPlatformTokenSpaceGuid.PcdImr0Base
+ gPlatformTokenSpaceGuid.PcdImr0Mask
+ gPlatformTokenSpaceGuid.PcdImr0Rac
+ gPlatformTokenSpaceGuid.PcdImr0Wac
+ gEfiCpRcPkgTokenSpaceGuid.PcdImr2Enable
+ gEfiCpRcPkgTokenSpaceGuid.PcdImr2Size
+ gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderLoad
+ gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderStart
+ gStructPcdTokenSpaceGuid.PcdSetup
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Depex]
+ gDynamicSiLibraryProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni
new file mode 100644
index 0000000000..05fcfa3439
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni
@@ -0,0 +1,29 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//**/
+
+/=#
+
+#langdef en-US "English"
+#langdef fr-FR "Français"
+
+#string STR_BOOT_PROMPT #language en-US "\n\n"
+ " Press [Enter] to directly boot.\n"
+ " Press [F2] to enter setup and select boot options.\n"
+ " Press [F7] to show boot menu options.\n\n"
+ " Copyright (c) 2006 - 2021, Intel Corporation.\n"
+ #language fr-FR "\n\n"
+ " Press [Enter] to directly boot.\n"
+ " Press [F2] to enter setup and select boot options.\n"
+ " Press [F7] to show boot menu options.\n\n"
+ " Copyright (c) 2006 - 2021, Intel Corporation.\n"
+#string STR_START_BOOT_OPTION #language en-US "Start boot option"
+ #language fr-FR "l'option de botte de Début"
+#string STR_MFG_MODE_PROMPT #language en-US "\n\n\n"
+ " !!!Booting in Manufacturing Mode!!!\n"
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c
new file mode 100644
index 0000000000..5c186ce862
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c
@@ -0,0 +1,450 @@
+/** @file
+ Platform Hook Library instances
+
+@copyright
+Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <PiPei.h>
+#include <Platform.h>
+#include <Guid/SetupVariable.h>
+#include <Guid/SocketVariable.h>
+#include <PchSetupVariable.h>
+#include <Register/PchRegsPmc.h>
+#include <Ppi/FirmwareVolumeInfo.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <Guid/GlobalVariable.h>
+#include <Guid/PlatformInfo.h>
+#include <Guid/FirmwareFileSystem3.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiPlatformHooklib.h>
+#include <Library/ReportStatusCodeLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/BaseLib.h>
+#include <Library/IoLib.h>
+#include <Library/HobLib.h>
+#include <Library/BoardInitLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <SioRegs.h>
+
+EFI_STATUS
+UpdatePlatformInfo (
+ IN SYSTEM_CONFIGURATION *SystemConfiguration,
+ IN SOCKET_PROCESSORCORE_CONFIGURATION *SocketProcessorCoreConfig,
+ IN SOCKET_IIO_CONFIGURATION *SocketIioConfig
+ );
+
+EFI_STATUS
+EFIAPI
+BoardDetect (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+BoardDebugInit (
+ VOID
+ )
+{
+
+ return EFI_SUCCESS;
+}
+
+EFI_BOOT_MODE
+EFIAPI
+BoardBootModeDetect (
+ VOID
+ )
+{
+ return BOOT_WITH_FULL_CONFIGURATION;
+}
+
+VOID
+EarlyPlatformPchInit (
+ VOID
+ )
+{
+ UINT16 Data16;
+ UINT8 Data8;
+ UINTN LpcBaseAddress;
+ UINT8 TcoRebootHappened;
+ UINTN SpiBaseAddress;
+ UINTN P2sbBase;
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ DEBUG((DEBUG_INFO, "EarlyPlatformPchInit - Start\n"));
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ LpcBaseAddress = DynamicSiLibraryPpi->MmPciBase (
+ DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_LPC,
+ PCI_FUNCTION_NUMBER_PCH_LPC
+ );
+ SpiBaseAddress = DynamicSiLibraryPpi->MmPciBase (
+ DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_SPI,
+ PCI_FUNCTION_NUMBER_PCH_SPI
+ );
+
+ //
+ // Program bar
+ //
+ P2sbBase = DynamicSiLibraryPpi->MmPciBase (
+ DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_P2SB,
+ PCI_FUNCTION_NUMBER_PCH_P2SB
+ );
+
+ MmioWrite32 (P2sbBase + R_P2SB_CFG_SBREG_BAR, PCH_PCR_BASE_ADDRESS);
+ MmioOr8 (P2sbBase + PCI_COMMAND_OFFSET, EFI_PCI_COMMAND_MEMORY_SPACE);
+
+ //
+ // LPC I/O Configuration
+ //
+ DynamicSiLibraryPpi->PchLpcIoDecodeRangesSet (
+ (V_LPC_CFG_IOD_LPT_378 << N_LPC_CFG_IOD_LPT) |
+ (V_LPC_CFG_IOD_COMB_3E8 << N_LPC_CFG_IOD_COMB) |
+ (V_LPC_CFG_IOD_COMA_3F8 << N_LPC_CFG_IOD_COMA)
+ );
+
+ DynamicSiLibraryPpi->PchLpcIoEnableDecodingSet (
+ B_LPC_CFG_IOE_ME2 |
+ B_LPC_CFG_IOE_SE |
+ B_LPC_CFG_IOE_ME1 |
+ B_LPC_CFG_IOE_KE |
+ B_LPC_CFG_IOE_HGE |
+ B_LPC_CFG_IOE_LGE |
+ B_LPC_CFG_IOE_FDE |
+ B_LPC_CFG_IOE_PPE |
+ B_LPC_CFG_IOE_CBE |
+ B_LPC_CFG_IOE_CAE
+ );
+ //
+ // Enable the upper 128-byte bank of RTC RAM
+ //
+ DynamicSiLibraryPpi->PchPcrAndThenOr32 (PID_RTC_HOST, R_RTC_PCR_CONF, (UINT32)~0, B_RTC_PCR_CONF_UCMOS_EN);
+
+ //
+ // Disable the Watchdog timer expiration from causing a system reset
+ //
+ DynamicSiLibraryPpi->PchPcrAndThenOr32 (PID_ITSS, R_ITSS_PCR_GIC, (UINT32)~0, B_ITSS_PCR_GIC_AME);
+ //
+ // Halt the TCO timer
+ //
+ Data16 = IoRead16 (PCH_TCO_BASE_ADDRESS + R_TCO_IO_TCO1_CNT);
+ Data16 |= B_TCO_IO_TCO1_CNT_TMR_HLT;
+ IoWrite16 (PCH_TCO_BASE_ADDRESS + R_TCO_IO_TCO1_CNT, Data16);
+
+ //
+ // Read the Second TO status bit
+ //
+ Data8 = IoRead8 (PCH_TCO_BASE_ADDRESS + R_TCO_IO_TCO2_STS);
+ if ((Data8 & B_TCO_IO_TCO2_STS_SECOND_TO) == B_TCO_IO_TCO2_STS_SECOND_TO) {
+ TcoRebootHappened = 1;
+ DEBUG ((EFI_D_INFO, "EarlyPlatformPchInit - TCO Second TO status bit is set. This might be a TCO reboot\n"));
+ } else {
+ TcoRebootHappened = 0;
+ }
+
+ //
+ // Clear the Second TO status bit
+ //
+ Data8 |= (UINT8) B_TCO_IO_TCO2_STS_SECOND_TO;
+ Data8 &= (UINT8) ~B_TCO_IO_TCO2_STS_INTRD_DET;
+ IoWrite8 (PCH_TCO_BASE_ADDRESS + R_TCO_IO_TCO2_STS, Data8);
+
+ //
+ // Disable SERR NMI and IOCHK# NMI in port 61
+ //
+ Data8 = IoRead8 (R_PCH_IO_NMI_SC);
+ Data8 |= (B_PCH_IO_NMI_SC_PCI_SERR_EN | B_PCH_IO_NMI_SC_IOCHK_NMI_EN);
+ IoWrite8 (R_PCH_IO_NMI_SC, Data8);
+
+ DynamicSiLibraryPpi->PchPcrAndThenOr32 (PID_ITSS, R_ITSS_PCR_GIC, (UINT32)~B_ITSS_PCR_GIC_AME, 0);
+
+ //
+ // Clear EISS bit to allow for SPI use
+ //
+ MmioAnd8 (SpiBaseAddress + R_SPI_CFG_BC, (UINT8)~B_SPI_CFG_BC_EISS);
+
+ //
+ // Enable LPC decode at 0xCA0 for BMC
+ //
+ DynamicSiLibraryPpi->PchLpcGenIoRangeSet ((IPMI_DEFAULT_SMM_IO_BASE & 0xFF0), 0x10);
+ DEBUG ((EFI_D_INFO, "[IPMI_DEBUG]: PchLpcGenIoRangeSet 0x%x!\n", IPMI_DEFAULT_SMM_IO_BASE));
+
+ DEBUG((DEBUG_INFO, "EarlyPlatformPchInit - End\n"));
+}
+
+EFI_STATUS
+EFIAPI
+BoardInitBeforeMemoryInit (
+ VOID
+ )
+{
+ SYSTEM_CONFIGURATION SysSetupData;
+ SOCKET_PROCESSORCORE_CONFIGURATION SocketProcessorCoreSetupData;
+ SOCKET_IIO_CONFIGURATION SocketIioSetupData;
+ PCH_SETUP PchSetupData;
+ UINT16 ABase;
+ UINT16 Pm1Sts = 0;
+ UINT32 Pm1Cnt;
+ EFI_STATUS Status;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ //
+ // Get Setup Data
+ //
+
+ ZeroMem (&SysSetupData, sizeof(SYSTEM_CONFIGURATION));
+ ZeroMem (&SocketProcessorCoreSetupData, sizeof(SOCKET_PROCESSORCORE_CONFIGURATION));
+ ZeroMem (&SocketIioSetupData, sizeof(SOCKET_IIO_CONFIGURATION));
+ ZeroMem (&PchSetupData, sizeof(PCH_SETUP));
+
+ CopyMem (&PchSetupData, PcdGetPtr(PcdPchSetup), sizeof(PCH_SETUP));
+ CopyMem (&SysSetupData, PcdGetPtr(PcdSetup), sizeof(SYSTEM_CONFIGURATION));
+ CopyMem (&SocketProcessorCoreSetupData, PcdGetPtr(PcdSocketProcessorCoreConfig), sizeof(SOCKET_PROCESSORCORE_CONFIGURATION));
+ CopyMem (&SocketIioSetupData, PcdGetPtr(PcdSocketIioConfig), sizeof(SOCKET_IIO_CONFIGURATION));
+ //
+ // Configure GPIO
+ //
+ Status = BoardInit ();
+
+ EarlyPlatformPchInit ();
+
+ ///
+ /// Set what state (S0/S5) to go to when power is re-applied after a power failure (G3 state)
+ ///
+ DynamicSiLibraryPpi->PmcSetPlatformStateAfterPowerFailure (PchSetupData.StateAfterG3);
+
+ //
+ // Check PWR FLR
+ //
+ if (DynamicSiLibraryPpi->PmcIsPowerFailureDetected ()) {
+ DynamicSiLibraryPpi->PmcClearPowerFailureStatus ();
+ }
+ ///----------------------------------------------------------------------------------
+ ///
+ /// Clear PWR_BTN_STS if set. BIOS should check the WAK_STS bit in PM1_STS[15] (PCH register ABASE+00h) before memory
+ /// initialization to determine if ME has reset the system while the Host was in a sleep state.
+ /// If WAK_STS is not set, BIOS should ensure a non-sleep exit path is taken by overwriting
+ /// PM1_CNT[12:10] (PCH register ABASE+04h) to 111b to force an s5 exit.
+ ///
+ ABase = DynamicSiLibraryPpi->PmcGetAcpiBase ();
+
+ Pm1Sts = IoRead16 (ABase + R_ACPI_IO_PM1_STS);
+ if ((Pm1Sts & B_ACPI_IO_PM1_STS_PWRBTN) == B_ACPI_IO_PM1_STS_PWRBTN) {
+ IoWrite16 (ABase + R_ACPI_IO_PM1_STS, B_ACPI_IO_PM1_STS_PWRBTN);
+ }
+
+ if ((Pm1Sts & B_ACPI_IO_PM1_STS_WAK) == 0) {
+ Pm1Cnt = IoRead32 (ABase + R_ACPI_IO_PM1_CNT);
+ Pm1Cnt |= V_ACPI_IO_PM1_CNT_S5;
+ IoWrite32 (ABase + R_ACPI_IO_PM1_CNT, Pm1Cnt);
+ }
+
+ //
+ // Update Platform Info
+ //
+ UpdatePlatformInfo (&SysSetupData,&SocketProcessorCoreSetupData,&SocketIioSetupData);
+
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+BoardInitAfterMemoryInit (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_BOOT_MODE BootMode;
+ UINT16 Pm1Cnt;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PeiServicesGetBootMode (&BootMode);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Check if user wants to turn off in PEI phase
+ //
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ DynamicSiLibraryPpi->CheckPowerOffNow ();
+ } else {
+ Pm1Cnt = IoRead16 (PCH_ACPI_BASE_ADDRESS + R_ACPI_IO_PM1_CNT);
+ Pm1Cnt &= ~B_ACPI_IO_PM1_CNT_SLP_TYP;
+ IoWrite16 (PCH_ACPI_BASE_ADDRESS + R_ACPI_IO_PM1_CNT, Pm1Cnt);
+ }
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+BoardInitBeforeTempRamExit (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+BoardInitAfterTempRamExit (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Initialize POC register by Variable.
+
+ @param *SystemConfiguration - Pointer to SystemConfiguration variables.
+
+ @retval EFI_SUCCESS - Success.
+
+**/
+EFI_STATUS
+UpdatePlatformInfo (
+ IN SYSTEM_CONFIGURATION *SystemConfiguration,
+ IN SOCKET_PROCESSORCORE_CONFIGURATION *SocketProcessorCoreConfig,
+ IN SOCKET_IIO_CONFIGURATION *SocketIioConfig
+ )
+{
+ EFI_PLATFORM_INFO *PlatformInfo;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ //
+ // Update the PCIE base and 32/64bit PCI resource support
+ //
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+
+ PlatformInfo->SysData.SysIoApicEnable = PCH_IOAPIC;
+#if MAX_SOCKET <= 4
+ if (SocketIioConfig->DevPresIoApicIio[0]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC00_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[1]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC01_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[2]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC02_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[3]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC03_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[4]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC04_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[5]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC05_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[6]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC06_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[7]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC07_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[8]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC08_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[9]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC09_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[10]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC10_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[11]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC11_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[12]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC12_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[13]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC13_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[14]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC14_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[15]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC15_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[16]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC16_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[17]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC17_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[18]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC18_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[19]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC19_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[20]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC20_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[21]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC21_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[22]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC22_IOAPIC);
+ }
+ if (SocketIioConfig->DevPresIoApicIio[23]) {
+ PlatformInfo->SysData.SysIoApicEnable |= (PC23_IOAPIC);
+ }
+#else
+ // Enable all 32 IOxAPIC
+ PlatformInfo->SysData.SysIoApicEnable = 0xFFFFFFFF;
+#endif
+ //
+ // Check to make sure TsegSize is in range, if not use default.
+ //
+ if (SocketProcessorCoreConfig->TsegSize > MAX_PROCESSOR_TSEG) {
+ SocketProcessorCoreConfig->TsegSize = MAX_PROCESSOR_TSEG; // if out of range make default 64M
+ }
+ PlatformInfo->MemData.MemTsegSize = (0x400000 << SocketProcessorCoreConfig->TsegSize);
+ PlatformInfo->MemData.MemIedSize = PcdGet32 (PcdCpuIEDRamSize);
+
+ //
+ // Minimum SMM range in TSEG should be larger than 3M
+ //
+ ASSERT (PlatformInfo->MemData.MemTsegSize - PlatformInfo->MemData.MemIedSize >= 0x300000);
+
+ return EFI_SUCCESS;
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf
new file mode 100644
index 0000000000..3e1f966f32
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf
@@ -0,0 +1,66 @@
+## @file
+# Component information file for PEI Board Init Pre-Mem Library
+#
+# @copyright
+# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BoardInitPreMemLib
+ FILE_GUID = 73AA24AE-FB20-43F9-A3BA-448953A03A78
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = BoardInitLib
+
+[LibraryClasses]
+ PeiServicesLib
+ PeimEntryPoint
+ PciLib
+ PeiServicesTablePointerLib
+ PciExpressLib
+ BaseCryptLib
+ CmosAccessLib
+ PeiPlatformHookLib
+ ReportStatusCodeLib
+ BaseLib
+ DebugLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ PcdLib
+ HobLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/Cpu/CpuRcPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[Sources]
+ BoardInitPreMemLib.c
+
+[Ppis]
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Guids]
+ gEfiPlatformInfoGuid
+
+[Pcd]
+ gStructPcdTokenSpaceGuid.PcdSetup
+ gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig
+ gStructPcdTokenSpaceGuid.PcdSocketIioConfig
+ gStructPcdTokenSpaceGuid.PcdPchSetup
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDRamSize
+
+[FixedPcd]
+ gSiPkgTokenSpaceGuid.PcdTcoBaseAddress
+ gSiPkgTokenSpaceGuid.PcdAcpiBaseAddress
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h b/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h
new file mode 100644
index 0000000000..76cea4cb38
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h
@@ -0,0 +1,48 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _MULTI_PLATFORM_SUPPORT_H_
+#define _MULTI_PLATFORM_SUPPORT_H_
+
+#include <Uefi.h>
+
+#include <Library/PcdLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/IoLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Ppi/ReadOnlyVariable2.h>
+
+extern EFI_GUID gDefaultDataFileGuid;
+extern EFI_GUID gEfiVariableGuid;
+extern EFI_GUID gEfiAuthenticatedVariableGuid;
+
+typedef struct {
+ UINT16 DefaultId;
+ UINT8 BoardId;
+} DEFAULT_INFO;
+
+typedef struct {
+ //
+ // HeaderSize includes HeaderSize fields and DefaultInfo arrays
+ //
+ UINT16 HeaderSize;
+ //
+ // DefaultInfo arrays those have the same default setting.
+ //
+ DEFAULT_INFO DefaultInfo[1];
+ //
+ // Default data is stored as variable storage.
+ // VARIABLE_STORE_HEADER VarStorageHeader;
+ //
+} DEFAULT_DATA;
+
+
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c
new file mode 100644
index 0000000000..9f0af4b3e0
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c
@@ -0,0 +1,255 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/MultiPlatSupportLib.h>
+#include <Library/HobLib.h>
+#include <MultiPlatSupport.h>
+#include <Ppi/MemoryDiscovered.h>
+#include <Library/ReadFfsLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Guid/AuthenticatedVariableFormat.h>
+
+
+//notes
+//1: security variable and non-security variable may have different implementation
+//2. BP core variable sync may need update this module
+//3 different generation need to sync base on RP variable and Generation variable
+// this library to use a lightweight get variable service to patch variable hob before PEI variable service is ready
+
+
+
+
+
+
+/**
+ Gets a vairable store header from FFS inserted by FCE
+
+ Arguments:
+
+ DefaultId - Specifies the type of defaults to retrieve.
+ BoardId - Specifies the platform board of defaults to retrieve.
+
+
+ @return The start address of VARIABLE_STORE_HEADER *. Null if cannot find it
+
+**/
+
+VOID * FindDefaultHobinFfs (
+ IN UINT16 DefaultId,
+ IN UINT16 BoardId
+ )
+{
+ EFI_PEI_SERVICES **PeiServices;
+ UINTN FvInstance;
+ EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
+ EFI_FFS_FILE_HEADER *FfsHeader;
+ UINT32 FileSize;
+ EFI_COMMON_SECTION_HEADER *Section;
+ UINT32 SectionLength;
+ BOOLEAN DefaultFileIsFound;
+ DEFAULT_DATA *DefaultData;
+ DEFAULT_INFO *DefaultInfo;
+ VARIABLE_STORE_HEADER *VarStoreHeader;
+ UINT32 FFSSize = 0;
+
+
+
+ //
+ // Get PeiService pointer
+ //
+ PeiServices = (EFI_PEI_SERVICES **)GetPeiServicesTablePointer ();
+
+ //
+ // Find the FFS file that stores all default data.
+ //
+ DefaultFileIsFound = FALSE;
+ FvInstance = 0;
+ FfsHeader = NULL;
+ while (((*PeiServices)->FfsFindNextVolume (PeiServices, FvInstance, &FvHeader) == EFI_SUCCESS) &&
+ (!DefaultFileIsFound)) {
+ FfsHeader = NULL;
+ while ((*PeiServices)->FfsFindNextFile (PeiServices, EFI_FV_FILETYPE_FREEFORM, FvHeader, &FfsHeader) == EFI_SUCCESS) {
+ if (CompareGuid ((EFI_GUID *) FfsHeader, &gDefaultDataFileGuid)) {
+ DefaultFileIsFound = TRUE;
+ break;
+ }
+ }
+ FvInstance ++;
+ }
+
+ //
+ // FFS file is not found.
+ //
+ if (!DefaultFileIsFound) {
+
+ if(PcdGet32(PcdFailSafeVarFfsSize)!=0 ){
+ //try to search other FVS
+ FfsHeader = (EFI_FFS_FILE_HEADER *) AllocatePool(PcdGet32(PcdFailSafeVarFfsSize) );
+ if(FfsHeader == NULL) {
+ return NULL;
+ }
+ if(EFI_SUCCESS != ReadFFSFile( (EFI_FIRMWARE_VOLUME_HEADER *) PcdGet32(PcdFailSafeVarFvBase), gDefaultDataFileGuid, 0, FfsHeader, &FFSSize, FALSE)) {
+ return NULL;
+ }
+ ASSERT(PcdGet32(PcdFailSafeVarFfsSize) <FFSSize);
+ } else {
+ return NULL;
+ }
+
+ }
+
+ //
+ // Find the matched default data for the input default ID and plat ID.
+ //
+ VarStoreHeader = NULL;
+ Section = (EFI_COMMON_SECTION_HEADER *)(FfsHeader + 1);
+ FileSize = *(UINT32 *)(FfsHeader->Size) & 0x00FFFFFF;
+ while (((UINTN) Section < (UINTN) FfsHeader + FileSize) && (VarStoreHeader == NULL)) {
+ DefaultData = (DEFAULT_DATA *) (Section + 1);
+ DefaultInfo = &(DefaultData->DefaultInfo[0]);
+ while ((UINTN) DefaultInfo < (UINTN) DefaultData + DefaultData->HeaderSize) {
+ if (DefaultInfo->DefaultId == DefaultId && DefaultInfo->BoardId == BoardId) {
+ VarStoreHeader = (VARIABLE_STORE_HEADER *) ((UINT8 *) DefaultData + DefaultData->HeaderSize);
+ break;
+ }
+ DefaultInfo ++;
+ }
+ //
+ // Size is 24 bits wide so mask upper 8 bits.
+ // SectionLength is adjusted it is 4 byte aligned.
+ // Go to the next section
+ //
+ SectionLength = *(UINT32 *)Section->Size & 0x00FFFFFF;
+ SectionLength = (SectionLength + 3) & (~3);
+ ASSERT (SectionLength != 0);
+ Section = (EFI_COMMON_SECTION_HEADER *)((UINT8 *)Section + SectionLength);
+ }
+
+ return VarStoreHeader;
+
+}
+
+
+/**
+ This function searches the first instance of a HOB from the starting HOB pointer.
+ Such HOB should satisfy two conditions:
+ its HOB type is EFI_HOB_TYPE_GUID_EXTENSION and its GUID Name equals to the input Guid.
+ If there does not exist such HOB from the starting HOB pointer, it will return NULL.
+ Caller is required to apply GET_GUID_HOB_DATA () and GET_GUID_HOB_DATA_SIZE ()
+ to extract the data section and its size info respectively.
+ In contrast with macro GET_NEXT_HOB(), this function does not skip the starting HOB pointer
+ unconditionally: it returns HobStart back if HobStart itself meets the requirement;
+ caller is required to use GET_NEXT_HOB() if it wishes to skip current HobStart.
+ If Guid is NULL, then ASSERT().
+ If HobStart is NULL, then ASSERT().
+
+ @param Guid The GUID to match with in the HOB list.
+ @param HobStart A pointer to a Guid.
+
+ @return The next instance of the matched GUID HOB from the starting HOB.
+
+**/
+VOID *
+InternalGetNextGuidHob (
+ IN CONST EFI_GUID *Guid,
+ IN CONST VOID *HobStart
+ )
+{
+ EFI_PEI_HOB_POINTERS GuidHob;
+
+ GuidHob.Raw = (UINT8 *) HobStart;
+ while (!END_OF_HOB_LIST (GuidHob)) {
+ if (GuidHob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION && CompareGuid (Guid, &GuidHob.Guid->Name)) {
+ break;
+ }
+ GuidHob.Raw = GET_NEXT_HOB (GuidHob);
+ }
+ return GuidHob.Raw;
+}
+
+EFI_STATUS
+CreateDefaultVariableHob (
+ IN UINT16 DefaultId,
+ IN UINT16 BoardId
+ )
+/*++
+Description:
+
+ This function finds the matched default data and create GUID hob for it.
+
+Arguments:
+
+ DefaultId - Specifies the type of defaults to retrieve.
+ BoardId - Specifies the platform board of defaults to retrieve.
+
+Returns:
+
+ EFI_SUCCESS - The matched default data is found.
+ EFI_NOT_FOUND - The matched default data is not found.
+ EFI_OUT_OF_RESOURCES - No enough resource to create HOB.
+
+--*/
+{
+ VARIABLE_STORE_HEADER *VarStoreHeader;
+ VARIABLE_STORE_HEADER *VarStoreHeaderHob;
+ UINT8 *VarHobPtr;
+ UINT8 *VarPtr;
+ UINT32 VarDataOffset;
+ UINT32 VarHobDataOffset;
+ EFI_PEI_SERVICES **PeiServices;
+
+ //
+ // Get PeiService pointer
+ //
+ PeiServices = (EFI_PEI_SERVICES **)GetPeiServicesTablePointer ();
+
+ VarStoreHeader = (VARIABLE_STORE_HEADER*)FindDefaultHobinFfs( DefaultId, BoardId);
+
+ //
+ // Matched default data is not found.
+ //
+ if (VarStoreHeader == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ //
+ // Create HOB to store defautl data so that Variable driver can use it.
+ // Allocate more data for header alignment.
+ //
+ VarStoreHeaderHob = (VARIABLE_STORE_HEADER *) BuildGuidHob (&VarStoreHeader->Signature, VarStoreHeader->Size + HEADER_ALIGNMENT - 1);
+ if (VarStoreHeaderHob == NULL) {
+ //
+ // No enough hob resource.
+ //
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ //
+ // Copy variable storage header.
+ //
+ CopyMem (VarStoreHeaderHob, VarStoreHeader, sizeof (VARIABLE_STORE_HEADER));
+ //
+ // Copy variable data.
+ //
+ VarPtr = (UINT8 *) HEADER_ALIGN ((UINTN) (VarStoreHeader + 1));
+ VarDataOffset = (UINT32) ((UINTN) VarPtr - (UINTN) VarStoreHeader);
+ VarHobPtr = (UINT8 *) HEADER_ALIGN ((UINTN) (VarStoreHeaderHob + 1));
+ VarHobDataOffset = (UINT32) ((UINTN) VarHobPtr - (UINTN) VarStoreHeaderHob);
+ CopyMem (VarHobPtr, VarPtr, VarStoreHeader->Size - VarDataOffset);
+ //
+ // Update variable size.
+ //
+ VarStoreHeaderHob->Size = VarStoreHeader->Size - VarDataOffset + VarHobDataOffset;
+
+ // SyncSetupVariable(PeiServices,VarStoreHeaderHob,FALSE);
+
+ return EFI_SUCCESS;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
new file mode 100644
index 0000000000..ea8d853314
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
@@ -0,0 +1,49 @@
+## @file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#
+#--*/
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = MultiPlatSupportLib
+ FILE_GUID = EA5EEAF9-2EB4-4fbf-BB28-5B3A605B8665
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = MultiPlatSupportLib|PEIM PEI_CORE
+
+[Sources]
+ MultiPlatSupportLib.c
+
+
+[Packages]
+ MdePkg/MdePkg.dec
+ SecurityPkg/SecurityPkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ PeiServicesTablePointerLib
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ HobLib
+ IoLib
+ PciLib
+ PcdLib
+ ReadFfsLib
+ MemoryAllocationLib
+
+[Guids]
+ gDefaultDataFileGuid ## CONSUMES ## File
+
+[Pcd]
+ gPlatformTokenSpaceGuid.PcdFailSafeVarFfsSize
+ gPlatformTokenSpaceGuid.PcdFailSafeVarFvBase
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c
new file mode 100644
index 0000000000..19dc82d7a7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c
@@ -0,0 +1,722 @@
+/** @file
+ Provide FSP wrapper hob process related function.
+
+ @copyright
+ Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+#include <Library/FspWrapperPlatformLib.h>
+#include <Guid/GuidHobFspEas.h>
+#include <Guid/MemoryTypeInformation.h>
+#include <Guid/GraphicsInfoHob.h>
+#include <Guid/PcdDataBaseHobGuid.h>
+#include <Guid/ZeroGuid.h>
+#include <Ppi/Capsule.h>
+
+#include <FspEas.h>
+
+//
+// Additional pages are used by DXE memory manager.
+// It should be consistent between RetrieveRequiredMemorySize() and GetPeiMemSize()
+//
+#define PEI_ADDITIONAL_MEMORY_SIZE (16 * EFI_PAGE_SIZE)
+
+EFI_GUID mCpuVarDataHobGuid = {0x71dd88db, 0x1722, 0x48af, {0x96, 0x5b, 0x5e, 0x15, 0xaf, 0xfe, 0x86, 0x56}};
+/**
+ Get the mem size in memory type infromation table.
+
+ @param[in] PeiServices PEI Services table.
+
+ @return the mem size in memory type infromation table.
+**/
+UINT64
+GetMemorySizeInMemoryTypeInformation (
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_MEMORY_TYPE_INFORMATION *MemoryData;
+ UINT8 Index;
+ UINTN TempPageNum;
+
+ MemoryData = NULL;
+ Status = (*PeiServices)->GetHobList ((CONST EFI_PEI_SERVICES**)PeiServices, (VOID **) &Hob.Raw);
+ ASSERT_EFI_ERROR (Status);
+
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION &&
+ CompareGuid (&Hob.Guid->Name, &gEfiMemoryTypeInformationGuid)) {
+ MemoryData = (EFI_MEMORY_TYPE_INFORMATION *) (Hob.Raw + sizeof (EFI_HOB_GENERIC_HEADER) + sizeof (EFI_GUID));
+ break;
+ }
+
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ if (MemoryData == NULL) {
+ return 0;
+ }
+
+ TempPageNum = 0;
+ for (Index = 0; MemoryData[Index].Type != EfiMaxMemoryType; Index++) {
+ //
+ // Accumulate default memory size requirements
+ //
+ TempPageNum += MemoryData[Index].NumberOfPages;
+ }
+
+ return TempPageNum * EFI_PAGE_SIZE;
+}
+
+/**
+ Get the mem size need to be reserved in PEI phase.
+
+ @param[in] PeiServices PEI Services table.
+
+ @return the mem size need to be reserved in PEI phase.
+**/
+UINT64
+RetrieveRequiredMemorySize (
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+{
+ UINT64 Size;
+
+ Size = GetMemorySizeInMemoryTypeInformation (PeiServices);
+ return Size + PEI_ADDITIONAL_MEMORY_SIZE;
+}
+
+/**
+ Get the mem size need to be consumed and reserved in PEI phase.
+
+ @param[in] PeiServices PEI Services table.
+ @param[in] BootMode Current boot mode.
+
+ @return the mem size need to be consumed and reserved in PEI phase.
+**/
+UINT64
+GetPeiMemSize (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN UINT32 BootMode
+ )
+{
+ UINT64 Size;
+ UINT64 MinSize;
+
+ if (BootMode == BOOT_IN_RECOVERY_MODE) {
+ return PcdGet32 (PcdPeiRecoveryMinMemSize);
+ }
+
+ Size = GetMemorySizeInMemoryTypeInformation (PeiServices);
+
+ MinSize = PcdGet32 (PcdPeiMinMemSize);
+
+ return MinSize + Size + PEI_ADDITIONAL_MEMORY_SIZE;
+}
+
+VOID
+TransferHobData (
+ VOID *HobStart,
+ EFI_GUID *InfoGuid,
+ UINT8 *Info
+ )
+{
+ VOID *GuidHob;
+ VOID *Data;
+ UINTN DataSize;
+ VOID *Hob;
+
+ GuidHob = GetNextGuidHob (InfoGuid, HobStart);
+ if (GuidHob == NULL) {
+ DEBUG ((EFI_D_ERROR, "Transfer Hob Can't Find %a\n", Info));
+ return;
+ }
+
+ Data = GET_GUID_HOB_DATA (GuidHob);
+ DataSize = GET_GUID_HOB_DATA_SIZE (GuidHob);
+ Hob = BuildGuidDataHob (
+ InfoGuid,
+ Data,
+ DataSize
+ );
+ DEBUG ((DEBUG_INFO, "Create %a Hob at %x\n", Info, Hob));
+}
+
+VOID
+CopyHobData (
+ VOID *HobStart,
+ EFI_GUID *InfoGuid,
+ UINT8 *Info
+ )
+{
+ VOID *GuidHob;
+ VOID *Data;
+ VOID *OrgGuidHob;
+ VOID *OrgData;
+ UINTN DataSize;
+ UINTN OrgDataSize;
+
+ GuidHob = GetNextGuidHob (InfoGuid, HobStart);
+ if (GuidHob == NULL) {
+ DEBUG ((EFI_D_ERROR, "Transfer Hob Can't Find %a\n", Info));
+ return;
+ }
+
+ Data = GET_GUID_HOB_DATA (GuidHob);
+ DataSize = GET_GUID_HOB_DATA_SIZE (GuidHob);
+
+ OrgGuidHob = GetFirstGuidHob (InfoGuid);
+ if (OrgGuidHob == NULL) {
+ DEBUG ((EFI_D_ERROR, "Copy Hob Can't Find org %a\n", Info));
+ }
+
+ OrgData = GET_GUID_HOB_DATA (OrgGuidHob);
+ OrgDataSize = GET_GUID_HOB_DATA_SIZE (OrgGuidHob);
+ if (OrgDataSize != DataSize) {
+ DEBUG ((EFI_D_ERROR, "%a Hob Size Don't Match Between FSP and BootLoader. FSP:%x vs BootLoader:%x\n", OrgDataSize, DataSize));
+ ASSERT (FALSE);
+ }
+ CopyMem (OrgData, Data, DataSize);
+
+ DEBUG ((EFI_D_ERROR, "CopyHobData %a Hob from %x to %x, Size: %x\n", Info, Data, OrgData, DataSize));
+}
+
+
+VOID
+TransferPcd (
+ VOID * HobStart
+ )
+{
+ VOID *GuidHob;
+ EFI_PHYSICAL_ADDRESS *HobBuffer;
+
+ GuidHob = GetNextGuidHob (&gSaveHostToMemoryGuid, HobStart);
+ if (GuidHob == NULL) {
+ DEBUG ((EFI_D_ERROR, "Transfer Hob Can't Find gSaveHostToMemoryGuid\n"));
+ return;
+ }
+
+ HobBuffer = (EFI_PHYSICAL_ADDRESS*) GET_GUID_HOB_DATA (GuidHob);
+ PcdSet64S (PcdSyshostMemoryAddress, (UINTN) HobBuffer[0]);
+ PcdSet64S (PcdMemMapHostMemoryAddress, (UINTN) HobBuffer[1]);
+ DEBUG ((DEBUG_INFO, "TransferPcd Set PcdSyshostMemoryAddress %x\n", (UINTN) HobBuffer[0]));
+ DEBUG ((DEBUG_INFO, "TransferPcd Set PcdMemMapHostMemoryAddress %x\n", (UINTN) HobBuffer[1]));
+}
+
+
+/**
+ Post FSP-M HOB process for Memory Resource Descriptor.
+
+ @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
+
+ @return If platform process the FSP hob list successfully.
+**/
+EFI_STATUS
+EFIAPI
+PostFspmHobProcess (
+ IN VOID *FspHobList
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ UINT64 PeiMemSize;
+ EFI_PHYSICAL_ADDRESS PeiMemBase;
+ EFI_STATUS Status;
+ EFI_BOOT_MODE BootMode;
+ EFI_PEI_CAPSULE_PPI *Capsule;
+ VOID *CapsuleBuffer;
+ UINTN CapsuleBufferLength;
+ UINT64 RequiredMemSize;
+ UINT64 ResourceLength;
+ EFI_PEI_SERVICES **PeiServices;
+
+ PeiServices = (EFI_PEI_SERVICES **) GetPeiServicesTablePointer ();
+
+ PeiServicesGetBootMode (&BootMode);
+
+ PeiMemBase = 0;
+ PeiMemSize = 0;
+ RequiredMemSize = 0;
+ ResourceLength = 0;
+
+ //
+ // Parse the hob list from fsp
+ // Report all the resource hob except MMIO and IO resource Hob's
+ //
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ PeiMemSize = GetPeiMemSize (PeiServices, BootMode);
+ RequiredMemSize = RetrieveRequiredMemorySize (PeiServices);
+ Hob.Raw = (UINT8*)(UINTN) FspHobList;
+ DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList));
+
+ //
+ // Find the largest available system Memory and use it for PeiMemory
+ //
+ while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw)) != NULL) {
+ if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY)
+ && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)
+ && (Hob.ResourceDescriptor->PhysicalStart >= PeiMemBase)
+ && (Hob.ResourceDescriptor->ResourceLength >= PeiMemSize)) {
+ PeiMemBase = Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength - PeiMemSize;
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+ }
+
+ CopyHobData (FspHobList, &gSystemInfoVarHobGuid, (UINT8*) "gSystemInfoVarHobGuid");
+ CopyHobData (FspHobList, &gIioSiPolicyHobGuid, (UINT8*) "gIioSiPolicyHobGuid");
+ TransferPcd (FspHobList);
+
+ Hob.Raw = (UINT8 *)(UINTN) FspHobList;
+
+ //
+ // Skip the MMIO and IO reource map from the FSP Hob list
+ //
+ while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw)) != NULL) {
+ if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_IO) || (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_MAPPED_IO)) {
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ continue;
+ }
+ ResourceLength = Hob.ResourceDescriptor->ResourceLength;
+ DEBUG ((DEBUG_INFO, "Resource start %lx resource length %lx resource type %d\n", Hob.ResourceDescriptor->PhysicalStart, Hob.ResourceDescriptor->ResourceLength, Hob.ResourceDescriptor->ResourceType));
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ //
+ // If the system memory found in FSP Hob is determined for PeiMemory. Split the Resource descriptor Hob
+ //
+ if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY)
+ && (Hob.ResourceDescriptor->PhysicalStart <= PeiMemBase)
+ && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength >= PeiMemBase + PeiMemSize)
+ && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)) {
+ if ((CompareGuid (&Hob.ResourceDescriptor->Owner, &gZeroGuid))) {
+ BuildResourceDescriptorHob (
+ Hob.ResourceDescriptor->ResourceType,
+ Hob.ResourceDescriptor->ResourceAttribute,
+ PeiMemBase,
+ PeiMemSize
+ );
+ } else {
+ BuildResourceDescriptorWithOwnerHob (
+ Hob.ResourceDescriptor->ResourceType,
+ Hob.ResourceDescriptor->ResourceAttribute,
+ PeiMemBase,
+ PeiMemSize,
+ &Hob.ResourceDescriptor->Owner
+ );
+ }
+ ResourceLength = (Hob.ResourceDescriptor->ResourceLength) - (PeiMemSize);
+ }
+ }
+
+ //
+ // Report the resource hob
+ //
+ if ((CompareGuid (&Hob.ResourceDescriptor->Owner, &gZeroGuid))) {
+ BuildResourceDescriptorHob (
+ Hob.ResourceDescriptor->ResourceType,
+ Hob.ResourceDescriptor->ResourceAttribute,
+ Hob.ResourceDescriptor->PhysicalStart,
+ ResourceLength
+ );
+ } else {
+ BuildResourceDescriptorWithOwnerHob (
+ Hob.ResourceDescriptor->ResourceType,
+ Hob.ResourceDescriptor->ResourceAttribute,
+ Hob.ResourceDescriptor->PhysicalStart,
+ ResourceLength,
+ &Hob.ResourceDescriptor->Owner
+ );
+ }
+
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ //
+ // @todo: It is a W/A for SetMemorySpaceAttribute issue in PchSpi and PchReset drivers.
+ // We need to modify it instead of hard code here. Due to InstallEfiMemory is using hard code to
+ // describe memory resource, we have to hard code in here. Once InstallEfiMemory is merged, we should
+ // be able to remove this.
+ //
+ BuildResourceDescriptorHob (
+ EFI_RESOURCE_MEMORY_MAPPED_IO,
+ EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE,
+ 0xFFA00000,
+ 0x80000
+ );
+ BuildResourceDescriptorHob (
+ EFI_RESOURCE_MEMORY_MAPPED_IO,
+ EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE,
+ 0xFE000000,
+ 0x10000
+ );
+ BuildResourceDescriptorHob (
+ EFI_RESOURCE_MEMORY_MAPPED_IO,
+ EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE,
+ 0xFE010000,
+ 0x1000
+ );
+
+ //
+ // Capsule mode
+ //
+ Capsule = NULL;
+ CapsuleBuffer = NULL;
+ CapsuleBufferLength = 0;
+ if (BootMode == BOOT_ON_FLASH_UPDATE) {
+ Status = PeiServicesLocatePpi (
+ &gEfiPeiCapsulePpiGuid,
+ 0,
+ NULL,
+ (VOID **) &Capsule
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ if (Status == EFI_SUCCESS) {
+ Status = PeiServicesGetHobList ((void**)&Hob.Raw);
+ ASSERT_EFI_ERROR (Status);
+ while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw)) != NULL) {
+ if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY)
+ && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)
+ && (Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB)
+ && (Hob.ResourceDescriptor->PhysicalStart != PeiMemBase)
+ && (Hob.ResourceDescriptor->ResourceLength >= CapsuleBufferLength)) {
+ CapsuleBufferLength = (UINTN)Hob.ResourceDescriptor->ResourceLength;
+ CapsuleBuffer = (VOID*)(UINTN)Hob.ResourceDescriptor->PhysicalStart;
+
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ //
+ // Call the Capsule PPI Coalesce function to coalesce the capsule data.
+ //
+ Status = Capsule->Coalesce (PeiServices, &CapsuleBuffer, &CapsuleBufferLength);
+ }
+ }
+
+ DEBUG ((DEBUG_INFO, "FSP wrapper PeiMemBase : 0x%08x\n", PeiMemBase));
+ DEBUG ((DEBUG_INFO, "FSP wrapper PeiMemSize : 0x%08x\n", PeiMemSize));
+ DEBUG ((DEBUG_INFO, "FSP wrapper RequiredMemSize : 0x%08x\n", RequiredMemSize));
+
+ //
+ // Install efi memory
+ //
+ Status = PeiServicesInstallPeiMemory (
+ PeiMemBase,
+ PeiMemSize - RequiredMemSize
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ if (Capsule != NULL) {
+ Status = Capsule->CreateState ((EFI_PEI_SERVICES **) PeiServices, CapsuleBuffer, CapsuleBufferLength);
+ }
+
+
+ //
+ // Create a memory allocation HOB at fixed location for MP Services PPI AP wait loop.
+ // Report memory region used by FSP.
+ //
+ BuildMemoryAllocationHob (
+ PcdGet32 (PcdFspCpuPeiApWakeupBufferAddr),
+ EFI_PAGE_SIZE,
+ EfiBootServicesData
+ );
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Process FSP HOB list
+
+ @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
+
+**/
+VOID
+ProcessFspHobList (
+ IN VOID *FspHobList
+ )
+{
+ UINT8 PhysicalAddressBits;
+ UINT32 RegEax;
+ EFI_PEI_HOB_POINTERS FspHob;
+
+ FspHob.Raw = FspHobList;
+
+ AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);
+ if (RegEax >= 0x80000008) {
+ AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL);
+ PhysicalAddressBits = (UINT8) RegEax;
+ } else {
+ PhysicalAddressBits = 36;
+ }
+
+ ///
+ /// Create a CPU hand-off information
+ ///
+ BuildCpuHob (PhysicalAddressBits, 16);
+
+ //
+ // Add all the HOBs from FSP binary to FSP wrapper
+ //
+ while (!END_OF_HOB_LIST (FspHob)) {
+ if (FspHob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
+ //
+ // Skip FSP binary creates PcdDataBaseHobGuid
+ //
+ if (!CompareGuid(&FspHob.Guid->Name, &gPcdDataBaseHobGuid)) {
+ BuildGuidDataHob (
+ &FspHob.Guid->Name,
+ GET_GUID_HOB_DATA (FspHob),
+ GET_GUID_HOB_DATA_SIZE (FspHob)
+ );
+ }
+ }
+ FspHob.Raw = GET_NEXT_HOB (FspHob);
+ }
+}
+
+VOID
+CheckFspGraphicsDeviceInfoHob (
+ VOID
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_STATUS Status;
+ EFI_PEI_GRAPHICS_INFO_HOB *FspGraphicsInfo = NULL;
+ EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *FspGraphicsDeviceInfo = NULL;
+ EFI_PEI_GRAPHICS_DEVICE_INFO_HOB GraphicsDeviceInfo;
+
+ Status = PeiServicesGetHobList ((VOID**) &Hob.Raw);
+ if (!EFI_ERROR (Status)) {
+ if (Hob.Raw != NULL) {
+ if ((Hob.Raw = GetNextGuidHob (&gEfiGraphicsInfoHobGuid, Hob.Raw)) != NULL) {
+ FspGraphicsInfo = GET_GUID_HOB_DATA (Hob.Guid);
+ }
+ }
+ }
+ if (FspGraphicsInfo == NULL) {
+ return ;
+ }
+
+ Status = PeiServicesGetHobList ((VOID**) &Hob.Raw);
+ if (!EFI_ERROR (Status)) {
+ if (Hob.Raw != NULL) {
+ if ((Hob.Raw = GetNextGuidHob (&gEfiGraphicsDeviceInfoHobGuid, Hob.Raw)) != NULL) {
+ FspGraphicsDeviceInfo = GET_GUID_HOB_DATA (Hob.Guid);
+ }
+ }
+ }
+ if (FspGraphicsDeviceInfo != NULL) {
+ return ;
+ }
+
+ //
+ // FSP only publish FspGraphicsInfo, but no FspGraphicsDeviceInfo.
+ //
+ // Workaround: Need publish FspGraphicsDeviceInfo, because Intel Graphics BarIndex is 1.
+ //
+ GraphicsDeviceInfo.VendorId = MAX_UINT16;
+ GraphicsDeviceInfo.DeviceId = MAX_UINT16;
+ GraphicsDeviceInfo.SubsystemVendorId = MAX_UINT16;
+ GraphicsDeviceInfo.SubsystemId = MAX_UINT16;
+ GraphicsDeviceInfo.RevisionId = MAX_UINT8;
+ GraphicsDeviceInfo.BarIndex = 1;
+ BuildGuidDataHob (
+ &gEfiGraphicsDeviceInfoHobGuid,
+ &GraphicsDeviceInfo,
+ sizeof(GraphicsDeviceInfo)
+ );
+
+ return ;
+}
+
+/**
+ Dump FSP HOB list
+
+**/
+VOID
+DumpFspHobList (
+ VOID
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_STATUS Status;
+
+ Status = PeiServicesGetHobList ((VOID **)&Hob.Raw);
+ ASSERT_EFI_ERROR (Status);
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
+ DEBUG ((DEBUG_INFO, "FSP Extended GUID HOB: {%g}\n", &(Hob.Guid->Name)));
+ }
+ if ((Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) &&
+ (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED)) {
+ DEBUG ((DEBUG_INFO, "FSP Reserved Resource HOB: %016lX ~ %016lX\n", \
+ Hob.ResourceDescriptor->PhysicalStart, Hob.ResourceDescriptor->PhysicalStart \
+ + Hob.ResourceDescriptor->ResourceLength));
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+}
+
+/**
+ Dump FSP memory resource
+
+**/
+VOID
+DumpFspMemoryResource (
+ VOID
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_STATUS Status;
+
+ Status = PeiServicesGetHobList ((VOID **)&Hob.Raw);
+ ASSERT_EFI_ERROR (Status);
+ DEBUG ((DEBUG_INFO, "\nFSP Memory Resource\n"));
+ DEBUG ((DEBUG_INFO, " Resource Range Type Attribute Owner\n"));
+ DEBUG ((DEBUG_INFO, "================================= ==== ================ ====================================\n"));
+ while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw)) != NULL) {
+ if (!CompareGuid (&(Hob.ResourceDescriptor->Owner), &gZeroGuid)) {
+ DEBUG ((DEBUG_INFO, "%016lx-%016lx %4x %016x %g\n",
+ Hob.ResourceDescriptor->PhysicalStart,
+ Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength,
+ Hob.ResourceDescriptor->ResourceType,
+ Hob.ResourceDescriptor->ResourceAttribute,
+ &(Hob.ResourceDescriptor->Owner)
+ ));
+ } else {
+ DEBUG ((DEBUG_INFO, "%016lx-%016lx %4x %016x \n",
+ Hob.ResourceDescriptor->PhysicalStart,
+ Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength,
+ Hob.ResourceDescriptor->ResourceType,
+ Hob.ResourceDescriptor->ResourceAttribute
+ ));
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+ DEBUG ((DEBUG_INFO, "\n"));
+}
+
+/**
+ Dump FSP memory resource
+
+**/
+VOID
+DumpFspGraphicsInfoHob (
+ VOID
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_STATUS Status;
+ EFI_PEI_GRAPHICS_INFO_HOB *FspGraphicsInfo = NULL;
+
+ Status = PeiServicesGetHobList ((VOID **) &Hob.Raw);
+ if (!EFI_ERROR (Status)) {
+ if (Hob.Raw != NULL) {
+ if ((Hob.Raw = GetNextGuidHob (&gEfiGraphicsInfoHobGuid, Hob.Raw)) != NULL) {
+ FspGraphicsInfo = GET_GUID_HOB_DATA (Hob.Guid);
+ }
+ }
+ if (FspGraphicsInfo != NULL) {
+ DEBUG((DEBUG_INFO, "\nGraphicsInfo\n"));
+ DEBUG((DEBUG_INFO, " |-> FrameBufferBase : 0x%016lx\n", FspGraphicsInfo->FrameBufferBase));
+ DEBUG((DEBUG_INFO, " |-> FrameBufferSize : 0x%016lx\n", FspGraphicsInfo->FrameBufferSize));
+ DEBUG((DEBUG_INFO, " |-> GraphicsMode\n"));
+ DEBUG((DEBUG_INFO, " |-> Version : 0x%08x\n", FspGraphicsInfo->GraphicsMode.Version));
+ DEBUG((DEBUG_INFO, " |-> HorizontalResolution : %d\n", FspGraphicsInfo->GraphicsMode.HorizontalResolution));
+ DEBUG((DEBUG_INFO, " |-> VerticalResolution : %d\n", FspGraphicsInfo->GraphicsMode.VerticalResolution));
+ DEBUG((DEBUG_INFO, " |-> PixelFormat : %d\n", FspGraphicsInfo->GraphicsMode.PixelFormat));
+ DEBUG((DEBUG_INFO, " |-> PixelInformation : %d|%d|%d|%d\n",
+ FspGraphicsInfo->GraphicsMode.PixelInformation.RedMask,
+ FspGraphicsInfo->GraphicsMode.PixelInformation.GreenMask,
+ FspGraphicsInfo->GraphicsMode.PixelInformation.BlueMask,
+ FspGraphicsInfo->GraphicsMode.PixelInformation.ReservedMask
+ ));
+ DEBUG((DEBUG_INFO, " |-> PixelsPerScanLine : %d\n", FspGraphicsInfo->GraphicsMode.PixelsPerScanLine));
+ DEBUG((DEBUG_INFO, "\n"));
+ } else {
+ DEBUG((DEBUG_INFO, "\nNo GraphicsInfo\n"));
+ }
+ }
+}
+
+VOID
+DumpFspGraphicsDeviceInfoHob (
+ VOID
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_STATUS Status;
+ EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *FspGraphicsDeviceInfo = NULL;
+
+ Status = PeiServicesGetHobList ((VOID **)&Hob.Raw);
+ if (!EFI_ERROR (Status)) {
+ if (Hob.Raw != NULL) {
+ if ((Hob.Raw = GetNextGuidHob (&gEfiGraphicsDeviceInfoHobGuid, Hob.Raw)) != NULL) {
+ FspGraphicsDeviceInfo = GET_GUID_HOB_DATA (Hob.Guid);
+ }
+ }
+ if (FspGraphicsDeviceInfo != NULL) {
+ DEBUG((DEBUG_INFO, "\nGraphicsDeviceInfo\n"));
+ DEBUG((DEBUG_INFO, " |-> VendorId : 0x%04x\n", FspGraphicsDeviceInfo->VendorId));
+ DEBUG((DEBUG_INFO, " |-> DeviceId : 0x%04x\n", FspGraphicsDeviceInfo->DeviceId));
+ DEBUG((DEBUG_INFO, " |-> SubsystemVendorId : 0x%04x\n", FspGraphicsDeviceInfo->SubsystemVendorId));
+ DEBUG((DEBUG_INFO, " |-> SubsystemId : 0x%04x\n", FspGraphicsDeviceInfo->SubsystemId));
+ DEBUG((DEBUG_INFO, " |-> RevisionId : 0x%02x\n", FspGraphicsDeviceInfo->RevisionId));
+ DEBUG((DEBUG_INFO, " |-> BarIndex : 0x%02x\n", FspGraphicsDeviceInfo->BarIndex));
+ DEBUG((DEBUG_INFO, "\n"));
+ } else {
+ DEBUG((DEBUG_INFO, "\nNo GraphicsDeviceInfo\n"));
+ }
+ }
+}
+
+EFI_PEI_PPI_DESCRIPTOR mSiliconInitializedDesc = {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gEdkiiSiliconInitializedPpiGuid,
+ NULL
+};
+
+/**
+ Post FSP-S HOB process (not Memory Resource Descriptor).
+
+ @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
+
+ @return If platform process the FSP hob list successfully.
+**/
+EFI_STATUS
+EFIAPI
+PostFspsHobProcess (
+ IN VOID *FspHobList
+ )
+{
+ EFI_STATUS Status;
+
+ //
+ // Only in FSP API mode the wrapper has to build hobs basing on FSP output data.
+ //
+ ASSERT (FspHobList != NULL);
+ ProcessFspHobList (FspHobList);
+ CheckFspGraphicsDeviceInfoHob ();
+ DEBUG_CODE_BEGIN ();
+ DumpFspGraphicsInfoHob ();
+ DumpFspGraphicsDeviceInfoHob ();
+ DumpFspHobList ();
+ DumpFspMemoryResource ();
+ DEBUG_CODE_END ();
+
+ Status = PeiServicesInstallPpi (&mSiliconInitializedDesc);
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
new file mode 100644
index 0000000000..f1dcc32147
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
@@ -0,0 +1,99 @@
+## @file
+# Provide FSP wrapper hob process related function.
+#
+# @copyright
+# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PeiFspWrapperHobProcessLib
+ FILE_GUID = C7B7070B-E5A8-4b86-9110-BDCA1095F496
+ MODULE_TYPE = SEC
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = FspWrapperHobProcessLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+################################################################################
+#
+# Sources Section - list of files that are required for the build to succeed.
+#
+################################################################################
+
+[Sources]
+ FspWrapperHobProcessLib.c
+
+
+################################################################################
+#
+# Package Dependency Section - list of Package files that are required for
+# this module.
+#
+################################################################################
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ IntelFsp2Pkg/IntelFsp2Pkg.dec
+ IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ HobLib
+ DebugLib
+ FspWrapperPlatformLib
+ PeiServicesLib
+ PeiServicesTablePointerLib
+
+[Pcd]
+ gIntelFsp2WrapperTokenSpaceGuid.PcdPeiMinMemSize ## CONSUMES
+ gIntelFsp2WrapperTokenSpaceGuid.PcdPeiRecoveryMinMemSize ## CONSUMES
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
+ gMinPlatformPkgTokenSpaceGuid.PcdPciExpressRegionLength
+ gMinPlatformPkgTokenSpaceGuid.PcdFspCpuPeiApWakeupBufferAddr
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize
+ gEfiCpRcPkgTokenSpaceGuid.PcdSyshostMemoryAddress
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemMapHostMemoryAddress
+
+[Guids]
+ gFspReservedMemoryResourceHobGuid ## CONSUMES ## HOB
+ gEfiMemoryTypeInformationGuid ## CONSUMES ## GUID
+ gPcdDataBaseHobGuid
+ gZeroGuid
+ gEfiGraphicsInfoHobGuid
+ gEfiGraphicsDeviceInfoHobGuid
+ gCsrPseudoOffsetTableGuid
+ gReferenceCodePolicyHobGuid
+ gSaveHostToMemoryGuid
+ gEfiMemoryMapGuid
+ gRasRcPolicyHobGuid
+ gRasRcConfigHobGuid
+ gEfiSmmPeiSmramMemoryReserveGuid
+ gEfiAcpiVariableGuid
+ gEfiCpuPolicyDataHobGuid
+ gSystemInfoVarHobGuid
+ gIioSiPolicyHobGuid
+
+[Ppis]
+ gEfiPeiCapsulePpiGuid ## CONSUMES
+ gEdkiiSiliconInitializedPpiGuid ## PRODUCES
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c
new file mode 100644
index 0000000000..9adbfee4a1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c
@@ -0,0 +1,43 @@
+/** @file
+ PEI Library Functions. Initialize GPIOs
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/DebugLib.h>
+#include <Library/UbaGpioInitLib.h>
+#include <Library/PeiPlatformHooklib.h>
+
+/**
+ Configure GPIO
+
+ @param[in] PlatformInfo
+**/
+VOID
+GpioInit (
+)
+{
+ EFI_STATUS Status;
+ Status = PlatformInitGpios();
+}
+
+
+/**
+ Configure GPIO and SIO
+
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+BoardInit (
+ )
+{
+
+ GpioInit();
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
new file mode 100644
index 0000000000..4b40fbd9ad
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
@@ -0,0 +1,34 @@
+## @file
+#
+# @copyright
+# Copyright 1999 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PeiPlatformHookLib
+ FILE_GUID = AD901798-B0DA-4b20-B90C-283F886E76D0
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PeiPlatformHookLib|PEIM PEI_CORE SEC
+
+[Sources]
+ PeiPlatformHooklib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[LibraryClasses]
+ DebugLib
+ UbaGpioInitLib
+
+[Pcd]
+
+[Ppis]
+
+[Guids]
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c
new file mode 100644
index 0000000000..f0230642d2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c
@@ -0,0 +1,270 @@
+/** @file PeiReportFvLib.c
+ Source code file for Report Firmware Volume (FV) library
+
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/ReportFvLib.h>
+#include <Guid/FirmwareFileSystem2.h>
+#include <Ppi/FirmwareVolumeInfo2.h>
+
+VOID
+ReportPreMemFv (
+ VOID
+ )
+{
+ UINTN Index = 0;
+ EFI_PEI_PPI_DESCRIPTOR *Descriptor = NULL;
+ EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI *Ppi = NULL;
+ EFI_STATUS Status = EFI_SUCCESS;
+ EFI_FIRMWARE_VOLUME_HEADER *FvHeader = NULL;
+ EFI_BOOT_MODE BootMode = BOOT_WITH_FULL_CONFIGURATION;
+
+ Status = PeiServicesGetBootMode (&BootMode);
+ ASSERT_EFI_ERROR (Status);
+
+ DEBUG_CODE (
+ for (Index = 0; Status == EFI_SUCCESS; Index++) {
+ Status = PeiServicesLocatePpi (&gEfiPeiFirmwareVolumeInfo2PpiGuid, Index, &Descriptor, &Ppi);
+ if (!EFI_ERROR (Status)) {
+ FvHeader = (EFI_FIRMWARE_VOLUME_HEADER*) Ppi->FvInfo;
+ DEBUG ((DEBUG_INFO, "Found FV at 0x%x, size 0x%x\n", FvHeader, FvHeader->FvLength));
+ }
+ }
+ );
+
+ //
+ // FvBspPreMemory and FvPreMemory are required for all stages.
+ //
+
+ DEBUG ((DEBUG_INFO, "Install FlashFvBspPreMemory - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvBspPreMemoryBase), PcdGet32 (PcdFlashFvBspPreMemorySize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvBspPreMemoryBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvBspPreMemoryBase),
+ PcdGet32 (PcdFlashFvBspPreMemorySize),
+ NULL,
+ NULL,
+ 0
+ );
+
+ DEBUG ((DEBUG_INFO, "Install FlashFvPreMemory - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvPreMemoryBase), PcdGet32 (PcdFlashFvPreMemorySize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvPreMemoryBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvPreMemoryBase),
+ PcdGet32 (PcdFlashFvPreMemorySize),
+ NULL,
+ NULL,
+ 0
+ );
+
+ //
+ // In API mode, do not publish FSP FV.
+ //
+ if (!PcdGetBool (PcdFspWrapperBootMode)) {
+ //
+ // FvFspT may be required for all stages
+ //
+ DEBUG ((DEBUG_INFO, "Install FlashFvFspT - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvFspTBase), PcdGet32 (PcdFlashFvFspTSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvFspTBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvFspTBase),
+ PcdGet32 (PcdFlashFvFspTSize),
+ NULL,
+ NULL,
+ 0
+ );
+
+ //
+ // FvFspM required for stage 2 and above
+ //
+ if (PcdGet8 (PcdBootStage) >= 2) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvFspM - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvFspMBase), PcdGet32 (PcdFlashFvFspMSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvFspMBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvFspMBase),
+ PcdGet32 (PcdFlashFvFspMSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+ }
+
+ //
+ // FvOprom may be required for most stages
+ //
+ if (PcdGet8 (PcdBootStage) >= 2) {
+ DEBUG ((DEBUG_INFO, "Install PcdFlashFvOprom - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvOpromBase), PcdGet32 (PcdFlashFvOpromSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvOpromBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvOpromBase),
+ PcdGet32 (PcdFlashFvOpromSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ //
+ // FvAdvanced not needed until stage 6
+ //
+ if (PcdGet8 (PcdBootStage) >= 6) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvAdvancedPreMemory - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvAdvancedPreMemoryBase), PcdGet32 (PcdFlashFvAdvancedPreMemorySize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvAdvancedPreMemoryBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvAdvancedPreMemoryBase),
+ PcdGet32 (PcdFlashFvAdvancedPreMemorySize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+}
+
+VOID
+ReportPostMemFv (
+ VOID
+ )
+{
+ UINTN Index = 0;
+ EFI_PEI_PPI_DESCRIPTOR *Descriptor = NULL;
+ EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI *Ppi = NULL;
+ EFI_STATUS Status = EFI_SUCCESS;
+ EFI_FIRMWARE_VOLUME_HEADER *FvHeader = NULL;
+
+ DEBUG_CODE (
+ for (Index = 0; Status == EFI_SUCCESS; Index++) {
+ Status = PeiServicesLocatePpi (&gEfiPeiFirmwareVolumeInfo2PpiGuid, Index, &Descriptor, &Ppi);
+ if (!EFI_ERROR (Status)) {
+ FvHeader = (EFI_FIRMWARE_VOLUME_HEADER*) Ppi->FvInfo;
+ DEBUG ((DEBUG_INFO, "Found FV at 0x%x, size 0x%x\n", FvHeader, FvHeader->FvLength));
+ }
+ }
+ );
+
+ //
+ // FvFspS, FvPostMemory, and FvBsp may be required for completing stage 2
+ //
+ if (PcdGet8 (PcdBootStage) >= 2) {
+ //
+ // In API mode, do not publish FSP FV.
+ //
+ if (!PcdGetBool (PcdFspWrapperBootMode)) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvFspS - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvFspSBase), PcdGet32 (PcdFlashFvFspSSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvFspSBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvFspSBase),
+ PcdGet32 (PcdFlashFvFspSSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ DEBUG ((DEBUG_INFO, "Install FlashFvPostMemory - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvPostMemoryBase), PcdGet32 (PcdFlashFvPostMemorySize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvPostMemoryBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvPostMemoryBase),
+ PcdGet32 (PcdFlashFvPostMemorySize),
+ NULL,
+ NULL,
+ 0
+ );
+
+ DEBUG ((DEBUG_INFO, "Install FlashFvBsp - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvBspBase), PcdGet32 (PcdFlashFvBspSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvBspBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvBspBase),
+ PcdGet32 (PcdFlashFvBspSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ //
+ // FvUefiBoot required for completing stage 3
+ //
+ if (PcdGet8 (PcdBootStage) >= 3) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvUefiBoot - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvUefiBootBase), PcdGet32 (PcdFlashFvUefiBootSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvUefiBootBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvUefiBootBase),
+ PcdGet32 (PcdFlashFvUefiBootSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ //
+ // FvOsBoot required for completing stage 4
+ //
+ if (PcdGet8 (PcdBootStage) >= 4) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvOsBoot - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvOsBootBase), PcdGet32 (PcdFlashFvOsBootSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvOsBootBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvOsBootBase),
+ PcdGet32 (PcdFlashFvOsBootSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ //
+ // FvSecurity required for completing stage 5
+ //
+ if (PcdGet8 (PcdBootStage) >= 5) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvSecurity - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvSecurityBase), PcdGet32 (PcdFlashFvSecuritySize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvSecurityBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvSecurityBase),
+ PcdGet32 (PcdFlashFvSecuritySize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ //
+ // FvAdvanced required for completing stage 6
+ //
+ if (PcdGet8 (PcdBootStage) >= 6) {
+ DEBUG ((DEBUG_INFO, "Install FlashFvAdvanced - 0x%x, 0x%x\n", PcdGet32 (PcdFlashFvAdvancedBase), PcdGet32 (PcdFlashFvAdvancedSize)));
+ PeiServicesInstallFvInfo2Ppi (
+ &(((EFI_FIRMWARE_VOLUME_HEADER*) (UINTN) PcdGet32 (PcdFlashFvAdvancedBase))->FileSystemGuid),
+ (VOID *) (UINTN) PcdGet32 (PcdFlashFvAdvancedBase),
+ PcdGet32 (PcdFlashFvAdvancedSize),
+ NULL,
+ NULL,
+ 0
+ );
+ }
+
+ //
+ // Report resource related HOB for flash FV to reserve space in GCD and memory map
+ //
+
+ BuildResourceDescriptorHob (
+ EFI_RESOURCE_MEMORY_MAPPED_IO,
+ (EFI_RESOURCE_ATTRIBUTE_PRESENT |
+ EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
+ EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE),
+ (UINTN) PcdGet32 (PcdFlashAreaBaseAddress),
+ (UINTN) PcdGet32 (PcdFlashAreaSize)
+ );
+
+ BuildMemoryAllocationHob (
+ (UINTN) PcdGet32 (PcdFlashAreaBaseAddress),
+ (UINTN) PcdGet32 (PcdFlashAreaSize),
+ EfiMemoryMappedIO
+ );
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf
new file mode 100644
index 0000000000..b02fac49cf
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf
@@ -0,0 +1,65 @@
+### @file
+# Component information file for the Report Firmware Volume (FV) library.
+#
+# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = PeiReportFvLib
+ FILE_GUID = 44328FA5-E4DD-4A15-ABDF-C6584AC363D9
+ VERSION_STRING = 1.0
+ MODULE_TYPE = PEIM
+ LIBRARY_CLASS = ReportFvLib
+
+[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
+ HobLib
+ PeiServicesLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Sources]
+ PeiReportFvLib.c
+
+[Pcd]
+ gMinPlatformPkgTokenSpaceGuid.PcdBootStage ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFspWrapperBootMode ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedPreMemoryBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedPreMemorySize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize ## CONSUMES
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromBase ## CONSUMES
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryOffset ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspOffset ## CONSUMES
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c
new file mode 100644
index 0000000000..6711de4fad
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c
@@ -0,0 +1,518 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <Base.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+
+//
+// UBA and GPIO headers
+//
+#include <Library/UbaGpioPlatformConfig.h>
+#include <Library/GpioLib.h>
+
+
+/**
+
+Function gets pointers to the UBA data installed by the right RP package
+
+@param[out] GpioParams The pointer to the platform GPIO parameters
+
+
+@retval EFI_SUCCESS The function completed successfully
+
+**/
+EFI_STATUS
+PlatformGetGpioPlatformMappings (
+ IN OUT PLATFORM_GPIO_CONFIG_TABLE *GpioParams
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (&gUbaConfigDatabasePpiGuid, 0, NULL, &UbaConfigPpi);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(PLATFORM_GPIO_CONFIG_TABLE);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformGpioPlatformConfigDataGuid,
+ GpioParams,
+ &TableSize
+ );
+
+ return Status;
+}
+
+/**
+
+ Reads GPIO pin to get Flash Security Override jumper status
+
+ @param[out] Jumper - The pointer to the jumper output
+
+ @retval Status - Success if GPIO's are read properly
+ Jumper - 0x0 if an error happened, otherwise the jumperl value
+
+**/
+EFI_STATUS
+GpioGetFlashSecOvrdVal (
+ OUT UINT32 *Jumper
+ )
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ *Jumper = 0x0;
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.FlashSecOverride == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.FlashSecOverride, Jumper);
+ return Status;
+}
+
+/**
+
+ Reads GPIO pin to get recovery jumper status
+
+ @param[out] RcvJumper - The pointer to the Recovery jumper input
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetRcvPadVal (
+ OUT UINT32 *RcvJumper
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.RcvJumper == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.RcvJumper, RcvJumper);
+ return Status;
+}
+
+
+/**
+
+ Reads GPIO pin to get FM ADR trigger pin
+
+ @param[out] FmAdrTrigger - The pointer to the ADR trigger input
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetFmAdrTriggerPadVal (
+ OUT UINT32 *FmAdrTrigger
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.FmAdrTrigger == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.FmAdrTrigger, FmAdrTrigger);
+ return Status;
+}
+
+
+/**
+
+ Sets GPIO pin to enable ADR on the board
+
+ @param Set[in] - If TRUE means the pas should go 'high', otherwise 'low'
+
+ @retval Status - Success if GPIO set properly
+
+**/
+EFI_STATUS
+GpioSetAdrEnablePadOutVal (
+ IN BOOLEAN Set
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.AdrEnable == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ if (Set) {
+ Status = DynamicSiLibraryPpi->GpioSetOutputValue (GpioPlatformConfig.AdrEnable, GpioOutHigh);
+ }
+ else {
+ Status = DynamicSiLibraryPpi->GpioSetOutputValue (GpioPlatformConfig.AdrEnable, GpioOutLow);
+ }
+ return Status;
+}
+
+/**
+
+ Reads GPIO pin to Force to S1 config mode pad
+
+ @param[out] ForceS1ConfigPad - Input value of the Froce S1 Config pad
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetForcetoS1ConfigModePadVal (
+ OUT UINT32 *ForceS1ConfigPad
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.ForceTo1SConfigModePad == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.ForceTo1SConfigModePad, ForceS1ConfigPad);
+ return Status;
+}
+
+/**
+
+ Reads GPIO pin related to QAT
+
+ @param[out] QATPad - Input value of the QAT pad
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetQATPadVal (
+ OUT UINT32 *QATPad
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.QATGpio == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.QATGpio, QATPad);
+ return Status;
+
+}
+
+
+/**
+
+ Get GPIO pin for FPGA error detection RAS functionality
+
+ @param[out] FpgaErrorPad -The input value of the FPGA error 1 pad
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetFpgaErrorPad1 (
+ OUT UINT32 *FpgaErrorPad
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.FpgaErrorSingnalPad1 == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ *FpgaErrorPad = (UINT32) GpioPlatformConfig.FpgaErrorSingnalPad1;
+ return EFI_SUCCESS;
+
+}
+
+
+/**
+
+ Get GPIO pin for FPGA error detection RAS functionality
+
+ @param[out] FpgaErrorPad -The input value of the FPGA error 2 pad
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetFpgaErrorPad2 (
+ OUT UINT32 *FpgaErrorPad
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.FpgaErrorSingnalPad2 == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ *FpgaErrorPad = (UINT32) GpioPlatformConfig.FpgaErrorSingnalPad2;
+ return Status;
+
+}
+
+
+/**
+
+ Get GPIO pin for CPU HP SMI detection for RAS functionality
+
+ @retval Status - Success if GPIO's pad read properly
+
+**/
+EFI_STATUS
+GpioGetCpuHpSmiPad (
+ OUT UINT32 *CpuHpSmiPad
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.CpuHpSmiPad == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ *CpuHpSmiPad = (UINT32) GpioPlatformConfig.CpuHpSmiPad;
+ return Status;
+
+}
+
+
+/**
+
+ Reads GPIO pin that is first bit of the Board ID indication word
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetBoardId0PadVal (
+ OUT UINT32 *BoardID0Gpio
+)
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.BoardID0Gpio == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.BoardID0Gpio, BoardID0Gpio);
+ return Status;
+
+}
+
+/**
+
+ Sets GPIO's used for Boot Mode
+
+ @param None
+
+ @retval Status - Success if GPIO's are configured
+
+**/
+EFI_STATUS
+GpioConfigForMFGMode (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (GpioPlatformConfig.GpioMfgPad.GpioPad == UNUSED_GPIO) {
+ return EFI_UNSUPPORTED;
+ }
+
+ DEBUG ((EFI_D_INFO, "Start ConfigureGpio() for BootMode Detection.\n"));
+
+ Status = DynamicSiLibraryPpi->GpioSetPadConfig (GpioPlatformConfig.GpioMfgPad.GpioPad, &GpioPlatformConfig.GpioMfgPad.GpioConfig);
+
+ ASSERT_EFI_ERROR (Status);
+ DEBUG ((EFI_D_INFO, "End ConfigureGpio() for BootMode Detection.\n"));
+ return Status;
+}
+
+/**
+
+ Checks whether the MDF jumper has been set
+
+ @param None
+
+ @retval ManufacturingMode - TRUE when MFG jumper is on, FALSE otherwise
+
+**/
+BOOLEAN
+IsManufacturingMode (
+ VOID
+)
+{
+
+ BOOLEAN ManufacturingMode = TRUE;
+
+ EFI_STATUS Status;
+ UINT32 GpiValue;
+ PLATFORM_GPIO_CONFIG_TABLE GpioPlatformConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return FALSE;
+ }
+
+ Status = PlatformGetGpioPlatformMappings (&GpioPlatformConfig);
+ ASSERT_EFI_ERROR (Status);
+
+ if (GpioPlatformConfig.GpioMfgPad.GpioPad == UNUSED_GPIO) {
+ return FALSE;
+ }
+
+ Status = GpioConfigForMFGMode ();
+ ASSERT_EFI_ERROR (Status);
+
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GpioPlatformConfig.GpioMfgPad.GpioPad, &GpiValue);
+
+ ASSERT_EFI_ERROR (Status);
+
+ if (!GpiValue) {
+ ManufacturingMode = FALSE;
+ }
+ return ManufacturingMode;
+
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
new file mode 100644
index 0000000000..5e911ba790
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
@@ -0,0 +1,60 @@
+## @file
+#
+# @copyright
+# Copyright 2014 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PeiUbaPlatLib
+ FILE_GUID = EBD8C6DC-8439-47f1-9B31-91464088F135
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = UbaPlatLib|PEIM PEI_CORE
+
+[sources]
+ UbaPchEarlyUpdateLib.c
+ UbaClkGenUpdateLib.c
+ UbaGpioUpdateLib.c
+ UbaPcdUpdateLib.c
+ UbaSoftStrapUpdateLib.c
+ UbaIioConfigLibPei.c
+ UbaSlotUpdateLibPei.c
+ UbaBoardSioInfoLib.c
+ UbaClocksConfigLib.c
+ UbaIioPortBifurcationInitLib.c
+ UbaPchPcieBifurcationLib.c
+ UbaHsioPtssTableConfigLib.c
+ PeiUbaUsbOcUpdateLib.c
+ PeiUbaGpioPlatformConfigLib.c
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ PeiServicesLib
+ PeimEntryPoint
+ PeiServicesTablePointerLib
+ IoLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Ppis]
+ gUbaConfigDatabasePpiGuid
+ gDynamicSiLibraryPpiGuid ## ALWAYS_CONSUMES
+
+[Depex]
+ gUbaConfigDatabasePpiGuid AND
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c
new file mode 100644
index 0000000000..6dbf9eb7eb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c
@@ -0,0 +1,61 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/UbaUsbOcUpdateLib.h>
+
+EFI_STATUS
+PlatformGetUsbOcMappings (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_USBOC_UPDATE_TABLE UsbOcUpdateTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(UsbOcUpdateTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPeiPlatformUbaOcConfigDataGuid,
+ &UsbOcUpdateTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (UsbOcUpdateTable.Signature == PLATFORM_USBOC_UPDATE_SIGNATURE);
+ ASSERT (UsbOcUpdateTable.Version == PLATFORM_USBOC_UPDATE_VERSION);
+
+ UsbOcUpdateTable.CallUsbOcUpdate( Usb20OverCurrentMappings,
+ Usb30OverCurrentMappings,
+ Usb20AfeParams
+ );
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c
new file mode 100644
index 0000000000..86c2a6ff4e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c
@@ -0,0 +1,54 @@
+/** @file
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/UbaBoardSioInfoLib.h>
+
+EFI_STATUS
+PlatformGetBoardSioInfo (
+ OUT PEI_BOARD_SIO_INFO *BoardSioInfoData
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(PEI_BOARD_SIO_INFO);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformBoardSioInfoDataGuid,
+ BoardSioInfoData,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (BoardSioInfoData -> Signature == BOARD_SIO_INFO_DATA_SIGNATURE);
+ ASSERT (BoardSioInfoData -> Version == BOARD_SIO_INFO_DATA_VERSION);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c
new file mode 100644
index 0000000000..c0eb5df07a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c
@@ -0,0 +1,134 @@
+/** @file
+ UbaClkGenUpdateLib implementation.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+
+#include <Ppi/UbaCfgDb.h>
+#include <Ppi/Smbus2.h>
+
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+
+#include <Library/UbaClkGenUpdateLib.h>
+
+#define CLOCK_GENERATOR_ADDRESS 0xD2
+
+EFI_STATUS
+PlatformUpdateClockgen (
+ IN BOOLEAN EnableSpreadSpectrum
+)
+{
+ EFI_STATUS Status;
+
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_CLOCKGEN_UPDATE_TABLE ClockgenTable;
+ UINTN TableSize = 0;
+
+ EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
+ UINT8 Buffer[PLATFORM_NUMBER_OF_CLOCKGEN_DATA];
+ UINTN Length = 0;
+ EFI_SMBUS_DEVICE_COMMAND Command;
+ EFI_PEI_SMBUS2_PPI *SmbusPpi = NULL;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PeiServicesLocatePpi (
+ &gEfiPeiSmbus2PpiGuid,
+ 0,
+ NULL,
+ &SmbusPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //
+ // Read the clock generator
+ //
+ SlaveAddress.SmbusDeviceAddress = CLOCK_GENERATOR_ADDRESS >> 1;
+ Length = sizeof (Buffer);
+ Command = 0;
+ Status = SmbusPpi->Execute (
+ SmbusPpi,
+ SlaveAddress,
+ Command,
+ EfiSmbusReadBlock,
+ FALSE,
+ &Length,
+ Buffer
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ do {
+
+ TableSize = sizeof(ClockgenTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformClockgenConfigDataGuid,
+ &ClockgenTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (ClockgenTable.Signature == PLATFORM_CLOCKGEN_UPDATE_SIGNATURE);
+ ASSERT (ClockgenTable.Version == PLATFORM_CLOCKGEN_UPDATE_VERSION);
+
+ if (ClockgenTable.Id != PLATFORM_CLOCKGEN_NO_ID) {
+ if (ClockgenTable.Id != Buffer[ClockgenTable.IdOffset]) {
+ continue;
+ }
+ }
+
+ if (EnableSpreadSpectrum) {
+ ClockgenTable.Data[ClockgenTable.SpreadSpectrumByteOffset] = ClockgenTable.SpreadSpectrumValue;
+ }
+
+ //
+ // Program clock generator
+ //
+ Command = 0;
+ Length = ClockgenTable.DataLength;
+
+ Status = SmbusPpi->Execute (
+ SmbusPpi,
+ SlaveAddress,
+ Command,
+ EfiSmbusWriteBlock,
+ FALSE,
+ &Length, //&ConfigurationTableLength,
+ &ClockgenTable.Data //ConfigurationTable
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ } else {
+ break;
+ }
+ }while (!EFI_ERROR(Status));
+
+ return Status;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c
new file mode 100644
index 0000000000..dd7873522c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c
@@ -0,0 +1,59 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/UbaClocksConfigLib.h>
+
+EFI_STATUS
+ConfigurePlatformClock (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *SmbusPpi
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_CLOCKS_CONFIG_TABLE PlatformClocksConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(PlatformClocksConfigTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformClocksConfigDataGuid,
+ &PlatformClocksConfigTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (PlatformClocksConfigTable.Signature == PLATFORM_CLOCKS_CONFIG_SIGNATURE);
+ ASSERT (PlatformClocksConfigTable.Version == PLATFORM_CLOCKS_CONFIG_VERSION);
+
+ Status = PlatformClocksConfigTable.CallUpdate(PeiServices, NotifyDescriptor, SmbusPpi);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c
new file mode 100644
index 0000000000..164302ba7b
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c
@@ -0,0 +1,68 @@
+/** @file
+ UbaGpioUpdateLib implementation.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+
+#include <Ppi/UbaCfgDb.h>
+
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+
+#include <Library/UbaGpioUpdateLib.h>
+
+EFI_STATUS
+PlatformUpdateGpios (
+ VOID
+)
+{
+ EFI_STATUS Status;
+
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_GPIO_UPDATE_TABLE GpioTable;
+ UINTN TableSize;
+ UINTN Index;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(GpioTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformGpioConfigDataGuid,
+ &GpioTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (GpioTable.Signature == PLATFORM_GPIO_UPDATE_SIGNATURE);
+ ASSERT (GpioTable.Version == PLATFORM_GPIO_UPDATE_VERSION);
+
+ for (Index = 0; GpioTable.Gpios[Index].Register != PLATFORM_END_OF_GPIO_LIST; Index++) {
+
+ IoWrite32 (GpioTable.Gpios[Index].Register, GpioTable.Gpios[Index].Value);
+ }
+
+ return Status;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c
new file mode 100644
index 0000000000..35f67a013a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c
@@ -0,0 +1,58 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/UbaHsioPtssTableConfigLib.h>
+
+EFI_STATUS
+InstallPlatformHsioPtssTable (
+ IN PCH_SETUP *PchSetup,
+ IN OUT PCH_POLICY_PPI *PchPolicy
+
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_HSIO_PTSS_CONFIG_TABLE PlatformHsioPtssConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(PlatformHsioPtssConfigTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformHsioPtssTableGuid,
+ &PlatformHsioPtssConfigTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (PlatformHsioPtssConfigTable.Signature == PLATFORM_HSIO_PTSS_TABLE_SIGNATURE);
+ ASSERT (PlatformHsioPtssConfigTable.Version == PLATFORM_HSIO_PTSS_TABLE_VERSION);
+
+ PlatformHsioPtssConfigTable.CallUpdate( PchSetup, PchPolicy );
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c
new file mode 100644
index 0000000000..e4ac30a962
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c
@@ -0,0 +1,219 @@
+/** @file
+ PeiUbaIioConfigLib implementation.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/UbaIioConfigLib.h>
+
+EFI_STATUS
+PlatformIioConfigInit (
+ IN OUT IIO_BIFURCATION_DATA_ENTRY **BifurcationTable,
+ IN OUT UINT8 *BifurcationEntries,
+ IN OUT IIO_SLOT_CONFIG_DATA_ENTRY **SlotTable,
+ IN OUT UINT8 *SlotEntries
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE IioConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioConfigTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &IioConfigTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+ ASSERT (IioConfigTable.Version == PLATFORM_IIO_CONFIG_UPDATE_VERSION);
+
+ *BifurcationTable = IioConfigTable.IioBifurcationTablePtr;
+ *BifurcationEntries = (UINT8) (IioConfigTable.IioBifurcationTableSize/sizeof(IIO_BIFURCATION_DATA_ENTRY));
+
+ *SlotTable = IioConfigTable.IioSlotTablePtr;
+ *SlotEntries = (UINT8)(IioConfigTable.IioSlotTableSize/sizeof(IIO_SLOT_CONFIG_DATA_ENTRY));
+
+ return Status;
+}
+
+EFI_STATUS
+PlatformIioConfigInit2 (
+ IN UINT8 SkuPersonalityType,
+ IN OUT IIO_BIFURCATION_DATA_ENTRY **BifurcationTable,
+ IN OUT UINT8 *BifurcationEntries,
+ IN OUT IIO_SLOT_CONFIG_DATA_ENTRY **SlotTable,
+ IN OUT UINT8 *SlotEntries
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE IioConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioConfigTable);
+ if (SkuPersonalityType == 1) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_1,
+ &IioConfigTable,
+ &TableSize
+ );
+ } else if (SkuPersonalityType == 2) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_2,
+ &IioConfigTable,
+ &TableSize
+ );
+ } else if (SkuPersonalityType == 3) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_3,
+ &IioConfigTable,
+ &TableSize
+ );
+ } else {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &IioConfigTable,
+ &TableSize
+ );
+ }
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+ ASSERT (IioConfigTable.Version == PLATFORM_IIO_CONFIG_UPDATE_VERSION);
+
+ *BifurcationTable = IioConfigTable.IioBifurcationTablePtr;
+ *BifurcationEntries = (UINT8) (IioConfigTable.IioBifurcationTableSize/sizeof(IIO_BIFURCATION_DATA_ENTRY));
+
+ *SlotTable = IioConfigTable.IioSlotTablePtr;
+ *SlotEntries = (UINT8)(IioConfigTable.IioSlotTableSize/sizeof(IIO_SLOT_CONFIG_DATA_ENTRY));
+
+ return Status;
+}
+
+EFI_STATUS
+PlatformUpdateIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE IioConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioConfigTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &IioConfigTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+ ASSERT (IioConfigTable.Version == PLATFORM_IIO_CONFIG_UPDATE_VERSION);
+
+ Status = IioConfigTable.CallUpdate (IioGlobalData);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
+
+EFI_STATUS
+PlatformUpdateIioConfig_EX (
+ IN IIO_GLOBALS *IioGlobalData
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX IioConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioConfigTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &IioConfigTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+
+ Status = IioConfigTable.CallUpdate (IioGlobalData);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c
new file mode 100644
index 0000000000..41416adef1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c
@@ -0,0 +1,55 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UbaIioPortBifurcationInitLib.h>
+
+EFI_STATUS
+IioPortBifurcationInit (
+ IN IIO_GLOBALS *IioGlobalData
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ IIO_PORT_BIFURCATION_INIT_TABLE IioPortBifurcationInitTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioPortBifurcationInitTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gIioPortBifurcationInitDataGuid,
+ &IioPortBifurcationInitTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioPortBifurcationInitTable.Signature == IIO_PORT_BIFURCATION_INIT_SIGNATURE);
+ ASSERT (IioPortBifurcationInitTable.Version == IIO_PORT_BIFURCATION_INIT_VERSION);
+
+ IioPortBifurcationInitTable.CallUpdate(IioGlobalData);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c
new file mode 100644
index 0000000000..ce822faa2d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c
@@ -0,0 +1,69 @@
+/** @file
+ UbaPcdUpdateLib implementation.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+
+#include <Ppi/UbaCfgDb.h>
+#include <Library/DebugLib.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/UbaPcdUpdateLib.h>
+
+/**
+ Function updates Platform Configuration Data (PCD) in Unified Board Abstraction (UBA)
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS PCDs successfuly intialized
+ @return EFI_ERROR An error ocurs during PCDs initialization
+
+**/
+EFI_STATUS
+PlatformUpdatePcds (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCD_UPDATE_TABLE PcdUpdateTable;
+ UINTN Size;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Size = sizeof(PcdUpdateTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformPcdConfigDataGuid,
+ &PcdUpdateTable,
+ &Size
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ASSERT (PcdUpdateTable.Signature == PLATFORM_PCD_UPDATE_SIGNATURE);
+ ASSERT (PcdUpdateTable.Version == PLATFORM_PCD_UPDATE_VERSION);
+
+ Status = PcdUpdateTable.CallUpdate ();
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c
new file mode 100644
index 0000000000..dc7a044729
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c
@@ -0,0 +1,108 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+
+#include <Ppi/UbaCfgDb.h>
+
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+
+#include <Library/UbaPchEarlyUpdateLib.h>
+
+EFI_STATUS
+PlatformPchLanConfig (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+)
+{
+ EFI_STATUS Status;
+
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCH_EARLY_UPDATE_TABLE PchEarlyUpdateTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(PchEarlyUpdateTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformPchEarlyConfigDataGuid,
+ &PchEarlyUpdateTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (PchEarlyUpdateTable.Signature == PLATFORM_PCH_EARLY_UPDATE_SIGNATURE);
+ ASSERT (PchEarlyUpdateTable.Version == PLATFORM_PCH_EARLY_UPDATE_VERSION);
+
+ Status = PchEarlyUpdateTable.ConfigLan (SystemConfig);
+
+ return Status;
+}
+
+EFI_STATUS
+PlatformInitLateHook (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+)
+{
+ EFI_STATUS Status;
+
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCH_EARLY_UPDATE_TABLE PchEarlyUpdateTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(PchEarlyUpdateTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformPchEarlyConfigDataGuid,
+ &PchEarlyUpdateTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (PchEarlyUpdateTable.Signature == PLATFORM_PCH_EARLY_UPDATE_SIGNATURE);
+ ASSERT (PchEarlyUpdateTable.Version == PLATFORM_PCH_EARLY_UPDATE_VERSION);
+
+ if (PchEarlyUpdateTable.InitLateHook == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ Status = PchEarlyUpdateTable.InitLateHook (SystemConfig);
+
+ return Status;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c
new file mode 100644
index 0000000000..53c913aa54
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c
@@ -0,0 +1,57 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/UbaPcieBifurcationUpdateLib.h>
+
+EFI_STATUS
+PlatformGetPchPcieBifurcationConfig (
+ IN OUT PCIE_BIFURCATION_CONFIG **PchPcieBifurcationConfig,
+ IN OUT PCH_SLOT_CONFIG_DATA_ENTRY_EX **PchSlotConfig
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_TABLE BifurcationUpdateTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(BifurcationUpdateTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformUbaPcieBifurcationGuid,
+ &BifurcationUpdateTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (BifurcationUpdateTable.Signature == PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_SIGNATURE);
+ ASSERT (BifurcationUpdateTable.Version == PLATFORM_PCH_PCIE_BIFURCATION_UPDATE_VERSION);
+
+ BifurcationUpdateTable.CallPcieBifurcationUpdate(PchPcieBifurcationConfig, PchSlotConfig);
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c
new file mode 100644
index 0000000000..55ada7b3aa
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c
@@ -0,0 +1,156 @@
+/** @file
+ UbaSlotUpdateLib implementation.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UbaSlotUpdateLib.h>
+
+EFI_STATUS
+PlatformGetSlotTableData (
+ IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
+ IN OUT UINT8 *IOU2Setting,
+ IN OUT UINT8 *FlagValue
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_SLOT_UPDATE_TABLE IioSlotTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioSlotTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid,
+ &IioSlotTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioSlotTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE);
+ ASSERT (IioSlotTable.Version == PLATFORM_SLOT_UPDATE_VERSION);
+
+ *BroadwayTable = IioSlotTable.BroadwayTablePtr;
+ *IOU2Setting = IioSlotTable.GetIOU2Setting (*IOU2Setting);
+ *FlagValue = IioSlotTable.FlagValue;
+
+ return Status;
+}
+
+EFI_STATUS
+PlatformGetSlotTableData2 (
+ IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
+ IN OUT UINT8 *IOU0Setting,
+ IN OUT UINT8 *FlagValue,
+ IN OUT UINT8 *IOU2Setting,
+ IN UINT8 SkuPersonalityType
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_SLOT_UPDATE_TABLE2 IioSlotTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(IioSlotTable);
+ if ((SkuPersonalityType == 1) || (SkuPersonalityType == 3)) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid2_1,
+ &IioSlotTable,
+ &TableSize
+ );
+ } else {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid2,
+ &IioSlotTable,
+ &TableSize
+ );
+ }
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioSlotTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE);
+ ASSERT (IioSlotTable.Version == PLATFORM_SLOT_UPDATE_VERSION);
+
+ *BroadwayTable = IioSlotTable.BroadwayTablePtr;
+ *IOU0Setting = IioSlotTable.GetIOU0Setting (*IOU0Setting);
+ *FlagValue = IioSlotTable.FlagValue;
+ *IOU2Setting = IioSlotTable.GetIOU2Setting (SkuPersonalityType, *IOU2Setting);
+
+ return Status;
+}
+
+EFI_STATUS
+PlatformPchGetPciSlotImplementedTableData (
+ IN OUT UINT8 **SlotImplementedTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCH_PCI_SLOT_IMPLEMENTED_UPDATE_TABLE SITable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ (VOID **)&UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ TableSize = sizeof(SITable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformPciSlotImplementedGuid,
+ &SITable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (SITable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE);
+ ASSERT (SITable.Version == PLATFORM_SLOT_UPDATE_VERSION);
+
+ *SlotImplementedTable = SITable.SlotImplementedTableDataPtr;
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c
new file mode 100644
index 0000000000..a4042d2b37
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c
@@ -0,0 +1,95 @@
+/** @file
+ UbaSoftStrapUpdateLib implementation.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UbaSoftStrapUpdateLib.h>
+
+
+EFI_STATUS
+GetPchSoftSoftStrapTable (
+ IN VOID **PchSoftStrapTable
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCH_SOFTSTRAP_UPDATE PchSoftStrapUpdate;
+ UINTN Size;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Size = sizeof(PchSoftStrapUpdate);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformPchSoftStrapConfigDataGuid,
+ &PchSoftStrapUpdate,
+ &Size
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (PchSoftStrapUpdate.Signature == PLATFORM_SOFT_STRAP_UPDATE_SIGNATURE);
+ ASSERT (PchSoftStrapUpdate.Version == PLATFORM_SOFT_STRAP_UPDATE_VERSION);
+
+ *PchSoftStrapTable = PchSoftStrapUpdate.PchSoftStrapTablePtr;
+
+ return Status;
+}
+
+VOID
+PlatformSpecificPchSoftStrapUpdate (
+ IN OUT UINT8 *FlashDescriptorCopy
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_PCH_SOFTSTRAP_UPDATE PchSoftStrapUpdate;
+ UINTN Size;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+
+ Size = sizeof(PchSoftStrapUpdate);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformPchSoftStrapConfigDataGuid,
+ &PchSoftStrapUpdate,
+ &Size
+ );
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+
+ ASSERT (PchSoftStrapUpdate.Signature == PLATFORM_SOFT_STRAP_UPDATE_SIGNATURE);
+ ASSERT (PchSoftStrapUpdate.Version == PLATFORM_SOFT_STRAP_UPDATE_VERSION);
+
+ PchSoftStrapUpdate.PchSoftStrapPlatformSpecificUpdate (FlashDescriptorCopy);
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c
new file mode 100644
index 0000000000..3cd48be906
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c
@@ -0,0 +1,347 @@
+/** @file
+ Platform Clocks Lib file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Library/IoLib.h>
+#include <Library/PlatformClocksLib.h>
+#include <Ppi/Smbus2.h>
+#include <Ppi/SmbusPolicy.h>
+#include <Library/DebugLib.h>
+#include <Ppi/Stall.h>
+#include <Library/HobLib.h>
+#include <Platform.h>
+#include <Library/BaseMemoryLib.h>
+
+#define MAX_SMBUS_RETRIES 10
+
+
+EFI_STATUS
+ConfigureClockGeneratorOnSecondarySmbus (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SMBUS2_PPI *SmbusPpi,
+ IN UINT8 ClockAddress,
+ IN UINTN ConfigurationTableLength,
+ IN BOOLEAN EnableSpreadSpectrum,
+ IN CLOCK_GENERATOR_DETAILS *mSupportedClockGeneratorT,
+ IN OUT UINT8 *ConfigurationTable
+ );
+
+/**
+
+ Configure the clock generator using the SMBUS PPI services.
+
+ This function performs a block write, and dumps debug information.
+
+ @param PeiServices - General purpose services available to every PEIM.
+ @param ClockType - Clock generator's model name.
+ @param ClockAddress - SMBUS address of clock generator.
+ @param ConfigurationTableLength - Length of configuration table.
+ @param ConfigurationTable - Pointer of configuration table.
+
+ @retval EFI_SUCCESS - Operation success.
+
+**/
+EFI_STATUS
+ConfigureClockGenerator (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN CLOCK_GENERATOR_TYPE ClockType,
+ IN UINT8 ClockAddress,
+ IN UINTN ConfigurationTableLength,
+ IN OUT UINT8 *ConfigurationTable,
+ IN BOOLEAN EnableSpreadSpectrum,
+ IN CLOCK_GENERATOR_DETAILS *mSupportedClockGeneratorT,
+ IN UINT8 SecondarySmbus
+ )
+{
+ EFI_STATUS Status;
+ EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
+ UINT8 Buffer[MAX_CLOCK_GENERATOR_BUFFER_LENGTH];
+ UINTN Length;
+ EFI_SMBUS_DEVICE_COMMAND Command;
+ EFI_PEI_SMBUS2_PPI *SmbusPpi;
+ UINT8 SmbErrorsCounter;
+
+ //
+ // Locate SmBus Ppi
+ //
+ Status = (**PeiServices).LocatePpi (
+ PeiServices,
+ &gEfiPeiSmbus2PpiGuid,
+ 0,
+ NULL,
+ &SmbusPpi
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Verify input arguments
+ //
+ ASSERT (ConfigurationTableLength >= 8);
+ ASSERT (ConfigurationTableLength <= MAX_CLOCK_GENERATOR_BUFFER_LENGTH);
+ ASSERT (ClockType < ClockGeneratorMax);
+ ASSERT (ConfigurationTable != NULL);
+
+ //
+ // Init some local vars
+ //
+ SlaveAddress.SmbusDeviceAddress = ClockAddress >> 1;
+ Length = sizeof (Buffer);
+ Command = 0;
+
+ if (SecondarySmbus == TRUE) {
+
+ return (ConfigureClockGeneratorOnSecondarySmbus(PeiServices,
+ SmbusPpi,
+ ClockAddress,
+ ConfigurationTableLength,
+ EnableSpreadSpectrum,
+ mSupportedClockGeneratorT,
+ ConfigurationTable
+ ));
+ } else {
+ //
+ // Not LightningRidge
+ // Read the clock generator on the primary SMBus
+ //
+
+ SmbErrorsCounter = 0;
+
+ do
+ {
+ Status = SmbusPpi->Execute (
+ SmbusPpi,
+ SlaveAddress,
+ Command,
+ EfiSmbusReadBlock,
+ FALSE,
+ &Length,
+ Buffer
+ );
+ if(Status != EFI_SUCCESS)
+ {
+ DEBUG ((EFI_D_ERROR, "SMBUS reading error\n"));
+
+ }
+
+ SmbErrorsCounter ++;
+ }
+ while ((Status != EFI_SUCCESS) && (SmbErrorsCounter < MAX_SMBUS_RETRIES));
+
+ //
+ // Sanity check that the requested clock type is present in our supported clocks table
+ //
+ DEBUG ((DEBUG_INFO, "Expected Clock Generator ID is %x, populated %x\n", mSupportedClockGeneratorT->ClockId, Buffer[7]));
+
+ if (EnableSpreadSpectrum) {
+ Buffer[mSupportedClockGeneratorT->SpreadSpectrumByteOffset] |= mSupportedClockGeneratorT->SpreadSpectrumBitOffset;
+
+ if (ClockType == ClockGeneratorCk420) {
+
+ // Ensure that the clock chip is operating in normal mode.
+ //
+ Buffer[10] &= ~BIT7;
+ }
+ } else {
+ Buffer[mSupportedClockGeneratorT->SpreadSpectrumByteOffset] &= ~(mSupportedClockGeneratorT->SpreadSpectrumBitOffset);
+ }
+
+#ifdef EFI_DEBUG
+ {
+ UINT8 i;
+ DEBUG ((DEBUG_INFO, "SlaveAddress.SmbusDeviceAddress %x: Size =%x\n", SlaveAddress.SmbusDeviceAddress, Length));
+ for (i = 0; i < ConfigurationTableLength; i++) {
+ DEBUG ((DEBUG_INFO, "Default Clock Generator Byte %d: %x\n", i, Buffer[i]));
+ }
+ }
+#endif
+
+ //
+ // Program clock generator, using the platform default values
+ //
+
+ SmbErrorsCounter = 0;
+ do
+ {
+ Command = 0;
+ Status = SmbusPpi->Execute (
+ SmbusPpi,
+ SlaveAddress,
+ Command,
+ EfiSmbusWriteBlock,
+ FALSE,
+ &Length, // &ConfigurationTableLength,
+ Buffer //ConfigurationTable
+ );
+ // ASSERT_EFI_ERROR (Status);
+
+
+ if(Status != EFI_SUCCESS)
+ {
+ DEBUG ((EFI_D_ERROR, "SMBUS writing error\n"));
+ }
+
+ SmbErrorsCounter ++;
+ }
+ while ((Status != EFI_SUCCESS) && (SmbErrorsCounter < MAX_SMBUS_RETRIES));
+
+ //
+ // Dump contents after write
+ //
+#ifdef EFI_DEBUG
+ {
+ UINT8 i;
+ SlaveAddress.SmbusDeviceAddress = ClockAddress >> 1;
+ Length = sizeof (Buffer);
+ Command = 0;
+ Status = SmbusPpi->Execute (
+ SmbusPpi,
+ SlaveAddress,
+ Command,
+ EfiSmbusReadBlock,
+ FALSE,
+ &Length,
+ Buffer
+ );
+
+ for (i = 0; i < ConfigurationTableLength; i++) {
+ DEBUG ((DEBUG_INFO, "Clock Generator Byte %d: %x\n", i, Buffer[i]));
+ }
+ }
+#endif
+
+ return EFI_SUCCESS;
+ } // else (<not Kahuna>)
+}
+
+
+/**
+
+ Configure clock generator on Kahuna
+ Clock gen is on a secondary SMBus
+
+ @param IN EFI_PEI_SERVICES **PeiServices - Pointer to PEI Services table
+ @param IN EFI_PEI_SMBUS2_PPI *SmbusPpi - Pointer to SMBUs services PPI
+ @param IN UINT8 ClockAddress - SMBus address of clock gen
+ @param IN UINT8 *Buffer - Pointer to buffer containing byte stream to send to clock gen
+ @param IN UINTN Length - Number of bytes in buffer
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_INVALID_PARAMETER The function cannot continue due to length is out of bound.
+
+**/
+EFI_STATUS
+ConfigureClockGeneratorOnSecondarySmbus (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SMBUS2_PPI *SmbusPpi,
+ IN UINT8 ClockAddress,
+ IN UINTN ConfigurationTableLength,
+ IN BOOLEAN EnableSpreadSpectrum,
+ IN CLOCK_GENERATOR_DETAILS *mSupportedClockGeneratorT,
+ IN OUT UINT8 *ConfigurationTable
+ )
+{
+ EFI_PEI_STALL_PPI *StallPpi;
+ EFI_STATUS Status;
+ EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
+ EFI_SMBUS_DEVICE_COMMAND SmbusCommand;
+ UINTN SmbusLength;
+ UINT8 SmbusData[MAX_CLOCK_GENERATOR_BUFFER_LENGTH];
+ UINT8 Buffer[MAX_CLOCK_GENERATOR_BUFFER_LENGTH];
+ UINT8 Length;
+
+ ZeroMem (Buffer, sizeof(Buffer));
+
+ if (ConfigurationTableLength > MAX_CLOCK_GENERATOR_BUFFER_LENGTH) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Locate Stall PPI
+ //
+ Status = (**PeiServices).LocatePpi (
+ PeiServices,
+ &gEfiPeiStallPpiGuid,
+ 0,
+ NULL,
+ &StallPpi
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Get length of payload to send to clock gen
+ //
+ Length = (UINT8) ConfigurationTableLength;
+
+ //
+ // Copy the default clock generator data into Buffer
+ //
+ CopyMem ((VOID*)Buffer, ConfigurationTable, Length);
+
+ //
+ // Set spread spectrum bit in Buffer or clear it?
+ //
+ if (EnableSpreadSpectrum) {
+ Buffer[mSupportedClockGeneratorT->SpreadSpectrumByteOffset] |= mSupportedClockGeneratorT->SpreadSpectrumBitOffset;
+
+ if (mSupportedClockGeneratorT->ClockType == ClockGeneratorCk420) {
+
+ //
+ // Ensure that the clock chip is operating in normal mode.
+ //
+ Buffer[10] &= ~BIT7;
+ }
+ } else {
+ Buffer[mSupportedClockGeneratorT->SpreadSpectrumByteOffset] &= ~(mSupportedClockGeneratorT->SpreadSpectrumBitOffset);
+ }
+
+ //
+ // Now encapsulate the data for a Write Block command to the clock gen
+ // as the payload in a Write Block command to the SMBus bridge
+ //
+ // Segment address = 0xF2, this becomes slave address
+ // Slave address (clock gen) = ClockAddress, this becomes slave command
+ //
+ SlaveAddress.SmbusDeviceAddress = (0xF2 >> 1);
+ SmbusCommand = ClockAddress;
+
+ //
+ // Set byte index in clock gen to start with, always 0
+ //
+ SmbusData[0] = 0;
+
+ //
+ // Set byte count clock gen wants to see
+ //
+ SmbusData[1] = (UINT8) Length;
+
+ //
+ // Payload byte count for SMBus bridge
+ //
+ SmbusLength = Length + 2;
+ if (SmbusLength > MAX_CLOCK_GENERATOR_BUFFER_LENGTH) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Copy the clock gen data to the SMBus buffer
+ //
+ CopyMem ((VOID *)(((UINT8*)SmbusData) + 2), (VOID *)Buffer, Length);
+
+ //
+ // Use EfiSmbusWriteBlock to communicate with clock gen
+ //
+ Status = SmbusPpi->Execute( SmbusPpi,
+ SlaveAddress,
+ SmbusCommand,
+ EfiSmbusWriteBlock,
+ FALSE,
+ &SmbusLength,
+ &SmbusData );
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
new file mode 100644
index 0000000000..cbb5d53d98
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
@@ -0,0 +1,40 @@
+## @file
+#
+# @copyright
+# Copyright 2013 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformClocksLib
+ FILE_GUID = 09C4033A-CCD5-45BE-8846-BC7E4536489D
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PlatformClocksLib | PEIM
+
+[Sources]
+ PlatformClocksLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ DebugLib
+ HobLib
+
+[Protocols]
+
+[Guids]
+
+[Ppis]
+ gEfiPeiSmbus2PpiGuid
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c
new file mode 100644
index 0000000000..2169b3fadd
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c
@@ -0,0 +1,73 @@
+/** @file
+ Platform CMOS Access Library.
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/IoLib.h>
+#include <Library/PlatformCmosAccessLib.h>
+#include <Platform.h>
+#include <Uefi.h>
+#include <PiPei.h>
+#include <Library/PchInfoLib.h>
+#include <Register/PchRegsPcr.h>
+#include <Library/PeiServicesLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <Library/DebugLib.h>
+
+/**
+ Return the platform CMOS entries.
+
+ @param [out] EnryCount Number of platform CMOS entries.
+
+ @return Platform CMOS entries.
+**/
+CMOS_ENTRY *
+EFIAPI
+PlatformCmosGetEntry (
+ OUT UINTN *EntryCount
+ )
+{
+
+ *EntryCount = 0;
+ return NULL;
+}
+
+
+/**
+ Return the NMI enable status.
+**/
+
+BOOLEAN
+EFIAPI
+PlatformCmosGetNmiState (
+ VOID
+ )
+{
+ volatile UINT32 Data32;
+ BOOLEAN Nmi;
+ Data32 = 0;
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return FALSE;
+ }
+
+ //
+ // Preserve NMI bit setting
+ //
+
+ if ((DynamicSiLibraryPpi->ReadNmiEn ())& B_PCH_IO_NMI_EN_NMI_EN) {
+ Nmi = TRUE;
+ }
+ else
+ Nmi = FALSE;
+
+ return Nmi;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
new file mode 100644
index 0000000000..c3d7532409
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
@@ -0,0 +1,45 @@
+## @file
+# Library producing CMOS access functionalities are relevant to platform.
+#
+# @copyright
+# Copyright 2015 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformCmosAccessLib
+ FILE_GUID = f4d9e039-d8c9-4981-a504-7e91715efbc5
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PlatformCmosAccessLib | PEIM
+
+[Sources]
+ PlatformCmosAccessLib.c
+
+[LibraryClasses]
+ DebugLib
+ IoLib
+ PeiServicesLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ BoardModulePkg/BoardModulePkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Ppis]
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Guids]
+ gPlatformGpioInitDataGuid
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c
new file mode 100644
index 0000000000..fa695358bf
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c
@@ -0,0 +1,203 @@
+/** @file
+ Platform Hooks file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Library/IoLib.h>
+#include <Library/PciLib.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Include/SioRegs.h>
+
+UINT8
+IsSimPlatform (VOID)
+{
+ return 0;
+}
+
+/**
+
+ Read Aspeed AHB register.
+
+ @param RegIndex: register index of Aspeed.
+
+ @retval value of register.
+
+**/
+UINT32
+ReadAHBDword (
+ UINT32 RegIndex
+ )
+{
+ UINT8 bValue;
+ UINT32 rdValue = 0;
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, REG_LOGICAL_DEVICE);
+ IoWrite8 (0xED, 0);//short delay.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, ASPEED2500_SIO_SMI);
+ IoWrite8 (0xED, 0);//short delay.
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0x30);
+ IoWrite8 (0xED, 0);//short delay.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, 1);
+ IoWrite8 (0xED, 0);//short delay.
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf8);
+ bValue = IoRead8(ASPEED2500_SIO_DATA_PORT);
+ bValue &= 0xfc;
+ bValue |= 2; // 4 byte window.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, bValue);
+ IoWrite8 (0xED, 0);//short delay.
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf0);
+ IoWrite8 (0xED, 0);//short delay.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, (UINT8)((RegIndex >> 24)& 0xff));
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf1);
+ IoWrite8 (0xED, 0);//short delay.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, (UINT8)((RegIndex >> 16)& 0xff));
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf2);
+ IoWrite8 (0xED, 0);//short delay.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, (UINT8)((RegIndex >> 8) & 0xff));
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf3);
+ IoWrite8 (0xED, 0);//short delay.
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, (UINT8)((RegIndex )& 0xff));
+
+ // trigger read
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xfe);
+ IoRead8 (ASPEED2500_SIO_DATA_PORT);
+
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf4);
+ rdValue += IoRead8 (ASPEED2500_SIO_DATA_PORT);
+ rdValue <<= 8;
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf5);
+ rdValue += IoRead8 (ASPEED2500_SIO_DATA_PORT);
+ rdValue <<= 8;
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf6);
+ rdValue += IoRead8 (ASPEED2500_SIO_DATA_PORT);
+ rdValue <<= 8;
+
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, 0xf7);
+ rdValue += IoRead8 (ASPEED2500_SIO_DATA_PORT);
+
+
+ return rdValue;
+
+}
+
+/**
+ * Checks for the presence of ASPEED SIO
+ * @return TRUE if its present. FALSE if not.
+ */
+BOOLEAN
+IsAspeedPresent (
+ VOID
+ )
+{
+ BOOLEAN PresenceStatus = FALSE;
+ UINT32 DeviceID;
+
+ //
+ //ASPEED AST2500/AST2600
+ //
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, ASPEED2500_SIO_UNLOCK);
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, ASPEED2500_SIO_UNLOCK);
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, REG_LOGICAL_DEVICE);
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, ASPEED2500_SIO_UART1);
+ if (IoRead8 (ASPEED2500_SIO_DATA_PORT) == ASPEED2500_SIO_UART1) {
+ //
+ //right now, maybe it is ASPEED. to detect the device ID.
+ //
+ DeviceID = ReadAHBDword (SCU7C);
+ //
+ //There is a Aspeed card need to support as well. it's type is AST2500 A1 EVB.
+ //
+ //AST2300-A0 0x01000003
+ //AST2300-A1 0x01010303
+ //AST1300-A1 0x01010003
+ //AST1050-A1 0x01010203
+ //AST2400-A0 0x02000303
+ //AST2400-A1 0x02010303
+ //AST1400-A1 0x02010103
+ //AST1250-A1 0x02010303
+ //AST2500-A0 0x04000303
+ //AST2510-A0 0x04000103
+ //AST2520-A0 0x04000203
+ //AST2530-A0 0x04000403
+ //AST2500-A1 0x04010303
+ //AST2510-A1 0x04010103
+ //AST2520-A1 0x04010203
+ //AST2530-A1 0x04010403
+ //
+ if ((DeviceID & 0xff0000ff) == 0x04000003) {
+ PresenceStatus = TRUE;
+ }
+ }
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, ASPEED2500_SIO_LOCK);
+ return PresenceStatus;
+}
+
+/**
+ * Checks for the presence of Nuvoton SIO
+ * @return TRUE if its present. FALSE if not.
+ */
+BOOLEAN
+IsNuvotonPresent (
+ VOID
+ )
+{
+ BOOLEAN PresenceStatus = FALSE;
+
+ //
+ // Nuvoton NCT5104D
+ //
+ IoWrite8 (NCT5104D_SIO_INDEX_PORT, NCT5104D_ENTER_THE_EXTENDED_FUNCTION_MODE);
+ IoWrite8 (NCT5104D_SIO_INDEX_PORT, NCT5104D_ENTER_THE_EXTENDED_FUNCTION_MODE);
+ IoWrite8 (NCT5104D_SIO_INDEX_PORT, NCT5104D_CHIP_ID_REG);
+ if (IoRead8 (NCT5104D_SIO_DATA_PORT) == NCT5104D_CHIP_ID) {
+ PresenceStatus = TRUE;
+ }
+ return PresenceStatus;
+}
+
+/**
+ * Checks for the presence of the following SIO:
+ * -ASPEED AST2500
+ * -Nuvoton NCT5104D
+ *
+ * @return An UINT32 with the corresponding bit set for each SIO.
+ * -ASPEED_EXIST BIT4
+ * -NCT5104D_EXIST BIT3
+ * -PC8374_EXIST BIT1
+ * -PILOTIV_EXIST BIT0
+ */
+UINT32
+IsSioExist (
+ VOID
+ )
+{
+ UINT32 SioExit = 0;
+
+ if (IsAspeedPresent ()) {
+ SioExit |= ASPEED_EXIST;
+ }
+
+ if (IsNuvotonPresent ()) {
+ SioExit |= NCT5104D_EXIST;
+ }
+
+ DEBUG((DEBUG_INFO, "[SIO] Current system SIO exist bit:%x \n", SioExit));
+
+ return SioExit;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf
new file mode 100644
index 0000000000..c1b18c4511
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf
@@ -0,0 +1,28 @@
+## @file
+#
+# @copyright
+# Copyright 2014 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformHooksLib
+ FILE_GUID = 44497B44-55D0-48b2-8BF8-DDC633C52BF6
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PlatformHooksLib
+
+[Sources]
+ PlatformHooks.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ PciLib
+ BaseLib
+ PciSegmentLib
+ BaseMemoryLib
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c
new file mode 100644
index 0000000000..fc466c1bda
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c
@@ -0,0 +1,88 @@
+/** @file
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Protocol/PciIo.h>
+#include <Library/PlatformOpromPolicyLib.h>
+
+/**
+ Decide if BIOS embdded option roms should be loaded for a certain PCI device.
+
+ @param PciIo PCI device to return the ROM image for.
+
+ @retval TRUE BIOS embedded option roms should not be run for the PCI device.
+ @retval FALSE BIOS embedded option roms could be run for the PCI device.
+**/
+
+BOOLEAN
+PlatformOpromLoadDevicePolicy (
+ IN EFI_PCI_IO_PROTOCOL *PciIo
+ )
+{
+ return TRUE;
+}
+
+/**
+ For devices that support multiple option roms like FCoE, PXE, iSCSI etc., this function decides if one of these BIOS embdded option roms should be loaded for a certain PCI device based on platform choices.
+
+ @param PciHandle PCI device to return the ROM image for.
+ @param TableIndex The index pointing to the option rom in the platform option rom table for the PCI device.
+
+ @retval FALSE The specific BIOS embedded option rom should not be run for the PCI device.
+ @retval TRUE The specific BIOS embedded option rom could be run for a certain PCI device.
+**/
+
+OPROM_LOAD_POLICY
+PlatformOpromLoadTypePolicy (
+ IN EFI_HANDLE PciHandle,
+ IN UINTN TableIndex
+ )
+{
+ return INCLUSIVE_LOAD;
+}
+
+/**
+ Decide if a PCIe device option rom should be dispacthed.
+
+ @param PciHandle PCI device handle.
+
+ @retval FALSE The specific PCIe option rom should not be dispatched for the PCI device.
+ @retval TRUE The specific PCIe option rom could be dispatched for a certain PCI device.
+
+**/
+
+BOOLEAN
+PlatformOpromDispatchPolicy (
+ IN EFI_HANDLE DeviceHandle
+)
+{
+ return TRUE;
+}
+
+
+/**
+ Enable the legacy console redirection before dispatch the legacy ORPOM or disable the legacy console redirection after dispatch
+ the legacy ORPOM based on setup option and SOL status.
+
+ @param Mode Subfunction.
+ @param CheckIsAhciRom If the device is legacy Ahci device.
+
+ @retval
+
+**/
+
+VOID
+PlatformOpromLegacyCRPolicy (
+ IN UINTN Mode,
+ IN BOOLEAN CheckIsAhciRom
+)
+{
+
+ return;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
new file mode 100644
index 0000000000..7b2f88cb32
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
@@ -0,0 +1,29 @@
+## @file
+#
+# @copyright
+# Copyright 2015 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformOpromPolicyLib
+ FILE_GUID = 9FFE7727-A322-4957-BC66-76E25D85A069
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PlatformOpromPolicyLib|DXE_DRIVER
+
+#
+# VALID_ARCHITECTURES = X64
+#
+
+[Sources]
+ PlatformOpromPolicyLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ DebugLib
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c
new file mode 100644
index 0000000000..abe4f2872e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c
@@ -0,0 +1,81 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/PlatformSetupVariableSyncLib.h>
+
+
+/*++
+ Description:
+
+ This function will parse the variable hob and find three vairables:
+ RP variable
+ PC common variable
+ PC generation variable
+ This is used to sync Pc variable to RP variable value
+
+ Arguments:
+ PeiServices - PeiServices
+ Header - VARIABLE_STORE_HEADER
+ CreateHobDataForRpDefaults - will create a hob for RP defaults,
+ this is used in normal post case,
+ cannot be used in specicfic hob event
+
+
+ Returns:
+
+ EFI_SUCCESS - Sync to RP variable Success
+ Other -Sync to RP variable Failure
+
+
+ --*/
+
+EFI_STATUS SyncSetupVariable (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID* Header,
+ IN BOOLEAN CreateHobDataForRpDefaults
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+
+
+ return Status;
+
+}
+
+
+
+/*++
+Description:
+
+ This function finds the matched default data and create GUID hob only for RP variable .
+ This is used to sync Pc variable to RP variable value
+
+Arguments:
+
+ DefaultId - Specifies the type of defaults to retrieve.
+ BoardId - Specifies the platform board of defaults to retrieve.
+
+Returns:
+
+ EFI_SUCCESS - The matched default data is found.
+ EFI_NOT_FOUND - The matched default data is not found.
+ EFI_OUT_OF_RESOURCES - No enough resource to create HOB.
+
+--*/
+
+EFI_STATUS
+CreateRPVariableHob (
+ IN UINT16 DefaultId,
+ IN UINT16 BoardId
+ ){
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ return Status;
+
+ }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
new file mode 100644
index 0000000000..a65305b1ea
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
@@ -0,0 +1,28 @@
+## @file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformSetupVariableSyncLibNull
+ FILE_GUID = 260C4506-F632-4210-ABB8-6951C2D27AD1
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PlatformSetupVariableSyncLibNull|PEIM PEI_CORE
+
+[Sources]
+ PlatformSetupVariableSyncLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+ HobLib
+ PeiServicesTablePointerLib
+ PeiServicesLib
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c
new file mode 100644
index 0000000000..dd1ec54051
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c
@@ -0,0 +1,55 @@
+/** @file
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Library/IoLib.h>
+
+
+
+
+/*++
+Description:
+
+ This function is a hook for PlatformVariableInitPeiEntry
+
+--*/
+VOID PlatformVariableHookForEntry(
+ VOID
+){
+
+
+}
+
+
+/*++
+Description:
+
+ This function allow platform to generate variable hob base on different event.
+
+Arguments:
+ IN VOID *Interface -point to EFI_PEI_READ_ONLY_VARIABLE2_PPI
+ IN OUT UINT8 *phobdata, -pont to hob data
+ IN OUT UINT16 *pDefaultId -pointer to defautlID
+
+Returns:
+ TRUE:platform have its own variable hob that need be createn
+ FALSE:platform don;t need to create variable hob in this case
+
+
+--*/
+BOOLEAN PlatformVariableHookForHobGeneration(
+ IN VOID *Interface,
+ IN OUT UINT8 *phobdata,
+ IN OUT UINT16 *pDefaultId
+){
+
+
+
+ return FALSE;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
new file mode 100644
index 0000000000..0b2c5ca795
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
@@ -0,0 +1,24 @@
+## @file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformVariableHookLibNull
+ FILE_GUID = 8DAB8601-7FE8-4a1d-A314-09F7D3789C5A
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PlatformVariableHookLibNull
+[sources]
+ PlatformVariableHookLibNull.c
+
+[LibraryClasses]
+ BaseLib
+ IoLib
+
+[Packages]
+ MdePkg/MdePkg.dec
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c
new file mode 100644
index 0000000000..d12c253846
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c
@@ -0,0 +1,446 @@
+/** @file
+ Read FFS Library
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/DebugLib.h>
+#include <Uefi/UefiBaseType.h>
+#include <Library/BaseMemoryLib.h>
+#include <Pi/PiFirmwareFile.h>
+#include <Library/ReadFfsLib.h>
+
+//
+//EFI_FIRMWARE_FILE_SYSTEM3_GUID indicates support for FFS_ATTRIB_LARGE_SIZE
+//And thus support for files 16MB or larger.
+//
+UINT8 *
+PreMemReadFFSFile (
+ IN EFI_FIRMWARE_VOLUME_HEADER* FwVolHeader,
+ IN EFI_GUID FFSGuid,
+ IN UINT32 FFSDataSize,
+ IN BOOLEAN skipheader
+ )
+/*++
+
+Routine Description:
+
+ Read FFS file from specified FV in PreMem phase
+
+Arguments:
+
+ FwVolHeader - FV Base Address
+
+ FFSGuid - FFS to find & Read
+
+ FFSDataSize - Data size to read.If this value equal 0, will read the whole FFS size
+
+ skipheader - TRUE: skip to read the ffs and first section header,read from data directly, for one data section only ffs
+ FALSE:read from header
+
+Returns:
+
+ None
+
+--*/
+{
+ EFI_FFS_FILE_HEADER *ffsHdr;
+ UINT64 FvSize;
+ UINT32 FileOccupiedSize;
+ UINT32 FFSDataOffset;
+ EFI_FIRMWARE_VOLUME_EXT_HEADER *FwVolExtHeader;
+ UINT32 FFSSize = 0;
+
+ FvSize = 0;
+ FFSDataOffset = 0;
+ if (FwVolHeader->ExtHeaderOffset != 0) {
+ //
+ // Searching for files starts on an 8 byte aligned boundary after the end of the Extended Header if it exists.
+ //
+ FwVolExtHeader = (EFI_FIRMWARE_VOLUME_EXT_HEADER *) ((UINTN)FwVolHeader + FwVolHeader->ExtHeaderOffset );
+ ffsHdr = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolExtHeader + FwVolExtHeader->ExtHeaderSize);
+ } else {
+ ffsHdr = (EFI_FFS_FILE_HEADER*)(((UINT8 *) FwVolHeader)+ FwVolHeader->HeaderLength);
+ }
+ ffsHdr = (EFI_FFS_FILE_HEADER *) ALIGN_POINTER (ffsHdr, 8);
+
+ if(FwVolHeader->FvLength == 0xFFFFFFFFFFFFFFFF) return NULL;
+
+ FvSize = (UINTN)ffsHdr-(UINTN)FwVolHeader;
+ while((FvSize < FwVolHeader->FvLength)&&((UINTN)ffsHdr <((UINTN)FwVolHeader+ (UINTN)FwVolHeader->FvLength))){
+ if(CompareGuid (&ffsHdr->Name, &FFSGuid)) break;
+
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FileOccupiedSize = FFS_FILE2_SIZE (ffsHdr) ;
+ } else {
+ FileOccupiedSize = FFS_FILE_SIZE (ffsHdr) ;
+ }
+
+ FvSize+= FileOccupiedSize;
+ ffsHdr = (EFI_FFS_FILE_HEADER *)((UINT8 *)ffsHdr + FileOccupiedSize);
+ ffsHdr = (EFI_FFS_FILE_HEADER *) ALIGN_POINTER (ffsHdr, 8);
+ }
+
+ if (FvSize < FwVolHeader->FvLength) {
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FileOccupiedSize = FFS_FILE2_SIZE (ffsHdr) ;
+ } else {
+ FileOccupiedSize = FFS_FILE_SIZE (ffsHdr) ;
+ }
+ FFSSize = FileOccupiedSize;
+
+ if(FFSDataSize == 0)
+ FFSDataSize= FFSSize;
+
+ if(skipheader){
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FFSDataOffset = sizeof(EFI_FFS_FILE_HEADER2) + sizeof(EFI_COMMON_SECTION_HEADER2);
+ } else {
+ FFSDataOffset = sizeof(EFI_FFS_FILE_HEADER) + sizeof(EFI_COMMON_SECTION_HEADER);
+ }
+ if(FFSDataSize == 0) {
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FFSDataSize = FFSDataSize - sizeof(EFI_FFS_FILE_HEADER2) - sizeof(EFI_COMMON_SECTION_HEADER2);
+ } else {
+ FFSDataSize = FFSDataSize - sizeof(EFI_FFS_FILE_HEADER) - sizeof(EFI_COMMON_SECTION_HEADER);
+ }
+ }
+ }
+ }
+
+ return (UINT8 *)ffsHdr + FFSDataOffset;
+}
+
+EFI_STATUS
+ReadFFSFile (
+ IN EFI_FIRMWARE_VOLUME_HEADER* FwVolHeader,
+ IN EFI_GUID FFSGuid,
+ IN UINT32 FFSDataSize,
+ IN OUT VOID *FFSData,
+ OUT UINT32 *FFSSize,
+ IN BOOLEAN skipheader
+ )
+/*++
+
+Routine Description:
+
+ Read FFS file from FV
+
+Arguments:
+
+ FwVolHeader - FV Base Address
+
+ FFSGuid - FFS to find & Read
+
+ FFSDataSize - Data size to read.If this value equal 0, will read the whole FFS size
+
+ FFSData - Pointer to buffer for read.
+
+ FFSSize - FFS file size FYI for caller.
+
+ skipheader - TRUE: skip to read the ffs and first section header,read from data directly, for one data section only ffs
+ FALSE:read from header
+
+Returns:
+
+ None
+
+--*/
+{
+ EFI_FFS_FILE_HEADER *ffsHdr;
+ UINT64 FvSize;
+ UINT32 FileOccupiedSize;
+ UINT32 FFSDataOffset;
+ EFI_STATUS Status;
+ EFI_FIRMWARE_VOLUME_EXT_HEADER *FwVolExtHeader;
+
+ Status = EFI_NOT_FOUND;
+ *FFSSize = 0;
+ FvSize = 0;
+ FFSDataOffset = 0;
+ if (FwVolHeader->ExtHeaderOffset != 0) {
+ //
+ // Searching for files starts on an 8 byte aligned boundary after the end of the Extended Header if it exists.
+ //
+ FwVolExtHeader = (EFI_FIRMWARE_VOLUME_EXT_HEADER *) ((UINTN)FwVolHeader + FwVolHeader->ExtHeaderOffset );
+ ffsHdr = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolExtHeader + FwVolExtHeader->ExtHeaderSize);
+ } else {
+ ffsHdr = (EFI_FFS_FILE_HEADER*)(((UINT8 *) FwVolHeader)+ FwVolHeader->HeaderLength);
+ }
+ ffsHdr = (EFI_FFS_FILE_HEADER *) ALIGN_POINTER (ffsHdr, 8);
+
+ if(FwVolHeader->FvLength == 0xFFFFFFFFFFFFFFFF) {
+ return EFI_VOLUME_CORRUPTED;
+ }
+
+ FvSize = (UINTN)ffsHdr-(UINTN)FwVolHeader;
+ while((FvSize < FwVolHeader->FvLength)&&((UINTN)ffsHdr <((UINTN)FwVolHeader+ (UINTN)FwVolHeader->FvLength))){
+ if(CompareGuid (&ffsHdr->Name, &FFSGuid)){
+ Status = EFI_SUCCESS;
+ break;
+ }
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FileOccupiedSize = FFS_FILE2_SIZE (ffsHdr) ;
+ } else {
+ FileOccupiedSize = FFS_FILE_SIZE (ffsHdr) ;
+ }
+
+ FvSize+= FileOccupiedSize;
+ ffsHdr = (EFI_FFS_FILE_HEADER *)((UINT8 *)ffsHdr + FileOccupiedSize);
+ ffsHdr = (EFI_FFS_FILE_HEADER *) ALIGN_POINTER (ffsHdr, 8);
+ }
+
+ if (FvSize < FwVolHeader->FvLength) {
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FileOccupiedSize = FFS_FILE2_SIZE (ffsHdr) ;
+ } else {
+ FileOccupiedSize = FFS_FILE_SIZE (ffsHdr) ;
+ }
+ *FFSSize = FileOccupiedSize;
+
+ if(FFSDataSize == 0) {
+ FFSDataSize= *FFSSize;
+ }
+
+ if(skipheader){
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FFSDataOffset = sizeof(EFI_FFS_FILE_HEADER2) + sizeof(EFI_COMMON_SECTION_HEADER2);
+ } else {
+ FFSDataOffset = sizeof(EFI_FFS_FILE_HEADER) + sizeof(EFI_COMMON_SECTION_HEADER);
+ }
+ if(FFSDataSize == 0) {
+ if (IS_FFS_FILE2 (ffsHdr)) {
+ FFSDataSize = FFSDataSize - sizeof(EFI_FFS_FILE_HEADER2) - sizeof(EFI_COMMON_SECTION_HEADER2);
+ } else {
+ FFSDataSize = FFSDataSize - sizeof(EFI_FFS_FILE_HEADER) - sizeof(EFI_COMMON_SECTION_HEADER);
+ }
+ }
+ }
+
+ CopyMem(FFSData,(UINT8*)ffsHdr + FFSDataOffset,FFSDataSize);
+ }
+ return Status;
+}
+
+BOOLEAN
+NormalHobToCompressHob(IN OUT VOID* hobAddr,IN OUT UINTN* size)
+{
+ UINTN i,j,k;
+ COMPRESS_HOBO_DATA CompressHob;
+ COMPRESS_ITEM Hobitem[MAX_COMPRESS_ITEM];
+ UINT16 TempBuffer[MAX_FFS_BUFFER_SIZE/4];
+ UINTN offset=0;
+ UINTN RemainSize = 0;
+
+ CompressHob.Signature = 0x5A45524F;
+ CompressHob.Count =0;
+ j=0;
+ i=0;
+ RemainSize = (*size % 2) + 2;
+ if(MAX_COMPRESS_ITEM*sizeof(COMPRESS_ITEM)+MAX_FFS_BUFFER_SIZE/4+sizeof(COMPRESS_HOBO_DATA) > MAX_FFS_BUFFER_SIZE) {
+ return FALSE;
+ }
+
+ if((*size) > MAX_FFS_BUFFER_SIZE) {
+ return FALSE;
+ }
+
+ ZeroMem(TempBuffer,MAX_FFS_BUFFER_SIZE/2);
+
+ while(i < (*size - RemainSize)){
+
+ if(j>=MAX_COMPRESS_ITEM) {
+ return FALSE;
+ }
+
+ //search for duplicate array
+ if(*(UINT16*)((UINTN)hobAddr+i)==*(UINT16*)((UINTN)hobAddr+i+2) ){
+
+ for(k=2;(i+k)<(*size- RemainSize);k+=2 ){
+ if(*(UINT16*)((UINTN)hobAddr+i)!=*(UINT16*)((UINTN)hobAddr+i+k)){
+ break;
+ }
+ }
+
+ if(i+k>= *size - (*size % 2)) {
+ k -=2;
+ }
+
+ Hobitem[j].Value = *(UINT16*)((UINTN)hobAddr+i);
+ Hobitem[j].Length =(UINT16) k;
+ Hobitem[j].Type = COMPRESS_DUPLICATE;
+ Hobitem[j].Offset = 0;
+ j++;
+ CompressHob.Count =(UINT32)j;
+ i+=k;
+
+ }
+ else{//single array
+ for(k=2;i+k+2 <= (*size- RemainSize);k+=2){
+ if(offset >= MAX_FFS_BUFFER_SIZE/4) {
+ return FALSE;
+ }
+ TempBuffer[offset]= *(UINT16*)((UINTN)hobAddr+i+k-2);
+ offset +=1;
+ if(*(UINT16*)((UINTN)hobAddr+i+k)==*(UINT16*)((UINTN)hobAddr+i+k+2)){
+ k += 2;
+ break;
+ }
+
+ }
+
+
+ Hobitem[j].Length = (UINT16) k - 2;
+ Hobitem[j].Type = COMPRESS_SINGLE;
+ Hobitem[j].Offset = (UINT16)(offset - (Hobitem[j].Length/2) );
+ Hobitem[j].Value =0;
+ j++;
+ CompressHob.Count =(UINT32)j;
+ i+=k - 2;
+
+ }
+
+ }
+
+ if(j>=MAX_COMPRESS_ITEM) {
+ //not worth to compress
+ return FALSE;
+ }
+
+ //process last one
+ CopyMem((UINT8*)(&TempBuffer[offset]), (UINT8*)((UINTN)hobAddr + *size - RemainSize), RemainSize);
+ Hobitem[j].Length = (UINT16)RemainSize;
+ Hobitem[j].Type = COMPRESS_SINGLE;
+ Hobitem[j].Offset = (UINT16)offset;
+ Hobitem[j].Value =0;
+ j++;
+ CompressHob.Count =(UINT32)j;
+
+ CopyMem(hobAddr,(VOID*)&CompressHob,sizeof(COMPRESS_HOBO_DATA));
+ offset = sizeof(COMPRESS_HOBO_DATA);
+ for(i=0; i < CompressHob.Count;i++){
+ CopyMem((UINT8*)((UINTN)hobAddr+offset),(UINT8*)&Hobitem[i],sizeof(COMPRESS_ITEM));
+ offset += sizeof(COMPRESS_ITEM);
+ if(Hobitem[i].Type == COMPRESS_SINGLE){
+ CopyMem((UINT8*)((UINTN)hobAddr+offset),&TempBuffer[Hobitem[i].Offset],Hobitem[i].Length);
+ offset += Hobitem[i].Length;
+ }
+ }
+
+ *size = offset;
+
+ return TRUE;
+}
+
+BOOLEAN
+CompressHobToNormalHob(IN OUT VOID* hobAddr,OUT UINTN* size)
+{
+ UINTN i;
+ COMPRESS_HOBO_DATA CompressHob ;
+ COMPRESS_ITEM Hobitem[MAX_COMPRESS_ITEM];
+ UINTN offset=0;
+ UINT16 TempBuffer[MAX_FFS_BUFFER_SIZE/4];
+
+ CopyMem((VOID*)&CompressHob,hobAddr,sizeof(COMPRESS_HOBO_DATA));
+
+ if(CompressHob.Signature != 0x5A45524F) {
+ return FALSE;
+ }
+
+ if(CompressHob.Count>MAX_COMPRESS_ITEM) {
+ //not worth to compress
+ return FALSE;
+ }
+
+ if(*size > MAX_FFS_BUFFER_SIZE) {
+ return FALSE;
+ }
+
+ if(MAX_COMPRESS_ITEM*sizeof(COMPRESS_ITEM)+MAX_FFS_BUFFER_SIZE/4+sizeof(COMPRESS_HOBO_DATA) > MAX_FFS_BUFFER_SIZE) {
+ return FALSE;
+ }
+
+ offset = sizeof(COMPRESS_HOBO_DATA);
+ for(i=0; i < CompressHob.Count;i++){
+ CopyMem((VOID*)&Hobitem[i],(UINT8*)((UINTN)hobAddr+offset),sizeof(COMPRESS_ITEM));
+ offset += sizeof(COMPRESS_ITEM);
+ if(Hobitem[i].Type == COMPRESS_SINGLE){
+ CopyMem(&TempBuffer[Hobitem[i].Offset],(UINT8*)((UINTN)hobAddr+offset),Hobitem[i].Length);
+ offset += Hobitem[i].Length;
+ }
+ }
+
+ offset =0;
+ for(i=0; i < CompressHob.Count;i++){
+ if(Hobitem[i].Type ==COMPRESS_DUPLICATE){
+ SetMem16((VOID*)((UINTN)hobAddr+offset),Hobitem[i].Length,Hobitem[i].Value);
+ offset += Hobitem[i].Length;
+ }
+ else if(Hobitem[i].Type ==COMPRESS_SINGLE){
+ CopyMem((UINT8*)((UINTN)hobAddr+offset),&TempBuffer[Hobitem[i].Offset],Hobitem[i].Length);
+ offset += Hobitem[i].Length;
+
+ }
+
+ }
+
+ *size = offset;
+
+ return TRUE;
+}
+
+EFI_STATUS
+ValidateCommonFvHeader (
+ EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader
+ )
+/*++
+
+Routine Description:
+ Check the integrity of firmware volume header
+
+Arguments:
+ FwVolHeader - A pointer to a firmware volume header
+
+Returns:
+ EFI_SUCCESS - The firmware volume is consistent
+ EFI_NOT_FOUND - The firmware volume has corrupted. So it is not an FV
+
+--*/
+{
+ UINT16 *Ptr;
+ UINT16 HeaderLength;
+ UINT16 Checksum;
+
+ //
+ // Verify the header revision, header signature, length
+ // Length of FvBlock cannot be 2**64-1
+ // HeaderLength cannot be an odd number
+ //
+ if ((FwVolHeader->Revision != EFI_FVH_REVISION) ||
+ (FwVolHeader->Signature != EFI_FVH_SIGNATURE) ||
+ (FwVolHeader->FvLength == ((UINTN) -1)) ||
+ ((FwVolHeader->HeaderLength & 0x01) != 0)
+ ) {
+ return EFI_NOT_FOUND;
+ }
+ //
+ // Verify the header checksum
+ //
+ HeaderLength = (UINT16) (FwVolHeader->HeaderLength / 2);
+ Ptr = (UINT16 *) FwVolHeader;
+ Checksum = 0;
+ while (HeaderLength > 0) {
+ Checksum = Checksum + (*Ptr);
+ Ptr++;
+ HeaderLength--;
+ }
+
+ if (Checksum != 0) {
+ return EFI_NOT_FOUND;
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf
new file mode 100644
index 0000000000..94f2cdbb5f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf
@@ -0,0 +1,34 @@
+## @file
+# Read FFS library
+#
+# @copyright
+# Copyright 2014 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = ReadFfsLib
+ FILE_GUID = CD5BD27A-A122-41DE-B277-A258284BF35C
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = ReadFfslib
+
+[Sources]
+ ReadFfsLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+
+[Pcd]
+
+[Protocols]
+
+[Guids]
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h b/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h
new file mode 100644
index 0000000000..77a1bdd849
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h
@@ -0,0 +1,46 @@
+/** @file
+ Header file of NS16550 hardware definition.
+
+ @copyright
+ Copyright 6550 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __NS16550_H_
+#define __NS16550_H_
+
+//
+// ---------------------------------------------
+// UART Register Offsets
+// ---------------------------------------------
+//
+#define BAUD_LOW_OFFSET 0x00
+#define BAUD_HIGH_OFFSET 0x01
+#define IER_OFFSET 0x01
+#define LCR_SHADOW_OFFSET 0x01
+#define FCR_SHADOW_OFFSET 0x02
+#define IR_CONTROL_OFFSET 0x02
+#define FCR_OFFSET 0x02
+#define EIR_OFFSET 0x02
+#define BSR_OFFSET 0x03
+#define LCR_OFFSET 0x03
+#define MCR_OFFSET 0x04
+#define LSR_OFFSET 0x05
+#define MSR_OFFSET 0x06
+
+//
+// ---------------------------------------------
+// UART Register Bit Defines
+// ---------------------------------------------
+//
+#define LSR_TXRDY 0x20
+#define LSR_RXDA 0x01
+#define DLAB 0x01
+
+#define UART_DATA 8
+#define UART_STOP 1
+#define UART_PARITY 0
+#define UART_BREAK_SET 0
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c
new file mode 100644
index 0000000000..28be8147c2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c
@@ -0,0 +1,1023 @@
+/** @file
+ Serial I/O Port library functions with no library constructor/destructor
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Library/IoLib.h>
+#include <Library/PcdLib.h>
+#include <Library/SerialPortLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PciLib.h>
+#include <SioRegs.h>
+#include "Ns16550.h"
+#include <IndustryStandard/Pci22.h>
+#include <Register/PchRegsLpc.h>
+#include <Register/PchRegsPcr.h>
+#include <Register/PchRegsSpi.h>
+#include <Register/PchRegsDmi.h>
+#include <PchReservedResources.h>
+
+//
+// PCH I/O Port Defines
+//
+#define R_PCH_IOPORT_PCI_INDEX 0xCF8
+#define R_PCH_IOPORT_PCI_DATA 0xCFC
+
+#define DEFAULT_PCI_BUS_NUMBER_PCH 0
+
+#define PCI_CF8_ADDR(Bus, Dev, Func, Off) \
+ (((Off) & 0xFF) | (((Func) & 0x07) << 8) | (((Dev) & 0x1F) << 11) | (((Bus) & 0xFF) << 16) | (1 << 31))
+
+#define PCH_LPC_CF8_ADDR(Offset) PCI_CF8_ADDR(DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, PCI_FUNCTION_NUMBER_PCH_LPC, Offset)
+
+//
+// PCI Defintions.
+//
+#define PCI_BRIDGE_32_BIT_IO_SPACE 0x01
+
+#define B_UART_FCR_FIFOE BIT0
+#define B_UART_FCR_FIFO64 BIT5
+#define R_UART_LCR 3
+#define R_UART_LSR 5
+#define B_UART_LSR_RXRDY BIT0
+#define R_UART_MCR 4
+#define B_UART_MCR_RTS BIT1
+#define B_UART_MCR_DTRC BIT0
+#define R_UART_MSR 6
+#define B_UART_MSR_CTS BIT4
+#define B_UART_MSR_DSR BIT5
+#define B_UART_MSR_RI BIT6
+#define B_UART_MSR_DCD BIT7
+#define B_UART_LSR_RXRDY BIT0
+#define B_UART_LSR_TXRDY BIT5
+#define B_UART_LSR_TEMT BIT6
+#define R_UART_BAUD_LOW 0
+#define R_UART_BAUD_HIGH 1
+#define B_UART_LCR_DLAB BIT7
+
+//
+// COM definitions
+//
+#define COM1_BASE 0x3f8
+#define COM2_BASE 0x2f8
+
+UINT32
+IsSioExist (
+ VOID
+ );
+
+typedef struct {
+ UINT8 Index;
+ UINT8 Data;
+} SIO_REG_TABLE;
+
+
+STATIC SIO_REG_TABLE mASPEED2500Table [] = {
+ { REG_LOGICAL_DEVICE, ASPEED2500_SIO_UART1 },
+ { ACTIVATE, 0x01 },
+ { PRIMARY_INTERRUPT_SELECT, 0x04 }, // COMA IRQ routing
+ { INTERRUPT_TYPE, 0x01 }, // COMA Interrupt Type
+ { REG_LOGICAL_DEVICE, ASPEED2500_SIO_UART2 },
+ { ACTIVATE, 0x01 },
+ { PRIMARY_INTERRUPT_SELECT, 0x03 }, // COMB IRQ routing
+ { INTERRUPT_TYPE, 0x01 } // COMB Interrupt Type
+};
+
+UINT8 gData = 8;
+UINT8 gStop = 1;
+UINT8 gParity = 0;
+UINT8 gBreakSet = 0;
+
+//
+// 4-byte structure for each PCI node in PcdSerialPciDeviceInfo
+//
+typedef struct {
+ UINT8 Device;
+ UINT8 Function;
+ UINT16 PowerManagementStatusAndControlRegister;
+} PCI_UART_DEVICE_INFO;
+
+/**
+
+ Check if Serial Port is enabled or not.
+
+ @param none
+
+ @retval TRUE Serial Port was enabled.
+ @retval FALSE Serial Port was disabled.
+
+**/
+BOOLEAN
+EFIAPI
+IsSerialPortEnabled (
+)
+{
+ return TRUE;
+}
+
+UINT8
+SerialPortReadRegister (
+ UINTN Base,
+ UINTN Offset
+ )
+{
+ if (PcdGetBool (PcdSerialUseMmio)) {
+ return MmioRead8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride));
+ } else {
+ return IoRead8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride));
+ }
+}
+
+UINT8
+SerialPortWriteRegister (
+ UINTN Base,
+ UINTN Offset,
+ UINT8 Value
+ )
+{
+ if (PcdGetBool (PcdSerialUseMmio)) {
+ return MmioWrite8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), Value);
+ } else {
+ return IoWrite8 (Base + Offset * PcdGet32 (PcdSerialRegisterStride), Value);
+ }
+}
+
+/**
+ Update the value of an 32-bit PCI configuration register in a PCI device. If the
+ PCI Configuration register specified by PciAddress is already programmed with a
+ non-zero value, then return the current value. Otherwise update the PCI configuration
+ register specified by PciAddress with the value specified by Value and return the
+ value programmed into the PCI configuration register. All values must be masked
+ using the bitmask specified by Mask.
+
+ @param PciAddress PCI Library address of the PCI Configuration register to update.
+ @param Value The value to program into the PCI Configuration Register.
+ @param Mask Bitmask of the bits to check and update in the PCI configuration register.
+
+ @return The Secondary bus number that is actually programed into the PCI to PCI Bridge device.
+
+**/
+UINT32
+SerialPortLibUpdatePciRegister32 (
+ UINTN PciAddress,
+ UINT32 Value,
+ UINT32 Mask
+ )
+{
+ UINT32 CurrentValue;
+
+ CurrentValue = PciRead32 (PciAddress) & Mask;
+ if (CurrentValue != 0) {
+ return CurrentValue;
+ }
+ return PciWrite32 (PciAddress, Value & Mask);
+}
+
+/**
+ Retrieve the I/O or MMIO base address register for the PCI UART device.
+
+ This function assumes Root Bus Numer is Zero, and enables I/O and MMIO in PCI UART
+ Device if they are not already enabled.
+
+ @return The base address register of the UART device.
+
+**/
+UINTN
+GetSerialRegisterBase (
+ VOID
+ )
+{
+ UINTN PciLibAddress;
+ UINTN BusNumber;
+ UINTN SubordinateBusNumber;
+ UINT32 ParentIoBase;
+ UINT32 ParentIoLimit;
+ UINT16 ParentMemoryBase;
+ UINT16 ParentMemoryLimit;
+ UINT32 IoBase;
+ UINT32 IoLimit;
+ UINT16 MemoryBase;
+ UINT16 MemoryLimit;
+ UINTN SerialRegisterBase;
+ UINTN BarIndex;
+ UINT32 RegisterBaseMask;
+ PCI_UART_DEVICE_INFO *DeviceInfo;
+
+ //
+ // Get PCI Device Info
+ //
+ DeviceInfo = (PCI_UART_DEVICE_INFO *) PcdGetPtr (PcdSerialPciDeviceInfo);
+
+ //
+ // If PCI Device Info is empty, then assume fixed address UART and return PcdSerialRegisterBase
+ //
+ if (DeviceInfo->Device == 0xff) {
+ return (UINTN)PcdGet64 (PcdSerialRegisterBase);
+ }
+
+ //
+ // Assume PCI Bus 0 I/O window is 0-64KB and MMIO windows is 0-4GB
+ //
+ ParentMemoryBase = 0 >> 16;
+ ParentMemoryLimit = 0xfff00000 >> 16;
+ ParentIoBase = 0 >> 12;
+ ParentIoLimit = 0xf000 >> 12;
+
+ //
+ // Enable I/O and MMIO in PCI Bridge
+ // Assume Root Bus Numer is Zero.
+ //
+ for (BusNumber = 0; (DeviceInfo + 1)->Device != 0xff; DeviceInfo++) {
+ //
+ // Compute PCI Lib Address to PCI to PCI Bridge
+ //
+ PciLibAddress = PCI_LIB_ADDRESS (BusNumber, DeviceInfo->Device, DeviceInfo->Function, 0);
+
+ //
+ // Retrieve and verify the bus numbers in the PCI to PCI Bridge
+ //
+ BusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET);
+ SubordinateBusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SUBORDINATE_BUS_REGISTER_OFFSET);
+ if (BusNumber == 0 || BusNumber > SubordinateBusNumber) {
+ return 0;
+ }
+
+ //
+ // Retrieve and verify the I/O or MMIO decode window in the PCI to PCI Bridge
+ //
+ if (PcdGetBool (PcdSerialUseMmio)) {
+ MemoryLimit = PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.MemoryLimit)) & 0xfff0;
+ MemoryBase = PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.MemoryBase)) & 0xfff0;
+
+ //
+ // If PCI Bridge MMIO window is disabled, then return 0
+ //
+ if (MemoryLimit < MemoryBase) {
+ return 0;
+ }
+
+ //
+ // If PCI Bridge MMIO window is not in the address range decoded by the parent PCI Bridge, then return 0
+ //
+ if (MemoryBase < ParentMemoryBase || MemoryBase > ParentMemoryLimit || MemoryLimit > ParentMemoryLimit) {
+ return 0;
+ }
+ ParentMemoryBase = MemoryBase;
+ ParentMemoryLimit = MemoryLimit;
+ } else {
+ IoLimit = PciRead8 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoLimit));
+ if ((IoLimit & PCI_BRIDGE_32_BIT_IO_SPACE ) == 0) {
+ IoLimit = IoLimit >> 4;
+ } else {
+ IoLimit = (PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoLimitUpper16)) << 4) | (IoLimit >> 4);
+ }
+ IoBase = PciRead8 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoBase));
+ if ((IoBase & PCI_BRIDGE_32_BIT_IO_SPACE ) == 0) {
+ IoBase = IoBase >> 4;
+ } else {
+ IoBase = (PciRead16 (PciLibAddress + OFFSET_OF (PCI_TYPE01, Bridge.IoBaseUpper16)) << 4) | (IoBase >> 4);
+ }
+
+ //
+ // If PCI Bridge I/O window is disabled, then return 0
+ //
+ if (IoLimit < IoBase) {
+ return 0;
+ }
+
+ //
+ // If PCI Bridge I/O window is not in the address range decoded by the parent PCI Bridge, then return 0
+ //
+ if (IoBase < ParentIoBase || IoBase > ParentIoLimit || IoLimit > ParentIoLimit) {
+ return 0;
+ }
+ ParentIoBase = IoBase;
+ ParentIoLimit = IoLimit;
+ }
+ }
+
+ //
+ // Compute PCI Lib Address to PCI UART
+ //
+ PciLibAddress = PCI_LIB_ADDRESS (BusNumber, DeviceInfo->Device, DeviceInfo->Function, 0);
+
+ //
+ // Find the first IO or MMIO BAR
+ //
+ RegisterBaseMask = 0xFFFFFFF0;
+ for (BarIndex = 0; BarIndex < PCI_MAX_BAR; BarIndex ++) {
+ SerialRegisterBase = PciRead32 (PciLibAddress + PCI_BASE_ADDRESSREG_OFFSET + BarIndex * 4);
+ if (PcdGetBool (PcdSerialUseMmio) && ((SerialRegisterBase & BIT0) == 0)) {
+ //
+ // MMIO BAR is found
+ //
+ RegisterBaseMask = 0xFFFFFFF0;
+ break;
+ }
+
+ if ((!PcdGetBool (PcdSerialUseMmio)) && ((SerialRegisterBase & BIT0) != 0)) {
+ //
+ // IO BAR is found
+ //
+ RegisterBaseMask = 0xFFFFFFF8;
+ break;
+ }
+ }
+
+ //
+ // MMIO or IO BAR is not found.
+ //
+ if (BarIndex == PCI_MAX_BAR) {
+ return 0;
+ }
+
+ //
+ // Program UART BAR
+ //
+ SerialRegisterBase = SerialPortLibUpdatePciRegister32 (
+ PciLibAddress + PCI_BASE_ADDRESSREG_OFFSET + BarIndex * 4,
+ (UINT32)PcdGet64 (PcdSerialRegisterBase),
+ RegisterBaseMask
+ );
+
+ //
+ // Verify that the UART BAR is in the address range decoded by the parent PCI Bridge
+ //
+ if (PcdGetBool (PcdSerialUseMmio)) {
+ if (((SerialRegisterBase >> 16) & 0xfff0) < ParentMemoryBase || ((SerialRegisterBase >> 16) & 0xfff0) > ParentMemoryLimit) {
+ return 0;
+ }
+ } else {
+ if ((SerialRegisterBase >> 12) < ParentIoBase || (SerialRegisterBase >> 12) > ParentIoLimit) {
+ return 0;
+ }
+ }
+
+ //
+ // Enable I/O and MMIO in PCI UART Device if they are not already enabled
+ //
+ PciOr16 (
+ PciLibAddress + PCI_COMMAND_OFFSET,
+ PcdGetBool (PcdSerialUseMmio) ? EFI_PCI_COMMAND_MEMORY_SPACE : EFI_PCI_COMMAND_IO_SPACE
+ );
+
+ //
+ // Force D0 state if a Power Management and Status Register is specified
+ //
+ if (DeviceInfo->PowerManagementStatusAndControlRegister != 0x00) {
+ if ((PciRead16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister) & (BIT0 | BIT1)) != 0x00) {
+ PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16)~(BIT0 | BIT1));
+ //
+ // If PCI UART was not in D0, then make sure FIFOs are enabled, but do not reset FIFOs
+ //
+ SerialPortWriteRegister (SerialRegisterBase, FCR_OFFSET, (UINT8)(PcdGet8 (PcdSerialFifoControl) & (B_UART_FCR_FIFOE | B_UART_FCR_FIFO64)));
+ }
+ }
+
+ //
+ // Get PCI Device Info
+ //
+ DeviceInfo = (PCI_UART_DEVICE_INFO *) PcdGetPtr (PcdSerialPciDeviceInfo);
+
+ //
+ // Enable I/O or MMIO in PCI Bridge
+ // Assume Root Bus Numer is Zero.
+ //
+ for (BusNumber = 0; (DeviceInfo + 1)->Device != 0xff; DeviceInfo++) {
+ //
+ // Compute PCI Lib Address to PCI to PCI Bridge
+ //
+ PciLibAddress = PCI_LIB_ADDRESS (BusNumber, DeviceInfo->Device, DeviceInfo->Function, 0);
+
+ //
+ // Enable the I/O or MMIO decode windows in the PCI to PCI Bridge
+ //
+ PciOr16 (
+ PciLibAddress + PCI_COMMAND_OFFSET,
+ PcdGetBool (PcdSerialUseMmio) ? EFI_PCI_COMMAND_MEMORY_SPACE : EFI_PCI_COMMAND_IO_SPACE
+ );
+
+ //
+ // Force D0 state if a Power Management and Status Register is specified
+ //
+ if (DeviceInfo->PowerManagementStatusAndControlRegister != 0x00) {
+ if ((PciRead16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister) & (BIT0 | BIT1)) != 0x00) {
+ PciAnd16 (PciLibAddress + DeviceInfo->PowerManagementStatusAndControlRegister, (UINT16)~(BIT0 | BIT1));
+ }
+ }
+
+ BusNumber = PciRead8 (PciLibAddress + PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET);
+ }
+
+ return SerialRegisterBase;
+}
+
+
+/**
+
+ GC_TODO: add routine description
+
+ @param None
+
+ @retval None
+
+**/
+VOID
+InitializeSio (
+ VOID
+ )
+{
+
+ UINT32 SioExist;
+ UINT32 SioEnable;
+ UINT32 Index;
+ UINT32 Decode;
+ UINT32 Enable;
+ UINT32 SpiConfigValue;
+
+ //
+ // Enable LPC decode
+ // Set COMA/COMB base
+ //
+ Decode = ((V_LPC_CFG_IOD_COMA_3F8 << N_LPC_CFG_IOD_COMA) | (V_LPC_CFG_IOD_COMB_2F8 << N_LPC_CFG_IOD_COMB));
+ SpiConfigValue = MmioRead32 (PCH_PCR_ADDRESS (PID_ESPISPI, R_PCH_PCR_SPI_CONF_VALUE));
+ if (SpiConfigValue & B_ESPI_ENABLE_STRAP) {
+ Enable = ( B_LPC_CFG_IOE_ME2 | B_LPC_CFG_IOE_SE | B_LPC_CFG_IOE_ME1 \
+ | B_LPC_CFG_IOE_CBE | B_LPC_CFG_IOE_CAE);
+ } else {
+ Enable = ( B_LPC_CFG_IOE_ME2 | B_LPC_CFG_IOE_SE | B_LPC_CFG_IOE_ME1 \
+ | B_LPC_CFG_IOE_KE | B_LPC_CFG_IOE_CBE | B_LPC_CFG_IOE_CAE);
+ }
+ IoWrite32 (R_PCH_IOPORT_PCI_INDEX, (UINT32) (PCH_LPC_CF8_ADDR (R_LPC_CFG_IOD)));
+
+ IoWrite32 (R_PCH_IOPORT_PCI_DATA, Decode | (Enable << 16));
+
+ MmioWrite16 (PCH_PCR_ADDRESS(PID_DMI, R_PCH_DMI_PCR_LPCIOD), (UINT16)Decode);
+ MmioWrite16 (PCH_PCR_ADDRESS(PID_DMI, R_PCH_DMI_PCR_LPCIOE), (UINT16)Enable);
+
+ SioExist = IsSioExist();
+
+ if ((SioExist & (PILOTIV_EXIST | PC8374_EXIST)) == (PILOTIV_EXIST | PC8374_EXIST) ) {
+ //
+ // Both are there, we use DEFAULT_SIO as debug port anyway
+ //
+ if (DEFAULT_SIO == PILOTIV_EXIST) {
+ SioEnable = PILOTIV_EXIST;
+ } else {
+ SioEnable = PC8374_EXIST;
+ }
+ } else {
+ SioEnable = SioExist;
+ }
+
+ //
+ // ASPEED AST2500/AST2600 UART init.
+ //
+ if (SioEnable == ASPEED_EXIST) {
+ //
+ // Unlock SIO
+ //
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, ASPEED2500_SIO_UNLOCK);
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, ASPEED2500_SIO_UNLOCK);
+
+ //
+ // COM1 & COM2
+ //
+ for (Index = 0; Index < sizeof (mASPEED2500Table)/sizeof (SIO_REG_TABLE); Index++) {
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, mASPEED2500Table[Index].Index);
+ IoWrite8 (ASPEED2500_SIO_DATA_PORT, mASPEED2500Table[Index].Data);
+ }
+
+ //
+ // Lock SIO
+ //
+ IoWrite8 (ASPEED2500_SIO_INDEX_PORT, ASPEED2500_SIO_LOCK);
+ }
+}
+
+/**
+
+ Initialize Serial Port
+
+ The Baud Rate Divisor registers are programmed and the LCR
+ is used to configure the communications format. Hard coded
+ UART config comes from globals in DebugSerialPlatform lib.
+
+ @param None
+
+ @retval None
+
+**/
+RETURN_STATUS
+EFIAPI
+SerialPortInitialize (
+ VOID
+ )
+{
+ UINTN Divisor;
+ UINT8 OutputData;
+ UINT8 Data;
+ UINT16 ComBase;
+
+ ComBase = (UINT16)PcdGet64 (PcdSerialRegisterBase);
+ InitializeSio();
+ //
+ // Some init is done by the platform status code initialization.
+ //
+ //
+ // Map 5..8 to 0..3
+ //
+ Data = (UINT8) (gData - (UINT8) 5);
+
+ //
+ // Calculate divisor for baud generator
+ //
+ Divisor = 115200 / PcdGet32(PcdSerialBaudRate);
+
+ //
+ // Set communications format
+ //
+ OutputData = (UINT8) ((DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data))));
+ IoWrite8 (ComBase + LCR_OFFSET, OutputData);
+
+ //
+ // Configure baud rate
+ //
+ IoWrite8 (ComBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));
+ IoWrite8 (ComBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));
+
+ //
+ // Switch back to bank 0
+ //
+ OutputData = (UINT8) ((~DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data))));
+ IoWrite8 (ComBase + LCR_OFFSET, OutputData);
+
+ return RETURN_SUCCESS;
+}
+
+/**
+ Write data to serial device.
+
+ If the buffer is NULL, then return 0;
+ if NumberOfBytes is zero, then return 0.
+
+ @param Buffer Point of data buffer which need to be writed.
+ @param NumberOfBytes Number of output bytes which are cached in Buffer.
+
+ @retval 0 Write data failed.
+ @retval !0 Actual number of bytes writed to serial device.
+
+**/
+UINTN
+EFIAPI
+SerialPortWrite (
+ IN UINT8 *Buffer,
+ IN UINTN NumberOfBytes
+)
+{
+ UINTN Result;
+ UINT8 Data;
+
+ if ((IsSerialPortEnabled() == FALSE) || (NULL == Buffer)) {
+ return 0;
+ }
+
+ Result = NumberOfBytes;
+
+ while (NumberOfBytes--) {
+ //
+ // Wait for the serail port to be ready.
+ //
+ do {
+ Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
+ } while ((Data & LSR_TXRDY) == 0);
+ IoWrite8 ((UINT16) PcdGet64 (PcdSerialRegisterBase), *Buffer++);
+ }
+
+ return Result;
+}
+
+
+/*
+ Read data from serial device and save the datas in buffer.
+
+ If the buffer is NULL, then return 0;
+ if NumberOfBytes is zero, then return 0.
+
+ @param Buffer Point of data buffer which need to be writed.
+ @param NumberOfBytes Number of output bytes which are cached in Buffer.
+
+ @retval 0 Read data failed.
+ @retval !0 Actual number of bytes raed to serial device.
+
+**/
+UINTN
+EFIAPI
+SerialPortRead (
+ OUT UINT8 *Buffer,
+ IN UINTN NumberOfBytes
+)
+{
+ UINTN Result;
+ UINT8 Data;
+
+ if ((IsSerialPortEnabled() == FALSE) || (NULL == Buffer)) {
+ return 0;
+ }
+
+ Result = NumberOfBytes;
+
+ while (NumberOfBytes--) {
+ //
+ // Wait for the serail port to be ready.
+ //
+ do {
+ Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
+ } while ((Data & LSR_RXDA) == 0);
+
+ *Buffer++ = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase));
+ }
+
+ return Result;
+}
+
+/**
+ Polls a serial device to see if there is any data waiting to be read.
+
+ Polls a serial device to see if there is any data waiting to be read.
+ If there is data waiting to be read from the serial device, then TRUE is returned.
+ If there is no data waiting to be read from the serial device, then FALSE is returned.
+
+ @retval TRUE Data is waiting to be read from the serial device.
+ @retval FALSE There is no data waiting to be read from the serial device.
+
+**/
+BOOLEAN
+EFIAPI
+SerialPortPoll (
+ VOID
+ )
+{
+ UINTN SerialRegisterBase;
+
+ SerialRegisterBase = GetSerialRegisterBase ();
+ if (SerialRegisterBase ==0) {
+ return FALSE;
+ }
+
+ //
+ // Read the serial port status
+ //
+ if ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & B_UART_LSR_RXRDY) != 0) {
+ if (PcdGetBool (PcdSerialUseHardwareFlowControl)) {
+ //
+ // Clear RTS to prevent peer from sending data
+ //
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_MCR) & ~B_UART_MCR_RTS));
+ }
+ return TRUE;
+ }
+
+ if (PcdGetBool (PcdSerialUseHardwareFlowControl)) {
+ //
+ // Set RTS to let the peer send some data
+ //
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, (UINT8)(SerialPortReadRegister (SerialRegisterBase, R_UART_MCR) | B_UART_MCR_RTS));
+ }
+
+ return FALSE;
+}
+
+/**
+ Sets the control bits on a serial device.
+
+ @param Control Sets the bits of Control that are settable.
+
+ @retval RETURN_SUCCESS The new control bits were set on the serial device.
+ @retval RETURN_UNSUPPORTED The serial device does not support this operation.
+ @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly.
+
+**/
+RETURN_STATUS
+EFIAPI
+SerialPortSetControl (
+ IN UINT32 Control
+ )
+{
+ UINTN SerialRegisterBase;
+ UINT8 Mcr;
+
+ //
+ // First determine the parameter is invalid.
+ //
+ if ((Control & (~(EFI_SERIAL_REQUEST_TO_SEND | EFI_SERIAL_DATA_TERMINAL_READY |
+ EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE))) != 0) {
+ return RETURN_UNSUPPORTED;
+ }
+
+ SerialRegisterBase = GetSerialRegisterBase ();
+ if (SerialRegisterBase ==0) {
+ return RETURN_UNSUPPORTED;
+ }
+
+ //
+ // Read the Modem Control Register.
+ //
+ Mcr = SerialPortReadRegister (SerialRegisterBase, R_UART_MCR);
+ Mcr &= (~(B_UART_MCR_DTRC | B_UART_MCR_RTS));
+
+ if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {
+ Mcr |= B_UART_MCR_DTRC;
+ }
+
+ if ((Control & EFI_SERIAL_REQUEST_TO_SEND) == EFI_SERIAL_REQUEST_TO_SEND) {
+ Mcr |= B_UART_MCR_RTS;
+ }
+
+ //
+ // Write the Modem Control Register.
+ //
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, Mcr);
+
+ return RETURN_SUCCESS;
+
+}
+
+/**
+ Retrieve the status of the control bits on a serial device.
+
+ @param Control A pointer to return the current control signals from the serial device.
+
+ @retval RETURN_SUCCESS The control bits were read from the serial device.
+ @retval RETURN_UNSUPPORTED The serial device does not support this operation.
+ @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly.
+
+**/
+RETURN_STATUS
+EFIAPI
+SerialPortGetControl (
+ OUT UINT32 *Control
+ )
+{
+ UINTN SerialRegisterBase;
+ UINT8 Msr;
+ UINT8 Mcr;
+ UINT8 Lsr;
+
+ SerialRegisterBase = GetSerialRegisterBase ();
+ if (SerialRegisterBase ==0) {
+ return RETURN_UNSUPPORTED;
+ }
+
+ *Control = 0;
+
+ //
+ // Read the Modem Status Register.
+ //
+ Msr = SerialPortReadRegister (SerialRegisterBase, R_UART_MSR);
+
+ if ((Msr & B_UART_MSR_CTS) == B_UART_MSR_CTS) {
+ *Control |= EFI_SERIAL_CLEAR_TO_SEND;
+ }
+
+ if ((Msr & B_UART_MSR_DSR) == B_UART_MSR_DSR) {
+ *Control |= EFI_SERIAL_DATA_SET_READY;
+ }
+
+ if ((Msr & B_UART_MSR_RI) == B_UART_MSR_RI) {
+ *Control |= EFI_SERIAL_RING_INDICATE;
+ }
+
+ if ((Msr & B_UART_MSR_DCD) == B_UART_MSR_DCD) {
+ *Control |= EFI_SERIAL_CARRIER_DETECT;
+ }
+
+ //
+ // Read the Modem Control Register.
+ //
+ Mcr = SerialPortReadRegister (SerialRegisterBase, R_UART_MCR);
+
+ if ((Mcr & B_UART_MCR_DTRC) == B_UART_MCR_DTRC) {
+ *Control |= EFI_SERIAL_DATA_TERMINAL_READY;
+ }
+
+ if ((Mcr & B_UART_MCR_RTS) == B_UART_MCR_RTS) {
+ *Control |= EFI_SERIAL_REQUEST_TO_SEND;
+ }
+
+ if (PcdGetBool (PcdSerialUseHardwareFlowControl)) {
+ *Control |= EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE;
+ }
+
+ //
+ // Read the Line Status Register.
+ //
+ Lsr = SerialPortReadRegister (SerialRegisterBase, R_UART_LSR);
+
+ if ((Lsr & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) == (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) {
+ *Control |= EFI_SERIAL_OUTPUT_BUFFER_EMPTY;
+ }
+
+ if ((Lsr & B_UART_LSR_RXRDY) == 0) {
+ *Control |= EFI_SERIAL_INPUT_BUFFER_EMPTY;
+ }
+
+ return RETURN_SUCCESS;
+}
+
+/**
+ Sets the baud rate, receive FIFO depth, transmit/receice time out, parity,
+ data bits, and stop bits on a serial device.
+
+ @param BaudRate The requested baud rate. A BaudRate value of 0 will use the
+ device's default interface speed.
+ On output, the value actually set.
+ @param ReveiveFifoDepth The requested depth of the FIFO on the receive side of the
+ serial interface. A ReceiveFifoDepth value of 0 will use
+ the device's default FIFO depth.
+ On output, the value actually set.
+ @param Timeout The requested time out for a single character in microseconds.
+ This timeout applies to both the transmit and receive side of the
+ interface. A Timeout value of 0 will use the device's default time
+ out value.
+ On output, the value actually set.
+ @param Parity The type of parity to use on this serial device. A Parity value of
+ DefaultParity will use the device's default parity value.
+ On output, the value actually set.
+ @param DataBits The number of data bits to use on the serial device. A DataBits
+ vaule of 0 will use the device's default data bit setting.
+ On output, the value actually set.
+ @param StopBits The number of stop bits to use on this serial device. A StopBits
+ value of DefaultStopBits will use the device's default number of
+ stop bits.
+ On output, the value actually set.
+
+ @retval RETURN_SUCCESS The new attributes were set on the serial device.
+ @retval RETURN_UNSUPPORTED The serial device does not support this operation.
+ @retval RETURN_INVALID_PARAMETER One or more of the attributes has an unsupported value.
+ @retval RETURN_DEVICE_ERROR The serial device is not functioning correctly.
+
+**/
+RETURN_STATUS
+EFIAPI
+SerialPortSetAttributes (
+ IN OUT UINT64 *BaudRate,
+ IN OUT UINT32 *ReceiveFifoDepth,
+ IN OUT UINT32 *Timeout,
+ IN OUT EFI_PARITY_TYPE *Parity,
+ IN OUT UINT8 *DataBits,
+ IN OUT EFI_STOP_BITS_TYPE *StopBits
+ )
+{
+ UINTN SerialRegisterBase;
+ UINT32 SerialBaudRate;
+ UINTN Divisor;
+ UINT8 Lcr;
+ UINT8 LcrData;
+ UINT8 LcrParity;
+ UINT8 LcrStop;
+
+ SerialRegisterBase = GetSerialRegisterBase ();
+ if (SerialRegisterBase ==0) {
+ return RETURN_UNSUPPORTED;
+ }
+
+ //
+ // Check for default settings and fill in actual values.
+ //
+ if (*BaudRate == 0) {
+ *BaudRate = PcdGet32 (PcdSerialBaudRate);
+ }
+ SerialBaudRate = (UINT32) *BaudRate;
+
+ if (*DataBits == 0) {
+ LcrData = (UINT8) (PcdGet8 (PcdSerialLineControl) & 0x3);
+ *DataBits = LcrData + 5;
+ } else {
+ if ((*DataBits < 5) || (*DataBits > 8)) {
+ return RETURN_INVALID_PARAMETER;
+ }
+ //
+ // Map 5..8 to 0..3
+ //
+ LcrData = (UINT8) (*DataBits - (UINT8) 5);
+ }
+
+ if (*Parity == DefaultParity) {
+ LcrParity = (UINT8) ((PcdGet8 (PcdSerialLineControl) >> 3) & 0x7);
+ switch (LcrParity) {
+ case 0:
+ *Parity = NoParity;
+ break;
+
+ case 3:
+ *Parity = EvenParity;
+ break;
+
+ case 1:
+ *Parity = OddParity;
+ break;
+
+ case 7:
+ *Parity = SpaceParity;
+ break;
+
+ case 5:
+ *Parity = MarkParity;
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ switch (*Parity) {
+ case NoParity:
+ LcrParity = 0;
+ break;
+
+ case EvenParity:
+ LcrParity = 3;
+ break;
+
+ case OddParity:
+ LcrParity = 1;
+ break;
+
+ case SpaceParity:
+ LcrParity = 7;
+ break;
+
+ case MarkParity:
+ LcrParity = 5;
+ break;
+
+ default:
+ return RETURN_INVALID_PARAMETER;
+ }
+ }
+
+ if (*StopBits == DefaultStopBits) {
+ LcrStop = (UINT8) ((PcdGet8 (PcdSerialLineControl) >> 2) & 0x1);
+ switch (LcrStop) {
+ case 0:
+ *StopBits = OneStopBit;
+ break;
+
+ case 1:
+ if (*DataBits == 5) {
+ *StopBits = OneFiveStopBits;
+ } else {
+ *StopBits = TwoStopBits;
+ }
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ switch (*StopBits) {
+ case OneStopBit:
+ LcrStop = 0;
+ break;
+
+ case OneFiveStopBits:
+ case TwoStopBits:
+ LcrStop = 1;
+ break;
+
+ default:
+ return RETURN_INVALID_PARAMETER;
+ }
+ }
+
+ //
+ // Calculate divisor for baud generator
+ // Ref_Clk_Rate / Baud_Rate / 16
+ //
+ Divisor = PcdGet32 (PcdSerialClockRate) / (SerialBaudRate * 16);
+ if ((PcdGet32 (PcdSerialClockRate) % (SerialBaudRate * 16)) >= SerialBaudRate * 8) {
+ Divisor++;
+ }
+
+ //
+ // Configure baud rate
+ //
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, B_UART_LCR_DLAB);
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_HIGH, (UINT8) (Divisor >> 8));
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_BAUD_LOW, (UINT8) (Divisor & 0xff));
+
+ //
+ // Clear DLAB and configure Data Bits, Parity, and Stop Bits.
+ // Strip reserved bits from line control value
+ //
+ Lcr = (UINT8) ((LcrParity << 3) | (LcrStop << 2) | LcrData);
+ SerialPortWriteRegister (SerialRegisterBase, R_UART_LCR, (UINT8) (Lcr & 0x3F));
+
+ return RETURN_SUCCESS;
+
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf
new file mode 100644
index 0000000000..df308e412e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf
@@ -0,0 +1,55 @@
+## @file
+#
+# @copyright
+# Copyright 2008 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SerialPortLib
+ FILE_GUID = 15B26F43-A389-4bae-BDE3-4BB0719B7D4F
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SerialPortLib
+ EDK_RELEASE_VERSION = 0x00020000
+ UEFI_SPECIFICATION_VERSION = 0x00020000
+
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF
+#
+
+[Sources.common]
+ SerialPortLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ IntelSiliconPkg/IntelSiliconPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+
+[LibraryClasses]
+ PcdLib
+ PciLib
+ IoLib
+ DebugLib
+ PlatformHooksLib
+
+[FixedPcd.common]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseHardwareFlowControl ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialDetectCable ## SOMETIMES_CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialLineControl ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialPciDeviceInfo ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride ## CONSUMES
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c
new file mode 100644
index 0000000000..b67dafd366
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c
@@ -0,0 +1,867 @@
+/** @file
+ SetCacheMtrr library functions.
+
+ @copyright
+ Copyright 2006 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi.h>
+#include <PiPei.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MtrrLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Guid/SmramMemoryReserve.h>
+
+#include <CpuAndRevisionDefines.h>
+#include <Library/PeiServicesTablePointerLib.h>
+
+#include <Ppi/MpServices.h>
+
+#include <Guid/PlatformInfo.h>
+#include <Guid/MemoryMapData.h>
+#include <Protocol/IioUds.h>
+#include <Register/ArchitecturalMsr.h>
+#include <Register/Cpuid.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <Cpu/CpuIds.h>
+
+#define EFI_MAX_ADDRESS 0xFFFFFFFF
+
+/**
+ Set Cache Mtrr.
+**/
+VOID
+EFIAPI
+SetCacheMtrr (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_PEI_HOB_POINTERS Hob;
+ MTRR_SETTINGS MtrrSetting;
+ UINT64 MemoryBase;
+ UINT64 MemoryLength;
+ UINT64 LowMemoryLength;
+ UINT64 HighMemoryLength;
+ EFI_BOOT_MODE BootMode;
+ EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;
+ UINT64 CacheMemoryLength;
+
+ ///
+ /// Reset all MTRR setting.
+ ///
+ ZeroMem(&MtrrSetting, sizeof(MTRR_SETTINGS));
+
+ ///
+ /// Cache the Flash area as WP to boost performance
+ ///
+ Status = MtrrSetMemoryAttributeInMtrrSettings (
+ &MtrrSetting,
+ (UINTN) PcdGet32 (PcdFlashAreaBaseAddress),
+ (UINTN) PcdGet32 (PcdFlashAreaSize),
+ CacheWriteProtected
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Update MTRR setting from MTRR buffer for Flash Region to be WP to boost performance
+ ///
+ MtrrSetAllMtrrs (&MtrrSetting);
+
+ ///
+ /// Set low to 1 MB. Since 1MB cacheability will always be set
+ /// until override by CSM.
+ /// Initialize high memory to 0.
+ ///
+ LowMemoryLength = 0x100000;
+ HighMemoryLength = 0;
+ ResourceAttribute = (
+ EFI_RESOURCE_ATTRIBUTE_PRESENT |
+ EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
+ EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
+ EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
+ EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
+ EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
+ );
+
+ Status = PeiServicesGetBootMode (&BootMode);
+ ASSERT_EFI_ERROR (Status);
+
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ ResourceAttribute |= EFI_RESOURCE_ATTRIBUTE_TESTED;
+ }
+
+ Status = PeiServicesGetHobList ((VOID **) &Hob.Raw);
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
+ if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) ||
+ ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) &&
+ (Hob.ResourceDescriptor->ResourceAttribute == ResourceAttribute))
+ ) {
+ if (Hob.ResourceDescriptor->PhysicalStart >= 0x100000000ULL) {
+ HighMemoryLength += Hob.ResourceDescriptor->ResourceLength;
+ } else if (Hob.ResourceDescriptor->PhysicalStart >= 0x100000) {
+ LowMemoryLength += Hob.ResourceDescriptor->ResourceLength;
+ }
+ }
+ }
+
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ DEBUG ((DEBUG_INFO, "Memory Length (Below 4GB) = %lx.\n", LowMemoryLength));
+ DEBUG ((DEBUG_INFO, "Memory Length (Above 4GB) = %lx.\n", HighMemoryLength));
+
+ ///
+ /// Assume size of main memory is multiple of 256MB
+ ///
+ MemoryLength = (LowMemoryLength + 0xFFFFFFF) & 0xF0000000;
+ MemoryBase = 0;
+
+ CacheMemoryLength = MemoryLength;
+ ///
+ /// Programming MTRRs to avoid override SPI region with UC when MAX TOLUD Length >= 3.5GB
+ ///
+ if (MemoryLength > 0xDC000000) {
+ CacheMemoryLength = 0xC0000000;
+ Status = MtrrSetMemoryAttributeInMtrrSettings (
+ &MtrrSetting,
+ MemoryBase,
+ CacheMemoryLength,
+ CacheWriteBack
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ MemoryBase = 0xC0000000;
+ CacheMemoryLength = MemoryLength - 0xC0000000;
+ if (MemoryLength > 0xE0000000) {
+ CacheMemoryLength = 0x20000000;
+ Status = MtrrSetMemoryAttributeInMtrrSettings (
+ &MtrrSetting,
+ MemoryBase,
+ CacheMemoryLength,
+ CacheWriteBack
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ MemoryBase = 0xE0000000;
+ CacheMemoryLength = MemoryLength - 0xE0000000;
+ }
+ }
+
+ Status = MtrrSetMemoryAttributeInMtrrSettings (
+ &MtrrSetting,
+ MemoryBase,
+ CacheMemoryLength,
+ CacheWriteBack
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ if (LowMemoryLength != MemoryLength) {
+ MemoryBase = LowMemoryLength;
+ MemoryLength -= LowMemoryLength;
+ Status = MtrrSetMemoryAttributeInMtrrSettings (
+ &MtrrSetting,
+ MemoryBase,
+ MemoryLength,
+ CacheUncacheable
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ ///
+ /// VGA-MMIO - 0xA0000 to 0xC0000 to be UC
+ ///
+ Status = MtrrSetMemoryAttributeInMtrrSettings (
+ &MtrrSetting,
+ 0xA0000,
+ 0x20000,
+ CacheUncacheable
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Update MTRR setting from MTRR buffer
+ ///
+ MtrrSetAllMtrrs (&MtrrSetting);
+
+ return ;
+}
+
+/**
+
+ This function finds the start address and size of control or Block window region in the system.
+
+ @param Host - pointer to sysHost structure on stack
+ @param Memtype - Type of the memory range
+ @param RangeSize - pointer to the variable to store the StartAddress
+ @param RangeSize - pointer to the variable to store RangeSize
+
+ @retval EFI_SUCCESS - success
+ EFI_NOT_FOUND - Region not found.
+
+**/
+EFI_STATUS
+GetMemoryRegionRange(
+ struct SystemMemoryMapHob *systemMemoryMap,
+ UINT16 Memtype,
+ EFI_PHYSICAL_ADDRESS *StartAddress,
+ EFI_PHYSICAL_ADDRESS *RangeSize)
+{
+ UINT8 Index;
+ EFI_STATUS Status = EFI_NOT_FOUND;
+ UINT8 Socket = 0;
+ EFI_PHYSICAL_ADDRESS Limit = 0;
+
+ *RangeSize = 0;
+ *StartAddress = 0;
+
+ for (Socket = 0; Socket < MAX_SOCKET; Socket++) {
+ if (systemMemoryMap->Socket[Socket].SAD[0].Enable == 0) {
+ continue;
+ }
+
+ for (Index = 0; Index < MAX_SAD_RULES; Index++) {
+ if (systemMemoryMap->Socket[Socket].SAD[Index].Enable == 0) {
+ continue;
+ }
+ if (systemMemoryMap->Socket[Socket].SAD[Index].type == Memtype) {
+ if ((*StartAddress == 0) && (Index > 0)) {
+ //Store the start address for the specified range in bytes
+ *StartAddress = (EFI_PHYSICAL_ADDRESS)MultU64x32 ((UINT64)systemMemoryMap->Socket[Socket].SAD[Index-1].Limit, CONVERT_64MB_TO_BYTE);
+ }
+
+ if (MultU64x32((UINT64)systemMemoryMap->Socket[Socket].SAD[Index].Limit, CONVERT_64MB_TO_BYTE) > Limit) {
+ //Store/Update the end address for the specified range in bytes if greater than previous limit
+ Limit = (EFI_PHYSICAL_ADDRESS)MultU64x32 ((UINT64)systemMemoryMap->Socket[Socket].SAD[Index].Limit, CONVERT_64MB_TO_BYTE);
+ }
+ }
+ }
+ }
+
+ if (Limit != 0) {
+ *RangeSize = Limit - *StartAddress;
+ Status = EFI_SUCCESS;
+ }
+
+ return Status;
+}
+
+/**
+
+ MP programming MSR_MCA_ON_NONNEM_CACHABLEMMIO_EN at socket level.
+
+ @param PeiServices - Ptr of EFI_PEI_SERVICES ptr
+ @param mPeiMpServices - Ptr of EFI_PEI_MP_SERVICES_PPI
+
+ @retval EFI_SUCCESS - Programming done
+ @retval EFI_UNSUPPORTED - Not support this platform
+
+**/
+EFI_STATUS
+PkgMpEnableMcaOnCacheableMmio(
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_MP_SERVICES_PPI *mPeiMpServices
+)
+{
+ UINT16 PackageDoneBitmap;
+ UINTN NumberOfProcessors;
+ UINTN NumberEnabledProcessors;
+ UINTN Index;
+ UINT8 TotalSockets = 0;
+ EFI_PROCESSOR_INFORMATION ProcInfo;
+ EFI_STATUS Status;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ if (!DynamicSiLibraryPpi->IsCpuAndRevision (CPU_SKX, REV_ALL) && !DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CLX, REV_ALL) && !DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CPX, REV_ALL)) {
+ return EFI_UNSUPPORTED;
+ }
+
+ PackageDoneBitmap = 0;
+ mPeiMpServices->GetNumberOfProcessors(
+ PeiServices,
+ mPeiMpServices,
+ &NumberOfProcessors,
+ &NumberEnabledProcessors
+ );
+
+ //
+ // Find total number of sockets present on the board
+ //
+ for (Index = 0; Index < MAX_SOCKET; Index++) {
+ if (DynamicSiLibraryPpi->SocketPresent (Index)) {
+ TotalSockets++;
+ }
+ }
+
+ //
+ // Loop through all the enabled processors and find one thread per socket present
+ // to write the MSR. Remote sockets need to use StartupThisAP.
+ //
+ for (Index = 0; Index < NumberOfProcessors; Index++) {
+ mPeiMpServices->GetProcessorInfo(
+ PeiServices,
+ mPeiMpServices,
+ Index,
+ &ProcInfo
+ );
+
+ if (!(PackageDoneBitmap & (1 << ProcInfo.Location.Package)) && (ProcInfo.StatusFlag & PROCESSOR_ENABLED_BIT)) {
+
+ PackageDoneBitmap |= (1 << ProcInfo.Location.Package);
+ TotalSockets--;
+
+ if (ProcInfo.StatusFlag & PROCESSOR_AS_BSP_BIT) {
+ DynamicSiLibraryPpi->EnableMcaOnCacheableMmio();
+ } else {
+ Status = mPeiMpServices->StartupThisAP (
+ PeiServices,
+ mPeiMpServices,
+ (EFI_AP_PROCEDURE)DynamicSiLibraryPpi->EnableMcaOnCacheableMmio,
+ Index,
+ 0,
+ NULL
+ );
+ }
+
+ //
+ // All sockets are programmed, skip checking rest of threads
+ //
+ if (TotalSockets == 0) {
+ break;
+ }
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Function to set all MTRRs on the current thread to the MTRR set passed in.
+
+ @param MtrrSettings - Pointer to MTRR Settings to use
+
+ @retval None
+
+**/
+VOID
+SetAllMtrrs(
+ VOID *MtrrSettings
+)
+{
+ MtrrSetAllMtrrs((MTRR_SETTINGS*)MtrrSettings);
+}
+
+/**
+
+ Function that analyzes memory length passed in to see if there is an
+ appropriate address to perform a more efficient top down coverage of
+ the memory range. At this address bit, it is more efficient to overshoot
+ memory range with WB cache type and cover the gap with UC cache type.
+
+ @param MemoryLength - Memory length of entire memory region
+
+ @retval Zero - No efficient top down approaches found. More efficient
+ to cover memory range conventional way (bottom up).
+ PwrOfTwo Value - PowerOfTwo bit where the top down approach is most efficient
+
+**/
+UINT64
+FindTopDownPowerOfTwo (
+ IN UINT64 MemoryLength
+ )
+{
+ UINT8 Index;
+ BOOLEAN FoundOne = FALSE;
+ UINT8 ZeroCount = 0;
+ UINT8 OnesCount = 0;
+ UINT64 TopDownBit = 0;
+ UINT8 MtrrSavings = 0;
+
+ for (Index = 0; Index < 64; Index++){
+ if (MemoryLength & LShiftU64(1, Index)) {
+ OnesCount++;
+ FoundOne = TRUE;
+ } else {
+ //
+ // If there are more 1's than 0's plus 2 between least significant bit set
+ // and current bit under test, then top down approach is more efficient.
+ // Continue to loop through memory length to look for more efficiencies
+ // and compare them against previous efficiencies found to pick best power of two.
+ //
+ if (((ZeroCount + 2) < OnesCount) && ((OnesCount - (ZeroCount + 2)) > MtrrSavings)) {
+ TopDownBit = LShiftU64(1, (Index - 1));
+ MtrrSavings = OnesCount - (ZeroCount + 2);
+ }
+ if (FoundOne) {
+ ZeroCount++;
+ }
+ }
+ }
+
+ //
+ // MtrrLib can handle this case efficiently
+ //
+ if (TopDownBit == GetPowerOfTwo64(MemoryLength)) {
+ TopDownBit = 0;
+ }
+
+ return TopDownBit;
+}
+
+/**
+
+ Recalculate the memory length to prevent MTRR out of resource error.
+
+ @param MemoryLength - Memory Length that we want to truncate
+
+ @retval UINT64 - New truncated memory length
+
+**/
+UINT64
+MemLengthRecalculation (
+ IN UINT64 MemoryLength
+ )
+{
+ UINT8 BitIndex;
+
+ for (BitIndex = 0;BitIndex < 64; BitIndex++) {
+ if ((RShiftU64(MemoryLength, BitIndex) & 1) == 1) {
+ //
+ // Clear lowest power of two bit found
+ //
+ MemoryLength &= ~LShiftU64(1, BitIndex);
+ break;
+ }
+ }
+ return MemoryLength;
+}
+
+/**
+
+ Sets the uncached part of upper memory as reserved to prevent OS from using.
+ The uncached region will always be at the top of high memory.
+
+ @param OriginalMemoryLength - Original top of memory value
+ @param NewMemoryLength - New memory range used for successful programming
+
+ @retval None
+
+**/
+VOID
+ReserveUncachedMemory (
+ IN UINT64 OriginalMemoryLength,
+ IN UINT64 NewMemoryLength
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob;
+ VOID *HobStart;
+ UINT64 TempLength;
+
+ HobStart = GetFirstHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR);
+ //
+ // Scan resource descriptor hobs to set our required range attribute as tested
+ //
+ for (Hob.Raw = HobStart; !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) {
+ if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
+ ResourceHob = Hob.ResourceDescriptor;
+ if ((ResourceHob->PhysicalStart >= NewMemoryLength) &&
+ ((ResourceHob->PhysicalStart + ResourceHob->ResourceLength) <= OriginalMemoryLength)) {
+ //
+ // Range is completely included in the uncached area, mark as tested
+ //
+ ResourceHob->ResourceAttribute |= EFI_RESOURCE_ATTRIBUTE_TESTED;
+ } else if ((ResourceHob->PhysicalStart < NewMemoryLength) &&
+ (ResourceHob->PhysicalStart + ResourceHob->ResourceLength > NewMemoryLength)) {
+ //
+ // Shrink previous HOB to base of uncached region, create new hob to cover uncached space
+ //
+ TempLength = ResourceHob->ResourceLength;
+ ResourceHob->ResourceLength = NewMemoryLength - ResourceHob->PhysicalStart;
+ BuildResourceDescriptorHob(
+ EFI_RESOURCE_SYSTEM_MEMORY,
+ (
+ EFI_RESOURCE_ATTRIBUTE_PRESENT |
+ EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
+ EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
+ EFI_RESOURCE_ATTRIBUTE_TESTED
+ ),
+ ResourceHob->PhysicalStart + ResourceHob->ResourceLength,
+ TempLength - ResourceHob->ResourceLength
+ );
+ if ((ResourceHob->PhysicalStart + ResourceHob->ResourceLength +
+ (TempLength - ResourceHob->ResourceLength)) == OriginalMemoryLength) {
+ break;
+ }
+ }
+ if (ResourceHob->PhysicalStart + ResourceHob->ResourceLength == OriginalMemoryLength) {
+ break;
+ }
+ }
+ }
+
+ HobStart = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION);
+ //
+ // Scan memory allocation hobs to make sure this range is free
+ //
+ for (Hob.Raw = HobStart; !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) {
+ if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
+ if ((Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress > NewMemoryLength) &&
+ (OriginalMemoryLength > Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress)) {
+ //
+ // If hob range is above the range we want to reserve, set limit to that base.
+ //
+ OriginalMemoryLength = Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress;
+ } else if ((Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress +
+ Hob.MemoryAllocation->AllocDescriptor.MemoryLength - 1) > NewMemoryLength) {
+ //
+ // If there is a range allocated that starts below but comes into the reserved range,
+ // adjust the base so it starts above previous allocation
+ //
+ NewMemoryLength = Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress +
+ Hob.MemoryAllocation->AllocDescriptor.MemoryLength;
+ }
+ }
+ }
+
+ //
+ // Create hob to reserve the memory
+ //
+ if (NewMemoryLength < OriginalMemoryLength) {
+ BuildMemoryAllocationHob (
+ (EFI_PHYSICAL_ADDRESS)NewMemoryLength,
+ OriginalMemoryLength - NewMemoryLength,
+ EfiReservedMemoryType
+ );
+ }
+}
+
+/**
+ Update MTRR setting in EndOfPei phase.
+ This function will clear temporary memory (CAR) phase MTRR settings
+ and configure MTRR to cover permanent memory.
+
+ @retval EFI_SUCCESS The function completes successfully.
+ @retval Others Some error occurs.
+**/
+EFI_STATUS
+EFIAPI
+SetCacheMtrrAfterEndOfPei (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UINT64 LowUncableBase;
+ UINT64 MemoryBase;
+ UINT64 TempQword;
+ UINT64 MemoryLength;
+ UINT64 TempMemoryLength;
+ UINT64 OriginalMemoryLength;
+ UINT64 TopDownBit;
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ IIO_UDS *IioUds;
+ MTRR_SETTINGS MtrrSettings;
+ EFI_GUID UniversalDataGuid = IIO_UNIVERSAL_DATA_GUID;
+ EFI_PEI_MP_SERVICES_PPI *mPeiMpServices = NULL;
+ EFI_BOOT_MODE BootMode;
+ CONST EFI_PEI_SERVICES ** PeiServices;
+
+
+ PeiServices = GetPeiServicesTablePointer();
+ BootMode = GetBootModeHob();
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ //
+ // Get required HOBs to be used to generate MTRR programming
+ //
+ GuidHob = GetFirstGuidHob (&UniversalDataGuid);
+ if (GuidHob == NULL) {
+ ASSERT(GuidHob != NULL);
+ return EFI_NOT_FOUND;
+ }
+ IioUds = GET_GUID_HOB_DATA (GuidHob);
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ if (GuidHob == NULL) {
+ ASSERT(GuidHob != NULL);
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+ //
+ // Calculate the low uncacheable base address
+ //
+ if (IioUds->PlatformData.PciExpressBase < IioUds->PlatformData.PlatGlobalMmio32Base) {
+ LowUncableBase = IioUds->PlatformData.PciExpressBase;
+ } else {
+ LowUncableBase = IioUds->PlatformData.PlatGlobalMmio32Base;
+ }
+
+ LowUncableBase &= (0x0FFF00000);
+
+ //
+ // Reset all Mtrrs to 0 including fixed MTRR and variable MTRR
+ //
+ ZeroMem(&MtrrSettings, sizeof(MTRR_SETTINGS));
+
+ //
+ // Set fixed cache for memory range below 1MB
+ //
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ 0,
+ 0xA0000,
+ EFI_CACHE_WRITEBACK
+ );
+ ASSERT_EFI_ERROR(Status);
+
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ 0xA0000,
+ 0x60000,
+ EFI_CACHE_UNCACHEABLE
+ );
+ ASSERT_EFI_ERROR(Status);
+
+ //
+ // Base set to 1mb due to MtrrLib programming method
+ //
+ MemoryBase = BASE_1MB;
+ MemoryLength = LowUncableBase;
+
+ Status = (*PeiServices)->GetHobList (PeiServices, &Hob.Raw);
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
+ if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) ||
+ (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_MAPPED_IO &&
+ (Hob.ResourceDescriptor->ResourceAttribute & EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE)) ||
+ (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED &&
+ (Hob.ResourceDescriptor->ResourceAttribute & EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE))) {
+ if (Hob.ResourceDescriptor->PhysicalStart > EFI_MAX_ADDRESS) {
+ TempQword = Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength;
+ if (TempQword > MemoryLength) {
+ MemoryLength = TempQword;
+ }
+ }
+ }
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ TempMemoryLength = MemoryLength;
+ OriginalMemoryLength = MemoryLength;
+
+ DEBUG((DEBUG_ERROR, "Total Memory size: 0x%lx\n", MemoryLength));
+
+ Status = EFI_SUCCESS;
+ //
+ // Loop will continue until MTRR programming is successfully done.
+ // All regions reserved in this loop are considered essential regions
+ // If any of them fail to fit, memory is truncated by lowest power of
+ // two until all regions fit into the programming
+ //
+ do {
+ if (Status == RETURN_OUT_OF_RESOURCES){
+ //
+ // Ran out of MTRRs: lower top of high memory by lowest power of two bit and retry
+ //
+ MemoryLength = MemLengthRecalculation (TempMemoryLength);
+ DEBUG((DEBUG_ERROR, "MTRR: %r, attempting: 0x%lx\n", Status, MemoryLength));
+ //
+ // Restore the MemoryBase to its original value, save MemoryLength
+ //
+ MemoryBase = BASE_1MB;
+ TempMemoryLength = MemoryLength;
+ ZeroMem(&(MtrrSettings.Variables), sizeof(MTRR_VARIABLE_SETTINGS));
+ }
+
+ TopDownBit = FindTopDownPowerOfTwo(MemoryLength);
+
+ //
+ // If TopDownBit has a value, then we found a more efficient address length
+ // to use a top down approach. We will walk through the full address length to
+ // program MTRRs individually. BASE_1MB fixups are due to MtrrLib program method.
+ //
+ if(TopDownBit){
+ DEBUG((DEBUG_INFO, "Efficient Top Down Power of Two = %lx\n\n", TopDownBit));
+ while (MemoryLength != 0) {
+ if (GetPowerOfTwo64(MemoryLength) == TopDownBit) {
+ //
+ // Overshoot address with WB and cover remaining gap with UC
+ //
+ TempQword = MemoryLength;
+ MemoryLength = LShiftU64(GetPowerOfTwo64 (MemoryLength), 1);
+
+ if(MemoryBase == BASE_1MB) {
+ MemoryLength -= BASE_1MB;
+ }
+
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ MemoryBase,
+ MemoryLength,
+ EFI_CACHE_WRITEBACK
+ );
+
+ if (Status == RETURN_OUT_OF_RESOURCES) {
+ break;
+ }
+
+ if(MemoryBase == BASE_1MB) {
+ MemoryBase = 0;
+ MemoryLength += BASE_1MB;
+ }
+
+ MemoryBase += TempQword;
+ MemoryLength -= TempQword;
+
+ //
+ // Program UC region gap between top of memory and WB MTRR
+ //
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ MemoryBase,
+ MemoryLength,
+ EFI_CACHE_UNCACHEABLE
+ );
+
+ if (Status == RETURN_OUT_OF_RESOURCES) {
+ break;
+ }
+
+ MemoryLength = 0;
+ } else {
+ //
+ // Grow next power of two upwards and adjust base and length
+ //
+ TempQword = GetPowerOfTwo64(MemoryLength);
+ MemoryLength -= TempQword;
+
+ if(MemoryBase == BASE_1MB) {
+ TempQword -= BASE_1MB;
+ }
+
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ MemoryBase,
+ TempQword,
+ EFI_CACHE_WRITEBACK
+ );
+
+ if (Status == RETURN_OUT_OF_RESOURCES) {
+ break;
+ }
+
+ MemoryBase += TempQword;
+ }
+ }
+ if (Status == RETURN_OUT_OF_RESOURCES) {
+ continue;
+ }
+ } else {
+ //
+ // Create a WB region for the entire memory region
+ //
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ MemoryBase,
+ MemoryLength - BASE_1MB,
+ EFI_CACHE_WRITEBACK
+ );
+
+ if (Status == RETURN_OUT_OF_RESOURCES) {
+ continue;
+ }
+ }
+
+ //
+ // Punch UC hole for lower MMIO region
+ //
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ LowUncableBase,
+ EFI_MAX_ADDRESS - LowUncableBase + 1,
+ EFI_CACHE_UNCACHEABLE
+ );
+
+ if (Status == RETURN_OUT_OF_RESOURCES) {
+ continue;
+ }
+
+ } while (Status == RETURN_OUT_OF_RESOURCES);
+ //
+ // Assert if there was an error other than resource issue
+ //
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Set PSMI Trace Region to uncached
+ //
+ if (PlatformInfo->MemData.PsmiUcTraceRegionSize != 0) {
+ Status = MtrrSetMemoryAttributeInMtrrSettings(
+ &MtrrSettings,
+ PlatformInfo->MemData.PsmiUcTraceRegionBase,
+ PlatformInfo->MemData.PsmiUcTraceRegionSize,
+ EFI_CACHE_UNCACHEABLE
+ );
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "PSMI- Could not set Trace Region MemType to UC\n"));
+ }
+ }
+
+ //
+ // Set the calculated MTRR settings for the BSP
+ //
+ MtrrSetAllMtrrs (&MtrrSettings);
+
+ //
+ // Need to mark the uncached memory as reserved
+ //
+ if (OriginalMemoryLength > TempMemoryLength) {
+ DEBUG((DEBUG_ERROR, "New TOHM: 0x%lx, Previous: 0x%lx\n", TempMemoryLength, OriginalMemoryLength));
+ ReserveUncachedMemory (OriginalMemoryLength, TempMemoryLength);
+ }
+ }
+
+ Status = (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gEfiPeiMpServicesPpiGuid,
+ 0,
+ NULL,
+ &mPeiMpServices
+ );
+
+ if (BootMode != BOOT_ON_S3_RESUME) {
+ if(!EFI_ERROR(Status)){
+ //
+ // Sync all AP MTRRs with BSP
+ //
+ Status = mPeiMpServices->StartupAllAPs (
+ PeiServices,
+ mPeiMpServices,
+ (EFI_AP_PROCEDURE)SetAllMtrrs,
+ FALSE,
+ 0,
+ (VOID*)&MtrrSettings
+ );
+ }
+ }
+
+ PkgMpEnableMcaOnCacheableMmio (PeiServices, mPeiMpServices);
+
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
new file mode 100644
index 0000000000..6f21d1ea72
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
@@ -0,0 +1,55 @@
+## @file
+#
+# @copyright
+# Copyright 2020 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PeiSetCacheMtrrLib
+ FILE_GUID = 7E5407A1-0058-4617-AAEC-ACB0F74B4A1F
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SetCacheMtrrLib|PEIM
+
+[LibraryClasses]
+ BaseLib
+ PcdLib
+ DebugLib
+ HobLib
+ MtrrLib
+ PeiServicesLib
+ BaseMemoryLib
+
+[Packages]
+ MinPlatformPkg/MinPlatformPkg.dec
+ MdePkg/MdePkg.dec
+ UefiCpuPkg/UefiCpuPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Sources]
+ SetCacheMtrrLib.c
+
+[Guids]
+ gEfiSmmSmramMemoryGuid ## CONSUMES
+ gEfiPlatformInfoGuid ## CONSUMES
+
+[Ppis]
+ gEfiPeiMpServicesPpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Pcd]
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdPciReservedMemAbove4GBBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdPciReservedMemAbove4GBLimit ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdPciReservedPMemAbove4GBBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdPciReservedPMemAbove4GBLimit ## CONSUMES
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c
new file mode 100644
index 0000000000..c4c5d9aaba
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c
@@ -0,0 +1,152 @@
+/** @file
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// EDK and EDKII have different GUID formats
+//
+#include <Uefi/UefiBaseType.h>
+#include <Ppi/PchPolicy.h>
+#include <Guid/PlatformInfo.h>
+#include <Guid/SetupVariable.h>
+#include <PchSetupVariable.h>
+#include <Library/PchInfoLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/DebugLib.h>
+
+VOID
+UpdatePchUsbConfig (
+ IN PCH_USB_CONFIG *PchUsbConfig,
+ IN SYSTEM_CONFIGURATION *SetupVariables,
+ IN PCH_SETUP *PchRcVariables,
+ IN VOID *Usb20OverCurrentMappings,
+ IN VOID *Usb30OverCurrentMappings,
+ IN VOID *Usb20AfeParams
+ )
+/*++
+
+Routine Description:
+
+ This function performs PCH USB Platform Policy initialzation
+
+Arguments:
+ PchUsbConfig Pointer to PCH_USB_CONFIG data buffer
+ SetupVariables Pointer to Setup variable
+ PlatformType PlatformType specified
+ PlatformFlavor PlatformFlavor specified
+ BoardType BoardType specified
+
+Returns:
+
+--*/
+{
+ UINTN PortIndex;
+#ifdef TESTMENU_FLAG
+ UINT8 Index;
+#endif
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ PchUsbConfig->UsbPrecondition = PchRcVariables->UsbPrecondition;
+
+ for (PortIndex = 0; PortIndex < DynamicSiLibraryPpi->GetPchXhciMaxUsb2PortNum (); PortIndex++) {
+ if (PchRcVariables->PchUsbHsPort[PortIndex] == 1) {
+ PchUsbConfig->PortUsb20[PortIndex].Enable = TRUE;
+ } else {
+ PchUsbConfig->PortUsb20[PortIndex].Enable = FALSE;
+ }
+ }
+ for (PortIndex = 0; PortIndex < DynamicSiLibraryPpi->GetPchXhciMaxUsb3PortNum (); PortIndex++) {
+ if (PchRcVariables->PchUsbSsPort[PortIndex] == 1) {
+ PchUsbConfig->PortUsb30[PortIndex].Enable = TRUE;
+ } else {
+ PchUsbConfig->PortUsb30[PortIndex].Enable = FALSE;
+ }
+ }
+
+ for (PortIndex = 0; PortIndex < PCH_H_XHCI_MAX_USB2_PHYSICAL_PORTS; PortIndex++) {
+ PchUsbConfig->PortUsb20[PortIndex].Afe.Petxiset = (UINT8)(((USB2_PHY_PARAMETERS *)Usb20AfeParams)[PortIndex].Petxiset);
+ PchUsbConfig->PortUsb20[PortIndex].Afe.Txiset = (UINT8)(((USB2_PHY_PARAMETERS *)Usb20AfeParams)[PortIndex].Txiset);
+ PchUsbConfig->PortUsb20[PortIndex].Afe.Predeemp = (UINT8)(((USB2_PHY_PARAMETERS *)Usb20AfeParams)[PortIndex].Predeemp);
+ PchUsbConfig->PortUsb20[PortIndex].Afe.Pehalfbit = (UINT8)(((USB2_PHY_PARAMETERS *)Usb20AfeParams)[PortIndex].Pehalfbit);
+ }
+
+ //
+ // xDCI (USB device) related settings from setup variable
+ //
+ if(PchRcVariables->PchXdciSupport == 1) {
+ PchUsbConfig->XdciConfig.Enable= TRUE;
+ } else {
+ PchUsbConfig->XdciConfig.Enable= FALSE;
+ }
+
+#ifdef TESTMENU_FLAG
+ //
+ // Need to clear UsbEPTypeLockPolicy[8] and UsbEPTypeLockPolicy[16] since this is not assign in the setup
+ //
+ PchRcVariables->UsbEPTypeLockPolicy[8] = 0;
+ SetupPchRcVariablesVariables->UsbEPTypeLockPolicy[16] = 0;
+
+ //
+ // Update USB EP Type Lock Policy Settings
+ //
+ for (Index = 0; Index < 24; Index++) {
+ PchUsbConfig->Usb30EpTypeLockPolicySettings.EPTypeLockPolicy |= (UINT32) (PchRcVariables->UsbEPTypeLockPolicy[Index] << Index);
+ }
+
+ for (Index = 0; Index < 16; Index++) {
+ PchUsbConfig->Usb30EpTypeLockPolicySettings.EPTypeLockPolicyPortControl1 |= (UINT32) (PchRcVariables->RootPortPolicyControl[Index] << Index * 2);
+ }
+
+ for (Index = 16; Index < 20; Index++) {
+ PchUsbConfig->Usb30EpTypeLockPolicySettings.EPTypeLockPolicyPortControl2 |= (UINT32) (PchRcVariables->RootPortPolicyControl[Index] << (Index - 16) * 2);
+ }
+
+ //
+ // Remark: Can be disabled only for debugging process!!!
+ //
+ PchUsbConfig->TstMnuControllerEnabled = PchRcVariables->XhciEnabled;
+ //
+ // SSIC debug mode
+ //
+ PchUsbConfig->TstMnuSsicHalt = PchRcVariables->XhciSsicHalt;
+#endif
+ //
+ // XHCI USB Over Current Pins disabled, update it based on setup option.
+ //
+ PchUsbConfig->XhciOcMapEnabled = PchRcVariables->XhciOcMapEnabled;
+
+ //
+ // XHCI Wake On USB configured based on user input through setup option
+ //
+ PchUsbConfig->XhciWakeOnUsb = SetupVariables->XhciWakeOnUsbEnabled;
+ //
+ // XHCI option to disable MSIs
+ //
+ PchUsbConfig->XhciDisMSICapability = PchRcVariables->XhciDisMSICapability;
+
+ //
+ // Platform Board programming per the layout of each port.
+ //
+ // OC Map for USB2 Ports
+ for (PortIndex=0;PortIndex<PCH_MAX_USB2_PORTS;PortIndex++) {
+ PchUsbConfig->PortUsb20[PortIndex].OverCurrentPin = (UINT8)((USB_OVERCURRENT_PIN *)Usb20OverCurrentMappings)[PortIndex];
+ }
+
+ // OC Map for USB3 Ports
+ for (PortIndex=0;PortIndex<PCH_MAX_USB3_PORTS;PortIndex++) {
+ PchUsbConfig->PortUsb30[PortIndex].OverCurrentPin = (UINT8)((USB_OVERCURRENT_PIN *)Usb30OverCurrentMappings)[PortIndex];
+ }
+
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c
new file mode 100644
index 0000000000..25a27eee39
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c
@@ -0,0 +1,778 @@
+/** @file
+ This file is SampleCode of the library for Intel PCH PEI Policy initialzation.
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+
+#include "Guid/SetupVariable.h"
+#include <PchSetupVariable.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Library/PeiServicesLib.h>
+
+#include <PchAccess.h>
+#include <Ppi/PchPolicy.h>
+
+#include <Register/PchRegsSata.h>
+#include <Library/HobLib.h>
+#include <Platform.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HobLib.h>
+#include <Guid/GlobalVariable.h>
+#include <Ppi/PchPcieDeviceTable.h>
+#include <Guid/SocketVariable.h>
+#include <Library/PcdLib.h>
+#include <Library/PchInfoLib.h>
+#include <Library/UbaUsbOcUpdateLib.h>
+#include <Library/UbaHsioPtssTableConfigLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+//
+// Haddock Creek
+//
+#define DIMM_SMB_SPD_P0C0D0_HC 0xA2
+#define DIMM_SMB_SPD_P0C0D1_HC 0xA0
+#define DIMM_SMB_SPD_P0C1D0_HC 0xA6
+#define DIMM_SMB_SPD_P0C1D1_HC 0xA4
+#define DIMM_SMB_SPD_P0C0D2_HC 0xAA
+#define DIMM_SMB_SPD_P0C1D2_HC 0xA8
+
+//
+// Sawtooth Peak
+// Single SPD EEPROM at 0xA2 serves both C0D0 and C1D0 (LPDDR is 1DPC only)
+//
+#define DIMM_SMB_SPD_P0C0D0_STP 0xA2
+#define DIMM_SMB_SPD_P0C0D1_STP 0xA0
+#define DIMM_SMB_SPD_P0C1D0_STP 0xA2
+#define DIMM_SMB_SPD_P0C1D1_STP 0xA0
+
+//
+// Aden Hills
+// DDR4 System (1DPC)
+//
+#define DIMM_SMB_SPD_P0C0D0_AH 0xA0
+#define DIMM_SMB_SPD_P0C0D1_AH 0xA4
+#define DIMM_SMB_SPD_P0C1D0_AH 0xA2
+#define DIMM_SMB_SPD_P0C1D1_AH 0xA6
+
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusHCRsvdAddresses[] = {
+ DIMM_SMB_SPD_P0C0D0_HC,
+ DIMM_SMB_SPD_P0C0D1_HC,
+ DIMM_SMB_SPD_P0C1D0_HC,
+ DIMM_SMB_SPD_P0C1D1_HC
+};
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusSTPRsvdAddresses[] = {
+ DIMM_SMB_SPD_P0C0D0_STP,
+ DIMM_SMB_SPD_P0C0D1_STP,
+ DIMM_SMB_SPD_P0C1D0_STP,
+ DIMM_SMB_SPD_P0C1D1_STP
+};
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusAHRsvdAddresses[] = {
+ DIMM_SMB_SPD_P0C0D0_AH,
+ DIMM_SMB_SPD_P0C0D1_AH,
+ DIMM_SMB_SPD_P0C1D0_AH,
+ DIMM_SMB_SPD_P0C1D1_AH
+};
+
+#define PCI_CLASS_NETWORK 0x02
+#define PCI_CLASS_NETWORK_ETHERNET 0x00
+#define PCI_CLASS_NETWORK_OTHER 0x80
+
+
+GLOBAL_REMOVE_IF_UNREFERENCED PCH_PCIE_DEVICE_OVERRIDE mPcieDeviceTable[] = {
+ //
+ // Intel PRO/Wireless
+ //
+ { 0x8086, 0x422b, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x422c, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x4238, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x4239, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel WiMAX/WiFi Link
+ //
+ { 0x8086, 0x0082, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0085, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0083, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0084, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0086, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0087, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0088, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0089, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x008F, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0090, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Crane Peak WLAN NIC
+ //
+ { 0x8086, 0x08AE, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x08AF, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Crane Peak w/BT WLAN NIC
+ //
+ { 0x8086, 0x0896, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0897, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Kelsey Peak WiFi, WiMax
+ //
+ { 0x8086, 0x0885, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0886, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 105
+ //
+ { 0x8086, 0x0894, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0895, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 135
+ //
+ { 0x8086, 0x0892, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0893, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 2200
+ //
+ { 0x8086, 0x0890, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0891, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 2230
+ //
+ { 0x8086, 0x0887, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0888, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 6235
+ //
+ { 0x8086, 0x088E, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x088F, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel CampPeak 2 Wifi
+ //
+ { 0x8086, 0x08B5, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x08B6, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel WilkinsPeak 1 Wifi
+ //
+ { 0x8086, 0x08B3, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B3, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ { 0x8086, 0x08B4, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B4, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ //
+ // Intel Wilkins Peak 2 Wifi
+ //
+ { 0x8086, 0x08B1, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B1, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ { 0x8086, 0x08B2, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B2, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ //
+ // Intel Wilkins Peak PF Wifi
+ //
+ { 0x8086, 0x08B0, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+
+ //
+ // End of Table
+ //
+ { 0 }
+};
+
+STATIC
+EFI_STATUS
+InstallPcieDeviceTable (
+ IN PCH_PCIE_DEVICE_OVERRIDE *DeviceTable
+ )
+{
+ EFI_PEI_PPI_DESCRIPTOR *DeviceTablePpiDesc;
+ EFI_STATUS Status;
+
+ DeviceTablePpiDesc = (EFI_PEI_PPI_DESCRIPTOR *) AllocateZeroPool (sizeof (EFI_PEI_PPI_DESCRIPTOR));
+ ASSERT (DeviceTablePpiDesc != NULL);
+
+ if (DeviceTablePpiDesc == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ DeviceTablePpiDesc->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
+ DeviceTablePpiDesc->Guid = &gPchPcieDeviceTablePpiGuid;
+ DeviceTablePpiDesc->Ppi = DeviceTable;
+
+ Status = PeiServicesInstallPpi (DeviceTablePpiDesc);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
+
+VOID
+UpdatePchUsbConfig (
+ IN PCH_USB_CONFIG *PchUsbConfig,
+ IN SYSTEM_CONFIGURATION *SetupVariables,
+ IN PCH_SETUP *PchRcVariables,
+ IN VOID *Usb20OverCurrentMappings,
+ IN VOID *Usb30OverCurrentMappings,
+ IN VOID *Usb20AfeParams
+ );
+
+static
+VOID
+InstallPlatformVerbTables (
+ IN UINTN CodecType
+ )
+{
+
+}
+
+EFI_STATUS
+EFIAPI
+UpdatePeiPchPolicy (
+ IN OUT PCH_POLICY_PPI *PchPolicy
+ )
+/*++
+
+Routine Description:
+
+ This function performs PCH PEI Policy initialzation.
+
+Arguments:
+
+ PchPolicy The PCH Policy PPI instance
+
+Returns:
+
+ EFI_SUCCESS The PPI is installed and initialized.
+ EFI ERRORS The PPI is not successfully installed.
+ EFI_OUT_OF_RESOURCES Do not have enough resources to initialize the driver
+
+--*/
+{
+ UINT8 Index;
+ UINTN LpcBaseAddress;
+ UINT8 MaxSataPorts;
+ UINT8 BmcRootPort;
+ UINT8 *SmBusReservedTable;
+ UINT8 SmBusReservedNum;
+ USB_OVERCURRENT_PIN *Usb20OverCurrentMappings = NULL;
+ USB_OVERCURRENT_PIN *Usb30OverCurrentMappings = NULL;
+ USB2_PHY_PARAMETERS *Usb20AfeParams = NULL;
+ UINT8 VTdSupport;
+ SYSTEM_CONFIGURATION *SetupVariables;
+ PCH_SETUP *PchRcVariables;
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ DEBUG((DEBUG_INFO, "platform common UpdatePeiPchPolicy entry\n"));
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ SetupVariables = PcdGetPtr(PcdSetup);
+ PchRcVariables = PcdGetPtr(PcdPchSetup);
+
+ LpcBaseAddress = DynamicSiLibraryPpi->MmPciBase (
+ DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_LPC,
+ PCI_FUNCTION_NUMBER_PCH_LPC
+ );
+
+ PchPolicy->Port80Route = PchRcVariables->IchPort80Route;
+
+ //
+ // DeviceEnables
+ //
+ if (DynamicSiLibraryPpi->PchIsGbeAvailable ()) {
+ PchPolicy->LanConfig.Enable = TRUE;
+ PchPolicy->LanConfig.K1OffEnable = PchRcVariables->PchLanK1Off;
+ } else {
+ PchPolicy->LanConfig.Enable = FALSE;
+ }
+
+ PchPolicy->SataConfig.Enable = PchRcVariables->PchSata;
+
+ PchPolicy->sSataConfig.Enable = PchRcVariables->PchsSata;
+ PchPolicy->SmbusConfig.Enable = TRUE;
+ //
+ // CLOCKRUN in LPC has to be disabled:
+ // - if a device is connected to LPC0
+ // - for LBG A0 stepping
+ //
+ PchPolicy->PmConfig.PciClockRun = FALSE;
+ PchPolicy->PchConfig.Crid = PchRcVariables->PchCrid;
+ PchPolicy->PchConfig.Serm = PchRcVariables->PchSerm;
+
+ //
+ // SMBUS reserved addresses
+ //
+ SmBusReservedTable = NULL;
+ SmBusReservedNum = 0;
+ PchPolicy->SmbusConfig.SmbusIoBase = PCH_SMBUS_BASE_ADDRESS;
+ SmBusReservedTable = mSmbusSTPRsvdAddresses;
+ SmBusReservedNum = sizeof (mSmbusSTPRsvdAddresses);
+
+ if (SmBusReservedTable != NULL) {
+ PchPolicy->SmbusConfig.NumRsvdSmbusAddresses = SmBusReservedNum;
+ CopyMem (
+ PchPolicy->SmbusConfig.RsvdSmbusAddressTable,
+ SmBusReservedTable,
+ SmBusReservedNum
+ );
+ }
+
+ //
+ // SATA Config
+ //
+ PchPolicy->SataConfig.SataMode = PchRcVariables->SataInterfaceMode;
+ MaxSataPorts = DynamicSiLibraryPpi->GetPchMaxSataPortNum ();
+
+ for (Index = 0; Index < MaxSataPorts; Index++) {
+ if (PchRcVariables->SataTestMode == TRUE)
+ {
+ PchPolicy->SataConfig.PortSettings[Index].Enable = TRUE;
+ } else {
+ PchPolicy->SataConfig.PortSettings[Index].Enable = PchRcVariables->SataPort[Index];
+ }
+ PchPolicy->SataConfig.PortSettings[Index].HotPlug = PchRcVariables->SataHotPlug[Index];
+ PchPolicy->SataConfig.PortSettings[Index].SpinUp = PchRcVariables->SataSpinUp[Index];
+ PchPolicy->SataConfig.PortSettings[Index].External = PchRcVariables->SataExternal[Index];
+ PchPolicy->SataConfig.PortSettings[Index].InterlockSw = PchRcVariables->SataMechanicalSw[Index];
+ PchPolicy->SataConfig.PortSettings[Index].DevSlp = PchRcVariables->PxDevSlp[Index];
+ PchPolicy->SataConfig.PortSettings[Index].EnableDitoConfig = PchRcVariables->EnableDitoConfig[Index];
+ PchPolicy->SataConfig.PortSettings[Index].DmVal = PchRcVariables->DmVal[Index];
+ PchPolicy->SataConfig.PortSettings[Index].DitoVal = PchRcVariables->DitoVal[Index];
+ PchPolicy->SataConfig.PortSettings[Index].SolidStateDrive = PchRcVariables->SataType[Index];
+ }
+
+ if (PchPolicy->SataConfig.SataMode == PchSataModeRaid) {
+ PchPolicy->SataConfig.Rst.RaidAlternateId = PchRcVariables->SataAlternateId;
+ PchPolicy->SataConfig.Rst.EfiRaidDriverLoad = PchRcVariables->SataRaidLoadEfiDriver[0];
+ }
+ PchPolicy->SataConfig.Rst.Raid0 = PchRcVariables->SataRaidR0;
+ PchPolicy->SataConfig.Rst.Raid1 = PchRcVariables->SataRaidR1;
+ PchPolicy->SataConfig.Rst.Raid10 = PchRcVariables->SataRaidR10;
+ PchPolicy->SataConfig.Rst.Raid5 = PchRcVariables->SataRaidR5;
+ PchPolicy->SataConfig.Rst.Irrt = PchRcVariables->SataRaidIrrt;
+ PchPolicy->SataConfig.Rst.OromUiBanner = PchRcVariables->SataRaidOub;
+ PchPolicy->SataConfig.Rst.HddUnlock = PchRcVariables->SataHddlk;
+ PchPolicy->SataConfig.Rst.LedLocate = PchRcVariables->SataLedl;
+ PchPolicy->SataConfig.Rst.IrrtOnly = PchRcVariables->SataRaidIooe;
+ PchPolicy->SataConfig.Rst.SmartStorage = PchRcVariables->SataRaidSrt;
+ PchPolicy->SataConfig.Rst.OromUiDelay = PchRcVariables->SataRaidOromDelay;
+
+ PchPolicy->SataConfig.EnclosureSupport = TRUE;
+
+ PchPolicy->SataConfig.SalpSupport = PchRcVariables->SataSalp;
+ PchPolicy->SataConfig.TestMode = PchRcVariables->SataTestMode;
+
+ for (Index = 0; Index < PCH_MAX_RST_PCIE_STORAGE_CR; Index++) {
+ if ((PchRcVariables->PchSata == TRUE) && (PchRcVariables->SataInterfaceMode == PchSataModeRaid)) {
+ PchPolicy->SataConfig.RstPcieStorageRemap[Index].Enable = PchRcVariables->RstPcieStorageRemap[Index];
+ PchPolicy->SataConfig.RstPcieStorageRemap[Index].RstPcieStoragePort = PchRcVariables->RstPcieStorageRemapPort[Index];
+ } else {
+ PchPolicy->SataConfig.RstPcieStorageRemap[Index].Enable = FALSE;
+ }
+ }
+
+ //
+ // sSATA Config
+ //
+ PchPolicy->sSataConfig.SataMode = PchRcVariables->sSataInterfaceMode;
+ MaxSataPorts = DynamicSiLibraryPpi->GetPchMaxsSataPortNum ();
+
+ for (Index = 0; Index < MaxSataPorts; Index++) {
+ if (PchRcVariables->sSataTestMode == TRUE)
+ {
+ PchPolicy->sSataConfig.PortSettings[Index].Enable = TRUE;
+ } else {
+ PchPolicy->sSataConfig.PortSettings[Index].Enable = PchRcVariables->sSataPort[Index];
+ }
+ PchPolicy->sSataConfig.PortSettings[Index].HotPlug = PchRcVariables->sSataHotPlug[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].SpinUp = PchRcVariables->sSataSpinUp[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].External = PchRcVariables->sSataExternal[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].DevSlp = PchRcVariables->sPxDevSlp[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].EnableDitoConfig = PchRcVariables->sEnableDitoConfig[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].DmVal = PchRcVariables->sDmVal[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].DitoVal = PchRcVariables->sDitoVal[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].SolidStateDrive = PchRcVariables->sSataType[Index];
+ }
+
+ if (PchPolicy->sSataConfig.SataMode == PchSataModeRaid) {
+ PchPolicy->sSataConfig.Rst.RaidAlternateId = PchRcVariables->sSataAlternateId;
+ PchPolicy->sSataConfig.Rst.EfiRaidDriverLoad = PchRcVariables->SataRaidLoadEfiDriver[1];
+ }
+ PchPolicy->sSataConfig.Rst.Raid0 = PchRcVariables->sSataRaidR0;
+ PchPolicy->sSataConfig.Rst.Raid1 = PchRcVariables->sSataRaidR1;
+ PchPolicy->sSataConfig.Rst.Raid10 = PchRcVariables->sSataRaidR10;
+ PchPolicy->sSataConfig.Rst.Raid5 = PchRcVariables->sSataRaidR5;
+ PchPolicy->sSataConfig.Rst.Irrt = PchRcVariables->sSataRaidIrrt;
+ PchPolicy->sSataConfig.Rst.OromUiBanner = PchRcVariables->sSataRaidOub;
+ PchPolicy->sSataConfig.Rst.HddUnlock = PchRcVariables->sSataHddlk;
+ PchPolicy->sSataConfig.Rst.LedLocate = PchRcVariables->sSataLedl;
+ PchPolicy->sSataConfig.Rst.IrrtOnly = PchRcVariables->sSataRaidIooe;
+ PchPolicy->sSataConfig.Rst.SmartStorage = PchRcVariables->sSataRaidSrt;
+ PchPolicy->sSataConfig.Rst.OromUiDelay = PchRcVariables->sSataRaidOromDelay;
+
+ PchPolicy->sSataConfig.EnclosureSupport = TRUE;
+
+ PchPolicy->sSataConfig.SalpSupport = PchRcVariables->sSataSalp;
+ PchPolicy->sSataConfig.TestMode = PchRcVariables->sSataTestMode;
+ //
+ // Initiate DMI Configuration
+ //
+ if (SetupVariables->PcieDmiAspm != PLATFORM_POR) {
+ if (SetupVariables->PcieDmiAspm != 0xFF) {
+ PchPolicy->DmiConfig.DmiAspm = TRUE;
+ } else {
+ PchPolicy->DmiConfig.DmiAspm = FALSE;
+ }
+ }
+ DEBUG((DEBUG_ERROR, "PchPolicy->DmiConfig.DmiAspm =%x\n", PchPolicy->DmiConfig.DmiAspm));
+ //
+ // PCI express config
+ //
+ PchPolicy->PcieConfig.DisableRootPortClockGating = SetupVariables->PcieClockGatingDisabled;
+ PchPolicy->PcieConfig.EnablePort8xhDecode = PchRcVariables->PcieRootPort8xhDecode;
+ PchPolicy->PcieConfig.PchPciePort8xhDecodePortIndex = PchRcVariables->Pcie8xhDecodePortIndex;
+ PchPolicy->PcieConfig.EnablePeerMemoryWrite = PchRcVariables->PcieRootPortPeerMemoryWriteEnable;
+ PchPolicy->PcieConfig.ComplianceTestMode = PchRcVariables->PcieComplianceTestMode;
+
+ ///
+ /// Temporary WA: Force Link speed on BMC board to GEN1
+ /// TODO: remove this WA together with Purley platforms support
+ ///
+ BmcRootPort = PcdGet8 (PcdOemSkuBmcPciePortNumber);
+ if ((BmcRootPort != 0xFF) && (BmcRootPort < ARRAY_SIZE(PchRcVariables->PcieRootPortSpeed))) {
+ DEBUG ((DEBUG_INFO, "WA Force Link Speed to GEN1: PciePort: %d", BmcRootPort));
+ PchRcVariables->PcieRootPortSpeed[BmcRootPort] = 1;
+ }
+ for (Index = 0; Index < DynamicSiLibraryPpi->GetPchMaxPciePortNum (); Index++) {
+ PchPolicy->PcieConfig.RootPort[Index].Enable = PchRcVariables->PcieRootPortEn[Index];
+ PchPolicy->PcieConfig.RootPort[Index].PhysicalSlotNumber = (UINT8) Index;
+ if (PchRcVariables->PchPcieGlobalAspm > PchPcieAspmDisabled) {
+ // Disabled a.k.a. Per individual port
+ PchPolicy->PcieConfig.RootPort[Index].Aspm = PchRcVariables->PchPcieGlobalAspm;
+ } else {
+ PchPolicy->PcieConfig.RootPort[Index].Aspm = PchRcVariables->PcieRootPortAspm[Index];
+ }
+ PchPolicy->PcieConfig.RootPort[Index].L1Substates = PchRcVariables->PcieRootPortL1SubStates[Index];
+ PchPolicy->PcieConfig.RootPort[Index].AcsEnabled = PchRcVariables->PcieRootPortACS[Index];
+ PchPolicy->PcieConfig.RootPort[Index].PmSci = PchRcVariables->PcieRootPortPMCE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].HotPlug = PchRcVariables->PcieRootPortHPE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].AdvancedErrorReporting = PchRcVariables->PcieRootPortAER[Index];
+ PchPolicy->PcieConfig.RootPort[Index].UnsupportedRequestReport = PchRcVariables->PcieRootPortURE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].FatalErrorReport = PchRcVariables->PcieRootPortFEE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].NoFatalErrorReport = PchRcVariables->PcieRootPortNFE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].CorrectableErrorReport = PchRcVariables->PcieRootPortCEE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SystemErrorOnFatalError = PchRcVariables->PcieRootPortSFE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SystemErrorOnNonFatalError = PchRcVariables->PcieRootPortSNE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SystemErrorOnCorrectableError = PchRcVariables->PcieRootPortSCE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].TransmitterHalfSwing = PchRcVariables->PcieRootPortTHS[Index];
+ PchPolicy->PcieConfig.RootPort[Index].CompletionTimeout = PchRcVariables->PcieRootPortCompletionTimeout[Index];
+ PchPolicy->PcieConfig.RootPort[Index].PcieSpeed = PchRcVariables->PcieRootPortSpeed[Index];
+
+ PchPolicy->PcieConfig.RootPort[Index].MaxPayload = PchRcVariables->PcieRootPortMaxPayLoadSize[Index];
+ PchPolicy->PcieConfig.RootPort[Index].Gen3EqPh3Method = PchRcVariables->PcieRootPortEqPh3Method[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SlotImplemented = TRUE;
+ }
+ PchPolicy->PcieConfig.RootPort[BmcRootPort].SlotImplemented = FALSE;
+
+ for (Index = 0; Index < DynamicSiLibraryPpi->GetPchMaxPciePortNum (); ++Index) {
+ PchPolicy->PcieConfig.EqPh3LaneParam[Index].Cm = PchRcVariables->PcieLaneCm[Index];
+ PchPolicy->PcieConfig.EqPh3LaneParam[Index].Cp = PchRcVariables->PcieLaneCp[Index];
+ }
+ if (PchRcVariables->PcieSwEqOverride) {
+ for (Index = 0; Index < PCH_PCIE_SWEQ_COEFFS_MAX; Index++) {
+ PchPolicy->PcieConfig2.SwEqCoeffList[Index].Cm = PchRcVariables->PcieSwEqCoeffCm[Index];
+ PchPolicy->PcieConfig2.SwEqCoeffList[Index].Cp = PchRcVariables->PcieSwEqCoeffCp[Index];
+ }
+ }
+
+ PchPolicy->PcieConfig.MaxReadRequestSize = PchRcVariables->PcieRootPortMaxReadRequestSize;
+ ///
+ /// Update Competion Timeout settings for Upling ports for Server PCH
+ ///
+ PchPolicy->PcieConfig.PchPcieUX16CompletionTimeout = PchRcVariables->PchPcieUX16CompletionTimeout;
+ PchPolicy->PcieConfig.PchPcieUX8CompletionTimeout = PchRcVariables->PchPcieUX8CompletionTimeout;
+ ///
+ /// Update Max Payload Size settings for Upling ports for Server PCH
+ ///
+ PchPolicy->PcieConfig.PchPcieUX16MaxPayload = PchRcVariables->PchPcieUX16MaxPayloadSize;
+ PchPolicy->PcieConfig.PchPcieUX8MaxPayload = PchRcVariables->PchPcieUX8MaxPayloadSize;
+ CopyMem (&VTdSupport, (UINT8 *)PcdGetPtr(PcdSocketIioConfig) + OFFSET_OF(SOCKET_IIO_CONFIGURATION, VTdSupport), sizeof(VTdSupport));
+ PchPolicy->PcieConfig.VTdSupport = VTdSupport;
+ if (DynamicSiLibraryPpi->X2ApicIdDetect (NULL)) {
+ PchPolicy->PcieConfig.VTdSupport = TRUE;
+ }
+ ///
+ /// Assign ClkReq signal to root port. (Base 0)
+ /// For LP, Set 0 - 5
+ /// For H, Set 0 - 15
+ /// Note that if GbE is enabled, ClkReq assigned to GbE will not be available for Root Port. (TODO for Purley)
+ ///
+ //
+ // HdAudioConfig
+ //
+ PchPolicy->HdAudioConfig.Enable = PchRcVariables->PchHdAudio;
+ PchPolicy->HdAudioConfig.DspEnable = FALSE;
+ PchPolicy->HdAudioConfig.Pme = PchRcVariables->PchHdAudioPme;
+ PchPolicy->HdAudioConfig.IoBufferOwnership = PchRcVariables->PchHdAudioIoBufferOwnership;
+ PchPolicy->HdAudioConfig.IoBufferVoltage = PchRcVariables->PchHdAudioIoBufferVoltage;
+ PchPolicy->HdAudioConfig.ResetWaitTimer = 300;
+ PchPolicy->HdAudioConfig.IDispCodecDisconnect = TRUE; //iDisp is permanently disabled
+ for(Index = 0; Index < HDAUDIO_FEATURES; Index++) {
+ PchPolicy->HdAudioConfig.DspFeatureMask |= (UINT32)(PchRcVariables->PchHdAudioFeature[Index] ? (1 << Index) : 0);
+ }
+
+ for(Index = 0; Index < HDAUDIO_PP_MODULES; Index++) {
+ PchPolicy->HdAudioConfig.DspPpModuleMask |= (UINT32)(PchRcVariables->PchHdAudioPostProcessingMod[Index] ? (1 << Index) : 0);
+ }
+
+ if (PchPolicy->HdAudioConfig.Enable) {
+ InstallPlatformVerbTables (PchRcVariables->PchHdAudioCodecSelect);
+ }
+
+ PchPolicy->HdAudioConfig.VcType = PchRcVariables->DfxHdaVcType;
+ //
+ // LockDown
+ //
+
+
+ PchPolicy->LockDownConfig.RtcLock = PchRcVariables->PchRtcLock;
+ PchPolicy->LockDownConfig.SpiEiss = TRUE;
+ PchPolicy->LockDownConfig.GlobalSmi = TRUE;
+ PchPolicy->LockDownConfig.BiosInterface = TRUE;
+ PchPolicy->LockDownConfig.GpioLockDown = PchRcVariables->PchGpioLockDown;
+ PchPolicy->LockDownConfig.TcoLock = TRUE;
+
+ if(PchRcVariables->PchP2sbUnlock) {
+ PchPolicy->P2sbConfig.SbiUnlock = TRUE;
+ PchPolicy->P2sbConfig.PsfUnlock = TRUE;
+ } else {
+ PchPolicy->P2sbConfig.SbiUnlock = FALSE;
+ PchPolicy->P2sbConfig.PsfUnlock = FALSE;
+ }
+ PchPolicy->P2sbConfig.P2SbReveal = PchRcVariables->PchP2sbDevReveal;
+
+ //
+ // Update SPI policies
+ //
+ PchPolicy->SpiConfig.ShowSpiController = TRUE;
+
+ PchPolicy->PmConfig.PmcReadDisable = TRUE;
+
+ if (PchRcVariables->PchAdrEn != PLATFORM_POR) {
+ PchPolicy->AdrConfig.PchAdrEn = PchRcVariables->PchAdrEn;
+ }
+ PchPolicy->AdrConfig.AdrGpioSel = PchRcVariables->AdrGpioSel;
+ if (PchRcVariables->AdrHostPartitionReset != PLATFORM_POR) {
+ PchPolicy->AdrConfig.AdrHostPartitionReset = PchRcVariables->AdrHostPartitionReset;
+ }
+ if (PchRcVariables->AdrTimerEn != PLATFORM_POR) {
+ PchPolicy->AdrConfig.AdrTimerEn = PchRcVariables->AdrTimerEn;
+ }
+ if (PchRcVariables->AdrTimerVal != ADR_TMR_SETUP_DEFAULT_POR) {
+ PchPolicy->AdrConfig.AdrTimerVal = PchRcVariables->AdrTimerVal;
+ }
+ if (PchRcVariables->AdrMultiplierVal != ADR_MULT_SETUP_DEFAULT_POR) {
+ PchPolicy->AdrConfig.AdrMultiplierVal = PchRcVariables->AdrMultiplierVal;
+ }
+
+ //
+ // Thermal Config
+ //
+ if ((PchRcVariables->MemoryThermalManagement != FALSE) &&
+ ((PchRcVariables->ExttsViaTsOnBoard != FALSE) || (PchRcVariables->ExttsViaTsOnDimm != FALSE)))
+ {
+ PchPolicy->ThermalConfig.MemoryThrottling.Enable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioC].PmsyncEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioD].PmsyncEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioC].C0TransmitEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioD].C0TransmitEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioC].PinSelection = 1;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioD].PinSelection = 0;
+ } else {
+ PchPolicy->ThermalConfig.MemoryThrottling.Enable = FALSE;
+ }
+
+ //
+ // IOAPIC Config
+ //
+ PchPolicy->IoApicConfig.IoApicEntry24_119 = PchRcVariables->PchIoApic24119Entries;
+ PchPolicy->IoApicConfig.BdfValid = 1;
+ PchPolicy->IoApicConfig.BusNumber = PCI_BUS_NUMBER_PCH_IOAPIC;
+ PchPolicy->IoApicConfig.DeviceNumber = PCI_DEVICE_NUMBER_PCH_IOAPIC;
+ PchPolicy->IoApicConfig.FunctionNumber = PCI_FUNCTION_NUMBER_PCH_IOAPIC;
+
+ PchPolicy->HpetConfig.BdfValid = 1;
+ PchPolicy->HpetConfig.BusNumber = PCI_BUS_NUMBER_PCH_HPET;
+ PchPolicy->HpetConfig.DeviceNumber = PCI_DEVICE_NUMBER_PCH_HPET;
+ PchPolicy->HpetConfig.FunctionNumber = PCI_FUNCTION_NUMBER_PCH_HPET0;
+
+ PchPolicy->PchInterruptConfig.ShutdownPolicySelect = PchRcVariables->ShutdownPolicySelect;
+ //
+ // Misc PM Config
+ //
+ PchPolicy->PmConfig.PchDeepSxPol = PchRcVariables->DeepSxMode;
+ PchPolicy->PmConfig.WakeConfig.WolEnableOverride = PchRcVariables->PchWakeOnLan;
+ PchPolicy->PmConfig.WakeConfig.WoWlanEnable = PchRcVariables->PchWakeOnWlan;
+ PchPolicy->PmConfig.WakeConfig.WoWlanDeepSxEnable = PchRcVariables->PchWakeOnWlanDeepSx;
+ PchPolicy->PmConfig.WakeConfig.Gp27WakeFromDeepSx = PchRcVariables->Gp27WakeFromDeepSx;
+ PchPolicy->PmConfig.SlpLanLowDc = PchRcVariables->PchSlpLanLowDc;
+ PchPolicy->PmConfig.PowerResetStatusClear.MeWakeSts = TRUE;
+ PchPolicy->PmConfig.PowerResetStatusClear.MeHrstColdSts = TRUE;
+ PchPolicy->PmConfig.PowerResetStatusClear.MeHrstWarmSts = TRUE;
+ PchPolicy->PmConfig.PciePllSsc = PchRcVariables->PciePllSsc;
+ PchPolicy->PmConfig.Dwr_BmcRootPort = PchRcVariables->Dwr_BmcRootPort;
+
+ PchPolicy->PmConfig.PchGbl2HostEn.Bits.PMCGBL = PchRcVariables->DwrEn_PMCGBL;
+ PchPolicy->PmConfig.PchGbl2HostEn.Bits.MEWDT = PchRcVariables->DwrEn_MEWDT;
+ PchPolicy->PmConfig.PchGbl2HostEn.Bits.IEWDT = PchRcVariables->DwrEn_IEWDT;
+
+ //
+ // DefaultSvidSid Config
+ //
+ PchPolicy->PchConfig.SubSystemVendorId = V_PCH_INTEL_VENDOR_ID;
+ PchPolicy->PchConfig.SubSystemId = V_PCH_DEFAULT_SID;
+ PchPolicy->PchConfig.EnableClockSpreadSpec = PchRcVariables->EnableClockSpreadSpec;
+ //
+ // Thermal Config
+ //
+ PchPolicy->ThermalConfig.ThermalThrottling.TTLevels.PchCrossThrottling = PchRcVariables->PchCrossThrottling;
+ PchPolicy->ThermalConfig.ThermalThrottling.DmiHaAWC.SuggestedSetting = TRUE;
+ if (PchRcVariables->ThermalDeviceEnable == PchThermalDeviceAuto) {
+ PchPolicy->ThermalConfig.ThermalDeviceEnable = PchThermalDeviceEnabledPci;
+ } else {
+ PchPolicy->ThermalConfig.ThermalDeviceEnable = PchRcVariables->ThermalDeviceEnable;
+ }
+
+ PchPolicy->ThermalConfig.ThermalThrottling.TTLevels.SuggestedSetting = TRUE;
+ PchPolicy->ThermalConfig.ThermalThrottling.SataTT.SuggestedSetting = TRUE;
+ PchPolicy->ThermalConfig.ThermalThrottling.sSataTT.SuggestedSetting = TRUE;
+
+ ///
+ ///Set PCHHOT# to 85C.
+ ///
+ PchPolicy->ThermalConfig.PchHotLevel = 0x10E;
+
+ // DCI (EXI)
+ //
+ PchPolicy->DciConfig.DciEn = DCI_DISABLE;
+ PchPolicy->DciConfig.DciAutoDetect = DCI_DISABLE;
+
+ //
+ // Initialize Serial IRQ Config
+ //
+ PchPolicy->SerialIrqConfig.SirqEnable = TRUE;
+ PchPolicy->SerialIrqConfig.StartFramePulse = PchSfpw4Clk;
+ if (PchRcVariables->PchSirqMode == 0) {
+ PchPolicy->SerialIrqConfig.SirqMode = PchQuietMode;
+ } else {
+ PchPolicy->SerialIrqConfig.SirqMode = PchContinuousMode;
+ }
+
+ //
+ // Port 61h emulation
+ //
+ PchPolicy->Port61hSmmConfig.Enable = TRUE;
+
+ //
+ // DMI configuration
+ //
+ PchPolicy->DmiConfig.DmiLinkDownHangBypass = PchRcVariables->DmiLinkDownHangBypass;
+ PchPolicy->DmiConfig.DmiStopAndScreamEnable = PchRcVariables->PcieDmiStopAndScreamEnable;
+
+ //
+ // Update Pch Usb Config
+ //
+ PlatformGetUsbOcMappings (
+ (USB_OVERCURRENT_PIN **) &Usb20OverCurrentMappings,
+ (USB_OVERCURRENT_PIN **) &Usb30OverCurrentMappings,
+ (USB2_PHY_PARAMETERS **) &Usb20AfeParams
+ );
+ UpdatePchUsbConfig (
+ &PchPolicy->UsbConfig,
+ SetupVariables,
+ PchRcVariables,
+ Usb20OverCurrentMappings,
+ Usb30OverCurrentMappings,
+ Usb20AfeParams
+ );
+
+ //
+ // Install PCIe device override table
+ //
+ InstallPcieDeviceTable (mPcieDeviceTable);
+
+ //
+ // Initialize PTSS board specyfic HSIO settings
+ //
+ InstallPlatformHsioPtssTable (PchRcVariables, PchPolicy);
+
+
+ PchPolicy->PchTraceHubConfig.PchTraceHubHide = TRUE;
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Performs silicon pre-mem policy update.
+
+ The meaning of Policy is defined by silicon code.
+ It could be the raw data, a handle, a PPI, etc.
+
+ The input Policy must be returned by SiliconPolicyDonePreMem().
+
+ 1) In FSP path, the input Policy should be FspmUpd.
+ A platform may use this API to update the FSPM UPD policy initialized
+ by the silicon module or the default UPD data.
+ The output of FSPM UPD data from this API is the final UPD data.
+
+ 2) In non-FSP path, the board may use additional way to get
+ the silicon policy data field based upon the input Policy.
+
+ @param[in, out] Policy Pointer to policy.
+
+ @return the updated policy.
+**/
+VOID *
+EFIAPI
+SiliconPolicyUpdatePreMem (
+ IN OUT VOID *Policy
+ )
+{
+ UpdatePeiPchPolicy (Policy);
+ return Policy;
+}
+
+/**
+ Performs silicon post-mem policy update.
+
+ The meaning of Policy is defined by silicon code.
+ It could be the raw data, a handle, a PPI, etc.
+
+ The input Policy must be returned by SiliconPolicyDonePostMem().
+
+ 1) In FSP path, the input Policy should be FspsUpd.
+ A platform may use this API to update the FSPS UPD policy initialized
+ by the silicon module or the default UPD data.
+ The output of FSPS UPD data from this API is the final UPD data.
+
+ 2) In non-FSP path, the board may use additional way to get
+ the silicon policy data field based upon the input Policy.
+
+ @param[in, out] Policy Pointer to policy.
+
+ @return the updated policy.
+**/
+VOID *
+EFIAPI
+SiliconPolicyUpdatePostMem (
+ IN OUT VOID *Policy
+ )
+{
+ return Policy;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
new file mode 100644
index 0000000000..5c9d1a5a06
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
@@ -0,0 +1,64 @@
+## @file
+# Module Infomation file
+#
+# @copyright
+# Copyright 2011 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SiliconPolicyUpdateLib
+ FILE_GUID = 6EA9585C-3C15-47da-9FFC-25E9E4EA4D0C
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SiliconPolicyUpdateLib
+
+[Sources]
+ SiliconPolicyUpdateLib.c
+ PchPolicyUpdateUsb.c
+
+[Packages]
+ MdeModulePkg/MdeModulePkg.dec
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ HobLib
+ IoLib
+ PcdLib
+ UbaPlatLib
+
+[Pcd]
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision
+ gOemSkuTokenSpaceGuid.PcdOemSkuBmcPciePortNumber
+
+ gStructPcdTokenSpaceGuid.PcdSocketIioConfig
+ gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig
+ gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig
+ gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig
+ gStructPcdTokenSpaceGuid.PcdSetup
+ gStructPcdTokenSpaceGuid.PcdPchSetup
+ gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig
+
+[Guids]
+ gEfiAcpiVariableGuid
+
+[Ppis]
+ gPchPcieDeviceTablePpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c
new file mode 100644
index 0000000000..f9fa6dfe64
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c
@@ -0,0 +1,770 @@
+/** @file
+ This file is SampleCode of the library for Intel PCH PEI Policy initialzation.
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+
+#include "Guid/SetupVariable.h"
+#include <PchSetupVariable.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Library/PeiServicesLib.h>
+
+#include <PchAccess.h>
+#include <Ppi/PchPolicy.h>
+
+#include <Register/PchRegsSata.h>
+#include <Library/HobLib.h>
+#include <Platform.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HobLib.h>
+#include <Guid/GlobalVariable.h>
+#include <Ppi/PchPcieDeviceTable.h>
+#include <Guid/SocketVariable.h>
+#include <Library/PcdLib.h>
+#include <Library/PchInfoLib.h>
+#include <Library/UbaUsbOcUpdateLib.h>
+#include <Library/UbaHsioPtssTableConfigLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <FspmUpd.h>
+
+//
+// Haddock Creek
+//
+#define DIMM_SMB_SPD_P0C0D0_HC 0xA2
+#define DIMM_SMB_SPD_P0C0D1_HC 0xA0
+#define DIMM_SMB_SPD_P0C1D0_HC 0xA6
+#define DIMM_SMB_SPD_P0C1D1_HC 0xA4
+#define DIMM_SMB_SPD_P0C0D2_HC 0xAA
+#define DIMM_SMB_SPD_P0C1D2_HC 0xA8
+
+//
+// Sawtooth Peak
+// Single SPD EEPROM at 0xA2 serves both C0D0 and C1D0 (LPDDR is 1DPC only)
+//
+#define DIMM_SMB_SPD_P0C0D0_STP 0xA2
+#define DIMM_SMB_SPD_P0C0D1_STP 0xA0
+#define DIMM_SMB_SPD_P0C1D0_STP 0xA2
+#define DIMM_SMB_SPD_P0C1D1_STP 0xA0
+
+//
+// Aden Hills
+// DDR4 System (1DPC)
+//
+#define DIMM_SMB_SPD_P0C0D0_AH 0xA0
+#define DIMM_SMB_SPD_P0C0D1_AH 0xA4
+#define DIMM_SMB_SPD_P0C1D0_AH 0xA2
+#define DIMM_SMB_SPD_P0C1D1_AH 0xA6
+
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusHCRsvdAddresses[] = {
+ DIMM_SMB_SPD_P0C0D0_HC,
+ DIMM_SMB_SPD_P0C0D1_HC,
+ DIMM_SMB_SPD_P0C1D0_HC,
+ DIMM_SMB_SPD_P0C1D1_HC
+};
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusSTPRsvdAddresses[] = {
+ DIMM_SMB_SPD_P0C0D0_STP,
+ DIMM_SMB_SPD_P0C0D1_STP,
+ DIMM_SMB_SPD_P0C1D0_STP,
+ DIMM_SMB_SPD_P0C1D1_STP
+};
+
+GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusAHRsvdAddresses[] = {
+ DIMM_SMB_SPD_P0C0D0_AH,
+ DIMM_SMB_SPD_P0C0D1_AH,
+ DIMM_SMB_SPD_P0C1D0_AH,
+ DIMM_SMB_SPD_P0C1D1_AH
+};
+
+#define PCI_CLASS_NETWORK 0x02
+#define PCI_CLASS_NETWORK_ETHERNET 0x00
+#define PCI_CLASS_NETWORK_OTHER 0x80
+
+
+GLOBAL_REMOVE_IF_UNREFERENCED PCH_PCIE_DEVICE_OVERRIDE mPcieDeviceTable[] = {
+ //
+ // Intel PRO/Wireless
+ //
+ { 0x8086, 0x422b, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x422c, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x4238, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x4239, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel WiMAX/WiFi Link
+ //
+ { 0x8086, 0x0082, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0085, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0083, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0084, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0086, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0087, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0088, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0089, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x008F, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0090, 0xff, 0xff, 0xff, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Crane Peak WLAN NIC
+ //
+ { 0x8086, 0x08AE, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x08AF, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Crane Peak w/BT WLAN NIC
+ //
+ { 0x8086, 0x0896, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0897, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Kelsey Peak WiFi, WiMax
+ //
+ { 0x8086, 0x0885, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0886, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 105
+ //
+ { 0x8086, 0x0894, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0895, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 135
+ //
+ { 0x8086, 0x0892, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0893, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 2200
+ //
+ { 0x8086, 0x0890, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0891, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 2230
+ //
+ { 0x8086, 0x0887, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x0888, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel Centrino Wireless-N 6235
+ //
+ { 0x8086, 0x088E, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x088F, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel CampPeak 2 Wifi
+ //
+ { 0x8086, 0x08B5, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ { 0x8086, 0x08B6, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+ //
+ // Intel WilkinsPeak 1 Wifi
+ //
+ { 0x8086, 0x08B3, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B3, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ { 0x8086, 0x08B4, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B4, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ //
+ // Intel Wilkins Peak 2 Wifi
+ //
+ { 0x8086, 0x08B1, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B1, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ { 0x8086, 0x08B2, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2AndL1SubstatesOverride, 0x0154, 0x00000003 },
+ { 0x8086, 0x08B2, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1SubstatesOverride, 0x0158, 0x00000003 },
+ //
+ // Intel Wilkins Peak PF Wifi
+ //
+ { 0x8086, 0x08B0, 0xff, PCI_CLASS_NETWORK, PCI_CLASS_NETWORK_OTHER, PchPcieAspmL1, PchPcieL1L2Override, 0, 0 },
+
+ //
+ // End of Table
+ //
+ { 0 }
+};
+
+STATIC
+EFI_STATUS
+InstallPcieDeviceTable (
+ IN PCH_PCIE_DEVICE_OVERRIDE *DeviceTable
+ )
+{
+ EFI_PEI_PPI_DESCRIPTOR *DeviceTablePpiDesc;
+ EFI_STATUS Status;
+
+ DeviceTablePpiDesc = (EFI_PEI_PPI_DESCRIPTOR *) AllocateZeroPool (sizeof (EFI_PEI_PPI_DESCRIPTOR));
+ ASSERT (DeviceTablePpiDesc != NULL);
+
+ if (DeviceTablePpiDesc == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ DeviceTablePpiDesc->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
+ DeviceTablePpiDesc->Guid = &gPchPcieDeviceTablePpiGuid;
+ DeviceTablePpiDesc->Ppi = DeviceTable;
+
+ Status = PeiServicesInstallPpi (DeviceTablePpiDesc);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
+
+VOID
+UpdatePchUsbConfig (
+ IN PCH_USB_CONFIG *PchUsbConfig,
+ IN SYSTEM_CONFIGURATION *SetupVariables,
+ IN PCH_SETUP *PchRcVariables,
+ IN VOID *Usb20OverCurrentMappings,
+ IN VOID *Usb30OverCurrentMappings,
+ IN VOID *Usb20AfeParams
+ );
+
+static
+VOID
+InstallPlatformVerbTables (
+ IN UINTN CodecType
+ )
+{
+
+}
+
+EFI_STATUS
+EFIAPI
+UpdatePeiPchPolicy (
+ IN OUT PCH_POLICY_PPI *PchPolicy
+ )
+/*++
+
+Routine Description:
+
+ This function performs PCH PEI Policy initialzation.
+
+Arguments:
+
+ PchPolicy The PCH Policy PPI instance
+
+Returns:
+
+ EFI_SUCCESS The PPI is installed and initialized.
+ EFI ERRORS The PPI is not successfully installed.
+ EFI_OUT_OF_RESOURCES Do not have enough resources to initialize the driver
+
+--*/
+{
+ UINT8 Index;
+ UINTN LpcBaseAddress;
+ UINT8 MaxSataPorts;
+ UINT8 BmcRootPort;
+ UINT8 *SmBusReservedTable;
+ UINT8 SmBusReservedNum;
+ USB_OVERCURRENT_PIN *Usb20OverCurrentMappings=NULL;
+ USB_OVERCURRENT_PIN *Usb30OverCurrentMappings=NULL;
+ USB2_PHY_PARAMETERS *Usb20AfeParams = NULL;
+ UINT8 VTdSupport;
+ SYSTEM_CONFIGURATION *SetupVariables;
+ PCH_SETUP *PchRcVariables;
+ FSPM_UPD *FspmUpd;
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ DEBUG((DEBUG_INFO, "platform common UpdatePeiPchPolicy entry\n"));
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ FspmUpd = (FSPM_UPD *) PcdGet32 (PcdFspmUpdDataAddress);
+ ASSERT (FspmUpd != NULL);
+ SetupVariables = PcdGetPtr(PcdSetup);
+ PchRcVariables = PcdGetPtr(PcdPchSetup);
+
+ LpcBaseAddress = DynamicSiLibraryPpi->MmPciBase (
+ DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_LPC,
+ PCI_FUNCTION_NUMBER_PCH_LPC
+ );
+
+ PchPolicy->Port80Route = PchRcVariables->IchPort80Route;
+
+ //
+ // DeviceEnables
+ //
+ if (DynamicSiLibraryPpi->PchIsGbeAvailable ()) {
+ PchPolicy->LanConfig.Enable = TRUE;
+ PchPolicy->LanConfig.K1OffEnable = PchRcVariables->PchLanK1Off;
+ } else {
+ PchPolicy->LanConfig.Enable = FALSE;
+ }
+
+ PchPolicy->SataConfig.Enable = PchRcVariables->PchSata;
+
+ PchPolicy->sSataConfig.Enable = PchRcVariables->PchsSata;
+ PchPolicy->SmbusConfig.Enable = TRUE;
+ //
+ // CLOCKRUN in LPC has to be disabled:
+ // - if a device is connected to LPC0
+ // - for LBG A0 stepping
+ //
+ PchPolicy->PmConfig.PciClockRun = FALSE;
+ PchPolicy->PchConfig.Crid = PchRcVariables->PchCrid;
+ PchPolicy->PchConfig.Serm = PchRcVariables->PchSerm;
+
+ //
+ // SMBUS reserved addresses
+ //
+ SmBusReservedTable = NULL;
+ SmBusReservedNum = 0;
+ PchPolicy->SmbusConfig.SmbusIoBase = PCH_SMBUS_BASE_ADDRESS;
+ SmBusReservedTable = mSmbusSTPRsvdAddresses;
+ SmBusReservedNum = sizeof (mSmbusSTPRsvdAddresses);
+
+ if (SmBusReservedTable != NULL) {
+ PchPolicy->SmbusConfig.NumRsvdSmbusAddresses = SmBusReservedNum;
+ CopyMem (
+ PchPolicy->SmbusConfig.RsvdSmbusAddressTable,
+ SmBusReservedTable,
+ SmBusReservedNum
+ );
+ }
+
+ //
+ // SATA Config
+ //
+ PchPolicy->SataConfig.SataMode = PchRcVariables->SataInterfaceMode;
+ MaxSataPorts = DynamicSiLibraryPpi->GetPchMaxSataPortNum ();
+
+ for (Index = 0; Index < MaxSataPorts; Index++) {
+ if (PchRcVariables->SataTestMode == TRUE)
+ {
+ PchPolicy->SataConfig.PortSettings[Index].Enable = TRUE;
+ } else {
+ PchPolicy->SataConfig.PortSettings[Index].Enable = PchRcVariables->SataPort[Index];
+ }
+ PchPolicy->SataConfig.PortSettings[Index].HotPlug = PchRcVariables->SataHotPlug[Index];
+ PchPolicy->SataConfig.PortSettings[Index].SpinUp = PchRcVariables->SataSpinUp[Index];
+ PchPolicy->SataConfig.PortSettings[Index].External = PchRcVariables->SataExternal[Index];
+ PchPolicy->SataConfig.PortSettings[Index].DevSlp = PchRcVariables->PxDevSlp[Index];
+ PchPolicy->SataConfig.PortSettings[Index].EnableDitoConfig = PchRcVariables->EnableDitoConfig[Index];
+ PchPolicy->SataConfig.PortSettings[Index].DmVal = PchRcVariables->DmVal[Index];
+ PchPolicy->SataConfig.PortSettings[Index].DitoVal = PchRcVariables->DitoVal[Index];
+ PchPolicy->SataConfig.PortSettings[Index].SolidStateDrive = PchRcVariables->SataType[Index];
+ }
+
+ if (PchPolicy->SataConfig.SataMode == PchSataModeRaid) {
+ PchPolicy->SataConfig.Rst.RaidAlternateId = PchRcVariables->SataAlternateId;
+ PchPolicy->SataConfig.Rst.EfiRaidDriverLoad = PchRcVariables->SataRaidLoadEfiDriver[0];
+ }
+ PchPolicy->SataConfig.Rst.Raid0 = PchRcVariables->SataRaidR0;
+ PchPolicy->SataConfig.Rst.Raid1 = PchRcVariables->SataRaidR1;
+ PchPolicy->SataConfig.Rst.Raid10 = PchRcVariables->SataRaidR10;
+ PchPolicy->SataConfig.Rst.Raid5 = PchRcVariables->SataRaidR5;
+ PchPolicy->SataConfig.Rst.Irrt = PchRcVariables->SataRaidIrrt;
+ PchPolicy->SataConfig.Rst.OromUiBanner = PchRcVariables->SataRaidOub;
+ PchPolicy->SataConfig.Rst.HddUnlock = PchRcVariables->SataHddlk;
+ PchPolicy->SataConfig.Rst.LedLocate = PchRcVariables->SataLedl;
+ PchPolicy->SataConfig.Rst.IrrtOnly = PchRcVariables->SataRaidIooe;
+ PchPolicy->SataConfig.Rst.SmartStorage = PchRcVariables->SataRaidSrt;
+ PchPolicy->SataConfig.Rst.OromUiDelay = PchRcVariables->SataRaidOromDelay;
+
+ PchPolicy->SataConfig.EnclosureSupport = TRUE;
+
+ PchPolicy->SataConfig.SalpSupport = PchRcVariables->SataSalp;
+ PchPolicy->SataConfig.TestMode = PchRcVariables->SataTestMode;
+
+ for (Index = 0; Index < PCH_MAX_RST_PCIE_STORAGE_CR; Index++) {
+ if ((PchRcVariables->PchSata == TRUE) && (PchRcVariables->SataInterfaceMode == PchSataModeRaid)) {
+ PchPolicy->SataConfig.RstPcieStorageRemap[Index].Enable = PchRcVariables->RstPcieStorageRemap[Index];
+ PchPolicy->SataConfig.RstPcieStorageRemap[Index].RstPcieStoragePort = PchRcVariables->RstPcieStorageRemapPort[Index];
+ } else {
+ PchPolicy->SataConfig.RstPcieStorageRemap[Index].Enable = FALSE;
+ }
+ }
+
+ //
+ // sSATA Config
+ //
+ PchPolicy->sSataConfig.SataMode = PchRcVariables->sSataInterfaceMode;
+ MaxSataPorts = DynamicSiLibraryPpi->GetPchMaxsSataPortNum ();
+
+ for (Index = 0; Index < MaxSataPorts; Index++) {
+ if (PchRcVariables->sSataTestMode == TRUE)
+ {
+ PchPolicy->sSataConfig.PortSettings[Index].Enable = TRUE;
+ } else {
+ PchPolicy->sSataConfig.PortSettings[Index].Enable = PchRcVariables->sSataPort[Index];
+ }
+ PchPolicy->sSataConfig.PortSettings[Index].HotPlug = PchRcVariables->sSataHotPlug[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].SpinUp = PchRcVariables->sSataSpinUp[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].External = PchRcVariables->sSataExternal[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].DevSlp = PchRcVariables->sPxDevSlp[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].EnableDitoConfig = PchRcVariables->sEnableDitoConfig[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].DmVal = PchRcVariables->sDmVal[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].DitoVal = PchRcVariables->sDitoVal[Index];
+ PchPolicy->sSataConfig.PortSettings[Index].SolidStateDrive = PchRcVariables->sSataType[Index];
+ }
+
+ if (PchPolicy->sSataConfig.SataMode == PchSataModeRaid) {
+ PchPolicy->sSataConfig.Rst.RaidAlternateId = PchRcVariables->sSataAlternateId;
+ PchPolicy->sSataConfig.Rst.EfiRaidDriverLoad = PchRcVariables->SataRaidLoadEfiDriver[0];;
+ }
+ PchPolicy->sSataConfig.Rst.Raid0 = PchRcVariables->sSataRaidR0;
+ PchPolicy->sSataConfig.Rst.Raid1 = PchRcVariables->sSataRaidR1;
+ PchPolicy->sSataConfig.Rst.Raid10 = PchRcVariables->sSataRaidR10;
+ PchPolicy->sSataConfig.Rst.Raid5 = PchRcVariables->sSataRaidR5;
+ PchPolicy->sSataConfig.Rst.Irrt = PchRcVariables->sSataRaidIrrt;
+ PchPolicy->sSataConfig.Rst.OromUiBanner = PchRcVariables->sSataRaidOub;
+ PchPolicy->sSataConfig.Rst.HddUnlock = PchRcVariables->sSataHddlk;
+ PchPolicy->sSataConfig.Rst.LedLocate = PchRcVariables->sSataLedl;
+ PchPolicy->sSataConfig.Rst.IrrtOnly = PchRcVariables->sSataRaidIooe;
+ PchPolicy->sSataConfig.Rst.SmartStorage = PchRcVariables->sSataRaidSrt;
+ PchPolicy->sSataConfig.Rst.OromUiDelay = PchRcVariables->sSataRaidOromDelay;
+
+ PchPolicy->sSataConfig.EnclosureSupport = TRUE;
+
+ PchPolicy->sSataConfig.SalpSupport = PchRcVariables->sSataSalp;
+ PchPolicy->sSataConfig.TestMode = PchRcVariables->sSataTestMode;
+ //
+ // Initiate DMI Configuration
+ //
+ if (SetupVariables->PcieDmiAspm != PLATFORM_POR) {
+ if (SetupVariables->PcieDmiAspm != 0xFF) {
+ PchPolicy->DmiConfig.DmiAspm = TRUE;
+ } else {
+ PchPolicy->DmiConfig.DmiAspm = FALSE;
+ }
+ }
+ DEBUG((DEBUG_ERROR, "PchPolicy->DmiConfig.DmiAspm =%x\n", PchPolicy->DmiConfig.DmiAspm));
+ //
+ // PCI express config
+ //
+ PchPolicy->PcieConfig.DisableRootPortClockGating = SetupVariables->PcieClockGatingDisabled;
+ PchPolicy->PcieConfig.EnablePort8xhDecode = PchRcVariables->PcieRootPort8xhDecode;
+ PchPolicy->PcieConfig.PchPciePort8xhDecodePortIndex = PchRcVariables->Pcie8xhDecodePortIndex;
+ PchPolicy->PcieConfig.EnablePeerMemoryWrite = PchRcVariables->PcieRootPortPeerMemoryWriteEnable;
+ PchPolicy->PcieConfig.ComplianceTestMode = PchRcVariables->PcieComplianceTestMode;
+
+ ///
+ /// Temporary WA: Force Link speed on BMC board to GEN1
+ /// TODO: remove this WA together with Purley platforms support
+ ///
+ BmcRootPort = PcdGet8(PcdOemSkuBmcPciePortNumber);
+ if ((BmcRootPort != 0xFF) && (BmcRootPort < ARRAY_SIZE(PchRcVariables->PcieRootPortSpeed))) {
+ DEBUG ((DEBUG_INFO, "WA Force Link Speed to GEN1: PciePort: %d", BmcRootPort));
+ PchRcVariables->PcieRootPortSpeed[BmcRootPort] = 1;
+ }
+ for (Index = 0; Index < DynamicSiLibraryPpi->GetPchMaxPciePortNum (); Index++) {
+ PchPolicy->PcieConfig.RootPort[Index].Enable = PchRcVariables->PcieRootPortEn[Index];
+ PchPolicy->PcieConfig.RootPort[Index].PhysicalSlotNumber = (UINT8) Index;
+ if (PchRcVariables->PchPcieGlobalAspm > PchPcieAspmDisabled) {
+ // Disabled a.k.a. Per individual port
+ PchPolicy->PcieConfig.RootPort[Index].Aspm = PchRcVariables->PchPcieGlobalAspm;
+ } else {
+ PchPolicy->PcieConfig.RootPort[Index].Aspm = PchRcVariables->PcieRootPortAspm[Index];
+ }
+ PchPolicy->PcieConfig.RootPort[Index].L1Substates = PchRcVariables->PcieRootPortL1SubStates[Index];
+ PchPolicy->PcieConfig.RootPort[Index].AcsEnabled = PchRcVariables->PcieRootPortACS[Index];
+ PchPolicy->PcieConfig.RootPort[Index].PmSci = PchRcVariables->PcieRootPortPMCE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].HotPlug = PchRcVariables->PcieRootPortHPE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].AdvancedErrorReporting = PchRcVariables->PcieRootPortAER[Index];
+ PchPolicy->PcieConfig.RootPort[Index].UnsupportedRequestReport = PchRcVariables->PcieRootPortURE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].FatalErrorReport = PchRcVariables->PcieRootPortFEE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].NoFatalErrorReport = PchRcVariables->PcieRootPortNFE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].CorrectableErrorReport = PchRcVariables->PcieRootPortCEE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SystemErrorOnFatalError = PchRcVariables->PcieRootPortSFE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SystemErrorOnNonFatalError = PchRcVariables->PcieRootPortSNE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SystemErrorOnCorrectableError = PchRcVariables->PcieRootPortSCE[Index];
+ PchPolicy->PcieConfig.RootPort[Index].TransmitterHalfSwing = PchRcVariables->PcieRootPortTHS[Index];
+ PchPolicy->PcieConfig.RootPort[Index].CompletionTimeout = PchRcVariables->PcieRootPortCompletionTimeout[Index];
+ PchPolicy->PcieConfig.RootPort[Index].PcieSpeed = PchRcVariables->PcieRootPortSpeed[Index];
+
+ PchPolicy->PcieConfig.RootPort[Index].MaxPayload = PchRcVariables->PcieRootPortMaxPayLoadSize[Index];
+ PchPolicy->PcieConfig.RootPort[Index].Gen3EqPh3Method = PchRcVariables->PcieRootPortEqPh3Method[Index];
+ PchPolicy->PcieConfig.RootPort[Index].SlotImplemented = TRUE;
+ }
+ PchPolicy->PcieConfig.RootPort[BmcRootPort].SlotImplemented = FALSE;
+
+ for (Index = 0; Index < DynamicSiLibraryPpi->GetPchMaxPciePortNum (); ++Index) {
+ PchPolicy->PcieConfig.EqPh3LaneParam[Index].Cm = PchRcVariables->PcieLaneCm[Index];
+ PchPolicy->PcieConfig.EqPh3LaneParam[Index].Cp = PchRcVariables->PcieLaneCp[Index];
+ }
+ if (PchRcVariables->PcieSwEqOverride) {
+ for (Index = 0; Index < PCH_PCIE_SWEQ_COEFFS_MAX; Index++) {
+ PchPolicy->PcieConfig2.SwEqCoeffList[Index].Cm = PchRcVariables->PcieSwEqCoeffCm[Index];
+ PchPolicy->PcieConfig2.SwEqCoeffList[Index].Cp = PchRcVariables->PcieSwEqCoeffCp[Index];
+ }
+ }
+
+ PchPolicy->PcieConfig.MaxReadRequestSize = PchRcVariables->PcieRootPortMaxReadRequestSize;
+ ///
+ /// Update Competion Timeout settings for Upling ports for Server PCH
+ ///
+ PchPolicy->PcieConfig.PchPcieUX16CompletionTimeout = PchRcVariables->PchPcieUX16CompletionTimeout;
+ PchPolicy->PcieConfig.PchPcieUX8CompletionTimeout = PchRcVariables->PchPcieUX8CompletionTimeout;
+ ///
+ /// Update Max Payload Size settings for Upling ports for Server PCH
+ ///
+ PchPolicy->PcieConfig.PchPcieUX16MaxPayload = PchRcVariables->PchPcieUX16MaxPayloadSize;
+ PchPolicy->PcieConfig.PchPcieUX8MaxPayload = PchRcVariables->PchPcieUX8MaxPayloadSize;
+ CopyMem (&VTdSupport, (UINT8 *)PcdGetPtr(PcdSocketIioConfig) + OFFSET_OF(SOCKET_IIO_CONFIGURATION, VTdSupport), sizeof(VTdSupport));
+ PchPolicy->PcieConfig.VTdSupport = VTdSupport;
+
+ ///
+ /// Assign ClkReq signal to root port. (Base 0)
+ /// For LP, Set 0 - 5
+ /// For H, Set 0 - 15
+ /// Note that if GbE is enabled, ClkReq assigned to GbE will not be available for Root Port. (TODO for Purley)
+ ///
+ //
+ // HdAudioConfig
+ //
+ PchPolicy->HdAudioConfig.Enable = PchRcVariables->PchHdAudio;
+ PchPolicy->HdAudioConfig.DspEnable = FALSE;
+ PchPolicy->HdAudioConfig.Pme = PchRcVariables->PchHdAudioPme;
+ PchPolicy->HdAudioConfig.IoBufferOwnership = PchRcVariables->PchHdAudioIoBufferOwnership;
+ PchPolicy->HdAudioConfig.IoBufferVoltage = PchRcVariables->PchHdAudioIoBufferVoltage;
+ PchPolicy->HdAudioConfig.ResetWaitTimer = 300;
+ PchPolicy->HdAudioConfig.IDispCodecDisconnect = TRUE; //iDisp is permanently disabled
+ for(Index = 0; Index < HDAUDIO_FEATURES; Index++) {
+ PchPolicy->HdAudioConfig.DspFeatureMask |= (UINT32)(PchRcVariables->PchHdAudioFeature[Index] ? (1 << Index) : 0);
+ }
+
+ for(Index = 0; Index < HDAUDIO_PP_MODULES; Index++) {
+ PchPolicy->HdAudioConfig.DspPpModuleMask |= (UINT32)(PchRcVariables->PchHdAudioPostProcessingMod[Index] ? (1 << Index) : 0);
+ }
+
+ if (PchPolicy->HdAudioConfig.Enable) {
+ InstallPlatformVerbTables (PchRcVariables->PchHdAudioCodecSelect);
+ }
+
+ PchPolicy->HdAudioConfig.VcType = PchRcVariables->DfxHdaVcType;
+ //
+ // LockDown
+ //
+
+
+ PchPolicy->LockDownConfig.RtcLock = PchRcVariables->PchRtcLock;
+ PchPolicy->LockDownConfig.SpiEiss = TRUE;
+ PchPolicy->LockDownConfig.GlobalSmi = TRUE;
+ PchPolicy->LockDownConfig.BiosInterface = TRUE;
+ PchPolicy->LockDownConfig.GpioLockDown = PchRcVariables->PchGpioLockDown;
+ PchPolicy->LockDownConfig.TcoLock = TRUE;
+
+ if(PchRcVariables->PchP2sbUnlock) {
+ PchPolicy->P2sbConfig.SbiUnlock = TRUE;
+ PchPolicy->P2sbConfig.PsfUnlock = TRUE;
+ } else {
+ PchPolicy->P2sbConfig.SbiUnlock = FALSE;
+ PchPolicy->P2sbConfig.PsfUnlock = FALSE;
+ }
+ PchPolicy->P2sbConfig.P2SbReveal = PchRcVariables->PchP2sbDevReveal;
+
+ //
+ // Update SPI policies
+ //
+ PchPolicy->SpiConfig.ShowSpiController = TRUE;
+
+ PchPolicy->PmConfig.PmcReadDisable = TRUE;
+
+ if (PchRcVariables->PchAdrEn != PLATFORM_POR) {
+ PchPolicy->AdrConfig.PchAdrEn = PchRcVariables->PchAdrEn;
+ }
+ PchPolicy->AdrConfig.AdrGpioSel = PchRcVariables->AdrGpioSel;
+ if (PchRcVariables->AdrHostPartitionReset != PLATFORM_POR) {
+ PchPolicy->AdrConfig.AdrHostPartitionReset = PchRcVariables->AdrHostPartitionReset;
+ }
+ if (PchRcVariables->AdrTimerEn != PLATFORM_POR) {
+ PchPolicy->AdrConfig.AdrTimerEn = PchRcVariables->AdrTimerEn;
+ }
+ if (PchRcVariables->AdrTimerVal != ADR_TMR_SETUP_DEFAULT_POR) {
+ PchPolicy->AdrConfig.AdrTimerVal = PchRcVariables->AdrTimerVal;
+ }
+ if (PchRcVariables->AdrMultiplierVal != ADR_MULT_SETUP_DEFAULT_POR) {
+ PchPolicy->AdrConfig.AdrMultiplierVal = PchRcVariables->AdrMultiplierVal;
+ }
+
+ //
+ // Thermal Config
+ //
+ if ((PchRcVariables->MemoryThermalManagement != FALSE) &&
+ ((PchRcVariables->ExttsViaTsOnBoard != FALSE) || (PchRcVariables->ExttsViaTsOnDimm != FALSE)))
+ {
+ PchPolicy->ThermalConfig.MemoryThrottling.Enable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioC].PmsyncEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioD].PmsyncEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioC].C0TransmitEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioD].C0TransmitEnable = TRUE;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioC].PinSelection = 1;
+ PchPolicy->ThermalConfig.MemoryThrottling.TsGpioPinSetting[TsGpioD].PinSelection = 0;
+ } else {
+ PchPolicy->ThermalConfig.MemoryThrottling.Enable = FALSE;
+ }
+
+ //
+ // IOAPIC Config
+ //
+ PchPolicy->IoApicConfig.IoApicEntry24_119 = PchRcVariables->PchIoApic24119Entries;
+ PchPolicy->IoApicConfig.BdfValid = 1;
+ PchPolicy->IoApicConfig.BusNumber = PCI_BUS_NUMBER_PCH_IOAPIC;
+ PchPolicy->IoApicConfig.DeviceNumber = PCI_DEVICE_NUMBER_PCH_IOAPIC;
+ PchPolicy->IoApicConfig.FunctionNumber = PCI_FUNCTION_NUMBER_PCH_IOAPIC;
+
+
+ //
+ // Misc PM Config
+ //
+ PchPolicy->PmConfig.PchDeepSxPol = PchRcVariables->DeepSxMode;
+ PchPolicy->PmConfig.WakeConfig.WolEnableOverride = PchRcVariables->PchWakeOnLan;
+ PchPolicy->PmConfig.WakeConfig.WoWlanEnable = PchRcVariables->PchWakeOnWlan;
+ PchPolicy->PmConfig.WakeConfig.WoWlanDeepSxEnable = PchRcVariables->PchWakeOnWlanDeepSx;
+ PchPolicy->PmConfig.WakeConfig.Gp27WakeFromDeepSx = PchRcVariables->Gp27WakeFromDeepSx;
+ PchPolicy->PmConfig.SlpLanLowDc = PchRcVariables->PchSlpLanLowDc;
+ PchPolicy->PmConfig.PowerResetStatusClear.MeWakeSts = TRUE;
+ PchPolicy->PmConfig.PowerResetStatusClear.MeHrstColdSts = TRUE;
+ PchPolicy->PmConfig.PowerResetStatusClear.MeHrstWarmSts = TRUE;
+ PchPolicy->PmConfig.PciePllSsc = PchRcVariables->PciePllSsc;
+ PchPolicy->PmConfig.Dwr_BmcRootPort = PchRcVariables->Dwr_BmcRootPort;
+
+ PchPolicy->PmConfig.PchGbl2HostEn.Bits.PMCGBL = PchRcVariables->DwrEn_PMCGBL;
+ PchPolicy->PmConfig.PchGbl2HostEn.Bits.MEWDT = PchRcVariables->DwrEn_MEWDT;
+ PchPolicy->PmConfig.PchGbl2HostEn.Bits.IEWDT = PchRcVariables->DwrEn_IEWDT;
+
+ //
+ // DefaultSvidSid Config
+ //
+ PchPolicy->PchConfig.SubSystemVendorId = V_PCH_INTEL_VENDOR_ID;
+ PchPolicy->PchConfig.SubSystemId = V_PCH_DEFAULT_SID;
+ PchPolicy->PchConfig.EnableClockSpreadSpec = PchRcVariables->EnableClockSpreadSpec;
+ //
+ // Thermal Config
+ //
+ PchPolicy->ThermalConfig.ThermalThrottling.TTLevels.PchCrossThrottling = PchRcVariables->PchCrossThrottling;
+ PchPolicy->ThermalConfig.ThermalThrottling.DmiHaAWC.SuggestedSetting = TRUE;
+ if (PchRcVariables->ThermalDeviceEnable == PchThermalDeviceAuto) {
+ PchPolicy->ThermalConfig.ThermalDeviceEnable = PchThermalDeviceEnabledPci;
+ } else {
+ PchPolicy->ThermalConfig.ThermalDeviceEnable = PchRcVariables->ThermalDeviceEnable;
+ }
+
+ PchPolicy->ThermalConfig.ThermalThrottling.TTLevels.SuggestedSetting = TRUE;
+ PchPolicy->ThermalConfig.ThermalThrottling.SataTT.SuggestedSetting = TRUE;
+ PchPolicy->ThermalConfig.ThermalThrottling.sSataTT.SuggestedSetting = TRUE;
+
+ //
+ // DCI (EXI)
+ //
+ PchPolicy->DciConfig.DciEn = DCI_DISABLE;
+ PchPolicy->DciConfig.DciAutoDetect = DCI_DISABLE;
+
+ //
+ // Initialize Serial IRQ Config
+ //
+ PchPolicy->SerialIrqConfig.SirqEnable = TRUE;
+ PchPolicy->SerialIrqConfig.StartFramePulse = PchSfpw4Clk;
+ if (PchRcVariables->PchSirqMode == 0) {
+ PchPolicy->SerialIrqConfig.SirqMode = PchQuietMode;
+ } else {
+ PchPolicy->SerialIrqConfig.SirqMode = PchContinuousMode;
+ }
+
+ //
+ // Port 61h emulation
+ //
+ PchPolicy->Port61hSmmConfig.Enable = TRUE;
+
+ //
+ // DMI configuration
+ //
+ PchPolicy->DmiConfig.DmiLinkDownHangBypass = PchRcVariables->DmiLinkDownHangBypass;
+ PchPolicy->DmiConfig.DmiStopAndScreamEnable = PchRcVariables->PcieDmiStopAndScreamEnable;
+
+ //
+ // Update Pch Usb Config
+ //
+ PlatformGetUsbOcMappings (
+ (USB_OVERCURRENT_PIN **) &Usb20OverCurrentMappings,
+ (USB_OVERCURRENT_PIN **) &Usb30OverCurrentMappings,
+ (USB2_PHY_PARAMETERS **) &Usb20AfeParams
+ );
+ UpdatePchUsbConfig (
+ &PchPolicy->UsbConfig,
+ SetupVariables,
+ PchRcVariables,
+ Usb20OverCurrentMappings,
+ Usb30OverCurrentMappings,
+ Usb20AfeParams
+ );
+
+ //
+ // Install PCIe device override table
+ //
+ InstallPcieDeviceTable (mPcieDeviceTable);
+
+ //
+ // Initialize PTSS board specyfic HSIO settings
+ //
+ InstallPlatformHsioPtssTable (PchRcVariables, PchPolicy);
+
+
+ PchPolicy->PchTraceHubConfig.PchTraceHubHide = TRUE;
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Performs silicon pre-mem policy update.
+
+ The meaning of Policy is defined by silicon code.
+ It could be the raw data, a handle, a PPI, etc.
+
+ The input Policy must be returned by SiliconPolicyDonePreMem().
+
+ 1) In FSP path, the input Policy should be FspmUpd.
+ A platform may use this API to update the FSPM UPD policy initialized
+ by the silicon module or the default UPD data.
+ The output of FSPM UPD data from this API is the final UPD data.
+
+ 2) In non-FSP path, the board may use additional way to get
+ the silicon policy data field based upon the input Policy.
+
+ @param[in, out] Policy Pointer to policy.
+
+ @return the updated policy.
+**/
+VOID *
+EFIAPI
+SiliconPolicyUpdatePreMem (
+ IN OUT VOID *Policy
+ )
+{
+ UpdatePeiPchPolicy (Policy);
+ return Policy;
+}
+
+/**
+ Performs silicon post-mem policy update.
+
+ The meaning of Policy is defined by silicon code.
+ It could be the raw data, a handle, a PPI, etc.
+
+ The input Policy must be returned by SiliconPolicyDonePostMem().
+
+ 1) In FSP path, the input Policy should be FspsUpd.
+ A platform may use this API to update the FSPS UPD policy initialized
+ by the silicon module or the default UPD data.
+ The output of FSPS UPD data from this API is the final UPD data.
+
+ 2) In non-FSP path, the board may use additional way to get
+ the silicon policy data field based upon the input Policy.
+
+ @param[in, out] Policy Pointer to policy.
+
+ @return the updated policy.
+**/
+VOID *
+EFIAPI
+SiliconPolicyUpdatePostMem (
+ IN OUT VOID *Policy
+ )
+{
+ return Policy;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
new file mode 100644
index 0000000000..344374a85f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
@@ -0,0 +1,68 @@
+## @file
+# Module Infomation file
+#
+# @copyright
+# Copyright 2011 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SiliconPolicyUpdateLib
+ FILE_GUID = 6EA9585C-3C15-47da-9FFC-25E9E4EA4D0C
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = SiliconPolicyUpdateLib
+
+[Sources]
+ SiliconPolicyUpdateLibFsp.c
+ PchPolicyUpdateUsb.c
+
+[Packages]
+ MdeModulePkg/MdeModulePkg.dec
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec
+ IntelFsp2Pkg/IntelFsp2Pkg.dec
+ CedarIslandFspBinPkg/CedarIslandFspBinPkg.dec
+
+[LibraryClasses]
+ HobLib
+ IoLib
+ PcdLib
+ UbaPlatLib
+
+[Pcd]
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision
+ gOemSkuTokenSpaceGuid.PcdOemSkuBmcPciePortNumber
+
+ gStructPcdTokenSpaceGuid.PcdSocketIioConfig
+ gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig
+ gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig
+ gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig
+ gStructPcdTokenSpaceGuid.PcdSetup
+ gStructPcdTokenSpaceGuid.PcdPchSetup
+ gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig
+ gIntelFsp2WrapperTokenSpaceGuid.PcdFspmUpdDataAddress ## CONSUMES
+
+[Guids]
+ gEfiAcpiVariableGuid
+
+[Ppis]
+ gPchPcieDeviceTablePpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
new file mode 100644
index 0000000000..a5bcb5e2f2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
@@ -0,0 +1,57 @@
+## @file
+# SMM Library instance of Spi Flash Common Library Class
+#
+# @copyright
+# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = SmmSpiFlashCommonLib
+ FILE_GUID = 9632D96E-E849-4217-9217-DC500B8AAE47
+ VERSION_STRING = 1.0
+ MODULE_TYPE = DXE_SMM_DRIVER
+ LIBRARY_CLASS = SpiFlashCommonLib|DXE_SMM_DRIVER
+ CONSTRUCTOR = SmmSpiFlashCommonLibConstructor
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[LibraryClasses]
+ PciLib
+ IoLib
+ MemoryAllocationLib
+ BaseLib
+ UefiLib
+ SmmServicesTableLib
+ BaseMemoryLib
+ DebugLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+
+[Pcd]
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize ## CONSUMES
+
+[Sources]
+ SpiFlashCommonSmmLib.c
+ SpiFlashCommon.c
+
+[Protocols]
+ gPchSmmSpiProtocolGuid ## CONSUMES
+ gDynamicSiLibrarySmmProtocolGuid ## CONSUMES
+
+[Depex.X64.DXE_SMM_DRIVER]
+ gPchSmmSpiProtocolGuid AND
+ gEfiSmmSwDispatch2ProtocolGuid AND
+ gDynamicSiLibrarySmmProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c
new file mode 100644
index 0000000000..d28b453580
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c
@@ -0,0 +1,237 @@
+/** @file
+ Wrap EFI_SPI_PROTOCOL to provide some library level interfaces
+ for module use.
+
+ @copyright
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/SpiFlashCommonLib.h>
+#include <Library/IoLib.h>
+#include <Library/PciLib.h>
+#include <PchAccess.h>
+#include <Protocol/Spi.h>
+#include <Protocol/DynamicSiLibrarySmmProtocol.h>
+#include <Library/SmmServicesTableLib.h>
+
+PCH_SPI_PROTOCOL *mSpiProtocol;
+
+//
+// FlashAreaBaseAddress and Size for boottime and runtime usage.
+//
+UINTN mFlashAreaBaseAddress = 0;
+UINTN mFlashAreaSize = 0;
+
+/**
+ This function enable SPI.MSE(Memory Space Enable) Bit1 if it is disabled.
+ in some cases, the SPI.MSE will be disabled. For example, it is disabled under PCI bus initialization.
+
+ @param None.
+
+ @retval None.
+
+**/
+VOID
+SpiMemorySpaceCheckandEnable(
+ VOID
+ )
+{
+ UINTN SpiMemAddress;
+ UINT32 SpiCmdData;
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_SMM_PROTOCOL *DynamicSiLibrarySmmProtocol = NULL;
+
+ Status = gSmst->SmmLocateProtocol (&gDynamicSiLibrarySmmProtocolGuid, NULL, &DynamicSiLibrarySmmProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ SpiMemAddress = DynamicSiLibrarySmmProtocol->MmPciBase ( DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_SPI,
+ PCI_FUNCTION_NUMBER_PCH_SPI);
+
+ SpiCmdData = MmioRead32 (SpiMemAddress + PCI_COMMAND_OFFSET);
+
+ if (!(SpiCmdData & BIT1)) { //Bit1: Memory Space Enable
+ SpiCmdData |= BIT1;
+ MmioWrite32(SpiMemAddress + PCI_COMMAND_OFFSET, SpiCmdData);
+ }
+
+}
+
+/**
+ Enable block protection on the Serial Flash device.
+
+ @retval EFI_SUCCESS Opertion is successful.
+ @retval EFI_DEVICE_ERROR If there is any device errors.
+
+**/
+EFI_STATUS
+EFIAPI
+SpiFlashLock (
+ VOID
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Read NumBytes bytes of data from the address specified by
+ PAddress into Buffer.
+
+ @param[in] Address The starting physical address of the read.
+ @param[in,out] NumBytes On input, the number of bytes to read. On output, the number
+ of bytes actually read.
+ @param[out] Buffer The destination data buffer for the read.
+
+ @retval EFI_SUCCESS Opertion is successful.
+ @retval EFI_DEVICE_ERROR If there is any device errors.
+
+**/
+EFI_STATUS
+EFIAPI
+SpiFlashRead (
+ IN UINTN Address,
+ IN OUT UINT32 *NumBytes,
+ OUT UINT8 *Buffer
+ )
+{
+ ASSERT ((NumBytes != NULL) && (Buffer != NULL));
+ if ((NumBytes == NULL) || (Buffer == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // This function is implemented specifically for those platforms
+ // at which the SPI device is memory mapped for read. So this
+ // function just do a memory copy for Spi Flash Read.
+ //
+ CopyMem (Buffer, (VOID *) Address, *NumBytes);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Write NumBytes bytes of data from Buffer to the address specified by
+ PAddresss.
+
+ @param[in] Address The starting physical address of the write.
+ @param[in,out] NumBytes On input, the number of bytes to write. On output,
+ the actual number of bytes written.
+ @param[in] Buffer The source data buffer for the write.
+
+ @retval EFI_SUCCESS Opertion is successful.
+ @retval EFI_DEVICE_ERROR If there is any device errors.
+
+**/
+EFI_STATUS
+EFIAPI
+SpiFlashWrite (
+ IN UINTN Address,
+ IN OUT UINT32 *NumBytes,
+ IN UINT8 *Buffer
+ )
+{
+ EFI_STATUS Status;
+ UINTN Offset;
+ UINT32 Length;
+ UINT32 RemainingBytes;
+
+ ASSERT ((NumBytes != NULL) && (Buffer != NULL));
+ if ((NumBytes == NULL) || (Buffer == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ ASSERT (Address >= mFlashAreaBaseAddress);
+
+ Offset = Address - mFlashAreaBaseAddress;
+
+ ASSERT ((*NumBytes + Offset) <= mFlashAreaSize);
+
+ SpiMemorySpaceCheckandEnable();
+ Status = EFI_SUCCESS;
+ RemainingBytes = *NumBytes;
+
+
+ while (RemainingBytes > 0) {
+ if (RemainingBytes > SECTOR_SIZE_4KB) {
+ Length = SECTOR_SIZE_4KB;
+ } else {
+ Length = RemainingBytes;
+ }
+ Status = mSpiProtocol->FlashWrite (
+ mSpiProtocol,
+ FlashRegionBios,
+ (UINT32) Offset,
+ Length,
+ Buffer
+ );
+ if (EFI_ERROR (Status)) {
+ break;
+ }
+ RemainingBytes -= Length;
+ Offset += Length;
+ Buffer += Length;
+ }
+
+ //
+ // Actual number of bytes written
+ //
+ *NumBytes -= RemainingBytes;
+
+ return Status;
+}
+
+/**
+ Erase the block starting at Address.
+
+ @param[in] Address The starting physical address of the block to be erased.
+ This library assume that caller garantee that the PAddress
+ is at the starting address of this block.
+ @param[in] NumBytes On input, the number of bytes of the logical block to be erased.
+ On output, the actual number of bytes erased.
+
+ @retval EFI_SUCCESS. Opertion is successful.
+ @retval EFI_DEVICE_ERROR If there is any device errors.
+
+**/
+EFI_STATUS
+EFIAPI
+SpiFlashBlockErase (
+ IN UINTN Address,
+ IN UINTN *NumBytes
+ )
+{
+ EFI_STATUS Status;
+ UINTN Offset;
+ UINTN RemainingBytes;
+
+ ASSERT (NumBytes != NULL);
+ if (NumBytes == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ ASSERT (Address >= mFlashAreaBaseAddress);
+
+ Offset = Address - mFlashAreaBaseAddress;
+
+ ASSERT ((*NumBytes % SECTOR_SIZE_4KB) == 0);
+ ASSERT ((*NumBytes + Offset) <= mFlashAreaSize);
+
+ SpiMemorySpaceCheckandEnable();
+ Status = EFI_SUCCESS;
+ RemainingBytes = *NumBytes;
+
+
+ Status = mSpiProtocol->FlashErase (
+ mSpiProtocol,
+ FlashRegionBios,
+ (UINT32) Offset,
+ (UINT32) RemainingBytes
+ );
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c
new file mode 100644
index 0000000000..de0b762f00
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c
@@ -0,0 +1,55 @@
+/** @file
+ SMM Library instance of SPI Flash Common Library Class
+
+ @copyright
+ Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/SpiFlashCommonLib.h>
+#include <Library/SmmServicesTableLib.h>
+#include <Protocol/Spi.h>
+
+extern PCH_SPI_PROTOCOL *mSpiProtocol;
+
+extern UINTN mFlashAreaBaseAddress;
+extern UINTN mFlashAreaSize;
+
+/**
+ The library constructuor.
+
+ The function does the necessary initialization work for this library
+ instance.
+
+ @param[in] ImageHandle The firmware allocated handle for the UEFI image.
+ @param[in] SystemTable A pointer to the EFI system table.
+
+ @retval EFI_SUCCESS The function always return EFI_SUCCESS for now.
+ It will ASSERT on error for debug version.
+ @retval EFI_ERROR Please reference LocateProtocol for error code details.
+**/
+EFI_STATUS
+EFIAPI
+SmmSpiFlashCommonLibConstructor (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+
+ mFlashAreaBaseAddress = (UINTN)PcdGet32 (PcdFlashAreaBaseAddress);
+ mFlashAreaSize = (UINTN)PcdGet32 (PcdFlashAreaSize);
+
+ //
+ // Locate the SMM SPI protocol.
+ //
+ Status = gSmst->SmmLocateProtocol (
+ &gPchSmmSpiProtocolGuid,
+ NULL,
+ (VOID **) &mSpiProtocol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c
new file mode 100644
index 0000000000..7eb37e232e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c
@@ -0,0 +1,41 @@
+/** @file
+ NULL Tcg2PhysicalPresenceLib library instance
+
+ @copyright
+ Copyright (c) 2018, Red Hat, Inc.
+ Copyright (c) 2013 - 2021, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/Tcg2PhysicalPresenceLib.h>
+
+/**
+ Check if the pending TPM request needs user input to confirm.
+
+ The TPM request may come from OS. This API will check if TPM request exists and need user
+ input to confirmation.
+
+ @retval TRUE TPM needs input to confirm user physical presence.
+ @retval FALSE TPM doesn't need input to confirm user physical presence.
+
+**/
+BOOLEAN
+EFIAPI
+Tcg2PhysicalPresenceLibNeedUserConfirm (
+ VOID
+ )
+{
+ return FALSE;
+}
+
+VOID
+EFIAPI
+Tcg2PhysicalPresenceLibProcessRequest (
+ IN TPM2B_AUTH *PlatformAuth OPTIONAL
+ )
+{
+ //
+ // do nothing
+ //
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
new file mode 100644
index 0000000000..618917d2ff
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
@@ -0,0 +1,29 @@
+## @file
+# NULL Tcg2PhysicalPresenceLib library instance
+#
+# Under SecurityPkg, the corresponding library instance will check and
+# execute TPM 2.0 request from OS or BIOS; the request may ask for user
+# confirmation before execution. This Null instance implements a no-op
+# Tcg2PhysicalPresenceLibProcessRequest(), without user interaction.
+#
+# @copyright
+# Copyright (C) 2018, Red Hat, Inc.
+# Copyright (c) 2013 - 2021, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = DxeTcg2PhysicalPresenceLibNull
+ FILE_GUID = 2A6BA243-DC22-42D8-9C3D-AE3728DC7AFA
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = Tcg2PhysicalPresenceLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
+
+[Sources]
+ DxeTcg2PhysicalPresenceLib.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ SecurityPkg/SecurityPkg.dec
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c
new file mode 100644
index 0000000000..3fdcf2e18f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c
@@ -0,0 +1,145 @@
+/** @file
+ UbaGpioInitLib implementation.
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PcdLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UbaGpioInitLib.h>
+#include <Library/GpioLib.h>
+#include <Library/PeiDxeSmmGpioLib/GpioLibrary.h>
+#include <Library/HobLib.h>
+#include <Library/PchMultiPchBase.h>
+
+static GPIO_INIT_CONFIG meSPIConfig[] =
+{
+ { GPIO_SKL_H_GPP_A0, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_0_LPC_RCIN_N_ESPI_ALERT1_N
+ { GPIO_SKL_H_GPP_A1, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirInOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermWpu20K, GpioPadConfigLock } },//GPP_A_1_LAD_0_ESPI_IO_0
+ { GPIO_SKL_H_GPP_A2, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirInOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermWpu20K, GpioPadConfigLock } },//GPP_A_2_LAD_1_ESPI_IO_1
+ { GPIO_SKL_H_GPP_A3, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirInOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermWpu20K, GpioPadConfigLock } },//GPP_A_3_LAD_2_ESPI_IO_2
+ { GPIO_SKL_H_GPP_A4, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirInOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermWpu20K, GpioPadConfigLock } },//GPP_A_4_LAD_3_ESPI_IO_3
+ { GPIO_SKL_H_GPP_A5, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermWpu20K, GpioPadConfigLock } },//GPP_A_5_LPC_LFRAME_N_ESPI_CS0_N
+ { GPIO_SKL_H_GPP_A6, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_6_IRQ_LPC_SERIRQ_ESPI_CS1_N
+ { GPIO_SKL_H_GPP_A7, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_7_IRQ_LPC_PIRQA_N_ESPI_ALERT0_N
+ { GPIO_SKL_H_GPP_A8, { GpioPadModeNative1, GpioHostOwnGpio, GpioDirInOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_8_FM_LPC_CLKRUN_N
+ { GPIO_SKL_H_GPP_A9, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermWpd20K, GpioPadConfigLock } },//GPP_A_9_CLK_24M_66M_LPC0_ESPI
+ { GPIO_SKL_H_GPP_A10, { GpioPadModeNative1, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_10_TP_PCH_GPP_A_10
+ { GPIO_SKL_H_GPP_A11, { GpioPadModeGpio, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_11_FM_LPC_PME_N
+ { GPIO_SKL_H_GPP_A12, { GpioPadModeGpio, GpioHostOwnAcpi, GpioDirInInv, GpioOutDefault, GpioIntLevel | GpioIntSci, GpioPlatformReset, GpioTermNone } },//GPP_A_12_IRQ_PCH_SCI_WHEA_N
+ { GPIO_SKL_H_GPP_A13, { GpioPadModeGpio, GpioHostOwnGpio, GpioDirOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock | GpioOutputStateLock } },//GPP_A_13_FM_EUP_LOT6_N
+ { GPIO_SKL_H_GPP_A14, { GpioPadModeNative3, GpioHostOwnGpio, GpioDirOut, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_14_ESPI_RESET_N
+ { GPIO_SKL_H_GPP_A15, { GpioPadModeGpio, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock } },//GPP_A_15_SUSACK_N
+ { GPIO_SKL_H_GPP_A16, { GpioPadModeGpio, GpioHostOwnGpio, GpioDirOut, GpioOutHigh, GpioIntDis, GpioHostDeepReset, GpioTermNone, GpioPadConfigLock | GpioOutputStateLock } },// CLK_48MHZ_PCH [GPP_A_16_CLKOUT_LPC_2]
+};
+
+
+VOID
+UpdateeSPIConfiguration (
+ IN UINT32 NumberOfItems,
+ IN GPIO_INIT_CONFIG *GpioInitTableAddress
+)
+{
+ UINT32 Index1;
+ UINT32 Index2;
+
+ for(Index1 = 0; Index1 < sizeof (meSPIConfig)/sizeof (GPIO_INIT_CONFIG); Index1++) {
+ for (Index2 = 0; Index2 < NumberOfItems; Index2++) {
+ if (meSPIConfig[Index1].GpioPad == (GpioInitTableAddress+Index2)->GpioPad){
+ (GpioInitTableAddress + Index2)->GpioConfig = meSPIConfig[Index1].GpioConfig;
+ }
+ }
+ }
+}
+
+EFI_STATUS
+PlatformInitGpios (
+ VOID
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ GPIO_INIT_CONFIG *GpioTable;
+ UINTN TableSize;
+ UINT32 SpiConfigValue;
+ GPIO_INIT_CONFIG *mPchGpioInitData = NULL;
+ VOID *HobPtr;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gUbaConfigDatabasePpiGuid, 0, NULL, &UbaConfigPpi);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ TableSize = PcdGet32(PcdOemSku_GPIO_TABLE_SIZE);
+ DEBUG ((DEBUG_INFO, "UBA:Size of GpioTable 0x%X, blocks: 0x%X.\n", TableSize, (TableSize/sizeof (GPIO_INIT_CONFIG)) ));
+ Status = PeiServicesAllocatePool (TableSize, &GpioTable);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformGpioInitDataGuid,
+ GpioTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ SpiConfigValue = 0;
+ DynamicSiLibraryPpi->PchPcrRead32ByPchId (PCH_LEGACY_ID, PID_ESPISPI, R_PCH_PCR_SPI_CONF_VALUE, &SpiConfigValue);
+ DEBUG((DEBUG_INFO, "SPI Config Value = %x; ", SpiConfigValue));
+ if (SpiConfigValue & B_ESPI_ENABLE_STRAP) {
+ DEBUG((DEBUG_INFO, "eSPI Mode\n"));
+ } else {
+ DEBUG((DEBUG_INFO, "LPC Mode\n"));
+ }
+
+ if (SpiConfigValue & B_ESPI_ENABLE_STRAP) {
+ mPchGpioInitData = AllocateZeroPool((UINTN)TableSize);
+ if (mPchGpioInitData != NULL){
+ CopyMem(mPchGpioInitData, GpioTable, TableSize);
+ UpdateeSPIConfiguration((UINT32)(TableSize / sizeof(GPIO_INIT_CONFIG)), mPchGpioInitData);
+ } else {
+ DEBUG ((DEBUG_ERROR, "\n*** ERROR!!!! AllocateZeroPool returned NULL pointer when trying to allocate buffer for 'mPchGpioInitData'!!!! ***\n"));
+ ASSERT_EFI_ERROR (EFI_OUT_OF_RESOURCES);
+ return Status;
+ }
+ } else {
+ // Point to LPC config values
+ mPchGpioInitData = GpioTable;
+ }
+
+ DEBUG ((DEBUG_INFO, "UBA: Start ConfigureGpio().\n"));
+ Status = DynamicSiLibraryPpi->GpioConfigurePadsByPchId (PCH_LEGACY_ID, TableSize/sizeof (GPIO_INIT_CONFIG), mPchGpioInitData);
+ DEBUG ((DEBUG_INFO, "UBA: ConfigureGpio() end.\n"));
+
+ HobPtr = BuildGuidDataHob (
+ &gPlatformGpioConfigGuid,
+ mPchGpioInitData,
+ TableSize
+ );
+ if (HobPtr == NULL) {
+ DEBUG ((DEBUG_ERROR, "PlatformInitGpios(): ERROR: BuildGuidDataHob failed!\n"));
+ ASSERT (FALSE);
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf
new file mode 100644
index 0000000000..cfcd4790e5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf
@@ -0,0 +1,46 @@
+## @file
+#
+# @copyright
+# Copyright 2016 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UbaGpioInitLib
+ FILE_GUID = C3597C66-784E-4215-BF24-71D8C7B5E3BE
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = UbaGpioInitLib|PEIM PEI_CORE
+
+[sources]
+ UbaGpioInitLib.c
+
+[LibraryClasses]
+ DebugLib
+ MemoryAllocationLib
+ PeiServicesLib
+ PcdLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[Pcd]
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_TABLE_SIZE
+
+[Ppis]
+ gUbaConfigDatabasePpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Guids]
+ gPlatformGpioConfigGuid
+ gPlatformGpioInitDataGuid
+
+[Depex]
+ gUbaConfigDatabasePpiGuid AND
+ gDynamicSiLibraryPpiGuid
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 11/17] WhitleyOpenBoardPkg: Add Platform Modules
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (9 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 10/17] WhitleyOpenBoardPkg: Add Includes and Libraries Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 12/17] WhitleyOpenBoardPkg: Add Feature Modules Nate DeSimone
` (7 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c | 104 +++
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h | 67 ++
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf | 70 ++
.../Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c | 704 ++++++++++++++++
.../PlatformCpuPolicy/PlatformCpuPolicy.inf | 81 ++
.../Dxe/PlatformType/PlatformType.inf | 58 ++
.../Platform/Dxe/PlatformType/PlatformTypes.c | 364 +++++++++
.../Platform/Dxe/PlatformType/PlatformTypes.h | 58 ++
.../Platform/Dxe/S3NvramSave/S3NvramSave.c | 157 ++++
.../Platform/Dxe/S3NvramSave/S3NvramSave.h | 40 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.inf | 52 ++
.../Platform/Pei/DummyPchSpi/DummyPchSpi.inf | 43 +
.../Platform/Pei/DummyPchSpi/PchSpi.c | 383 +++++++++
.../EmulationPlatformInit.c | 124 +++
.../EmulationPlatformInit.inf | 46 ++
.../Platform/Pei/PlatformInfo/PlatformInfo.c | 761 ++++++++++++++++++
.../Platform/Pei/PlatformInfo/PlatformInfo.h | 89 ++
.../Pei/PlatformInfo/PlatformInfo.inf | 63 ++
.../ExSerialStatusCodeWorker.c | 194 +++++
.../ExStatusCodeHandlerPei.c | 111 +++
.../ExStatusCodeHandlerPei.h | 85 ++
.../ExStatusCodeHandlerPei.inf | 61 ++
.../ExReportStatusCodeRouterPei.c | 301 +++++++
.../ExReportStatusCodeRouterPei.h | 104 +++
.../ExReportStatusCodeRouterPei.inf | 51 ++
.../PeiInterposerToSvidMap.c | 136 ++++
.../PeiInterposerToSvidMap.inf | 53 ++
27 files changed, 4360 insertions(+)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c b/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c
new file mode 100644
index 0000000000..718bc14ffc
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c
@@ -0,0 +1,104 @@
+/** @file
+ Driver for BIOS Info support.
+
+@copyright
+ Copyright 2011 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <BiosInfo.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+#include <IndustryStandard/FirmwareInterfaceTable.h>
+
+GLOBAL_REMOVE_IF_UNREFERENCED BIOS_INFO mBiosInfo = {
+ {
+ BIOS_INFO_SIGNATURE,
+ BIOS_INFO_STRUCT_SIZE,
+ 0,
+ },
+ {
+ {
+ FIT_TYPE_07_BIOS_STARTUP_MODULE,
+ BIOS_INFO_STRUCT_ATTRIBUTE_GENERAL_EXCLUDE_FROM_FIT,
+ 0x0100,
+ FixedPcdGet32 (PcdFlashNvStorageVariableSize) + FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize),
+ FixedPcdGet32 (PcdFlashNvStorageVariableBase)
+ },
+ {
+ FIT_TYPE_07_BIOS_STARTUP_MODULE,
+ 0,
+ 0x0100,
+ FixedPcdGet32 (PcdFlashFvPreMemorySize),
+ FixedPcdGet32 (PcdFlashFvPreMemoryBase)
+ },
+ {
+ FIT_TYPE_07_BIOS_STARTUP_MODULE,
+ 0,
+ 0x0100,
+ FixedPcdGet32 (PcdFlashFvFspMSize),
+ FixedPcdGet32 (PcdFlashFvFspMBase)
+ },
+ {
+ FIT_TYPE_01_MICROCODE,
+ BIOS_INFO_STRUCT_ATTRIBUTE_MICROCODE_WHOLE_REGION,
+ 0x0100,
+ FixedPcdGet32 (PcdFlashNvStorageMicrocodeSize),
+ FixedPcdGet32 (PcdFlashNvStorageMicrocodeBase)
+ },
+
+ }
+};
+
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mBiosInfoPpiList = {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gBiosInfoGuid,
+ &mBiosInfo
+};
+
+/**
+ Installs BiosInfo Ppi.
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @retval EFI_SUCCESS Install the BiosInfo Ppi successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+BiosInfoEntryPoint (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ VOID *HobData;
+
+ //
+ // Install PPI, so that other PEI module can add dependency.
+ //
+ Status = PeiServicesInstallPpi (&mBiosInfoPpiList);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //
+ // Build hob, so that DXE module can also get the data.
+ //
+ HobData = BuildGuidHob (&gBiosInfoGuid, sizeof (BIOS_INFO));
+ ASSERT (HobData != NULL);
+
+ if (HobData == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ CopyMem (HobData, &mBiosInfo, sizeof (BIOS_INFO));
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h b/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h
new file mode 100644
index 0000000000..b849663766
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h
@@ -0,0 +1,67 @@
+/** @file
+
+ @copyright
+ Copyright 2011 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _BIOS_INFO_H_
+#define _BIOS_INFO_H_
+
+#undef BIOS_INFO_STRUCT_SIZE
+#define BIOS_INFO_STRUCT_SIZE 4
+//
+// BIOS INFO data structure
+// This is self contained data structure for BIOS info for TXT
+//
+#pragma pack (1)
+
+#define BIOS_INFO_SIGNATURE SIGNATURE_64 ('$', 'B', 'I', 'O', 'S', 'I', 'F', '$')
+typedef struct {
+ UINT64 Signature;
+ UINT32 EntryCount;
+ UINT32 Reserved;
+} BIOS_INFO_HEADER;
+
+//
+// BIOS_INFO_STRUCT attributes
+// bits[0:3] means general attributes
+// bits[4:7] means type specific attributes
+//
+#define BIOS_INFO_STRUCT_ATTRIBUTE_GENERAL_EXCLUDE_FROM_FIT 0x01
+#define BIOS_INFO_STRUCT_ATTRIBUTE_MICROCODE_WHOLE_REGION 0x10
+#define BIOS_INFO_STRUCT_ATTRIBUTE_BIOS_POST_IBB 0x10
+#define BIOS_INFO_STRUCT_ATTRIBUTE_BIOS_NON_IBB 0x20
+
+typedef struct {
+ //
+ // FitTable entry type
+ //
+ UINT8 Type;
+ //
+ // BIOS_INFO_STRUCT attributes
+ //
+ UINT8 Attributes;
+ //
+ // FitTable entry version
+ //
+ UINT16 Version;
+ //
+ // FitTable entry real size
+ //
+ UINT32 Size;
+ //
+ // FitTable entry address
+ //
+ UINT64 Address;
+} BIOS_INFO_STRUCT;
+
+typedef struct {
+ BIOS_INFO_HEADER Header;
+ BIOS_INFO_STRUCT Entry[BIOS_INFO_STRUCT_SIZE];
+} BIOS_INFO;
+
+#pragma pack ()
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf b/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
new file mode 100644
index 0000000000..b758e8d4e5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
@@ -0,0 +1,70 @@
+### @file
+# Module Information description file for BIOS Info Driver
+#
+#@copyright
+# Copyright 2011 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+# @par Specification Reference:
+#
+# @par Glossary:
+###
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = BiosInfo
+ FILE_GUID = 4A4CA1C6-871C-45BB-8801-6910A7AA5807
+ VERSION_STRING = 1.0
+ MODULE_TYPE = PEIM
+ ENTRY_POINT = BiosInfoEntryPoint
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES IA32 X64
+#
+
+[LibraryClasses]
+ PeimEntryPoint
+ PeiServicesLib
+ HobLib
+ BaseMemoryLib
+ DebugLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ IntelSiliconPkg/IntelSiliconPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Pcd]
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize ## CONSUMES
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize ## CONSUMES
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONSUMES
+
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmBase ## CONSUMES
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmSize ## CONSUMES
+
+ gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocodeBase ## CONSUMES
+ gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocodeSize ## CONSUMES
+
+[Sources]
+ BiosInfo.c
+
+[Guids]
+ gBiosInfoGuid ## PRODUCES
+
+[Depex]
+ gEfiPeiMasterBootModePpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c b/Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c
new file mode 100644
index 0000000000..556dc1b0bf
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c
@@ -0,0 +1,704 @@
+/** @file
+ CPU Policy Platform DXE Driver implementation.
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiDxe.h>
+#include <Protocol/CpuPolicyProtocol.h>
+#include <Protocol/PpmPolicyProtocol.h>
+#include <IioUniversalData.h>
+#include <Protocol/PlatformType.h>
+#include <SetupTable.h>
+#include <Library/BaseLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/CpuConfigLib.h>
+#include <Library/HobLib.h>
+#include <Library/UefiLib.h>
+#include <Library/IoLib.h>
+#include <Library/CpuPpmLib.h>
+#include <Platform.h>
+#include <Cpu/CpuIds.h>
+#include <CpuAndRevisionDefines.h>
+#include <ScratchpadList.h>
+#include <Register/Cpuid.h>
+#include <ProcessorPpmSetup.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+
+CHAR16 mCpuSocketStr[8][5] = {L"CPU0", L"CPU1", L"CPU2", L"CPU3", L"CPU4", L"CPU5", L"CPU6", L"CPU7"};
+CHAR16 mCpuAssetTagStr[] = L"UNKNOWN";
+IIO_UDS *mIioUds;
+CPU_POLICY_CONFIGURATION mCpuPolicyConfiguration;
+PPM_POLICY_CONFIGURATION mPpmPolicyConfiguration;
+
+/**
+ Set platform CPU data that related to SMBIOS.
+**/
+VOID
+PlatformCpuSmbiosData (
+ VOID
+ )
+{
+ UINT32 CpuSocketCount;
+ UINTN Index;
+ CHAR16 **CpuSocketNames;
+ CHAR16 **CpuAssetTags;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ //
+ // Set the count of CPU sockets on the board.
+ //
+ CpuSocketCount = PcdGet32(PcdOemSkuBoardSocketCount);
+
+ Status = PcdSet32S (PcdPlatformCpuSocketCount, CpuSocketCount);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+
+ CpuSocketNames = AllocatePool (CpuSocketCount * sizeof (UINTN));
+
+ if (CpuSocketNames == NULL) {
+ DEBUG ((EFI_D_ERROR, "\nEFI_OUT_OF_RESOURCES!!! AllocatePool() returned NULL pointer.\n"));
+ ASSERT_EFI_ERROR (EFI_OUT_OF_RESOURCES);
+ return;
+ }
+
+ CpuAssetTags = AllocatePool (CpuSocketCount * sizeof (UINTN));
+ if (CpuAssetTags == NULL) {
+ DEBUG ((EFI_D_ERROR, "\nEFI_OUT_OF_RESOURCES!!! AllocatePool() returned NULL pointer.\n"));
+ ASSERT_EFI_ERROR (EFI_OUT_OF_RESOURCES);
+ gBS->FreePool (CpuSocketNames);
+ return;
+ }
+
+ for (Index = 0; Index < CpuSocketCount; Index++) {
+ CpuSocketNames[Index] = mCpuSocketStr[Index];
+ CpuAssetTags[Index] = mCpuAssetTagStr;
+ }
+
+ mCpuPolicyConfiguration.PlatformCpuSocketNames = (UINT64) (UINTN) CpuSocketNames;
+
+ mCpuPolicyConfiguration.PlatformCpuAssetTags = (UINT64) (UINTN) CpuAssetTags;
+}
+
+
+
+/**
+
+ Re-assign socket id when both X2APIC and ForceX2Apic are enabled.
+
+ @param None
+
+ @retval None
+
+**/
+VOID
+CheckAndReAssignSocketId(
+ VOID
+ )
+{
+ CPU_SOCKET_ID_INFO *pcdSktIdPtr;
+ UINT32 i, IntraPackageIdBits;
+ UINTN PcdSize;
+ EFI_STATUS Status;
+ UINT32 MaxSocketCount;
+
+ MaxSocketCount = FixedPcdGet32(PcdMaxCpuSocketCount);
+ DEBUG ((DEBUG_INFO, "::SocketCount %08x\n", MaxSocketCount));
+ pcdSktIdPtr = (CPU_SOCKET_ID_INFO *)PcdGetPtr(PcdCpuSocketId);
+ PcdSize = LibPcdGetSize (PcdToken (PcdCpuSocketId)); //MAX_SOCKET * sizeof(CPU_SOCKET_ID_INFO);
+ ASSERT(PcdSize == (MAX_SOCKET * sizeof(CPU_SOCKET_ID_INFO)));
+ Status = PcdSetPtrS (PcdCpuSocketId, &PcdSize, (VOID *)pcdSktIdPtr);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+ DEBUG ((EFI_D_INFO, "::SockeId Pcd at %08x, size %x\n", PcdGetPtr(PcdCpuSocketId), PcdSize));
+
+ for(i = 0; i < MAX_SOCKET; i++) {
+ if (mIioUds->PlatformData.CpuQpiInfo[i].Valid) {
+ pcdSktIdPtr[i].DefaultSocketId = mIioUds->PlatformData.CpuQpiInfo[i].SocId;
+ pcdSktIdPtr[i].NewSocketId = mIioUds->PlatformData.CpuQpiInfo[i].SocId;
+ } else {
+ pcdSktIdPtr[i].DefaultSocketId = (UINT32)-1; //make sure Default and New are same
+ pcdSktIdPtr[i].NewSocketId = (UINT32)-1;
+ }
+ }
+
+ AsmCpuidEx (CPUID_EXTENDED_TOPOLOGY, 1, &IntraPackageIdBits, NULL, NULL, NULL);
+ //assign new socketId
+ for(i = 0; i < MAX_SOCKET; i++) {
+
+ if (pcdSktIdPtr[i].DefaultSocketId == (UINT32)-1) {
+ continue;
+ }
+
+ switch(IntraPackageIdBits) {
+ case 4: //socket bit starts from bit4 of ApicId
+ case 5: //socket bit starts from bit5 of ApicId
+ if (MAX_SOCKET == 4) {
+ pcdSktIdPtr[i].NewSocketId |= (APICID_MASK_BIT14_8 << (8 - IntraPackageIdBits));
+ } else {
+ //3bit in lower 8bit as skt field, to avoid ApicID= FFs, leave bit8 untouched for 8S
+ pcdSktIdPtr[i].NewSocketId |= (0x7E << (8 - IntraPackageIdBits)); //leave bit8 to 0 so we don't have FFs in ApicId
+ }
+ break;
+
+ case 6: //socket bit starts from bit6 of ApicId
+ if (MAX_SOCKET == 4) {
+ //only 2bit in lower 8bit as skt field, to avoid ApicID= FFs, leave bit8 untouched for 4S
+ pcdSktIdPtr[i].NewSocketId |= (0x7E << (8 - IntraPackageIdBits));
+ } else {
+ //only 2bit in lower 8bit as skt field, to avoid ApicID= FFs, leave bit9 untouched for 8S
+ pcdSktIdPtr[i].NewSocketId |= (0x7C << (8 - IntraPackageIdBits));
+ }
+ break;
+
+ default:
+ DEBUG ((EFI_D_INFO, "::Need more info to make sure we can support!!!\n"));
+ break;
+
+ } //end switch
+ }
+}
+
+/**
+
+ This is the EFI driver entry point for the CpuPolicy Driver. This
+ driver is responsible for getting microcode patches from FV.
+
+ @param ImageHandle - Handle for the image of this driver.
+ @param SystemTable - Pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS - Protocol installed sucessfully.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformCpuPolicyEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ SETUP_DATA SetupData;
+ EFI_HANDLE Handle;
+ UINT8 socket;
+ TURBO_POWRER_LIMIT *TurboPowerLimit;
+ EFI_PLATFORM_TYPE_PROTOCOL *PlatformType;
+ UINT32 CpuFamilyModelStepping;
+ BIOS_SCRATCHPAD7_STRUCT Sp7;
+ UINT64 i;
+ UINT8 PackageCStateSetting = 0;
+ UINT8 CpuCStateValue = 0;
+ EFI_GUID UniversalDataGuid = IIO_UNIVERSAL_DATA_GUID;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ SYSTEM_MEMORY_MAP_HOB *SystemMemoryMap;
+ CPU_VAR_DATA *CpuVarDataPtr = NULL;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ CpuVarDataPtr = DynamicSiLibraryProtocol->GetCpuVarData ();
+
+ GuidHob = GetFirstGuidHob (&UniversalDataGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ mIioUds = GET_GUID_HOB_DATA(GuidHob);
+
+ SystemMemoryMap = DynamicSiLibraryProtocol->GetSystemMemoryMapData ();
+ if (SystemMemoryMap == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ SetMem (&mCpuPolicyConfiguration, sizeof (CPU_POLICY_CONFIGURATION), 0x00);
+ SetMem (&mPpmPolicyConfiguration, sizeof (PPM_POLICY_CONFIGURATION), 0x00);
+
+ AsmCpuid (1, &CpuFamilyModelStepping, NULL, NULL, NULL);
+
+ PlatformCpuSmbiosData ();
+
+ //
+ // Read the current system configuration variable store.
+ //
+ ZeroMem(&SetupData, sizeof(SETUP_DATA));
+ CopyMem (&SetupData.SocketConfig.IioConfig, PcdGetPtr(PcdSocketIioConfig), sizeof(SOCKET_IIO_CONFIGURATION));
+ CopyMem (&SetupData.SocketConfig.CommonRcConfig, PcdGetPtr(PcdSocketCommonRcConfig), sizeof(SOCKET_COMMONRC_CONFIGURATION));
+ CopyMem (&SetupData.SocketConfig.UpiConfig, PcdGetPtr(PcdSocketMpLinkConfig), sizeof(SOCKET_MP_LINK_CONFIGURATION));
+ CopyMem (&SetupData.SocketConfig.MemoryConfig, PcdGetPtr(PcdSocketMemoryConfig), sizeof(SOCKET_MEMORY_CONFIGURATION));
+ CopyMem (&SetupData.SocketConfig.PowerManagementConfig, PcdGetPtr(PcdSocketPowerManagementConfig), sizeof(SOCKET_POWERMANAGEMENT_CONFIGURATION));
+ CopyMem (&SetupData.SocketConfig.SocketProcessorCoreConfiguration, PcdGetPtr(PcdSocketProcessorCoreConfig), sizeof(SOCKET_PROCESSORCORE_CONFIGURATION));
+ CopyMem (&SetupData.SystemConfig, PcdGetPtr(PcdSetup), sizeof(SYSTEM_CONFIGURATION));
+ CopyMem (&SetupData.PchSetup, PcdGetPtr(PcdPchSetup), sizeof(PCH_SETUP));
+
+ Sp7.Data = DynamicSiLibraryProtocol->ReadScratchpad7 ();
+ DEBUG ((EFI_D_INFO, "AYP Debug scratchpad7: %x Stepping %x\n", Sp7.Bits.AepDimmPresent, CpuFamilyModelStepping & 0x0f));
+ if ((Sp7.Bits.AepDimmPresent == 1) && ((CpuFamilyModelStepping & 0x0f) < 0x04) && ((CpuFamilyModelStepping >> 4) == CPU_FAMILY_SKX)) {
+ SetupData.SocketConfig.PowerManagementConfig.PackageCState = 0;
+ }
+
+ if (SetupData.SocketConfig.PowerManagementConfig.PackageCState == PPM_AUTO) {
+ PackageCStateSetting = C6_ENABLE; //POR Default = C6
+ } else {
+ PackageCStateSetting = SetupData.SocketConfig.PowerManagementConfig.PackageCState;
+ }
+
+ if (SetupData.SocketConfig.PowerManagementConfig.C6Enable == PPM_AUTO) {
+ CpuCStateValue |= C6_ENABLE; //POR Default = Enabled
+ } else {
+ CpuCStateValue |= (SetupData.SocketConfig.PowerManagementConfig.C6Enable * C6_ENABLE);
+ }
+
+ mCpuPolicyConfiguration.Policy.CpuCoreCStateValue = CpuCStateValue;
+
+ //
+ // Update CpuMtoIWa from StructurePcd
+ //
+ if (DynamicSiLibraryProtocol->IsCpuAndRevision (CPU_ICXSP, REV_R0) || DynamicSiLibraryProtocol->IsCpuAndRevision (CPU_ICXSP, REV_L0) || DynamicSiLibraryProtocol->IsCpuAndRevision (CPU_ICXSP, REV_C0)) {
+ mCpuPolicyConfiguration.Policy.CpuMtoIWa = SetupData.SocketConfig.SocketProcessorCoreConfiguration.CpuMtoIWa;
+ }
+ //
+ // Verify that the value being set is within the valid range 0 to MAX_SOCKET - 1
+ //
+ if (SetupData.SocketConfig.SocketProcessorCoreConfiguration.BspSelection > MAX_SOCKET) {
+ SetupData.SocketConfig.SocketProcessorCoreConfiguration.BspSelection= 0xFF;
+ }
+ mCpuPolicyConfiguration.SbspSelection = SetupData.SocketConfig.SocketProcessorCoreConfiguration.BspSelection;
+ //
+ // Map CPU setup options to mCpuPolicyConfiguration
+ //
+ mCpuPolicyConfiguration.Policy.CpuEistEnable = SetupData.SocketConfig.PowerManagementConfig.ProcessorEistEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuVtEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.ProcessorVmxEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuLtEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.ProcessorSmxEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuFastStringEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.FastStringEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuMaxCpuidValueLimitEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.CpuidMaxValue ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuMachineCheckEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.MachineCheckEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuDcuPrefetcherEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.DCUStreamerPrefetcherEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuIpPrefetcherEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.DCUIPPrefetcherEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuMonitorMwaitEnable = SetupData.SocketConfig.PowerManagementConfig.MonitorMWait ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuTurboModeEnable = SetupData.SocketConfig.PowerManagementConfig.TurboMode ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuThermalManagementEnable = SetupData.SocketConfig.PowerManagementConfig.EnableThermalMonitor ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuTccActivationOffset = SetupData.SocketConfig.PowerManagementConfig.TCCActivationOffset;
+ mCpuPolicyConfiguration.Policy.CpuL1NextPagePrefetcherDisable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.CpuL1NextPagePrefetcherDisable ? TRUE : FALSE;
+
+ if (SetupData.SocketConfig.PowerManagementConfig.TStateEnable && (SetupData.SocketConfig.PowerManagementConfig.OnDieThermalThrottling > 0)) {
+ mCpuPolicyConfiguration.Policy.CpuTStateEnable = SetupData.SocketConfig.PowerManagementConfig.TStateEnable ? TRUE : FALSE;
+ }
+
+ mCpuPolicyConfiguration.Policy.CpuMlcStreamerPrefetecherEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.MlcStreamerPrefetcherEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuMlcSpatialPrefetcherEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.MlcSpatialPrefetcherEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuThreeStrikeCounterEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.ThreeStrikeTimer ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuEnergyPerformanceBiasEnable = TRUE;
+ mCpuPolicyConfiguration.Policy.CpuX2ApicEnable = (SetupData.SocketConfig.SocketProcessorCoreConfiguration.ProcessorX2apic || DynamicSiLibraryProtocol->X2ApicIdDetect (NULL)) ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuAesEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.AesEnable ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuPpinControlEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.PpinControl ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuPeciDownstreamWriteEnable = SetupData.SocketConfig.SocketProcessorCoreConfiguration.PCIeDownStreamPECIWrite ? TRUE : FALSE;
+ if ((CpuFamilyModelStepping >> 4) == CPU_FAMILY_ICX) {
+ mCpuPolicyConfiguration.Policy.CpuC1AutoDemotionEnable = SetupData.SocketConfig.PowerManagementConfig.C1AutoDemotion ? TRUE : FALSE;
+ mCpuPolicyConfiguration.Policy.CpuC1AutoUndemotionEnable = SetupData.SocketConfig.PowerManagementConfig.C1AutoUnDemotion ? TRUE : FALSE;
+ }
+ mCpuPolicyConfiguration.Policy.CpuCStateEnable = TRUE;
+
+ mPpmPolicyConfiguration.OverclockingLock = SetupData.SocketConfig.PowerManagementConfig.OverclockingLock;
+ mPpmPolicyConfiguration.AvxSupport = SetupData.SocketConfig.PowerManagementConfig.AvxSupport;
+ mPpmPolicyConfiguration.AvxIccpLevel = SetupData.SocketConfig.PowerManagementConfig.AvxIccpLevel;
+ mPpmPolicyConfiguration.GpssTimer = SetupData.SocketConfig.PowerManagementConfig.GpssTimer;
+
+ mPpmPolicyConfiguration.FastRaplDutyCycle = SetupData.SocketConfig.PowerManagementConfig.FastRaplDutyCycle;
+
+ if (mIioUds->PlatformData.EVMode) {
+ mCpuPolicyConfiguration.Policy.CpuLtEnable = FALSE;
+ }
+
+ if (SetupData.SocketConfig.PowerManagementConfig.ProcessorEistEnable) {
+ mCpuPolicyConfiguration.Policy.CpuHwCoordinationEnable = SetupData.SocketConfig.PowerManagementConfig.ProcessorEistPsdFunc ? FALSE : TRUE;
+ mCpuPolicyConfiguration.Policy.CpuBootPState = SetupData.SocketConfig.PowerManagementConfig.BootPState;
+ } else {
+ mCpuPolicyConfiguration.Policy.CpuTurboModeEnable = FALSE;
+ }
+
+ mCpuPolicyConfiguration.Policy.CpuAcpiLvl2Addr = PCH_ACPI_BASE_ADDRESS + R_ACPI_LV2;
+ mCpuPolicyConfiguration.Policy.CpuPackageCStateLimit = PackageCStateSetting;
+
+ if ((SetupData.SocketConfig.PowerManagementConfig.TStateEnable) && (SetupData.SocketConfig.PowerManagementConfig.OnDieThermalThrottling > 0)) {
+ mCpuPolicyConfiguration.Policy.CpuClockModulationDutyCycle = SetupData.SocketConfig.PowerManagementConfig.OnDieThermalThrottling;
+ }
+
+ Status = PcdSetBoolS (PcdCpuSmmMsrSaveStateEnable, SetupData.SocketConfig.SocketProcessorCoreConfiguration.eSmmSaveState? TRUE : FALSE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ if (SetupData.SystemConfig.EmcaMsmiEn != 0) {
+ Status = PcdSetBoolS (PcdCpuSmmProtectedModeEnable, TRUE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ } else {
+ Status = PcdSetBoolS (PcdCpuSmmProtectedModeEnable, FALSE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ }
+
+
+ mCpuPolicyConfiguration.Policy.CpuIioLlcWaysBitMask = SetupData.SocketConfig.SocketProcessorCoreConfiguration.IioLlcWaysMask;
+ mCpuPolicyConfiguration.Policy.CpuExpandedIioLlcWaysBitMask = SetupData.SocketConfig.SocketProcessorCoreConfiguration.ExpandedIioLlcWaysMask;
+ mCpuPolicyConfiguration.Policy.CpuRemoteWaysBitMask = SetupData.SocketConfig.SocketProcessorCoreConfiguration.RemoteWaysMask;
+ mCpuPolicyConfiguration.Policy.CpuRrqCountThreshold = mIioUds->PlatformData.RemoteRequestThreshold;
+ mCpuPolicyConfiguration.Policy.CpuCrashLogGprs = (SetupData.SocketConfig.SocketProcessorCoreConfiguration.CpuCrashLogGprs > 0) ? TRUE : FALSE;
+
+ //CSR SAPM CTL
+ for( socket = 0; socket < MAX_SOCKET; socket++) {
+ mPpmPolicyConfiguration.SapmCtl[socket].Iio0PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Iio0PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Iio1PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Iio1PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Iio2PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Iio2PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Kti01PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Kti01PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Kti23PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Kti23PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc0PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Mc0PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc1PkgcClkGateDis = SetupData.SocketConfig.PowerManagementConfig.Mc1PkgcClkGateDis[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].P0pllOffEna = SetupData.SocketConfig.PowerManagementConfig.P0pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].P1pllOffEna = SetupData.SocketConfig.PowerManagementConfig.P1pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].P2pllOffEna = SetupData.SocketConfig.PowerManagementConfig.P2pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Kti01pllOffEna = SetupData.SocketConfig.PowerManagementConfig.Kti01pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Kti23pllOffEna = SetupData.SocketConfig.PowerManagementConfig.Kti23pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc0pllOffEna = SetupData.SocketConfig.PowerManagementConfig.Mc0pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc1pllOffEna = SetupData.SocketConfig.PowerManagementConfig.Mc1pllOffEna[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].SetvidDecayDisable = SetupData.SocketConfig.PowerManagementConfig.SetvidDecayDisable[socket];
+ mPpmPolicyConfiguration.SapmCtl[socket].SapmCtlLock = SetupData.SocketConfig.PowerManagementConfig.SapmCtlLock[socket];
+
+ if (SetupData.SocketConfig.MemoryConfig.OppSrefEn == 1) {
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc0PkgcIoVolRedDis = 1;
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc1PkgcIoVolRedDis = 1;
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc0PkgcDigVolRedDis = 1;
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc1PkgcDigVolRedDis = 1;
+ }
+
+ if (Sp7.Bits.AepDimmPresent == 1) {
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc0pllOffEna = 0;
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc1pllOffEna = 0;
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc0PkgcClkGateDis = 1;
+ mPpmPolicyConfiguration.SapmCtl[socket].Mc1PkgcClkGateDis = 1;
+ }
+ }
+
+ //
+ // PMAX Detector Config
+ //
+ mPpmPolicyConfiguration.PmaxConfig.PmaxDetector = SetupData.SocketConfig.PowerManagementConfig.PmaxDetector;
+ mPpmPolicyConfiguration.PmaxConfig.PmaxAutoAdjustment = SetupData.SocketConfig.PowerManagementConfig.PmaxAutoAdjustment;
+ mPpmPolicyConfiguration.PmaxConfig.PmaxLoadLine = SetupData.SocketConfig.PowerManagementConfig.PmaxLoadLine;
+ mPpmPolicyConfiguration.PmaxConfig.PmaxSign = SetupData.SocketConfig.PowerManagementConfig.PmaxSign;
+ mPpmPolicyConfiguration.PmaxConfig.PmaxOffset = SetupData.SocketConfig.PowerManagementConfig.PmaxOffset;
+ mPpmPolicyConfiguration.PmaxConfig.PmaxTriggerSetup = SetupData.SocketConfig.PowerManagementConfig.PmaxTriggerSetup;
+
+ //
+ // PERF_P_LIMIT_CONTROL (CSR 1:30:2:0xE4)
+ //
+ mPpmPolicyConfiguration.PerPLimitCtl.PerfPLmtThshld = SetupData.SocketConfig.PowerManagementConfig.PerfPLmtThshld;
+ mPpmPolicyConfiguration.PerPLimitCtl.PerfPLimitClipC = SetupData.SocketConfig.PowerManagementConfig.PerfPLimitClipC;
+ mPpmPolicyConfiguration.PerPLimitCtl.PerfPlimitDifferential = SetupData.SocketConfig.PowerManagementConfig.PerfPlimitDifferential;
+ mPpmPolicyConfiguration.PerPLimitCtl.PerfPLimitEn = SetupData.SocketConfig.PowerManagementConfig.PerfPLimitEn;
+
+ mPpmPolicyConfiguration.DynamicIss = SetupData.SocketConfig.PowerManagementConfig.DynamicIss;
+ mPpmPolicyConfiguration.IssCapableSystem = CpuVarDataPtr->IssCapableSystem;
+ mPpmPolicyConfiguration.ConfigTDPLevel = CpuVarDataPtr->IssConfigTdpCurrentLevel;
+ mPpmPolicyConfiguration.ConfigTDPLock = SetupData.SocketConfig.PowerManagementConfig.ConfigTdpLock;
+
+ for (socket = 0; socket < MAX_SOCKET; socket++) {
+ mPpmPolicyConfiguration.PmaxConfig.BasePackageTdp[socket] = CpuVarDataPtr->IssConfigTdpPower[socket][0];
+ mPpmPolicyConfiguration.CurrentPackageTdp[socket] = CpuVarDataPtr->IssConfigTdpPower[socket][mPpmPolicyConfiguration.ConfigTDPLevel];
+
+ if ((CpuFamilyModelStepping >> 4) != CPU_FAMILY_SKX) {
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaKti[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaKti[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaRlink[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaRlink[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaFxr[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaFxr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaMcddr[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaMcddr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaHbm[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaHbm[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaIio[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaIio[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaHqm[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaHqm[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaNac[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaNac[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaTip[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaTip[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnablePkgCCriteriaMdfs[socket] = SetupData.SocketConfig.PowerManagementConfig.EnablePkgCCriteriaMdfs[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaLogicalIpType[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaLogicalIpType[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaLogicalIpTypeMcddr[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaLogicalIpTypeIio[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoKti[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoKti[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnableLinkInL1Kti[socket] = SetupData.SocketConfig.PowerManagementConfig.EnableLinkInL1Kti[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoRlink[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoRlink[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnableLinkInL1Rlink[socket] = SetupData.SocketConfig.PowerManagementConfig.EnableLinkInL1Rlink[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoFxr[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoFxr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgcCriteraPsMaskFxr[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgcCriteraPsMaskFxr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaAllowedPsMaskFxr[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaAllowedPsMaskFxr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoMcddr[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoMcddr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgcCriteriaPsOptionMcddr[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgcCriteriaPsOptionMcddr[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoHbm[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoHbm[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgcCriteriaPsOptionHbm[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgcCriteriaPsOptionHbm[socket];
+
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoIio[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoIio[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.EnableLinkInL1Iio[socket] = SetupData.SocketConfig.PowerManagementConfig.EnableLinkInL1Iio[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoHqm[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoHqm[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgcCriteraPsMaskHqm[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgcCriteraPsMaskHqm[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaAllowedPsMaskHqm[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaAllowedPsMaskHqm[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoNac[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoNac[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgcCriteraPsMaskNac[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgcCriteraPsMaskNac[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaAllowedPsMaskNac[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaAllowedPsMaskNac[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoTip[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoTip[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgcCriteraPsMaskTip[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgcCriteraPsMaskTip[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaAllowedPsMaskTip[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaAllowedPsMaskTip[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.PkgCCriteriaInstanceNoMdfs[socket] = SetupData.SocketConfig.PowerManagementConfig.PkgCCriteriaInstanceNoMdfs[socket];
+ mPpmPolicyConfiguration.PkgcCriteria.AllowLpStateMdfs[socket] = SetupData.SocketConfig.PowerManagementConfig.AllowLpStateMdfs[socket];
+ }
+
+ if ((CpuFamilyModelStepping >> 4) == CPU_FAMILY_SKX) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskKti[socket] = (SetupData.SocketConfig.PowerManagementConfig.Kti0In[socket] |
+ (SetupData.SocketConfig.PowerManagementConfig.Kti1In[socket] << 1) |
+ (SetupData.SocketConfig.PowerManagementConfig.Kti2In[socket] << 2) );
+
+ if (SetupData.SocketConfig.PowerManagementConfig.PcieIio0In[socket]) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskPcie[socket] |= SET_PCIEx_MASK;
+ }
+ if (SetupData.SocketConfig.PowerManagementConfig.PcieIio1In[socket]) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskPcie[socket] |= (SET_PCIEx_MASK << 4);
+ }
+ if (SetupData.SocketConfig.PowerManagementConfig.PcieIio2In[socket]) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskPcie[socket] |= (SET_PCIEx_MASK << 8);
+ }
+ if (SetupData.SocketConfig.PowerManagementConfig.PcieIio3In[socket]) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskPcie[socket] |= (SET_PCIEx_MASK << 12);
+ }
+ if (SetupData.SocketConfig.PowerManagementConfig.PcieIio4In[socket]) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskPcie[socket] |= (SET_PCIEx_MASK << 16);
+ }
+ if (SetupData.SocketConfig.PowerManagementConfig.PcieIio5In[socket]) {
+ mPpmPolicyConfiguration.PpmCst.PkgCstEntryCriteriaMaskPcie[socket] |= (SET_PCIEx_MASK << 20);
+ }
+ }
+ }
+
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.SapmctlValCtl = SetupData.SocketConfig.PowerManagementConfig.SapmctlValCtl;
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.MsrLock = 1;
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.PkgCstEntryValCtl = SetupData.SocketConfig.PowerManagementConfig.PkgCstEntryValCtl;
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.CurrentConfig = SetupData.SocketConfig.PowerManagementConfig.CurrentConfig;
+ mPpmPolicyConfiguration.TurboPowerLimit.TurboLimitCsrLock = 1;
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.MsrPkgCstConfigControlLock = SetupData.SocketConfig.SocketProcessorCoreConfiguration.ProcessorMsrPkgCstConfigControlLock ? 1 : 0;
+
+ if ((PackageCStateSetting > 0) && SetupData.SocketConfig.PowerManagementConfig.DynamicL1) {
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.DynamicL1Disable = 1;
+ }
+
+ if (SetupData.SocketConfig.PowerManagementConfig.VccSAandVccIOdisable) {
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.VccsaVccioDisable = 1;
+ }
+
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.SwLtrOvrdCtl = SetupData.SocketConfig.PowerManagementConfig.SwLtrOvrdCtl;
+ mPpmPolicyConfiguration.AdvPwrMgtCtl.EnableLowerLatencyMode = SetupData.SocketConfig.PowerManagementConfig.EnableLowerLatencyMode;
+
+ if (SetupData.SocketConfig.PowerManagementConfig.ProcessorEistEnable == 0) {
+ mPpmPolicyConfiguration.PowerCtl.EeTurboDisable = 1;
+ }
+
+ mPpmPolicyConfiguration.PowerCtl.PkgCLatNeg = SetupData.SocketConfig.PowerManagementConfig.PkgCLatNeg;
+ mPpmPolicyConfiguration.PowerCtl.LtrSwInput = SetupData.SocketConfig.PowerManagementConfig.LTRSwInput;
+ mPpmPolicyConfiguration.PowerCtl.PwrPerfSwitch = SetupData.SocketConfig.PowerManagementConfig.PwrPerfSwitch;
+ mPpmPolicyConfiguration.PowerCtl.SapmControl = SetupData.SocketConfig.PowerManagementConfig.SAPMControl;
+ mPpmPolicyConfiguration.PowerCtl.EeTurboDisable = SetupData.SocketConfig.PowerManagementConfig.EETurboDisable;
+ mPpmPolicyConfiguration.PowerCtl.ProchotLock = 1;
+ mPpmPolicyConfiguration.PowerCtl.C1eEnable = SetupData.SocketConfig.PowerManagementConfig.ProcessorC1eEnable;
+ mPpmPolicyConfiguration.PowerCtl.SetvidDecayDisable = SetupData.SocketConfig.PowerManagementConfig.SetvidDecayDisable[0];
+
+ if ((SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable == 3) && !SetupData.SocketConfig.PowerManagementConfig.PwrPerfTuning) {
+ // If hwp native w/o legacy then default value is "BIOS Controls EPB". OS Control of EPB should not be allowed
+ mPpmPolicyConfiguration.PowerCtl.PwrPerfTuning = 1;
+ } else if ((SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable == 2) && !SetupData.SocketConfig.PowerManagementConfig.PwrPerfTuning) {
+ // if hwp oob mode then default value is "PECI Controls EPB". OS Control of EPB should not be allowed
+ mPpmPolicyConfiguration.PowerCtl.PwrPerfTuning = 2;
+ } else {
+ mPpmPolicyConfiguration.PowerCtl.PwrPerfTuning = SetupData.SocketConfig.PowerManagementConfig.PwrPerfTuning;
+ }
+
+ // From Setup:
+ // 0: Output only
+ // 1: Disable
+ // 2: Bi-Directional
+ // 3: Input Only
+ //
+ if ((SetupData.SocketConfig.PowerManagementConfig.EnableProcHot & 1) == 0) {
+ mPpmPolicyConfiguration.PowerCtl.ProchotOutputDisable = 0;
+ } else {
+ mPpmPolicyConfiguration.PowerCtl.ProchotOutputDisable = 1;
+ }
+
+ if ((SetupData.SocketConfig.PowerManagementConfig.EnableProcHot & 2) == 0) {
+ mPpmPolicyConfiguration.PowerCtl.BidirProchotEnable = 0;
+ } else {
+ mPpmPolicyConfiguration.PowerCtl.BidirProchotEnable = 1;
+ }
+
+ //
+ // PROCHOT_RESPONSE_RATIO (CSR 1:30:2:0xB0)
+ //
+ mPpmPolicyConfiguration.ProchotRatio = SetupData.SocketConfig.PowerManagementConfig.ProchotResponseRatio;
+
+ mPpmPolicyConfiguration.PpoCurrentCfg.PpcccLock = SetupData.SocketConfig.PowerManagementConfig.PpcccLock;
+ mPpmPolicyConfiguration.PpoCurrentCfg.CurrentLimit = SetupData.SocketConfig.PowerManagementConfig.CurrentLimit;
+
+ // MSR_PACKAGE_POWER_LIMIT 0x610
+ // CSR_TURBO_POWER_LIMIT 1:30:0:0xe8
+ TurboPowerLimit = &mPpmPolicyConfiguration.TurboPowerLimit;
+ TurboPowerLimit->TurboPowerLimitLock = SetupData.SocketConfig.PowerManagementConfig.TurboPowerLimitLock;
+ TurboPowerLimit->PowerLimit1Power = SetupData.SocketConfig.PowerManagementConfig.PowerLimit1Power;
+ TurboPowerLimit->PowerLimit1Time = SetupData.SocketConfig.PowerManagementConfig.PowerLimit1Time;
+ TurboPowerLimit->PowerLimit1En = SetupData.SocketConfig.PowerManagementConfig.PowerLimit1En;
+ TurboPowerLimit->PowerLimit2Power = SetupData.SocketConfig.PowerManagementConfig.PowerLimit2Power;
+ TurboPowerLimit->PowerLimit2Time = SetupData.SocketConfig.PowerManagementConfig.PowerLimit2Time;
+ TurboPowerLimit->PowerLimit2En = SetupData.SocketConfig.PowerManagementConfig.PowerLimit2En;
+ TurboPowerLimit->PkgClmpLim1 = 1;
+ TurboPowerLimit->PkgClmpLim2 = 1;
+
+ // DYNAMIC_PERF_POWER_CTL (CSR 1:30:2:0x64)
+ mPpmPolicyConfiguration.DynamicPerPowerCtl.UncrPerfPlmtOvrdEn = SetupData.SocketConfig.PowerManagementConfig.UncrPerfPlmtOvrdEn;
+ mPpmPolicyConfiguration.DynamicPerPowerCtl.EetOverrideEn = SetupData.SocketConfig.PowerManagementConfig.EetOverrideEn;
+ mPpmPolicyConfiguration.DynamicPerPowerCtl.IoBwPlmtOvrdEn = SetupData.SocketConfig.PowerManagementConfig.IoBwPlmtOvrdEn;
+ mPpmPolicyConfiguration.DynamicPerPowerCtl.IomApmOvrdEn = SetupData.SocketConfig.PowerManagementConfig.IomApmOvrdEn;
+ mPpmPolicyConfiguration.DynamicPerPowerCtl.KtiApmOvrdEn = SetupData.SocketConfig.PowerManagementConfig.KtiApmOvrdEn;
+
+ //
+ // CSR_PCIE_ILTR_OVRD (CSR 1:30:1:0xFC)
+ // SW_LTR_OVRD (MSR 0xa02) -- not used
+ //
+ mPpmPolicyConfiguration.PcieIltrOvrd.SnpLatVld = SetupData.SocketConfig.PowerManagementConfig.SnpLatVld;
+ mPpmPolicyConfiguration.PcieIltrOvrd.SnpLatOvrd = SetupData.SocketConfig.PowerManagementConfig.SnpLatOvrd;
+ mPpmPolicyConfiguration.PcieIltrOvrd.SnpLatMult = SetupData.SocketConfig.PowerManagementConfig.SnpLatMult;
+ mPpmPolicyConfiguration.PcieIltrOvrd.SnpLatVal = SetupData.SocketConfig.PowerManagementConfig.SnpLatVal;
+ mPpmPolicyConfiguration.PcieIltrOvrd.NonSnpLatVld = SetupData.SocketConfig.PowerManagementConfig.NonSnpLatVld;
+ mPpmPolicyConfiguration.PcieIltrOvrd.NonSnpLatOvrd = SetupData.SocketConfig.PowerManagementConfig.NonSnpLatOvrd;
+ mPpmPolicyConfiguration.PcieIltrOvrd.NonSnpLatMult = SetupData.SocketConfig.PowerManagementConfig.NonSnpLatMult;
+ mPpmPolicyConfiguration.PcieIltrOvrd.NonSnpLatVal = SetupData.SocketConfig.PowerManagementConfig.NonSnpLatVal;
+
+ for(i = 0; i < 8; i++) {
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitRatio[i] = SetupData.SocketConfig.PowerManagementConfig.TurboRatioLimitRatio[i];
+
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitRatioMask[i] = 0xFF;
+ if (SetupData.SocketConfig.PowerManagementConfig.TurboRatioLimitRatio[i] > 0) {
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitRatioMask[i] = 0;
+ }
+
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitCoresMask[i] = 0xFF;
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitCores[i] = 0;
+ if (SetupData.SocketConfig.PowerManagementConfig.TurboRatioLimitCores[i] != 0xFF) {
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitCoresMask[i] = 0;
+ mPpmPolicyConfiguration.TurboRatioLimit.RatioLimitCores[i] = SetupData.SocketConfig.PowerManagementConfig.TurboRatioLimitCores[i];
+ }
+ }
+
+ //
+ // ENERGY_PERF_BIAS_CONFIG (MSR 0xA01)
+ //
+ mPpmPolicyConfiguration.PerfBiasConfig.EngAvgTimeWdw1 = SetupData.SocketConfig.PowerManagementConfig.EngAvgTimeWdw1;
+ mPpmPolicyConfiguration.PerfBiasConfig.P0TtlTimeLow1 = SetupData.SocketConfig.PowerManagementConfig.P0TtlTimeLow1;
+ mPpmPolicyConfiguration.PerfBiasConfig.P0TtlTimeHigh1 = SetupData.SocketConfig.PowerManagementConfig.P0TtlTimeHigh1;
+ mPpmPolicyConfiguration.PerfBiasConfig.AltEngPerfBIAS = SetupData.SocketConfig.PowerManagementConfig.AltEngPerfBIAS;
+ mPpmPolicyConfiguration.PerfBiasConfig.WorkLdConfig = SetupData.SocketConfig.PowerManagementConfig.WorkLdConfig;
+
+ //
+ //ProcessorHWPM-init as disabled.
+ //
+ mPpmPolicyConfiguration.Hwpm.HWPMNative = 0;
+ mPpmPolicyConfiguration.Hwpm.HWPMOOB = 0;
+ mPpmPolicyConfiguration.Hwpm.HWPMEnable = SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable;
+ mPpmPolicyConfiguration.Hwpm.HWPMInterrupt = SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMInterrupt;
+ mPpmPolicyConfiguration.Hwpm.EPPEnable = SetupData.SocketConfig.PowerManagementConfig.ProcessorEPPEnable;
+ mPpmPolicyConfiguration.Hwpm.EPPProfile = SetupData.SocketConfig.PowerManagementConfig.ProcessorEppProfile;
+
+ if ((SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable == 1) ||
+ (SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable == 3)) {
+ mPpmPolicyConfiguration.Hwpm.HWPMNative = SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable;
+ }else if (SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable == 2){
+ mPpmPolicyConfiguration.Hwpm.HWPMOOB = SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable;
+ mPpmPolicyConfiguration.Hwpm.HWPMInterrupt = 0;
+ }else if (SetupData.SocketConfig.PowerManagementConfig.ProcessorHWPMEnable == 0){
+ mPpmPolicyConfiguration.Hwpm.HWPMNative = 0;
+ mPpmPolicyConfiguration.Hwpm.HWPMOOB = 0;
+ mPpmPolicyConfiguration.Hwpm.HWPMInterrupt = 0;
+ mPpmPolicyConfiguration.Hwpm.EPPEnable = 0;
+ }
+
+ mPpmPolicyConfiguration.Hwpm.APSrocketing = SetupData.SocketConfig.PowerManagementConfig.ProcessorAPSrocketing;
+ mPpmPolicyConfiguration.Hwpm.Scalability = SetupData.SocketConfig.PowerManagementConfig.ProcessorScalability;
+ mPpmPolicyConfiguration.Hwpm.RaplPrioritization = SetupData.SocketConfig.PowerManagementConfig.ProcessorRaplPrioritization;
+ mPpmPolicyConfiguration.Hwpm.OutofBandAlternateEPB = SetupData.SocketConfig.PowerManagementConfig.ProcessorOutofBandAlternateEPB;
+
+ for (i = 0; i < NUM_CST_LAT_MSR; i++) { // CStateLatencyCtrl CSRs
+ mPpmPolicyConfiguration.PpmCst.LatencyCtrl[i].Valid = SetupData.SocketConfig.PowerManagementConfig.CStateLatencyCtrlValid[i];
+ mPpmPolicyConfiguration.PpmCst.LatencyCtrl[i].Multiplier = SetupData.SocketConfig.PowerManagementConfig.CStateLatencyCtrlMultiplier[i];
+ mPpmPolicyConfiguration.PpmCst.LatencyCtrl[i].Value = SetupData.SocketConfig.PowerManagementConfig.CStateLatencyCtrlValue[i];
+ }
+
+ if (SetupData.SocketConfig.PowerManagementConfig.C2C3TT) { //if option is not AUTO
+ mPpmPolicyConfiguration.C2C3TT = SetupData.SocketConfig.PowerManagementConfig.C2C3TT;
+ } else {
+ mPpmPolicyConfiguration.C2C3TT = 0x10;
+ }
+
+ //
+ // If Emulation flag set by InitializeDefaultData in MemoryQpiInit.c
+ // force X2APIC
+ //
+ Status = gBS->LocateProtocol (
+ &gEfiPlatformTypeProtocolGuid,
+ NULL,
+ &PlatformType
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ // allocate memory for IedTrace
+ if ((SetupData.SocketConfig.SocketProcessorCoreConfiguration.IedTraceSize != 0) && (PcdGet32 (PcdCpuIEDRamSize) != 0)) {
+ DynamicSiLibraryProtocol->CheckAndPopulateIedTraceMemory(0x400000 << (SetupData.SocketConfig.SocketProcessorCoreConfiguration.IedTraceSize - 1), mIioUds);
+ }
+
+ //
+ // Install CPU PPM Policy Protocol for platform PPM configuration
+ //
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gPpmPolicyProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &mPpmPolicyConfiguration
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Install CPU Policy Protocol for platform configuration
+ // Cpu Driver could be dispatched after this protocol installed.
+ //
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gEfiCpuPolicyProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &mCpuPolicyConfiguration
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf b/Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
new file mode 100644
index 0000000000..e125017e1d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
@@ -0,0 +1,81 @@
+## @file
+# Component description file for Platform CPU Policy DXE Driver.
+#
+# @copyright
+# Copyright 2015 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformCpuPolicy
+ FILE_GUID = 76A7B4FC-C8D5-462d-A4D2-6E88338A772A
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PlatformCpuPolicyEntryPoint
+
+[Sources]
+ PlatformCpuPolicy.c
+
+[Packages]
+ UefiCpuPkg/UefiCpuPkg.dec
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/Cpu/CpuRcPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ PcdLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ BaseLib
+ MemoryAllocationLib
+ BaseMemoryLib
+ HobLib
+ IoLib
+
+[Protocols]
+ gEfiPlatformTypeProtocolGuid
+ gEfiCpuPolicyProtocolGuid
+ gPpmPolicyProtocolGuid
+ gDynamicSiLibraryProtocolGuid ## CONSUMES
+
+[Guids]
+ gEfiSetupVariableGuid
+ gEfiSocketMemoryVariableGuid
+ gEfiSocketPowermanagementVarGuid
+ gEfiSocketProcessorCoreVarGuid
+ gEfiEndOfDxeEventGroupGuid
+
+[Pcd]
+ gCpuPkgTokenSpaceGuid.PcdPlatformCpuSocketCount
+ gCpuPkgTokenSpaceGuid.PcdCpuSocketId
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmMsrSaveStateEnable
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmProtectedModeEnable
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmRuntimeCtlHooks
+ gSiPkgTokenSpaceGuid.PcdAcpiBaseAddress
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardSocketCount
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDRamSize
+
+ gStructPcdTokenSpaceGuid.PcdSocketIioConfig
+ gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig
+ gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig
+ gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig
+ gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig
+ gStructPcdTokenSpaceGuid.PcdSetup
+ gStructPcdTokenSpaceGuid.PcdPchSetup
+ gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig
+
+ gOemSkuTokenSpaceGuid.PcdTurboPowerLimitLock
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Depex]
+ gEfiVariableArchProtocolGuid AND gEfiPlatformTypeProtocolGuid AND gDynamicSiLibraryProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
new file mode 100644
index 0000000000..a3ab0ecbe6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
@@ -0,0 +1,58 @@
+## @file
+#
+# @copyright
+# Copyright 2009 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformType
+ FILE_GUID = 2E6A521C-F697-402d-9774-98B2B7E140F3
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PlatformTypeInit
+
+[Sources]
+ PlatformTypes.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/Cpu/CpuRcPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ UefiCpuPkg/UefiCpuPkg.dec
+
+[LibraryClasses]
+ PcdLib
+ BaseLib
+ HobLib
+ DebugLib
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+
+ [Protocols]
+ gEfiPlatformTypeProtocolGuid ## PRODUCES
+ gEfiIioUdsProtocolGuid
+ gDynamicSiLibraryProtocolGuid ## CONSUMES
+
+[Guids]
+ gEfiPlatformInfoGuid
+ gEfiSetupVariableGuid
+
+[Pcd]
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformName
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformNameSize
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIO
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIOValue
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Depex]
+ gDynamicSiLibraryProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c
new file mode 100644
index 0000000000..08396c3b7a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c
@@ -0,0 +1,364 @@
+/** @file
+ Platform type driver to identify different platform.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+//
+// Statements that include other files
+//
+#include "PlatformTypes.h"
+#include <Library/SerialPortLib/Ns16550.h>
+#include <Library/IoLib.h>
+#include <Protocol/SmbusHc.h>
+#include <Protocol/MpService.h>
+#include <Library/SetupLib.h>
+#include <Library/PchInfoLib.h>
+#include <Library/GpioLib.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+
+#define STRING_WIDTH_40 40
+
+CHAR16 PchName[STRING_WIDTH_40];
+CHAR16 IioName[STRING_WIDTH_40];
+CHAR16 *PlatformName;
+
+//
+// Instantiation of Driver's private data.
+//
+EFI_PLATFORM_DATA_DRIVER_PRIVATE mPrivatePlatformData;
+EFI_IIO_UDS_DRIVER_PRIVATE mIioUdsPrivateData;
+IIO_UDS *IioUdsData; // Pointer to UDS in Allocated Memory Pool
+
+EFI_GUID gEfiSmbusHcProtocolGuid = EFI_SMBUS_HC_PROTOCOL_GUID;
+EFI_GUID gEfiMpServiceProtocolGuid = EFI_MP_SERVICES_PROTOCOL_GUID;
+EFI_GUID mSystemConfigurationGuid = SYSTEM_CONFIGURATION_GUID;
+
+
+/**
+ Get the PCH name.
+
+ Concatenate the series, stepping, and SKU strings to initialize the module
+ global variable "PchName".
+
+ @param[in] PlatformInfoHobData Pointer to the platform info HOB.
+
+ @retval EFI_INVALID_PARAMETER Pointer parameter was null on entry.
+ @retval EFI_SUCCESS PchName was initialized successfully.
+**/
+EFI_STATUS
+EFIAPI
+GetPchName (
+ IN EFI_PLATFORM_INFO *PlatformInfoHobData
+ )
+{
+ CHAR8 AsciiBuffer[STRING_WIDTH_40];
+ CHAR16 UnicodeBuffer[STRING_WIDTH_40];
+ UINT32 BufferAsciiSize;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+ EFI_STATUS Status;
+
+ ASSERT (PlatformInfoHobData != NULL);
+ if (PlatformInfoHobData == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ BufferAsciiSize = sizeof (AsciiBuffer);
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ AsciiStrCpyS (AsciiBuffer, BufferAsciiSize, DynamicSiLibraryProtocol->PchGetSeriesStr ());
+ AsciiStrToUnicodeStrS (AsciiBuffer, UnicodeBuffer, STRING_WIDTH_40);
+ ZeroMem (AsciiBuffer, BufferAsciiSize);
+ StrCpyS (PchName, STRING_WIDTH_40, UnicodeBuffer);
+
+ StrCatS (PchName, STRING_WIDTH_40, L" ");
+
+ DynamicSiLibraryProtocol->PchGetSteppingStr (AsciiBuffer, BufferAsciiSize);
+ AsciiStrToUnicodeStrS (AsciiBuffer, UnicodeBuffer, STRING_WIDTH_40);
+ ZeroMem (AsciiBuffer, BufferAsciiSize);
+ StrCatS (PchName, STRING_WIDTH_40, UnicodeBuffer);
+
+ StrCatS (PchName, STRING_WIDTH_40, L" - ");
+
+ AsciiStrCpyS (AsciiBuffer, BufferAsciiSize, DynamicSiLibraryProtocol->PchGetSkuStr ());
+ AsciiStrToUnicodeStrS (AsciiBuffer, UnicodeBuffer, STRING_WIDTH_40);
+ ZeroMem (AsciiBuffer, BufferAsciiSize);
+ StrCatS (PchName, STRING_WIDTH_40, UnicodeBuffer);
+
+ mPrivatePlatformData.PlatformType.PchStringPtr = (UINT64)PchName;
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+
+ GC_TODO: add routine description
+
+ @param None
+
+ @retval None
+
+**/
+VOID
+EFIAPI
+GetIioName (
+ VOID
+ )
+{
+
+ StrCpyS(IioName, STRING_WIDTH_40, L"Unknown");
+
+ mPrivatePlatformData.PlatformType.IioStringPtr = (UINT64)IioName;
+ return ;
+}
+
+
+/**
+
+ Assert the POST complete GPIO
+
+ @param Event Pointer to the event that triggered this Ccllback Function
+ @param Context VOID Pointer required for Ccllback functio
+
+ @retval EFI_SUCCESS - Assertion successfully
+
+
+**/
+VOID
+EFIAPI
+AssertPostGpio (
+ EFI_EVENT Event,
+ VOID *Context
+ )
+{
+ UINT32 GPIO_B20;
+ UINT32 Data32;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+ EFI_STATUS Status;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ GPIO_B20 = PcdGet32 (PcdOemSkuAssertPostGPIO);
+ Data32 = PcdGet32(PcdOemSkuAssertPostGPIOValue);
+ if (GPIO_B20 == 0xFFFFFFFF) {
+ DEBUG ((EFI_D_ERROR, "GPIO Pcd is invalid, so abort the GPIO Set and just return! \n"));
+ return;
+ }
+ DynamicSiLibraryProtocol->GpioSetOutputValue (GPIO_B20, Data32);
+ DEBUG ((EFI_D_INFO, "System Post Complete GPIO has been set ! \n"));
+}
+
+/**
+
+ Gets the CpuId and fills in the pointer with the value.
+ Needed for executing CpuId on other APs.
+
+ @param RegEax - Pointer to be used to pass the CpuId value
+
+ @retval None
+
+**/
+VOID
+EFIAPI
+PlatformGetProcessorID (
+ IN OUT UINT32 *RegEax
+ )
+{
+
+ AsmCpuid (CPUID_VERSION_INFO, RegEax, NULL, NULL, NULL);
+}
+
+//
+// Define platform type check
+//
+/**
+
+ Entry point for the driver.
+
+ This routine reads the PlatformType GPI on FWH and produces a protocol
+ to be consumed by the chipset driver to effect those settings.
+
+ @param ImageHandle - Image Handle.
+ @param SystemTable - EFI System Table.
+
+ @retval EFI_SUCCESS - Function has completed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformTypeInit (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfoHobData = NULL;
+ IIO_UDS *UdsHobPtr;
+ EFI_GUID UniversalDataGuid = IIO_UNIVERSAL_DATA_GUID;
+ EFI_EVENT ReadyToBootEvent;
+ CHAR16 *PcdPlatformName = NULL;
+ UINT32 PcdPlatformNameSize = 0;
+ UINT32 PlatformNameSize;
+
+ //
+ // Initialize driver private data.
+ // Only one instance exists
+ //
+ ZeroMem (&mPrivatePlatformData, sizeof (mPrivatePlatformData));
+ mPrivatePlatformData.Signature = EFI_PLATFORM_TYPE_DRIVER_PRIVATE_SIGNATURE;
+
+ PlatformNameSize = (STRING_WIDTH_40) * sizeof (CHAR16);
+ PlatformName = AllocateZeroPool (PlatformNameSize);
+ ASSERT (PlatformName != NULL);
+ if (PlatformName == NULL) {
+ DEBUG ((EFI_D_ERROR, "Failed to allocate memory\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+ //
+ // Search for the Platform Info PEIM GUID HOB.
+ //
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ DEBUG ((EFI_D_ERROR, "gEfiPlatformInfoGuid not found\n"));
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfoHobData = GET_GUID_HOB_DATA(GuidHob);
+
+ CopyMem(&(mPrivatePlatformData.PlatformType.SystemUuid[0]), &PlatformInfoHobData->SystemUuid[0], 16);
+ mPrivatePlatformData.PlatformType.Signature = PlatformInfoHobData->Signature;
+ mPrivatePlatformData.PlatformType.Size = PlatformInfoHobData->Size;
+ mPrivatePlatformData.PlatformType.Revision = PlatformInfoHobData->Revision;
+ mPrivatePlatformData.PlatformType.TypeRevisionId = PlatformInfoHobData->TypeRevisionId;
+ mPrivatePlatformData.PlatformType.ExtendedInfoValid = PlatformInfoHobData->ExtendedInfoValid;
+ mPrivatePlatformData.PlatformType.Checksum = PlatformInfoHobData->Checksum;
+
+ CopyMem(&(mPrivatePlatformData.PlatformType.PciData), &PlatformInfoHobData->PciData, sizeof(EFI_PLATFORM_PCI_DATA));
+ CopyMem(&(mPrivatePlatformData.PlatformType.CpuData), &PlatformInfoHobData->CpuData, sizeof(EFI_PLATFORM_CPU_DATA));
+ CopyMem(&(mPrivatePlatformData.PlatformType.MemData), &PlatformInfoHobData->MemData, sizeof(EFI_PLATFORM_MEM_DATA));
+ CopyMem(&(mPrivatePlatformData.PlatformType.SysData), &PlatformInfoHobData->SysData, sizeof(EFI_PLATFORM_SYS_DATA));
+ CopyMem(&(mPrivatePlatformData.PlatformType.PchData), &PlatformInfoHobData->PchData, sizeof(EFI_PLATFORM_PCH_DATA));
+
+ mPrivatePlatformData.PlatformType.BoardId = PlatformInfoHobData->BoardId;
+ mPrivatePlatformData.PlatformType.Type = mPrivatePlatformData.PlatformType.BoardId;
+ mPrivatePlatformData.PlatformType.IioSku = PlatformInfoHobData->IioSku;
+ mPrivatePlatformData.PlatformType.IioRevision = PlatformInfoHobData->IioRevision;
+ mPrivatePlatformData.PlatformType.PchSku = PlatformInfoHobData->PchSku;
+ mPrivatePlatformData.PlatformType.PchRevision = PlatformInfoHobData->PchRevision;
+ mPrivatePlatformData.PlatformType.PchType = PlatformInfoHobData->PchType; //Include PCH SKU type
+ mPrivatePlatformData.PlatformType.CpuType = PlatformInfoHobData->CpuType;
+ mPrivatePlatformData.PlatformType.CpuStepping = PlatformInfoHobData->CpuStepping;
+
+ mPrivatePlatformData.PlatformType.IioRiserId = PlatformInfoHobData->IioRiserId;
+ mPrivatePlatformData.PlatformType.PcieRiser1Type = PlatformInfoHobData->PcieRiser1Type;
+ mPrivatePlatformData.PlatformType.PcieRiser2Type = PlatformInfoHobData->PcieRiser2Type;
+ mPrivatePlatformData.PlatformType.Emulation = 0x4; // default is Simics
+
+ PcdPlatformNameSize = PcdGet32(PcdOemSkuPlatformNameSize);
+ PcdPlatformName = PcdGetPtr (PcdOemSkuPlatformName);
+ ASSERT(PlatformNameSize >= PcdPlatformNameSize);
+ if (PlatformNameSize < PcdPlatformNameSize) {
+ DEBUG ((EFI_D_ERROR, "Invalid buffer size\n"));
+ return EFI_BUFFER_TOO_SMALL;
+ }
+ ASSERT(PcdPlatformName != NULL);
+ if (PcdPlatformName == NULL) {
+ DEBUG ((EFI_D_ERROR, "Invalid PCD detected\n"));
+ return EFI_NOT_FOUND;
+ }
+ CopyMem (PlatformName, PcdPlatformName, PcdPlatformNameSize);
+
+ mPrivatePlatformData.PlatformType.TypeStringPtr = (UINT64)PlatformName;
+
+ Status = GetPchName (PlatformInfoHobData);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "Failed to get PCH name: %r\n", Status));
+ return Status;
+ }
+
+ GetIioName();
+
+ //
+ // Install the PlatformType policy.
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mPrivatePlatformData.Handle,
+ &gEfiPlatformTypeProtocolGuid,
+ &mPrivatePlatformData.PlatformType,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ DEBUG ((DEBUG_INFO, "%s platform is detected!\n", PlatformName));
+
+ //
+ // Time to get the IIO_UDS HOB data stored in the PEI driver
+ //
+ GuidHob = GetFirstGuidHob (&UniversalDataGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ DEBUG ((EFI_D_ERROR, "UniversalDataGuid not found\n"));
+ return EFI_NOT_FOUND;
+ }
+ UdsHobPtr = GET_GUID_HOB_DATA(GuidHob);
+
+ //
+ // Allocate Memory Pool for Universal Data Storage so that protocol can expose it
+ //
+ Status = gBS->AllocatePool ( EfiReservedMemoryType, sizeof (IIO_UDS), (VOID **) &IioUdsData );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Initialize the Pool Memory with the data from the Hand-Off-Block
+ //
+ CopyMem(IioUdsData, UdsHobPtr, sizeof(IIO_UDS));
+
+ //
+ // Build the IIO_UDS driver instance for protocol publishing
+ //
+ ZeroMem (&mIioUdsPrivateData, sizeof (mIioUdsPrivateData));
+
+ mIioUdsPrivateData.Signature = EFI_IIO_UDS_DRIVER_PRIVATE_SIGNATURE;
+ mIioUdsPrivateData.IioUds.IioUdsPtr = IioUdsData;
+ mIioUdsPrivateData.IioUds.EnableVc = NULL;
+
+ //
+ // Install the IioUds Protocol.
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mIioUdsPrivateData.Handle,
+ &gEfiIioUdsProtocolGuid,
+ &mIioUdsPrivateData.IioUds,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+
+ //
+ // Set up callback to assert the POST Complete GPIO to the iBMC
+ //
+ Status = EfiCreateEventReadyToBootEx(
+ TPL_CALLBACK,
+ AssertPostGpio,
+ NULL,
+ &ReadyToBootEvent
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h
new file mode 100644
index 0000000000..a6dbe19c40
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h
@@ -0,0 +1,58 @@
+/** @file
+ Platform Type Driver for Harwich.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_TYPES_H_
+#define _PLATFORM_TYPES_H_
+
+#include <PiDxe.h>
+#include <Protocol/PlatformType.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/UefiLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/HobLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Protocol/VariableWrite.h>
+#include <Protocol/Spi.h>
+#include <Protocol/IioUds.h>
+#include <SystemBoard.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Guid/HobList.h>
+#include <Register/PchRegsSpi.h>
+#include <Register/PchRegsLpc.h>
+#include <PchAccess.h>
+#include <Platform.h>
+#include <Register/Cpuid.h>
+
+
+
+
+#define EFI_PLATFORM_TYPE_DRIVER_PRIVATE_SIGNATURE SIGNATURE_32 ('T', 'Y', 'P', 'P')
+#define EFI_IIO_UDS_DRIVER_PRIVATE_SIGNATURE SIGNATURE_32 ('S', 'D', 'U', 'I')
+
+
+typedef unsigned char BYTE; //!< 8-bit quantities
+typedef unsigned short WORD; //!< 16-bit quantities
+typedef unsigned long DWORD; //!< 32-bit quantities
+
+typedef struct {
+ UINTN Signature;
+ EFI_HANDLE Handle; // Handle for protocol this driver installs on
+ EFI_PLATFORM_TYPE_PROTOCOL PlatformType; // Policy protocol this driver installs
+} EFI_PLATFORM_DATA_DRIVER_PRIVATE;
+
+typedef struct {
+ UINTN Signature;
+ EFI_HANDLE Handle; // Handle for protocol this driver installs on
+ EFI_IIO_UDS_PROTOCOL IioUds; // Policy protocol this driver installs
+} EFI_IIO_UDS_DRIVER_PRIVATE;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c
new file mode 100644
index 0000000000..709c7ad479
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c
@@ -0,0 +1,157 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "S3NvramSave.h"
+#include <Library/MemoryAllocationLib.h>
+#include <Library/LargeVariableReadLib.h>
+#include <Library/LargeVariableWriteLib.h>
+
+/**
+ Verify the SysHost structure size.
+
+ Verifies that the size of the SysHost structure in PEI is
+ the same as the size of the SysHost structure and DXE and
+ ASSERT's is the size is not the same.
+
+ This is typically caused by the use of pointers or UINTNs
+ in the SysHost structure, neither of those datatypes are
+ allowed in SysHost.
+
+ @param None
+
+ @retval None
+
+**/
+
+VOID
+VerifySysHostStructureSize (
+ VOID
+ )
+{
+
+ if (PcdGet32 (PcdPeiSyshostMemorySize) != sizeof (SYSHOST)) {
+
+ DEBUG ((EFI_D_ERROR, "ERROR: In DXE sizeof SysHost = %d, in PEI sizeof SysHost = %d\n",
+ sizeof (SYSHOST),
+ PcdGet32 (PcdPeiSyshostMemorySize)
+ ));
+
+ DEBUG ((EFI_D_ERROR, "Size of SysHost must match in PEI and DXE\n"));
+ ASSERT (FALSE);
+
+ }
+
+ return;
+
+} // VerifySysHostStructureSize
+
+/**
+ Saves the FSP Non-Volatile Storage HOB to the UEFI Variable Services
+
+ @param None
+
+ @retval EFI_SUCCESS The FSP Non-Volatile Storage HOB was successfully saved.
+ @retval EFI_ERROR The FSP Non-Volatile Storage HOB was not successfully saved.
+**/
+EFI_STATUS
+SaveFspNonVolatileStorageHob (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ VOID *HobData;
+ VOID *VariableData;
+ UINTN DataSize;
+ UINTN FspNvsBufferSize;
+ BOOLEAN DataIsIdentical;
+
+ FspNvsBufferSize = 0;
+ DataSize = 0;
+ VariableData = NULL;
+ GuidHob = NULL;
+ HobData = NULL;
+ DataIsIdentical = FALSE;
+ Status = EFI_SUCCESS;
+
+ DEBUG ((DEBUG_INFO, "Saving FSP / MRC Training Data\n"));
+ GuidHob = GetFirstGuidHob (&gFspNonVolatileStorageHobGuid);
+ if (GuidHob != NULL) {
+ HobData = GET_GUID_HOB_DATA (GuidHob);
+ DataSize = GET_GUID_HOB_DATA_SIZE (GuidHob);
+ if (DataSize > 0) {
+
+ //
+ // Check if the presently saved data is identical to the data given by MRC/FSP
+ //
+ Status = GetLargeVariable (L"FspNvsBuffer", &gFspNonVolatileStorageHobGuid, &FspNvsBufferSize, NULL);
+ if (Status == EFI_BUFFER_TOO_SMALL) {
+ if (FspNvsBufferSize == DataSize) {
+ VariableData = AllocatePool (FspNvsBufferSize);
+ if (VariableData != NULL) {
+ Status = GetLargeVariable (L"FspNvsBuffer", &gFspNonVolatileStorageHobGuid, &FspNvsBufferSize, VariableData);
+ if (!EFI_ERROR (Status) && (FspNvsBufferSize == DataSize) && (0 == CompareMem (HobData, VariableData, DataSize))) {
+ DataIsIdentical = TRUE;
+ }
+ FreePool (VariableData);
+ }
+ }
+ }
+ Status = EFI_SUCCESS;
+
+ if (!DataIsIdentical) {
+ Status = SetLargeVariable (L"FspNvsBuffer", &gFspNonVolatileStorageHobGuid, TRUE, DataSize, HobData);
+ ASSERT_EFI_ERROR (Status);
+ DEBUG ((DEBUG_INFO, "Saved size of FSP / MRC Training Data: 0x%x\n", DataSize));
+ } else {
+ DEBUG ((DEBUG_INFO, "FSP / MRC Training Data is identical to data from last boot, no need to save.\n"));
+ }
+ }
+ }
+
+ return Status;
+}
+
+EFI_STATUS
+EFIAPI
+S3NvramSaveEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+/**
+
+ This is the main entry point of the S3 NVRAM Save module.
+
+ @param ImageHandle - Handle for the image of this driver.
+ @param SystemTable - Pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS - Module launched successfully.
+
+**/
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ //
+ // Check that SysHost size in DXE is the same as PEI.
+ //
+
+#ifndef FSP_API_MODE
+ VerifySysHostStructureSize ();
+#endif
+
+ //
+ // Save structures into NVRAM if needed
+ //
+ Status = SaveFspNonVolatileStorageHob ();
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Error: FSP NVRAM Data NOT Saved! Status: %r\n", Status));
+ Status = EFI_SUCCESS;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h
new file mode 100644
index 0000000000..8b106a3445
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h
@@ -0,0 +1,40 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/BaseMemoryLib.h>
+
+#include "SysHost.h"
+
+extern EFI_GUID gEfiMemoryConfigDataHobGuid;
+extern EFI_GUID gEfiMemoryConfigDataGuid;
+
+#define MAX_HOB_ENTRY_SIZE 60*1024
+
+EFI_STATUS
+EFIAPI
+S3NvramSaveEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ );
+
+/**
+ Saves the FSP Non-Volatile Storage HOB to the UEFI Variable Services
+
+ @param None
+
+ @retval EFI_SUCCESS The FSP Non-Volatile Storage HOB was successfully saved.
+ @retval EFI_ERROR The FSP Non-Volatile Storage HOB was not successfully saved.
+**/
+EFI_STATUS
+SaveFspNonVolatileStorageHob (
+ VOID
+ );
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
new file mode 100644
index 0000000000..e62baa24c4
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
@@ -0,0 +1,52 @@
+## @file
+#
+# @copyright
+# Copyright 2009 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = S3NvramSave
+ FILE_GUID = 62DC08AC-A651-4EE9-AF81-EAA9261E9780
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = S3NvramSaveEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ IntelFsp2Pkg/IntelFsp2Pkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Sources]
+ S3NvramSave.h
+ S3NvramSave.c
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ MemoryAllocationLib
+ UefiRuntimeServicesTableLib
+ UefiBootServicesTableLib
+ HobLib
+ BaseMemoryLib
+ LargeVariableReadLib
+ LargeVariableWriteLib
+
+[Guids]
+ gFspNonVolatileStorageHobGuid # CONSUMES
+
+[Pcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdPeiSyshostMemorySize
+
+[Depex]
+ TRUE
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
new file mode 100644
index 0000000000..6d0486fda7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
@@ -0,0 +1,43 @@
+## @file
+# Component description file for PCH Reset Lib Pei Phase
+#
+# @copyright
+# Copyright 2016 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PchSpiPei
+ FILE_GUID = FEB73B42-2B02-4D2E-B9E3-77015AF91879
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = DummySpiPpiEntryPoint
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF
+#
+
+[LibraryClasses]
+ DebugLib
+ PeiServicesLib
+ PeiServicesTablePointerLib
+ MemoryAllocationLib
+ PciSegmentLib
+ PeimEntryPoint
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+
+[Sources]
+ PchSpi.c
+
+[Ppis]
+ gPchSpiPpiGuid ## PRODUCES
+
+[Depex]
+ TRUE
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c
new file mode 100644
index 0000000000..0d63044416
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c
@@ -0,0 +1,383 @@
+/** @file
+ PCH SPI PEI Library implements the SPI Host Controller Compatibility Interface.
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+
+#include <Library/IoLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Ppi/Spi.h>
+#include <Ppi/PchPolicy.h>
+#include <Private/Library/PchSpiCommonLib.h>
+#include <Library/PchMultiPchBase.h>
+
+typedef struct {
+ EFI_PEI_PPI_DESCRIPTOR PpiDescriptor;
+ SPI_INSTANCE SpiInstance;
+} PEI_SPI_INSTANCE;
+
+
+/**
+ Read data from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[out] Buffer The Pointer to caller-allocated buffer containing the dada received.
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashRead (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ OUT UINT8 *Buffer
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Write data to the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+ @param[in] Buffer Pointer to caller-allocated buffer containing the data sent during the SPI cycle.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashWrite (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ IN UINT8 *Buffer
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Erase some area on the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
+ @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions.
+ @param[in] ByteCount Number of bytes in the data portion of the SPI cycle.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashErase (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ IN UINT32 Address,
+ IN UINT32 ByteCount
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Read SFDP data from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ComponentNumber The Componen Number for chip select
+ @param[in] Address The starting byte address for SFDP data read.
+ @param[in] ByteCount Number of bytes in SFDP data portion of the SPI cycle
+ @param[out] SfdpData The Pointer to caller-allocated buffer containing the SFDP data received
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashReadSfdp (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT8 ComponentNumber,
+ IN UINT32 Address,
+ IN UINT32 ByteCount,
+ OUT UINT8 *SfdpData
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Read Jedec Id from the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ComponentNumber The Componen Number for chip select
+ @param[in] ByteCount Number of bytes in JedecId data portion of the SPI cycle, the data size is 3 typically
+ @param[out] JedecId The Pointer to caller-allocated buffer containing JEDEC ID received
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashReadJedecId (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT8 ComponentNumber,
+ IN UINT32 ByteCount,
+ OUT UINT8 *JedecId
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Write the status register in the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
+ @param[in] StatusValue The Pointer to caller-allocated buffer containing the value of Status register writing
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashWriteStatus (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ IN UINT8 *StatusValue
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Read status register in the flash part.
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically
+ @param[out] StatusValue The Pointer to caller-allocated buffer containing the value of Status register received.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolFlashReadStatus (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 ByteCount,
+ OUT UINT8 *StatusValue
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Get the SPI region base and size, based on the enum type
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] FlashRegionType The Flash Region type for for the base address which is listed in the Descriptor.
+ @param[out] BaseAddress The Flash Linear Address for the Region 'n' Base
+ @param[out] RegionSize The size for the Region 'n'
+
+ @retval EFI_SUCCESS Read success
+ @retval EFI_INVALID_PARAMETER Invalid region type given
+ @retval EFI_DEVICE_ERROR The region is not used
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolGetRegionAddress (
+ IN PCH_SPI_PROTOCOL *This,
+ IN FLASH_REGION_TYPE FlashRegionType,
+ OUT UINT32 *BaseAddress,
+ OUT UINT32 *RegionSize
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Read PCH Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr PCH Soft Strap address offset from FPSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing PCH Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolReadPchSoftStrap (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Read CPU Soft Strap Values
+
+ @param[in] This Pointer to the PCH_SPI_PROTOCOL instance.
+ @param[in] SoftStrapAddr CPU Soft Strap address offset from FCPUSBA.
+ @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle.
+ @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing CPU Soft Strap Value.
+ If the value of ByteCount is 0, the data type of SoftStrapValue should be UINT16 and SoftStrapValue will be PCH Soft Strap Length
+ It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
+
+ @retval EFI_SUCCESS Command succeed.
+ @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
+ @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
+**/
+EFI_STATUS
+EFIAPI
+SpiProtocolReadCpuSoftStrap (
+ IN PCH_SPI_PROTOCOL *This,
+ IN UINT32 SoftStrapAddr,
+ IN UINT32 ByteCount,
+ OUT VOID *SoftStrapValue
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+
+/**
+ Initialize an SPI protocol instance.
+
+ @param[in] PchId The PCH Id (0 - Legacy PCH, 1 ... n - Non-Legacy PCH)
+ @param[in] SpiInstance Pointer to SpiInstance to initialize
+
+ @retval EFI_SUCCESS The protocol instance was properly initialized
+ @exception EFI_UNSUPPORTED The PCH is not supported by this module
+**/
+EFI_STATUS
+SpiProtocolConstructor (
+ IN UINT8 PchId,
+ IN SPI_INSTANCE *SpiInstance
+ )
+{
+ //
+ // Initialize the SPI protocol instance
+ //
+ SpiInstance->Signature = PCH_SPI_PRIVATE_DATA_SIGNATURE;
+ SpiInstance->Handle = NULL;
+ SpiInstance->SpiProtocol.Revision = PCH_SPI_SERVICES_REVISION;
+ SpiInstance->SpiProtocol.FlashRead = SpiProtocolFlashRead;
+ SpiInstance->SpiProtocol.FlashWrite = SpiProtocolFlashWrite;
+ SpiInstance->SpiProtocol.FlashErase = SpiProtocolFlashErase;
+ SpiInstance->SpiProtocol.FlashReadSfdp = SpiProtocolFlashReadSfdp;
+ SpiInstance->SpiProtocol.FlashReadJedecId = SpiProtocolFlashReadJedecId;
+ SpiInstance->SpiProtocol.FlashWriteStatus = SpiProtocolFlashWriteStatus;
+ SpiInstance->SpiProtocol.FlashReadStatus = SpiProtocolFlashReadStatus;
+ SpiInstance->SpiProtocol.GetRegionAddress = SpiProtocolGetRegionAddress;
+ SpiInstance->SpiProtocol.ReadPchSoftStrap = SpiProtocolReadPchSoftStrap;
+ SpiInstance->SpiProtocol.ReadCpuSoftStrap = SpiProtocolReadCpuSoftStrap;
+ return EFI_SUCCESS;
+}
+
+/**
+ Installs PCH SPI PPI
+
+ @retval EFI_SUCCESS PCH SPI PPI is installed successfully
+ @retval EFI_OUT_OF_RESOURCES Can't allocate pool
+**/
+EFI_STATUS
+EFIAPI
+InstallPchSpi (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ PEI_SPI_INSTANCE *PeiSpiInstance;
+ SPI_INSTANCE *SpiInstance;
+
+ DEBUG ((DEBUG_INFO, "InstallPchSpi() Start\n"));
+
+ //
+ // PCI Enumeratuion is not done till later in DXE
+ // Initlialize SPI BAR0 to a default value till enumeration is done
+ // also enable memory space decoding for SPI
+ //
+
+
+ PeiSpiInstance = (PEI_SPI_INSTANCE *) AllocateZeroPool (sizeof (PEI_SPI_INSTANCE));
+ if (NULL == PeiSpiInstance) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ SpiInstance = &(PeiSpiInstance->SpiInstance);
+ SpiProtocolConstructor (PCH_LEGACY_ID, SpiInstance);
+
+ PeiSpiInstance->PpiDescriptor.Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
+ PeiSpiInstance->PpiDescriptor.Guid = &gPchSpiPpiGuid;
+ PeiSpiInstance->PpiDescriptor.Ppi = &(SpiInstance->SpiProtocol);
+
+
+
+ ///
+ /// Install the SPI PPI
+ ///
+ Status = PeiServicesInstallPpi (&PeiSpiInstance->PpiDescriptor);
+ ASSERT_EFI_ERROR (Status);
+
+ DEBUG ((DEBUG_INFO, "SPI PPI Installed\n"));
+
+ DEBUG ((DEBUG_INFO, "InstallPchSpi() End\n"));
+
+ return Status;
+}
+
+/**
+ Board Install Dummy SPI Ppi entry point.
+
+ @param FileHandle Handle of the file being invoked.
+ Type EFI_PEI_FILE_HANDLE is defined in FfsFindNextFile().
+ @param PeiServices General purpose services available to every PEIM.
+
+ @retval EFI_SUCCESS
+**/
+EFI_STATUS
+EFIAPI
+DummySpiPpiEntryPoint (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+
+ InstallPchSpi ();
+
+ return EFI_SUCCESS;
+
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c
new file mode 100644
index 0000000000..d065225a92
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c
@@ -0,0 +1,124 @@
+/** @file
+ EFI PEIM for Emulation Platform Initial
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/IoLib.h>
+#include <Library/PciLib.h>
+#include <Library/HobLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Library/EmulationConfigurationLib.h>
+#include <EmulationConfiguration.h>
+#include <Guid/EmulationDfxVariable.h>
+#include <PlatformHost.h>
+#include <Cpu/CpuIds.h>
+
+EFI_PEI_PPI_DESCRIPTOR mPpiListEmulation = {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gEmulationHobGuid,
+ NULL
+};
+
+#define CSR_EMULATION_FLAG_OFFSET 0xFC
+
+EFI_STATUS
+EFIAPI
+EmulationPlatformInitEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+
+ EFI_STATUS Status;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *PeiVariable;
+ EMULATION_DFX_CONFIGURATION EmulationVariable;
+ UINTN BufferSize = sizeof(EMULATION_DFX_CONFIGURATION);
+ EMULATION_SETTING *EmulationSetting;
+ UINT32 RegEax;
+ UINT16 CpuFamily;
+ UINTN PciLibAddress;
+ UINT32 EmulationType;
+
+ //
+ // Build the Emulation Hob
+ //
+ EmulationSetting = BuildGuidHob (&gEmulationHobGuid, sizeof (EMULATION_SETTING));
+ if (EmulationSetting == NULL) {
+ DEBUG((EFI_D_ERROR, "Emulation BuildGuidDataHob fail!\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ EmulationSetting->UbiosGenerationSetting = EMULATION_DISABLE;
+ EmulationSetting->HybridSystemLevelEmulationSetting = EMULATION_DISABLE;
+ EmulationSetting->UbiosOutputMode = ASM_OUTPUT_ENABLE;
+ EmulationSetting->LoopBackLabelNumber = 0;
+ EmulationSetting->FnvAccessValue = FNV_ACCESS_DISABLE;
+ EmulationSetting->MsrTraceEnable = MSR_OUTPUT_DISABLE;
+
+ //
+ // Store variable into the hob.
+ //
+ (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gEfiPeiReadOnlyVariable2PpiGuid,
+ 0,
+ NULL,
+ &PeiVariable
+ );
+
+ Status = PeiVariable->GetVariable (PeiVariable, EMULATION_DFX_CONFIGURATION_NAME, &gEmulationDfxVariableGuid, NULL, &BufferSize, &EmulationVariable);
+ DEBUG ((DEBUG_INFO, "Emulation GetVariable status = %r !\n", Status));
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_FOUND;
+ }
+
+ EmulationSetting->UbiosGenerationSetting = EmulationVariable.DfxUbiosGeneration;
+ EmulationSetting->HybridSystemLevelEmulationSetting = EmulationVariable.DfxHybridSystemLevelEmulation;
+ EmulationSetting->MsrTraceEnable = EmulationVariable.DfxPmMsrTrace;
+
+ //
+ // Check the override value
+ //
+ AsmCpuid (1, &RegEax, NULL, NULL, NULL);
+ CpuFamily = (UINT16) (RegEax >> 4);
+
+ if (CpuFamily == CPU_FAMILY_SKX) {
+ //
+ // Simics flag is at B0:D0:F0 offset 0xFC for SKX.
+ //
+ PciLibAddress = PCI_LIB_ADDRESS(0, 0, 0, CSR_EMULATION_FLAG_OFFSET);
+ } else {
+ //
+ // Simics flag is at B0:D3:F0 offset 0xFC for 10nm.
+ //
+ PciLibAddress = PCI_LIB_ADDRESS(0, 3, 0, CSR_EMULATION_FLAG_OFFSET);
+ }
+
+ EmulationType = PciRead32 (PciLibAddress);
+
+ if (EmulationType != 0xFFFFFFFF) {
+ if ((EmulationType & UBIOS_GENERATION_EN) != 0) {
+ EmulationSetting->UbiosGenerationSetting = EMULATION_ENABLE;
+ DEBUG ((DEBUG_INFO, "EmulationVariable.DfxUbiosGeneration = %d\n", EmulationSetting->UbiosGenerationSetting));
+ }
+
+ if ((EmulationType & HYBRID_SYSTEM_LEVEL_EMULATION_EN) != 0) {
+ EmulationSetting->HybridSystemLevelEmulationSetting = EMULATION_ENABLE;
+ DEBUG ((DEBUG_INFO, "EmulationSetting->HybridSystemLevelEmulationSetting = %d\n", EmulationSetting->HybridSystemLevelEmulationSetting));
+ }
+ }
+ //
+ // Install gEmulationHobGuid PPI to inform the Emulation Hob is ready.
+ //
+ Status = PeiServicesInstallPpi (&mPpiListEmulation);
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
new file mode 100644
index 0000000000..ca22383a96
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
@@ -0,0 +1,46 @@
+## @file
+# Emulation PEIM
+#
+# @copyright
+# Copyright 2017 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = EmulationPlatformInit
+ FILE_GUID = BD446386-7F8A-4ee1-A014-8D3BAB92B4E9
+ MODULE_TYPE = PEIM
+ ENTRY_POINT = EmulationPlatformInitEntry
+
+[Sources]
+ EmulationPlatformInit.c
+
+[Packages]
+ MdeModulePkg/MdeModulePkg.dec
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ HobLib
+ PciLib
+ BaseMemoryLib
+
+[Guids]
+ gEmulationHobGuid
+ gEmulationDfxVariableGuid
+
+[Ppis]
+ gEfiPeiReadOnlyVariable2PpiGuid
+
+[Depex]
+ gEfiPeiReadOnlyVariable2PpiGuid AND
+ gPlatformVariableInitPpiGuid
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c
new file mode 100644
index 0000000000..3652695fba
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c
@@ -0,0 +1,761 @@
+/** @file
+ Platform Info PEIM.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PlatformInfo.h"
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+#include <Library/PchInfoLib.h>
+
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+#include <Library/UbaGpioPlatformConfig.h>
+#include <UncoreCommonIncludes.h>
+#include <PlatformInfoTypes.h>
+
+#include <Library/PeiServicesLib.h>
+
+#define TEMP_BUS_NUMBER (0x3F)
+
+
+STATIC EFI_PEI_PPI_DESCRIPTOR mPlatformInfoPpi = {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gEfiPlatformInfoGuid,
+ NULL
+ };
+
+#define BOARD_ID_GPIO_PADS_NUMBER 6
+#define BOARD_REV_ID_GPIO_PADS_NUMBER 3
+
+//
+// These pads shall not be board specific as these are used for Board ID and Rev ID detection
+// Therefore can not be moved to UBA and are common for all Purley boards
+//
+GPIO_PAD mBoardId [BOARD_ID_GPIO_PADS_NUMBER] = {
+ // BoardId pads - PADCFG register for GPIO G12
+ // WARNING: The pad number must be obtained from board schematics
+ GPIO_SKL_H_GPP_G12,
+ GPIO_SKL_H_GPP_G13,
+ GPIO_SKL_H_GPP_G14,
+ GPIO_SKL_H_GPP_G15,
+ GPIO_SKL_H_GPP_G16,
+ GPIO_SKL_H_GPP_B19
+};
+
+GPIO_PAD mBoardRevId [BOARD_REV_ID_GPIO_PADS_NUMBER] = {
+ // Board RevId pads - Start from pad C12
+ // WARNING: This should be obtained from board schematics
+ GPIO_SKL_H_GPP_C12,
+ GPIO_SKL_H_GPP_C13,
+ GPIO_SKL_H_GPP_B9
+};
+
+GPIO_CONFIG mBoardAndRevIdConfig = {
+ // Board and Revision ID pads configuration required for proper reading the values
+ GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutDefault, GpioIntDefault,
+ GpioPlatformReset, GpioTermDefault, GpioLockDefault, GpioRxRaw1Default
+};
+
+
+VOID
+GpioConfigForBoardId (
+ VOID
+ )
+{
+ UINT8 i;
+ EFI_STATUS Status;
+ GPIO_CONFIG PadConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ PadConfig.PadMode = mBoardAndRevIdConfig.PadMode;
+ PadConfig.HostSoftPadOwn = mBoardAndRevIdConfig.HostSoftPadOwn;
+ PadConfig.Direction = mBoardAndRevIdConfig.Direction;
+ PadConfig.OutputState = mBoardAndRevIdConfig.OutputState;
+ PadConfig.InterruptConfig = mBoardAndRevIdConfig.InterruptConfig;
+ PadConfig.PowerConfig = mBoardAndRevIdConfig.PowerConfig;
+ PadConfig.ElectricalConfig = mBoardAndRevIdConfig.ElectricalConfig;
+ PadConfig.LockConfig = mBoardAndRevIdConfig.LockConfig;
+ PadConfig.OtherSettings = mBoardAndRevIdConfig.OtherSettings;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ for (i = 0; i < BOARD_ID_GPIO_PADS_NUMBER; i++) {
+ Status = DynamicSiLibraryPpi->GpioSetPadConfig (mBoardId[i], &PadConfig);
+ ASSERT_EFI_ERROR (Status);
+ }
+}
+
+
+VOID
+GpioConfigForBoardRevId (
+ VOID
+ )
+{
+ UINT8 i;
+ EFI_STATUS Status;
+ GPIO_CONFIG PadConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ PadConfig.PadMode = mBoardAndRevIdConfig.PadMode;
+ PadConfig.HostSoftPadOwn = mBoardAndRevIdConfig.HostSoftPadOwn;
+ PadConfig.Direction = mBoardAndRevIdConfig.Direction;
+ PadConfig.OutputState = mBoardAndRevIdConfig.OutputState;
+ PadConfig.InterruptConfig = mBoardAndRevIdConfig.InterruptConfig;
+ PadConfig.PowerConfig = mBoardAndRevIdConfig.PowerConfig;
+ PadConfig.ElectricalConfig = mBoardAndRevIdConfig.ElectricalConfig;
+ PadConfig.LockConfig = mBoardAndRevIdConfig.LockConfig;
+ PadConfig.OtherSettings = mBoardAndRevIdConfig.OtherSettings;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ for (i = 0; i < BOARD_REV_ID_GPIO_PADS_NUMBER; i++) {
+ Status = DynamicSiLibraryPpi->GpioSetPadConfig (mBoardRevId[i], &PadConfig);
+ ASSERT_EFI_ERROR (Status);
+ }
+}
+
+/**
+
+ Reads GPIO pins to get Board ID value
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetBoardId (
+ OUT UINT32 *BoardId
+ )
+{
+ EFI_STATUS Status = EFI_DEVICE_ERROR;
+ UINT32 Data32;
+ UINT8 i;
+ UINT32 BdId;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ if (BoardId == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ BdId = 0;
+
+ GpioConfigForBoardId ();
+
+ for (i = 0; i < BOARD_ID_GPIO_PADS_NUMBER; i++) {
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (mBoardId[i], &Data32);
+ if (EFI_ERROR(Status)) {
+ break;
+ }
+ if (Data32) {
+ BdId = BdId | (1 << i);
+ }
+ }
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+ *BoardId = BdId;
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Reads GPIO pins to get Board Revision ID value
+
+ @retval Status - Success if GPIO's are read properly
+
+**/
+EFI_STATUS
+GpioGetBoardRevId (
+ OUT UINT32 *BoardRevId
+ )
+{
+ EFI_STATUS Status = EFI_DEVICE_ERROR;
+ UINT32 Data32;
+ UINT8 i;
+ UINT32 RevId;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ if (BoardRevId == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ RevId = 0;
+
+ GpioConfigForBoardRevId ();
+
+ for (i = 0; i < BOARD_REV_ID_GPIO_PADS_NUMBER; i++){
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (mBoardRevId[i], &Data32);
+ if (EFI_ERROR(Status)) {
+ break;
+ }
+ if (Data32) {
+ RevId = RevId | (1 << i);
+ }
+ }
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+ *BoardRevId = RevId;
+ return EFI_SUCCESS;
+
+}
+
+/**
+
+ Returns the Model ID of the CPU.
+ Model ID = EAX[7:4]
+
+**/
+VOID
+GetCpuInfo (
+ UINT32 *CpuType,
+ UINT8 *CpuStepping
+ )
+
+{
+ UINT32 RegEax=0;
+
+ AsmCpuid (CPUID_VERSION_INFO, &RegEax, NULL, NULL, NULL);
+
+ *CpuStepping = (UINT8) (RegEax & 0x0F);
+ *CpuType = (UINT32) (RegEax >> 4);
+}
+
+
+/**
+
+ GC_TODO: add routine description
+
+ @param BAR - GC_TODO: add arg description
+ @param PeiServices - GC_TODO: add arg description
+
+ @retval None
+
+**/
+VOID
+InitGSX(
+ UINT32 *BAR,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+}
+
+/**
+
+ GC_TODO: add routine description
+
+ @param Data - GC_TODO: add arg description
+ @param PeiServices - GC_TODO: add arg description
+
+ @retval EFI_SUCCESS - GC_TODO: add retval description
+ @retval EFI_UNSUPPORTED - GC_TODO: add retval description
+
+**/
+EFI_STATUS
+GsxRead(
+ UINT32 *Data,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+
+ GC_TODO: add routine description
+
+ @param Data - GC_TODO: add arg description
+ @param PeiServices - GC_TODO: add arg description
+
+ @retval None
+
+**/
+VOID
+GetGsxBoardID(
+ BOARD_ID *Data,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+
+ EFI_STATUS Status;
+ UINT32 GSXIN[2];
+ UINT32 RetryCount;
+
+ RetryCount = 0;
+ GSXIN[0] = 0;
+ GSXIN[1] = 0;
+
+ do {
+ Status = GsxRead(GSXIN, PeiServices);
+
+ if(Status){
+ // if EFI_SUCCESS != Success then retry one more time
+ RetryCount ++;
+ }else{
+ // if EFI_SUCCESS read Board ID and exit
+ RetryCount = 0xFFFFFFFF;
+ }
+
+ if (GSXIN[0] & BIT0) {
+ Data->BoardID.BoardID0 = 1;
+ }
+
+ if (GSXIN[0] & BIT1) {
+ Data->BoardID.BoardID1 = 1;
+ }
+
+ if (GSXIN[0] & BIT2) {
+ Data->BoardID.BoardID2 = 1;
+ }
+
+ if (GSXIN[0] & BIT3) {
+ Data->BoardID.BoardID3 = 1;
+ }
+
+ if (GSXIN[0] & BIT4) {
+ Data->BoardID.BoardID4 = 1;
+ }
+
+ if (GSXIN[0] & BIT5) {
+ Data->BoardID.BoardRev0 = 1;
+ }
+
+ if (GSXIN[0] & BIT6) {
+ Data->BoardID.BoardRev1 = 1;
+ }
+
+ } while(RetryCount < 1);
+
+ if(Status){
+ //
+ // Unhable to read GSX HW error Hang the system
+ //
+ DEBUG ((EFI_D_ERROR, "ERROR: GSX HW is unavailable, SYSTEM HANG\n"));
+ CpuDeadLoop ();
+ }
+}
+
+/**
+ Get Platform Type by read Platform Data Region in SPI flash.
+ SPI Descriptor Mode Routines for Accessing Platform Info from Platform Data Region (PDR)
+
+ @param PeiServices - General purpose services available to every PEIM.
+ @param PlatformInfoHob - Platform Type is returned in PlatformInfoHob->BoardId
+
+ @retval Status EFI_SUCCESS - PDR read success
+ @retval Status EFI_INCOMPATIBLE_VERSION - PDR read but it is not valid Platform Type
+
+**/
+EFI_STATUS
+PdrGetPlatformInfo (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ OUT EFI_PLATFORM_INFO *PlatformInfoHob
+ )
+{
+ EFI_STATUS Status;
+ PCH_SPI_PROTOCOL *SpiPpi;
+ UINTN Size;
+
+ //
+ // Locate the SPI PPI Interface
+ //
+ Status = (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gPchSpiPpiGuid,
+ 0,
+ NULL,
+ &SpiPpi
+ );
+
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ //
+ // Read the PIT (Platform Info Table) from the SPI Flash Platform Data Region
+ //
+ Size = sizeof (EFI_PLATFORM_INFO);
+ Status = SpiPpi->FlashRead (
+ SpiPpi,
+ FlashRegionPlatformData,
+ PDR_REGION_START_OFFSET,
+ (UINT32) Size,
+ (UINT8 *) PlatformInfoHob
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ if ((PlatformInfoHob->BoardId >= TypePlatformMin) && (PlatformInfoHob->BoardId <= TypePlatformMax)) {
+ //
+ // Valid Platform Identified
+ //
+ DEBUG ((DEBUG_INFO, "Platform Info from PDR: Type = %x\n",PlatformInfoHob->BoardId));
+ } else {
+ //
+ // Reading PIT from SPI PDR Failed or a unknown platform identified
+ //
+ DEBUG ((EFI_D_ERROR, "PIT from SPI PDR reports Platform ID as %x. This is unknown ID. Assuming Greencity Platform!\n", PlatformInfoHob->BoardId));
+ PlatformInfoHob->BoardId = TypePlatformUnknown;
+ Status = EFI_INCOMPATIBLE_VERSION;
+ }
+ return Status;
+}
+
+VOID
+GatherQATInfo(OUT EFI_PLATFORM_INFO *PlatformInfoHob)
+/**
+
+ GC_TODO: add routine description
+
+ @param None
+
+ @ret None
+**/
+{
+ EFI_STATUS Status;
+ GPIO_CONFIG PadConfig;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ // Gpio programming to QAT board detection
+ PadConfig.PadMode = GpioPadModeGpio;
+ PadConfig.HostSoftPadOwn = GpioHostOwnDefault;
+ PadConfig.Direction = GpioDirIn;
+ PadConfig.OutputState = GpioOutLow;
+ PadConfig.InterruptConfig = GpioIntDis;
+ PadConfig.PowerConfig = GpioResetPwrGood;
+ PadConfig.ElectricalConfig = GpioTermNone;
+ PadConfig.LockConfig = GpioPadConfigLock;
+ PadConfig.OtherSettings = 00;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioSetPadConfig (GPIO_SKL_H_GPP_B3, &PadConfig);
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GPIO_SKL_H_GPP_B3, &PlatformInfoHob->QATDis);
+ Status = DynamicSiLibraryPpi->GpioSetPadConfig (GPIO_SKL_H_GPP_B4, &PadConfig);
+ Status = DynamicSiLibraryPpi->GpioGetInputValue (GPIO_SKL_H_GPP_B4, &PlatformInfoHob->QATSel);
+}
+
+EFI_STATUS
+GetPlatformInfo (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ OUT EFI_PLATFORM_INFO *PlatformInfoHob
+ )
+/**
+
+ GC_TODO: add routine description
+
+ @param PeiServices - GC_TODO: add arg description
+ @param PlatformInfoHob - GC_TODO: add arg description
+
+ @retval EFI_UNSUPPORTED - GC_TODO: add retval description
+ @retval EFI_SUCCESS - GC_TODO: add retval description
+
+**/
+{
+
+
+ UINT32 BoardId;
+ UINT32 BoardRev;
+ EFI_PEI_PCI_CFG2_PPI *PciCfgPpi;
+ EFI_STATUS Status;
+
+ PciCfgPpi = (**PeiServices).PciCfg;
+ ASSERT (PciCfgPpi != NULL);
+
+ PlatformInfoHob->BoardId = TypeNeonCityEPRP;
+ DEBUG ((DEBUG_INFO, "Use GPIO to read Board ID\n"));
+
+ Status = GpioGetBoardId (&BoardId);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "Error: Can't read GPIO to get Board ID!\n"));
+ return Status;
+ }
+ Status = GpioGetBoardRevId (&BoardRev);
+ if (EFI_ERROR(Status)) {
+ DEBUG ((EFI_D_ERROR, "Error: Can't read GPIO to get Board ID!\n"));
+ return Status;
+ }
+ PlatformInfoHob->TypeRevisionId = BoardRev;
+
+ switch (BoardId) {
+ case 0x00: // for Simics
+ PlatformInfoHob->BoardId = TypeWilsonCityRP;
+ break;
+ case 0x01:
+ PlatformInfoHob->BoardId = TypeWilsonCityRP;
+ DEBUG ((DEBUG_INFO, "Board ID = TypeWilsonCityRP\n"));
+ break;
+ case 0x12:
+ PlatformInfoHob->BoardId = TypeWilsonCityRP;
+ DEBUG((DEBUG_INFO, "Board ID = TypeWilsonCityRP\n"));
+ break;
+ case 0x15:
+ PlatformInfoHob->BoardId = TypeWilsonCitySMT;
+ DEBUG((DEBUG_INFO, "Board ID = TypeWilsonCitySMT\n"));
+ break;
+ case 0x17:
+ case 0x18:
+ PlatformInfoHob->BoardId = TypeCooperCityRP;
+ DEBUG((DEBUG_INFO, "Board ID = TypeCooperCityRP\n"));
+ break;
+ default:
+ PlatformInfoHob->BoardId = TypePlatformDefault;
+ DEBUG ((DEBUG_INFO, "Board ID = %2X Default set to TypePlatformDefault\n",BoardId));
+ break;
+ }
+
+ GatherQATInfo(PlatformInfoHob);
+
+ DEBUG ((DEBUG_INFO, "Board Rev.: %d\n", BoardRev));
+ return EFI_SUCCESS;
+}
+
+/**
+
+ This function initializes the board related flag to indicates if
+ PCH and Lan-On-Motherboard (LOM) devices is supported.
+
+**/
+VOID
+GetPchLanSupportInfo(
+ IN EFI_PLATFORM_INFO *PlatformInfoHob
+ )
+{
+ PlatformInfoHob->PchData.LomLanSupported = 0;
+}
+
+/**
+
+ GC_TODO: add routine description
+
+ @param PeiVariable - GC_TODO: add arg description
+ @param PlatformInfoHob - GC_TODO: add arg description
+
+ @retval EFI_SUCCESS - GC_TODO: add retval description
+
+**/
+EFI_STATUS
+EFIAPI
+GetIioCommonRcPlatformSetupPolicy(
+ OUT EFI_PLATFORM_INFO *PlatformInfoHob
+ )
+ {
+ UINT8 IsocEn;
+
+ CopyMem (&IsocEn, (UINT8 *)PcdGetPtr(PcdSocketCommonRcConfig) + OFFSET_OF(SOCKET_COMMONRC_CONFIGURATION, IsocEn), sizeof(UINT8));
+
+ PlatformInfoHob->SysData.IsocEn = IsocEn; // ISOC enabled
+
+ return EFI_SUCCESS;
+}
+/**
+
+ GC_TODO: add routine description
+
+ @param PeiVariable - GC_TODO: add arg description
+ @param PlatformInfoHob - GC_TODO: add arg description
+
+ @retval EFI_SUCCESS - GC_TODO: add retval description
+
+**/
+EFI_STATUS
+EFIAPI
+GetIioPlatformSetupPolicy(
+ OUT EFI_PLATFORM_INFO *PlatformInfoHob
+ )
+{
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Platform Type detection. Because the PEI globle variable
+ is in the flash, it could not change directly.So use
+ 2 PPIs to distinguish the platform type.
+
+ @param FfsHeader - Pointer to Firmware File System file header.
+ @param PeiServices - General purpose services available to every PEIM.
+
+ @retval EFI_SUCCESS - Memory initialization completed successfully.
+ @retval Others - All other error conditions encountered result in an ASSERT.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformInfoInit (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ EFI_PEI_PCI_CFG2_PPI *PciCfgPpi;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *PeiVariable;
+ EFI_PLATFORM_INFO PlatformInfoHob;
+ EFI_PLATFORM_INFO tempPlatformInfoHob;
+ UINT8 ChipId;
+ UINT32 Delay;
+ UINT32 CpuType;
+ UINT8 CpuStepping;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ PciCfgPpi = (**PeiServices).PciCfg;
+ if (PciCfgPpi == NULL) {
+ DEBUG ((EFI_D_ERROR, "\nError! PlatformInfoInit() - PeiServices is a NULL Pointer!!!\n"));
+ ASSERT_EFI_ERROR (EFI_INVALID_PARAMETER);
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Locate Variable PPI
+ //
+ Status = PeiServicesLocatePpi (&gEfiPeiReadOnlyVariable2PpiGuid, 0, NULL, &PeiVariable);
+
+ (*PeiServices)->SetMem (&PlatformInfoHob, sizeof (PlatformInfoHob), 0);
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ //
+ // --------------------------------------------------
+ //
+ // Detect the iBMC SIO for CV/CRB Platforms
+ // 0x2E/0x2F decoding has been enabled in MonoStatusCode PEIM.
+ //
+ IoWrite8 (PILOTIV_SIO_INDEX_PORT, PILOTIV_SIO_UNLOCK);
+ for (Delay = 0; Delay < 40; Delay++) IoRead8 (0x61);
+ IoWrite8 (PILOTIV_SIO_INDEX_PORT, PILOTIV_CHIP_ID_REG);
+ for (Delay = 0; Delay < 40; Delay++) IoRead8 (0x61);
+ ChipId = IoRead8 (PILOTIV_SIO_DATA_PORT);
+ for (Delay = 0; Delay < 40; Delay++) IoRead8 (0x61);
+ IoWrite8 (PILOTIV_SIO_INDEX_PORT, PILOTIV_SIO_LOCK);
+ for (Delay = 0; Delay < 40; Delay++) IoRead8 (0x61);
+
+ if (EFI_ERROR (Status))
+ {
+ DEBUG((EFI_D_ERROR, "LocatePpi Error in PlatformInfo.c !\n"));
+ }
+
+ Status = GetIioPlatformSetupPolicy (&PlatformInfoHob);
+ ASSERT_EFI_ERROR (Status);
+ Status = GetIioCommonRcPlatformSetupPolicy (&PlatformInfoHob);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Update PCH Type
+ //
+ PlatformInfoHob.PchType = DynamicSiLibraryPpi->GetPchSeries ();
+ PlatformInfoHob.PchSku = DynamicSiLibraryPpi->GetPchLpcDeviceId ();
+ PlatformInfoHob.PchRevision = (UINT8) DynamicSiLibraryPpi->PchStepping ();
+ PlatformInfoHob.MaxNumOfPchs = 1;
+ Status = EFI_SUCCESS;
+
+ if(!EFI_ERROR(Status)) {
+ Status = GetPlatformInfo (PeiServices, &PlatformInfoHob);
+ if(EFI_ERROR (Status)) {
+ Status = PdrGetPlatformInfo (PeiServices, &tempPlatformInfoHob);
+ PlatformInfoHob.BoardId = tempPlatformInfoHob.BoardId;
+ PlatformInfoHob.TypeRevisionId = tempPlatformInfoHob.TypeRevisionId;
+ if (EFI_ERROR(Status)) {
+ PlatformInfoHob.BoardId = TypePlatformUnknown;
+ }
+ }
+ } else {
+ PlatformInfoHob.BoardId = TypePlatformUnknown;
+ }
+
+ //
+ // Update IIO Type
+ //
+ PlatformInfoHob.IioRevision = 0;
+
+
+ //
+ // Get Subtractive decode enable bit from descriptor
+ //
+
+ if (DynamicSiLibraryPpi->PchIsGbeRegionValid () == FALSE) {
+ PlatformInfoHob.PchData.GbeRegionInvalid = 1;
+ } else {
+ PlatformInfoHob.PchData.GbeRegionInvalid = 0;
+ }
+ GetPchLanSupportInfo (&PlatformInfoHob);
+ PlatformInfoHob.PchData.GbePciePortNum = 0xFF;
+ PlatformInfoHob.PchData.GbePciePortNum = (UINT8) DynamicSiLibraryPpi->PchGetGbePortNumber ();
+ PlatformInfoHob.PchData.GbeEnabled = DynamicSiLibraryPpi->PchIsGbePresent ();
+ PlatformInfoHob.PchData.PchStepping = (UINT8) DynamicSiLibraryPpi->PchStepping ();
+
+ PlatformInfoHob.SysData.SysSioExist = (UINT8)IsSioExist();
+
+ GetCpuInfo (&CpuType, &CpuStepping);
+ PlatformInfoHob.CpuType = CpuType;
+ PlatformInfoHob.CpuStepping = CpuStepping;
+
+ //
+ // Set default memory topology to DaisyChainTopology. This should be modified in UBA board
+ // specific file.
+ //
+ (*PeiServices)->SetMem (&PlatformInfoHob.MemoryTopology, sizeof (PlatformInfoHob.MemoryTopology), DaisyChainTopology);
+
+ //
+ // Set default memory type connector to DimmConnectorPth. This should be modified in UBA board
+ // specific file.
+ //
+ (*PeiServices)->SetMem (&PlatformInfoHob.MemoryConnectorType, sizeof (PlatformInfoHob.MemoryConnectorType), DimmConnectorPth);
+
+ //
+ // Build HOB for setup memory information
+ //
+ BuildGuidDataHob (
+ &gEfiPlatformInfoGuid,
+ &(PlatformInfoHob),
+ sizeof (EFI_PLATFORM_INFO)
+ );
+
+ Status = (**PeiServices).InstallPpi (PeiServices, &mPlatformInfoPpi);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Save PlatformInfoHob.BoardId in CMOS
+ //
+ IoWrite8 (R_IOPORT_CMOS_UPPER_INDEX, CMOS_PLATFORM_ID_LO);
+ IoWrite8 (R_IOPORT_CMOS_UPPER_DATA, (UINT8)PlatformInfoHob.BoardId);
+
+ IoWrite8 (R_IOPORT_CMOS_UPPER_INDEX, CMOS_PLATFORM_ID_HI);
+ IoWrite8 (R_IOPORT_CMOS_UPPER_DATA, (UINT8)((PlatformInfoHob.PcieRiser2Type << 4) + (PlatformInfoHob.PcieRiser1Type)));
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h
new file mode 100644
index 0000000000..5e46db8f0f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h
@@ -0,0 +1,89 @@
+/** @file
+ Platform Info Driver.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_INFO_INTERNAL_H_
+#define _PLATFORM_INFO_INTERNAL_H_
+
+#include <PiPei.h>
+#include <Ppi/CpuIo.h>
+#include <Ppi/Spi.h>
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Library/IoLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/PlatformHooksLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Guid/SocketVariable.h>
+#include <Guid/SetupVariable.h>
+#include <Guid/PlatformInfo.h>
+#include <IndustryStandard/Pci22.h>
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+#include <Platform.h>
+#include "SioRegs.h"
+#include <Register/PchRegsSpi.h>
+#include <PchAccess.h>
+#include <Register/PchRegsLpc.h>
+#include <Library/ReportStatusCodeLib.h>
+#include <Register/Cpuid.h>
+
+#define EFI_PLATFORMINFO_DRIVER_PRIVATE_SIGNATURE SIGNATURE_32 ('P', 'I', 'N', 'F')
+
+//
+// CPU Model
+//
+#define INVALID_MODEL 0x0
+
+#define R_SB_SPI_FDOC 0xB0
+#define R_SB_SPI_FDOD 0xB4
+#define SPI_OPCODE_READ_INDEX 4
+#define PDR_REGION_START_OFFSET 0x0
+
+typedef union BOARD_ID
+{
+ struct{
+ UINT8 BoardID0 :1;
+ UINT8 BoardID1 :1;
+ UINT8 BoardID2 :1;
+ UINT8 BoardID3 :1;
+ UINT8 BoardID4 :1;
+ UINT8 BoardRev0 :1;
+ UINT8 BoardRev1 :1;
+ UINT8 Rsvd :1;
+ }BoardID;
+}BOARD_ID;
+
+typedef union RISER_ID
+{
+ struct{
+ UINT8 RiserID0 :1;
+ UINT8 RiserID1 :1;
+ UINT8 RiserID2 :1;
+ UINT8 RiserID3 :1;
+ UINT8 Rsvd :4;
+ }RiserID;
+}RISER_ID;
+
+
+
+EFI_STATUS
+PdrGetPlatformInfo (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ OUT EFI_PLATFORM_INFO *PlatformInfoHob
+ );
+
+EFI_STATUS
+GPIOGetPlatformInfo (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ OUT EFI_PLATFORM_INFO *PlatformInfoHob
+);
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
new file mode 100644
index 0000000000..69d926004d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
@@ -0,0 +1,63 @@
+## @file
+# PlatformInfo PEIM
+#
+# @copyright
+# Copyright 2009 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformInfo
+ FILE_GUID = 34CC6167-7AE7-403e-8AB2-23837F398A30
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PlatformInfoInit
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+ PlatformInfo.c
+ PlatformInfo.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ UefiCpuPkg/UefiCpuPkg.dec
+
+[LibraryClasses]
+ PeimEntryPoint
+ PcdLib
+ DebugLib
+ HobLib
+ IoLib
+ PlatformHooksLib
+ PeiServicesLib
+
+[Pcd]
+ gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig
+
+[Guids]
+ gEfiPlatformInfoGuid
+ gEfiSetupVariableGuid
+
+[Ppis]
+ gPchSpiPpiGuid
+ gEfiPeiReadOnlyVariable2PpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Depex]
+ gPchSpiPpiGuid AND
+ gEfiPeiReadOnlyVariable2PpiGuid AND
+ gDynamicSiLibraryPpiGuid
+
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c
new file mode 100644
index 0000000000..4336f330e3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c
@@ -0,0 +1,194 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "ExStatusCodeHandlerPei.h"
+
+/**
+ Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
+
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+ @param CodeType Indicates the type of status code being reported.
+ @param Value Describes the current status of a hardware or
+ software entity. This includes information about the class and
+ subclass that is used to classify the entity as well as an operation.
+ For progress codes, the operation is the current activity.
+ For error codes, it is the exception.For debug codes,it is not defined at this time.
+ @param Instance The enumeration of a hardware or software entity within
+ the system. A system may contain multiple entities that match a class/subclass
+ pairing. The instance differentiates between them. An instance of 0 indicates
+ that instance information is unavailable, not meaningful, or not relevant.
+ Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to
+ different callers.
+ @param Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS Status code reported to serial I/O successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+ExSerialStatusCodeReportWorker (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN CONST EFI_GUID *CallerId,
+ IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ CHAR8 *Filename;
+ CHAR8 *Description;
+ CHAR8 *Format;
+ CHAR8 Buffer[MAX_EX_DEBUG_STR_LEN];
+ CHAR8 *BufferPtr;
+ UINT32 ErrorLevel;
+ UINT32 LineNumber;
+ UINTN CharCount;
+ BASE_LIST Marker;
+ EX_DEBUG_INFO *ExDebugInfo = NULL;
+
+ Buffer[0] = '\0';
+ CharCount = 0;
+
+ if (Data != NULL &&
+ CompareGuid (&Data->Type, &gStatusCodeDataTypeExDebugGuid)) {
+ ExDebugInfo = (EX_DEBUG_INFO*)(Data + 1);
+ } else if (Data != NULL &&
+ ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) {
+ //
+ // Print ASSERT() information into output buffer.
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "\n\rPEI_ASSERT!: %a (%d): %a\n\r",
+ Filename,
+ LineNumber,
+ Description
+ );
+ } else if (Data != NULL &&
+ ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
+ //
+ // Print DEBUG() information into output buffer.
+ //
+ CharCount = AsciiBSPrint (
+ Buffer,
+ sizeof (Buffer),
+ Format,
+ Marker
+ );
+ } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
+ //
+ // Print ERROR information into output buffer.
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "ERROR: C%08x:V%08x I%x",
+ CodeType,
+ Value,
+ Instance
+ );
+
+ ASSERT(CharCount > 0);
+
+ if (CallerId != NULL) {
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount],
+ (sizeof (Buffer) - (sizeof (Buffer[0]) * CharCount)),
+ " %g",
+ CallerId
+ );
+ }
+
+ if (Data != NULL) {
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount],
+ (sizeof (Buffer) - (sizeof (Buffer[0]) * CharCount)),
+ " %x",
+ Data
+ );
+ }
+
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount],
+ (sizeof (Buffer) - (sizeof (Buffer[0]) * CharCount)),
+ "\n\r"
+ );
+ } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
+ //
+ // Print PROGRESS information into output buffer.
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "PROGRESS CODE: V%08x I%x\n\r",
+ Value,
+ Instance
+ );
+ } else if (Data != NULL &&
+ CompareGuid (&Data->Type, &gEfiStatusCodeDataTypeStringGuid) &&
+ ((EFI_STATUS_CODE_STRING_DATA *) Data)->StringType == EfiStringAscii) {
+ //
+ // EFI_STATUS_CODE_STRING_DATA
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "%a\n\r",
+ ((EFI_STATUS_CODE_STRING_DATA *) Data)->String.Ascii
+ );
+ } else {
+ //
+ // Code type is not defined.
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "Undefined: C%08x:V%08x I%x\n\r",
+ CodeType,
+ Value,
+ Instance
+ );
+ }
+
+ //
+ // No EX info, just print and exit.
+ //
+ if (ExDebugInfo == NULL) {
+ SerialPortWrite ((UINT8*)Buffer, CharCount);
+ return EFI_SUCCESS;
+ }
+
+ //
+ // EX handling here - point at correct string and then take action.
+ // Acquire print, process buffer, write to serial, release print.
+ // Skip any if not requested.
+ //
+ CharCount = ExDebugInfo->DebugStringLen;
+ BufferPtr = ExDebugInfo->DebugString;
+ if (ExDebugInfo->PrintSyncAcquire != NULL) {
+ ExDebugInfo->PrintSyncAcquire ();
+ }
+ if (ExDebugInfo->ProcessBuffer != NULL) {
+ BufferPtr = ExDebugInfo->ProcessBuffer (
+ ExDebugInfo->ProcessDataPtr,
+ Buffer,
+ &CharCount
+ );
+ }
+ if (BufferPtr != NULL) {
+ SerialPortWrite ((UINT8*)BufferPtr, CharCount);
+ }
+ if (ExDebugInfo != NULL && ExDebugInfo->PrintSyncRelease != NULL) {
+ ExDebugInfo->PrintSyncRelease ();
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c
new file mode 100644
index 0000000000..5fe58d5d00
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c
@@ -0,0 +1,111 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "ExStatusCodeHandlerPei.h"
+
+EFI_PEI_EX_RSC_HANDLER_PPI mExStatusCodeHandlerPpi = {
+ RegisterExStatusCodeHandler
+ };
+
+EFI_PEI_PPI_DESCRIPTOR mExStatusCodeHandlerPpiList[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gEfiPeiExStatusCodeHandlerPpiGuid,
+ &mExStatusCodeHandlerPpi
+ }
+};
+
+/**
+ Registers ExSerialStatusCodeReportWorker as callback function for ReportStatusCode() notification.
+
+
+ @param[in] PeiServices Pointer to PEI Services Table.
+
+ @retval EFI_SUCCESS Function was successfully registered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be
+ registered.
+ @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again.
+
+**/
+EFI_STATUS
+EFIAPI
+RegisterExStatusCodeHandler (
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ EFI_PEI_RSC_HANDLER_PPI *RscHandlerPpi;
+
+ Status = PeiServicesLocatePpi (
+ &gEfiPeiRscHandlerPpiGuid,
+ 0,
+ NULL,
+ (VOID **) &RscHandlerPpi
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ if (PcdGetBool (PcdStatusCodeUseSerial)) {
+ Status = RscHandlerPpi->Register (ExSerialStatusCodeReportWorker);
+ if (Status != EFI_ALREADY_STARTED) {
+ ASSERT_EFI_ERROR (Status);
+ }
+ }
+ return Status;
+}
+
+/**
+ Entry point of EX Status Code PEIM.
+
+ This function is the entry point of this EX Status Code PEIM.
+ It initializes serial port status code handler with policy features.
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @retval EFI_SUCESS The entry point of PEIM executes successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+ExStatusCodeHandlerPeiEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DebugPrintErrorLevel;
+
+ //
+ // Dispatch initialization request to sub-statuscode-devices.
+ //
+ Status = SerialPortInitialize();
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // If serial logging is disabled. set PcdStatusCodeUseSerial to FALSE.
+ //
+
+ DebugPrintErrorLevel = GetDebugPrintErrorLevel ();
+ if (DebugPrintErrorLevel == 0) {
+ Status = PcdSetBoolS (PcdStatusCodeUseSerial, FALSE);
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ Status = RegisterExStatusCodeHandler (PeiServices);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Install Report Status Code Handler PPI
+ //
+ Status = PeiServicesInstallPpi (mExStatusCodeHandlerPpiList);
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h
new file mode 100644
index 0000000000..4d101a0c2d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h
@@ -0,0 +1,85 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef __EX_STATUS_CODE_HANDLER_PEI_H__
+#define __EX_STATUS_CODE_HANDLER_PEI_H__
+
+
+#include <Ppi/ReportStatusCodeHandler.h>
+#include <Ppi/ExReportStatusCodeHandler.h>
+
+#include <Guid/StatusCodeDataTypeId.h>
+#include <Guid/StatusCodeDataTypeDebug.h>
+#include <Guid/StatusCodeDataTypeExDebug.h>
+
+#include <Library/DebugLib.h>
+#include <Library/DebugPrintErrorLevelLib.h>
+#include <Library/PrintLib.h>
+#include <Library/ReportStatusCodeLib.h>
+#include <Library/SerialPortLib.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/SemaphoreLib.h>
+
+/**
+ Registers ExSerialStatusCodeReportWorker as callback function for ReportStatusCode() notification.
+
+
+ @param[in] PeiServices Pointer to PEI Services Table.
+
+ @retval EFI_SUCCESS Function was successfully registered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be
+ registered.
+ @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again.
+
+**/
+EFI_STATUS
+EFIAPI
+RegisterExStatusCodeHandler (
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ );
+
+/**
+ Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
+
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+ @param CodeType Indicates the type of status code being reported.
+ @param Value Describes the current status of a hardware or
+ software entity. This includes information about the class and
+ subclass that is used to classify the entity as well as an operation.
+ For progress codes, the operation is the current activity.
+ For error codes, it is the exception.For debug codes,it is not defined at this time.
+ @param Instance The enumeration of a hardware or software entity within
+ the system. A system may contain multiple entities that match a class/subclass
+ pairing. The instance differentiates between them. An instance of 0 indicates
+ that instance information is unavailable, not meaningful, or not relevant.
+ Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to
+ different callers.
+ @param Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS Status code reported to serial I/O successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+ExSerialStatusCodeReportWorker (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN CONST EFI_GUID *CallerId,
+ IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+#endif // __EX_STATUS_CODE_HANDLER_PEI_H__
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
new file mode 100644
index 0000000000..083de9850f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
@@ -0,0 +1,61 @@
+## @file
+# Report Status Code Handler PEIM which produces general handlers and hook them onto the PEI status code router.
+#
+# @copyright
+# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = ExStatusCodeHandlerPei
+ FILE_GUID = 75E78806-C68F-4839-8A68-B29084820659
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = ExStatusCodeHandlerPeiEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC (EBC is only for build)
+#
+
+[Sources]
+ ExStatusCodeHandlerPei.c
+ ExStatusCodeHandlerPei.h
+ ExSerialStatusCodeWorker.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ IntelSiliconPkg/IntelSiliconPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+
+[LibraryClasses]
+ PeimEntryPoint
+ PeiServicesLib
+ PcdLib
+ HobLib
+ SerialPortLib
+ ReportStatusCodeLib
+ PrintLib
+ DebugLib
+ DebugPrintErrorLevelLib
+ BaseMemoryLib
+
+[Pcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial ## CONSUMES
+
+[Guids]
+ gEfiStatusCodeDataTypeStringGuid ## SOMETIMES_CONSUMES
+ gStatusCodeDataTypeExDebugGuid ## SOMETIMES_CONSUMES
+
+[Ppis]
+ gEfiPeiRscHandlerPpiGuid ## CONSUMES
+ gEfiPeiExStatusCodeHandlerPpiGuid ## PRODUCES
+
+[Depex]
+ gEfiPeiRscHandlerPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c
new file mode 100644
index 0000000000..99dd891ccd
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c
@@ -0,0 +1,301 @@
+/** @file
+ Report Status Code Router PEIM which produces Report Stataus Code Handler PPI and Status Code PPI.
+
+ @copyright
+ Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "ExReportStatusCodeRouterPei.h"
+
+EFI_PEI_RSC_HANDLER_PPI mRscHandlerPpi = {
+ Register,
+ Unregister
+ };
+
+EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = {
+ ReportDispatcher
+ };
+
+EFI_PEI_PPI_DESCRIPTOR mRscHandlerPpiList[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gEfiPeiRscHandlerPpiGuid,
+ &mRscHandlerPpi
+ }
+};
+
+EFI_PEI_PPI_DESCRIPTOR mStatusCodePpiList[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gEfiPeiStatusCodePpiGuid,
+ &mStatusCodePpi
+ }
+};
+
+/**
+ Worker function to create one memory status code GUID'ed HOB,
+ using PacketIndex to identify the packet.
+
+ @param PacketIndex Index of records packet.
+
+ @return Pointer to the memory status code packet.
+
+**/
+UINTN *
+CreateRscHandlerCallbackPacket (
+ VOID
+ )
+{
+ UINTN *NumberOfEntries;
+ EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry;
+ UINT16 Index;
+
+ //
+ // Build GUID'ed HOB with PCD defined size.
+ //
+ NumberOfEntries = BuildGuidHob (
+ &gStatusCodeCallbackGuid,
+ sizeof (EFI_PEI_RSC_HANDLER_CALLBACK) * 64 + sizeof (UINTN)
+ );
+ ASSERT (NumberOfEntries != NULL);
+ if (NumberOfEntries == NULL) {
+ return NumberOfEntries;
+ }
+
+ *NumberOfEntries = 0;
+ CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1);
+
+ for (Index = 0; Index < 64; Index++) {
+ CallbackEntry[Index] = NULL;
+ }
+
+ return NumberOfEntries;
+}
+
+/**
+ Register the callback function for ReportStatusCode() notification.
+
+ When this function is called the function pointer is added to an internal list and any future calls to
+ ReportStatusCode() will be forwarded to the Callback function.
+
+ @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is called
+ when a call to ReportStatusCode() occurs.
+
+ @retval EFI_SUCCESS Function was successfully registered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be
+ registered.
+ @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again.
+
+**/
+EFI_STATUS
+EFIAPI
+Register (
+ IN EFI_PEI_RSC_HANDLER_CALLBACK Callback
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry;
+ UINTN *NumberOfEntries;
+ UINTN Index;
+
+ if (Callback == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Hob.Raw = GetFirstGuidHob (&gStatusCodeCallbackGuid);
+ if (Hob.Raw != NULL) {
+ NumberOfEntries = GET_GUID_HOB_DATA (Hob);
+ CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1);
+ if (*NumberOfEntries >= 64) {
+ //
+ // If current total number of handlers does exceed 64, bail
+ //
+ return EFI_OUT_OF_RESOURCES;
+ }
+ for (Index = 0; Index <= *NumberOfEntries; Index++) {
+ if (CallbackEntry[Index] == Callback) {
+ //
+ // If the function was already registered. It can't be registered again.
+ //
+ return EFI_ALREADY_STARTED;
+ }
+ if (CallbackEntry[Index] == NULL) {
+ //
+ // If the total number of handlers in current packet is max value 64,
+ // search an entry with NULL pointer and fill new handler into this entry.
+ //
+ *NumberOfEntries += 1;
+ CallbackEntry[Index] = Callback;
+
+ return EFI_SUCCESS;
+ }
+ }
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Remove a previously registered callback function from the notification list.
+
+ ReportStatusCode() messages will no longer be forwarded to the Callback function.
+
+ @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is to be
+ unregistered.
+
+ @retval EFI_SUCCESS The function was successfully unregistered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_NOT_FOUND The callback function was not found to be unregistered.
+
+**/
+EFI_STATUS
+EFIAPI
+Unregister (
+ IN EFI_PEI_RSC_HANDLER_CALLBACK Callback
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry;
+ UINTN *NumberOfEntries;
+ UINTN Index;
+
+ if (Callback == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Hob.Raw = GetFirstGuidHob (&gStatusCodeCallbackGuid);
+ if (Hob.Raw != NULL) {
+ NumberOfEntries = GET_GUID_HOB_DATA (Hob);
+ CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1);
+ for (Index = 0; Index < *NumberOfEntries; Index++) {
+ if (CallbackEntry[Index] == Callback) {
+ //
+ // Set removed entry as NULL.
+ //
+ CallbackEntry[Index] = NULL;
+ return EFI_SUCCESS;
+ }
+ }
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Publishes an interface that allows PEIMs to report status codes.
+
+ This function implements EFI_PEI_PROGRESS_CODE_PPI.ReportStatusCode().
+ It publishes an interface that allows PEIMs to report status codes.
+
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+ @param CodeType Indicates the type of status code being reported.
+ @param Value Describes the current status of a hardware or
+ software entity. This includes information about the class and
+ subclass that is used to classify the entity as well as an operation.
+ For progress codes, the operation is the current activity.
+ For error codes, it is the exception.For debug codes,it is not defined at this time.
+ @param Instance The enumeration of a hardware or software entity within
+ the system. A system may contain multiple entities that match a class/subclass
+ pairing. The instance differentiates between them. An instance of 0 indicates
+ that instance information is unavailable, not meaningful, or not relevant.
+ Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to
+ different callers.
+ @param Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+ReportDispatcher (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN CONST EFI_GUID *CallerId OPTIONAL,
+ IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry;
+ UINTN *NumberOfEntries;
+ UINTN Index;
+
+ Hob.Raw = GetFirstGuidHob (&gStatusCodeCallbackGuid);
+ if (Hob.Raw != NULL) {
+ NumberOfEntries = GET_GUID_HOB_DATA (Hob);
+ CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1);
+ for (Index = 0; Index < *NumberOfEntries; Index++) {
+ if (CallbackEntry[Index] != NULL) {
+ CallbackEntry[Index](
+ PeiServices,
+ CodeType,
+ Value,
+ Instance,
+ CallerId,
+ Data
+ );
+ }
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Entry point of Status Code PEIM.
+
+ This function is the entry point of this Status Code Router PEIM.
+ It produces Report Stataus Code Handler PPI and Status Code PPI.
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @retval EFI_SUCESS The entry point of DXE IPL PEIM executes successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+GenericStatusCodePeiEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ EFI_PEI_PPI_DESCRIPTOR *OldDescriptor;
+ EFI_PEI_PROGRESS_CODE_PPI *OldStatusCodePpi;
+
+ CreateRscHandlerCallbackPacket ();
+
+ //
+ // Install Report Status Code Handler PPI
+ //
+ Status = PeiServicesInstallPpi (mRscHandlerPpiList);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Install Status Code PPI. PI spec specifies that there can be only one instance
+ // of this PPI in system. So first check if other instance already exists.
+ // If no other instance exists, then just install the PPI.
+ // If other instance already exists, then reinstall it.
+ //
+ Status = PeiServicesLocatePpi (
+ &gEfiPeiStatusCodePpiGuid,
+ 0,
+ &OldDescriptor,
+ (VOID **) &OldStatusCodePpi
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = PeiServicesReInstallPpi (OldDescriptor, mStatusCodePpiList);
+ } else {
+ Status = PeiServicesInstallPpi (mStatusCodePpiList);
+ }
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h
new file mode 100644
index 0000000000..32b709ca15
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h
@@ -0,0 +1,104 @@
+/** @file
+ Internal include file for Report Status Code Router PEIM.
+
+ @copyright
+ Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __PEI_REPORT_STATUS_CODE_ROUTER_H__
+#define __PEI_REPORT_STATUS_CODE_ROUTER_H__
+
+
+#include <Ppi/ReportStatusCodeHandler.h>
+#include <Ppi/StatusCode.h>
+
+#include <Guid/StatusCodeCallbackGuid.h>
+
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeimEntryPoint.h>
+
+/**
+ Register the callback function for ReportStatusCode() notification.
+
+ When this function is called the function pointer is added to an internal list and any future calls to
+ ReportStatusCode() will be forwarded to the Callback function.
+
+ @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is called
+ when a call to ReportStatusCode() occurs.
+
+ @retval EFI_SUCCESS Function was successfully registered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be
+ registered.
+ @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again.
+
+**/
+EFI_STATUS
+EFIAPI
+Register (
+ IN EFI_PEI_RSC_HANDLER_CALLBACK Callback
+ );
+
+/**
+ Remove a previously registered callback function from the notification list.
+
+ ReportStatusCode() messages will no longer be forwarded to the Callback function.
+
+ @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is to be
+ unregistered.
+
+ @retval EFI_SUCCESS The function was successfully unregistered.
+ @retval EFI_INVALID_PARAMETER The callback function was NULL.
+ @retval EFI_NOT_FOUND The callback function was not found to be unregistered.
+
+**/
+EFI_STATUS
+EFIAPI
+Unregister (
+ IN EFI_PEI_RSC_HANDLER_CALLBACK Callback
+ );
+
+/**
+ Publishes an interface that allows PEIMs to report status codes.
+
+ This function implements EFI_PEI_PROGRESS_CODE_PPI.ReportStatusCode().
+ It publishes an interface that allows PEIMs to report status codes.
+
+ @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+ @param CodeType Indicates the type of status code being reported.
+ @param Value Describes the current status of a hardware or
+ software entity. This includes information about the class and
+ subclass that is used to classify the entity as well as an operation.
+ For progress codes, the operation is the current activity.
+ For error codes, it is the exception.For debug codes,it is not defined at this time.
+ @param Instance The enumeration of a hardware or software entity within
+ the system. A system may contain multiple entities that match a class/subclass
+ pairing. The instance differentiates between them. An instance of 0 indicates
+ that instance information is unavailable, not meaningful, or not relevant.
+ Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to
+ different callers.
+ @param Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+ReportDispatcher (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN CONST EFI_GUID *CallerId OPTIONAL,
+ IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+#endif
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
new file mode 100644
index 0000000000..b46775ab55
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
@@ -0,0 +1,51 @@
+## @file
+# Report Status Code Router PEIM which produces Report Stataus Code Handler PPI and Status Code PPI.
+#
+# @copyright
+# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = ExReportStatusCodeRouterPei
+ FILE_GUID = 1DDA5978-B29A-4EA7-AEFB-8B0BAA982E22
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = GenericStatusCodePeiEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is only for build)
+#
+
+[Sources]
+ ExReportStatusCodeRouterPei.c
+ ExReportStatusCodeRouterPei.h
+
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+ PeimEntryPoint
+ PeiServicesLib
+ DebugLib
+ HobLib
+
+[Guids]
+ ## PRODUCES ## HOB
+ ## CONSUMES ## HOB
+ gStatusCodeCallbackGuid
+
+[Ppis]
+ gEfiPeiRscHandlerPpiGuid ## PRODUCES
+ gEfiPeiStatusCodePpiGuid ## PRODUCES
+
+
+[Depex]
+ TRUE
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c
new file mode 100644
index 0000000000..1fdefe9ef6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c
@@ -0,0 +1,136 @@
+/** @file
+ File to update SVID values from Interposer mapping.
+
+@copyright
+ Copyright 2018 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Uefi.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/BaseLib.h>
+#include <Library/PcdLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/HobLib.h>
+#include <Library/MemVrSvidMapLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+/**
+ After Memory policy installation need to map SVID in case of an Interposer is present.
+
+ @param[in] PeiServices General purpose services available to every PEIM.
+ @param[in] NotifyDescriptor Notify that this module published.
+ @param[in] Ppi PPI that was installed.
+
+ @retval EFI_SUCCESS The function completed successfully.
+**/
+EFI_STATUS
+MapInterposerToSvid (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *Ppi
+ )
+{
+ INTERPOSER_TYPE InterposerType;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ UINT8 OriginalMcId = 0;
+ UINT8 CurrentMcId = 0;
+ UINT8 Socket = 0;
+ UINT8 SvidValue = 0;
+ MEM_SVID_MAP *MemSvidMap;
+ UINTN Size;
+ EFI_STATUS Status;
+ INTERPOSER_MAP *MemInterposerMap = NULL;
+ BOOLEAN InterposerPresent = FALSE;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ DEBUG ((EFI_D_INFO, "MapInterposerToSvid Entry\n"));
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ if (GuidHob == NULL) {
+ DEBUG ((EFI_D_INFO, "No Platform Info HOB Detected Exiting...\n"));
+ return EFI_SUCCESS;
+ } else {
+ MemInterposerMap = (INTERPOSER_MAP *) PcdGetPtr (PcdMemInterposerMap);
+ if (MemInterposerMap == NULL) {
+ return EFI_SUCCESS;
+ }
+ Size = sizeof (MEM_SVID_MAP);
+ DEBUG ((EFI_D_INFO, "Allocate memory for MemSvidMap PCD\n"));
+ Status = (*PeiServices)->AllocatePool (PeiServices, Size, &MemSvidMap);
+ ASSERT_EFI_ERROR (Status);
+ ZeroMem (MemSvidMap, Size);
+
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+ for (Socket = 0; Socket < MAX_SOCKET; Socket++) {
+ InterposerType = PlatformInfo->InterposerType[Socket];
+ for (CurrentMcId =0; CurrentMcId < MAX_IMC; CurrentMcId++) {
+ if (InterposerType != InterposerUnknown) {
+ OriginalMcId = MemInterposerMap->Interposer[InterposerType].MappedMcId[CurrentMcId];
+ if (OriginalMcId < MAX_IMC) {
+ Status = DynamicSiLibraryPpi->GetSvidMap (Socket, OriginalMcId, &SvidValue);
+
+ if(Status == EFI_NOT_FOUND) {
+ DEBUG ((DEBUG_ERROR, "PcdMemSrVidMap = NULL\n"));
+ } else {
+ DEBUG ((DEBUG_ERROR, "SocketId = %d, McId = %d, SvidValue = %d\n", Socket, OriginalMcId, SvidValue));
+ }
+
+ MemSvidMap->Socket[Socket].Mc[CurrentMcId] = SvidValue;
+ InterposerPresent = TRUE;
+ }
+ DEBUG ((EFI_D_INFO, "Current MC id = %d, Original MC id = %d, SVID = %d\n", CurrentMcId, OriginalMcId, SvidValue));
+ }
+ }
+ }
+ }
+ if (InterposerPresent) {
+ PcdSetPtrS (PcdMemSrvidMap, &Size, (VOID *) MemSvidMap);
+ } else {
+ DEBUG ((EFI_D_INFO, "No Interposer Present....\n"));
+ }
+
+ DEBUG ((EFI_D_INFO, "MapInterposerToSvid Exit\n"));
+ return EFI_SUCCESS;
+}
+
+EFI_PEI_NOTIFY_DESCRIPTOR mMapInterposerToSvidNotifyList = {
+ (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gMemoryPolicyPpiGuid,
+ MapInterposerToSvid
+};
+
+/**
+ Initialize SVID PCD with Interposer mapping
+
+ @param[in] FileHandle Not used.
+ @param[in] PeiServices General purpose services available to every PEIM.
+
+ @retval EFI_SUCCESS The function completes successfully
+**/
+EFI_STATUS
+EFIAPI
+InterposerToSvidMapEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ DEBUG ((EFI_D_INFO, "InterposerToSvidMap Entry\n"));
+
+ Status = PeiServicesNotifyPpi (&mMapInterposerToSvidNotifyList);
+ ASSERT_EFI_ERROR (Status);
+
+ DEBUG ((EFI_D_INFO, "InterposerToSvidMap Exit\n"));
+ return EFI_SUCCESS;;
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
new file mode 100644
index 0000000000..c311425846
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
@@ -0,0 +1,53 @@
+## @file
+# Component description file for PeiInterposerToSvidMap
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PeiInterposerToSvidMap
+ FILE_GUID = DF11893B-FAC7-4812-8DD7-F5DD56889040
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = InterposerToSvidMapEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+
+ PeiInterposerToSvidMap.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+
+[LibraryClasses]
+ DebugLib
+ PeimEntryPoint
+ PcdLib
+ BaseMemoryLib
+
+[Ppis]
+ gMemoryPolicyPpiGuid ## CONSUMES
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Guids]
+ gEfiPlatformInfoGuid
+
+[Pcd]
+ gPlatformTokenSpaceGuid.PcdMemInterposerMap
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemSrvidMap
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 12/17] WhitleyOpenBoardPkg: Add Feature Modules
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (10 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 11/17] WhitleyOpenBoardPkg: Add Platform Modules Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 13/17] WhitleyOpenBoardPkg: Add UBA Modules Nate DeSimone
` (6 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Pci/Dxe/PciHostBridge/PciHostBridge.c | 1634 ++++++++++++++++
.../Pci/Dxe/PciHostBridge/PciHostBridge.h | 300 +++
.../Pci/Dxe/PciHostBridge/PciHostBridge.inf | 69 +
.../Dxe/PciHostBridge/PciHostBridgeSupport.c | 127 ++
.../Pci/Dxe/PciHostBridge/PciHostResource.h | 62 +
.../Pci/Dxe/PciHostBridge/PciRebalance.c | 1356 ++++++++++++++
.../Pci/Dxe/PciHostBridge/PciRebalance.h | 158 ++
.../Pci/Dxe/PciHostBridge/PciRebalanceIo.c | 218 +++
.../Dxe/PciHostBridge/PciRebalanceMmio32.c | 163 ++
.../Dxe/PciHostBridge/PciRebalanceMmio64.c | 204 ++
.../Pci/Dxe/PciHostBridge/PciRootBridge.h | 573 ++++++
.../Pci/Dxe/PciHostBridge/PciRootBridgeIo.c | 1664 +++++++++++++++++
.../Dxe/PciPlatform/PciIovPlatformPolicy.c | 99 +
.../Dxe/PciPlatform/PciIovPlatformPolicy.h | 53 +
.../Pci/Dxe/PciPlatform/PciPlatform.c | 541 ++++++
.../Pci/Dxe/PciPlatform/PciPlatform.h | 209 +++
.../Pci/Dxe/PciPlatform/PciPlatform.inf | 87 +
.../Pci/Dxe/PciPlatform/PciPlatformHooks.c | 939 ++++++++++
.../Pci/Dxe/PciPlatform/PciPlatformHooks.h | 31 +
.../Pci/Dxe/PciPlatform/PciSupportLib.c | 108 ++
.../Pci/Dxe/PciPlatform/PciSupportLib.h | 46 +
.../Pei/PlatformVariableInitPei.c | 274 +++
.../Pei/PlatformVariableInitPei.h | 41 +
.../Pei/PlatformVariableInitPei.inf | 58 +
24 files changed, 9014 insertions(+)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c
new file mode 100644
index 0000000000..a15fff4817
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c
@@ -0,0 +1,1634 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Guid/SocketPciResourceData.h>
+#include <Guid/SocketIioVariable.h>
+#include "PciHostBridge.h"
+#include "PciRootBridge.h"
+#include "PciHostResource.h"
+
+#include <CpuAndRevisionDefines.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Protocol/IioUds.h>
+#include <Upi/KtiHost.h>
+
+#include <Library/SetupLib.h>
+
+#include "PciRebalance.h"
+
+
+/******************************************************************************
+ * Local definitions.
+ ******************************************************************************/
+typedef struct {
+ PCI_ROOT_BRIDGE_INSTANCE RootBridge;
+ EFI_PCI_ROOT_BRIDGE_DEVICE_PATH RootDevPath;
+} PCI_ROOT_BRIDGE_WITH_PATH;
+
+
+/******************************************************************************
+ * Variables.
+ ******************************************************************************/
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mAcpiAddressSpaceTypeStr[] = {
+ L"Mem", L"I/O", L"Bus"
+};
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mPciResourceTypeStr[] = {
+ L"I/O", L"Mem32", L"PMem32", L"Mem64", L"PMem64", L"Bus"
+};
+
+//
+// We can hardcode the following for a Simple IIO -
+// Root Bridge Count within the Host bridge
+// Root Bridge's device path
+// Root Bridge's resource appeture
+//
+
+STATIC EFI_PCI_ROOT_BRIDGE_DEVICE_PATH mEfiPciRootBridgeDevicePathTemplate = {
+ {{ACPI_DEVICE_PATH,
+ ACPI_DP,
+ {(UINT8) (sizeof (ACPI_HID_DEVICE_PATH)),
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8)}},
+ EISA_PNP_ID(0x0A03),
+ 0},
+ {END_DEVICE_PATH_TYPE,
+ END_ENTIRE_DEVICE_PATH_SUBTYPE,
+ {END_DEVICE_PATH_LENGTH,
+ 0}}
+ };
+
+STATIC EFI_HANDLE mDriverImageHandle;
+
+EDKII_IOMMU_PROTOCOL *mIoMmu;
+EFI_EVENT mIoMmuEvent;
+VOID *mIoMmuRegistration;
+
+EFI_IIO_UDS_PROTOCOL *mIioUds;
+PCI_HOST_BRIDGE_INSTANCE *mHostBridge;
+
+/**
+ Event notification that is fired when IOMMU protocol is installed.
+
+ @param Event The Event that is being processed.
+ @param Context Event Context.
+
+**/
+VOID
+EFIAPI
+IoMmuProtocolCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+
+ Status = gBS->LocateProtocol (&gEdkiiIoMmuProtocolGuid, NULL, (VOID **)&mIoMmu);
+ if (!EFI_ERROR(Status)) {
+ gBS->CloseEvent (mIoMmuEvent);
+ }
+}
+
+
+/**
+
+ Entry point of this driver.
+
+ @param ImageHandle Image handle of this driver.
+ @param SystemTable Pointer to standard EFI system table.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_DEVICE_ERROR Fail to install PCI_ROOT_BRIDGE_IO protocol.
+
+**/
+EFI_STATUS
+EFIAPI
+InitializePciHostBridge (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ UINTN IioIndex;
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINTN IioStack;
+ UINT64 ResourceLength;
+ PCI_ROOT_BRIDGE_RESOURCE_APERTURE RbAperture;
+
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ EFI_PCI_ROOT_BRIDGE_DEVICE_PATH *TempDevicePath;
+ STACK_RES *CurStackRes;
+
+ mDriverImageHandle = ImageHandle;
+ //
+ // Located the IIO Protocol Interface
+ //
+ Status = gBS->LocateProtocol (&gEfiIioUdsProtocolGuid, NULL, &mIioUds);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Most systems in the world including complex servers have only one Host Bridge.
+ //
+ HostBridge = AllocateZeroPool (sizeof (PCI_HOST_BRIDGE_INSTANCE));
+ if (HostBridge == NULL) {
+ ASSERT(FALSE);
+ return EFI_OUT_OF_RESOURCES;
+ }
+ HostBridge->Signature = PCI_HOST_BRIDGE_SIGNATURE;
+ HostBridge->RootBridgeCount = 0;
+ HostBridge->ResourceSubmited = FALSE;
+ HostBridge->CanRestarted = TRUE;
+ InitializeListHead (&HostBridge->RootBridges);
+
+ HostBridge->ResAlloc.NotifyPhase = NotifyPhase;
+ HostBridge->ResAlloc.GetNextRootBridge = GetNextRootBridge;
+ HostBridge->ResAlloc.GetAllocAttributes = GetAttributes;
+ HostBridge->ResAlloc.StartBusEnumeration = StartBusEnumeration;
+ HostBridge->ResAlloc.SetBusNumbers = SetBusNumbers;
+ HostBridge->ResAlloc.SubmitResources = SubmitResources;
+ HostBridge->ResAlloc.GetProposedResources = GetProposedResources;
+ HostBridge->ResAlloc.PreprocessController = PreprocessController;
+
+ Status = gBS->InstallProtocolInterface (
+ &HostBridge->Handle,
+ &gEfiPciHostBridgeResourceAllocationProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &HostBridge->ResAlloc
+ );
+ if (EFI_ERROR (Status)) {
+ FreePool (HostBridge);
+ return EFI_DEVICE_ERROR;
+ }
+
+ //
+ // Create Root Bridges in this Host Bridge.
+ //
+ for (IioIndex = 0; IioIndex < mIioUds->IioUdsPtr->PlatformData.numofIIO; IioIndex++) {
+
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].Valid) {
+ continue;
+ } // No guarantee that the valid IIOs are sequential starting at 0!
+
+ for (IioStack = 0; IioStack < MAX_IIO_STACK; IioStack++) {
+
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[IioIndex].stackPresentBitmap & (1 << IioStack))) {
+ continue;
+ }
+ // Skip stack which is disabled by resource limitation or DEBUG purpose!
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].Personality >= TYPE_DISABLED) {
+ continue;
+ }
+ //
+ // Create Root Bridge Instance
+ //
+ RootBridge = AllocateZeroPool (sizeof(PCI_ROOT_BRIDGE_WITH_PATH));
+ if (RootBridge == NULL) {
+ ASSERT_EFI_ERROR (EFI_OUT_OF_RESOURCES);
+ return EFI_OUT_OF_RESOURCES;
+ }
+ TempDevicePath = &((PCI_ROOT_BRIDGE_WITH_PATH*)RootBridge)->RootDevPath;
+
+ RootBridge->Signature = PCI_ROOT_BRIDGE_SIGNATURE;
+ RootBridge->DevicePath = (EFI_DEVICE_PATH_PROTOCOL*)TempDevicePath;
+ CopyMem (TempDevicePath, &mEfiPciRootBridgeDevicePathTemplate, sizeof(*TempDevicePath));
+ TempDevicePath->AcpiDevicePath.UID = (UINT32)(IioIndex * MAX_IIO_STACK + IioStack);
+
+ ZeroMem(&RbAperture, sizeof(RbAperture));
+ {
+ //
+ // Update Root Bridge with UDS resource information
+ //
+ RbAperture.BusBase = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].BusBase;
+ RbAperture.BusLimit = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].BusLimit;
+ RbAperture.Mem32Base = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem32Base;
+ RbAperture.Mem32Limit = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem32Limit;
+ RbAperture.BusReserve = 0;
+ if ((mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Limit >
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Base) &&
+ (mIioUds->IioUdsPtr->PlatformData.Pci64BitResourceAllocation)) {
+ RbAperture.Mem64Base = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Base;
+ RbAperture.Mem64Limit = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Limit;
+ }
+ RbAperture.IoBase = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoBase;
+ RbAperture.IoLimit = mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoLimit;
+
+ SimpleIioRootBridgeConstructor (&RootBridge->RootBridgeIo, HostBridge->Handle, &RbAperture,
+ mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[IioIndex].PcieSegment,
+ GetAllocAttributes (HostBridge->RootBridgeCount));
+ DEBUG ((DEBUG_INFO, "[PCI] Create Root Bridge for [%d.%d] in PCI segment %d with below resource:\n", IioIndex, IioStack, RootBridge->RootBridgeIo.SegmentNumber));
+ DEBUG ((DEBUG_INFO, " Bus: Base = 0x%08x, Limit = 0x%08x, BusReserve = 0x%08x\n", RootBridge->Aperture.BusBase, RootBridge->Aperture.BusLimit, RootBridge->Aperture.BusReserve));
+ DEBUG ((DEBUG_INFO, " IO: Base = 0x%08x, Limit = 0x%08x\n", RootBridge->Aperture.IoBase, RootBridge->Aperture.IoLimit));
+ DEBUG ((DEBUG_INFO, " Mem32: Base = 0x%08x, Limit = 0x%08x\n", RootBridge->Aperture.Mem32Base, RootBridge->Aperture.Mem32Limit));
+ DEBUG ((DEBUG_INFO, " Mem64: Base = 0x%lx, Limit = 0x%lx\n", RootBridge->Aperture.Mem64Base, RootBridge->Aperture.Mem64Limit));
+ //
+ // Insert Root Bridge Instance
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &RootBridge->Handle,
+ &gEfiDevicePathProtocolGuid,
+ RootBridge->DevicePath,
+ &gEfiPciRootBridgeIoProtocolGuid,
+ &RootBridge->RootBridgeIo,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ InsertTailList (&HostBridge->RootBridges, &RootBridge->Link);
+ mPciRootBridgeTable[IioIndex][IioStack] = RootBridge;
+ HostBridge->RootBridgeCount++;
+ }
+ } // for (IioStack...)
+ } // for (IioIndex...)
+ //
+ // Add PCIE base into Runtime memory so that it can be reported in E820 table
+ //
+ Status = gDS->AddMemorySpace (
+ EfiGcdMemoryTypeMemoryMappedIo,
+ mIioUds->IioUdsPtr->PlatformData.PciExpressBase,
+ mIioUds->IioUdsPtr->PlatformData.PciExpressSize,
+ EFI_MEMORY_RUNTIME | EFI_MEMORY_UC
+ );
+ ASSERT_EFI_ERROR(Status);
+
+ BaseAddress = mIioUds->IioUdsPtr->PlatformData.PciExpressBase;
+
+ Status = gDS->AllocateMemorySpace (
+ EfiGcdAllocateAddress,
+ EfiGcdMemoryTypeMemoryMappedIo,
+ 0,
+ mIioUds->IioUdsPtr->PlatformData.PciExpressSize,
+ &BaseAddress,
+ ImageHandle,
+ NULL
+ );
+ ASSERT_EFI_ERROR(Status);
+
+ Status = gDS->SetMemorySpaceAttributes (
+ mIioUds->IioUdsPtr->PlatformData.PciExpressBase,
+ mIioUds->IioUdsPtr->PlatformData.PciExpressSize,
+ EFI_MEMORY_RUNTIME
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //s4030180
+ for (IioIndex = 0; IioIndex < mIioUds->IioUdsPtr->PlatformData.numofIIO; IioIndex++) {
+
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].Valid) {
+ continue;
+ } // No guarantee that the valid IIOs are sequential starting at 0!
+ for (IioStack = 0; IioStack < MAX_IIO_STACK; IioStack++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[IioIndex].stackPresentBitmap & (1 << IioStack))) {
+ continue;
+ }
+
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoLimit >
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoBase) {
+ //
+ // At present, we use up the first 4k for fixed ranges like
+ // ICH GPIO, ACPI and ISA devices. The first 4k is not
+ // tracked through GCD. It should be.
+ //
+ Status = gDS->AddIoSpace (
+ EfiGcdIoTypeIo,
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoBase ,
+ (mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoLimit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceIoBase + 1)
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ CurStackRes = &mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack];
+ if (CurStackRes->PciResourceMem32Limit > CurStackRes->PciResourceMem32Base) {
+ //
+ // Shouldn't the capabilities be UC?
+ //
+ ResourceLength = CurStackRes->PciResourceMem32Limit - CurStackRes->PciResourceMem32Base + 1;
+ Status = gDS->AddMemorySpace (
+ EfiGcdMemoryTypeMemoryMappedIo,
+ CurStackRes->PciResourceMem32Base,
+ ResourceLength,
+ 0
+ );
+ ASSERT_EFI_ERROR (Status);
+ //
+ // Track VT-d bar in GCD.
+ //
+ // We now have a region of memory x-z associated with this stack
+ // and there is also subregion y-z that is the VT-d space (x <= y <= z)
+ BaseAddress = CurStackRes->VtdBarAddress;
+ ResourceLength = CurStackRes->PciResourceMem32Limit - BaseAddress + 1;
+ Status = gDS->AllocateMemorySpace (
+ EfiGcdAllocateAddress,
+ EfiGcdMemoryTypeMemoryMappedIo,
+ 0,
+ ResourceLength,
+ &BaseAddress,
+ ImageHandle,
+ NULL
+ );
+ ASSERT_EFI_ERROR(Status);
+ }
+
+ if ((mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Limit >
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Base) &&
+ (mIioUds->IioUdsPtr->PlatformData.Pci64BitResourceAllocation)) {
+
+ Status = gDS->AddMemorySpace (
+ EfiGcdMemoryTypeMemoryMappedIo,
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Base ,
+ (mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[IioIndex].StackRes[IioStack].PciResourceMem64Base + 1),
+ 0
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ }
+ }
+
+ if (!EFI_ERROR (Status)) {
+ mIoMmuEvent = EfiCreateProtocolNotifyEvent (
+ &gEdkiiIoMmuProtocolGuid,
+ TPL_CALLBACK,
+ IoMmuProtocolCallback,
+ NULL,
+ &mIoMmuRegistration
+ );
+ }
+ mHostBridge = HostBridge;
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Enter the EfiPciHostBridgeBeginEnumeration phase of the PCI(e)
+ numeration process.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
+ instance.
+
+ @retval EFI_SUCCESS
+ @retval EFI_NOT_READY
+*/
+STATIC EFI_STATUS
+BeginBridgeEnumeration (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This
+ )
+{
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ LIST_ENTRY *List;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ PCI_RESOURCE_TYPE Index;
+
+ Index = TypeMax;
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+
+ if (HostBridge->CanRestarted) {
+ //
+ // Reset Root Bridge
+ //
+ List = HostBridge->RootBridges.ForwardLink;
+
+ while (List != &HostBridge->RootBridges) {
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ for (Index = TypeIo; Index < TypeMax; Index++) {
+ RootBridge->ResAllocNode[Index].Type = Index;
+ RootBridge->ResAllocNode[Index].Base = 0;
+ RootBridge->ResAllocNode[Index].Length = 0;
+ RootBridge->ResAllocNode[Index].Status = ResNone;
+ } // for
+
+ List = List->ForwardLink;
+ } // while
+
+ HostBridge->ResourceSubmited = FALSE;
+ HostBridge->CanRestarted = TRUE;
+ } else {
+ //
+ // Can not restart
+ //
+ return EFI_NOT_READY;
+ } // if
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Enter the EfiPciHostBridgeAllocateResources phase of the
+ PCI(e) numeration process.
+
+ @param[in] This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance.
+
+ @retval EFI_SUCCESS
+ @retval EFI_NOT_READY
+ @retval EFI_OUT_OF_RESOURCES
+*/
+STATIC EFI_STATUS
+BridgeAllocateResources (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This
+ )
+{
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ PCI_RESOURCE_TYPE Index;
+ LIST_ENTRY *List;
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 AddrLen;
+ UINTN BitsOfAlignment;
+ UINT64 Alignment;
+ EFI_STATUS Status;
+ EFI_STATUS ReturnStatus;
+ PCI_RESOURCE_TYPE Index1;
+ PCI_RESOURCE_TYPE Index2;
+ BOOLEAN ResNodeHandled[TypeMax];
+ UINT64 MaxAlignment;
+ SOCKET_RESOURCE_ADJUSTMENT_RESULT RatioAdjustResult;
+ UINT8 Socket;
+ UINT8 Stack;
+
+ Index = TypeMax;
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+
+ ReturnStatus = EFI_SUCCESS;
+ if (HostBridge->ResourceSubmited) {
+
+ List = HostBridge->RootBridges.ForwardLink;
+ while (List != &HostBridge->RootBridges) {
+
+ for (Index1 = TypeIo; Index1 < TypeBus; Index1++) {
+ ResNodeHandled[Index1] = FALSE;
+ }
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ Socket = Stack = (UINT8)-1;
+ PciRootBridge2SocketStack (RootBridge, &Socket, &Stack);
+ for (Index1 = TypeIo; Index1 < TypeBus; Index1++) {
+
+ if (RootBridge->ResAllocNode[Index1].Status == ResNone) {
+
+ ResNodeHandled[Index1] = TRUE;
+
+ } else {
+ //
+ // Allocate the resource node with max alignment at first
+ //
+ MaxAlignment = 0;
+ Index = TypeMax;
+ for (Index2 = TypeIo; Index2 < TypeBus; Index2++) {
+
+ if (ResNodeHandled[Index2]) {
+ continue;
+ }
+ if (MaxAlignment <= RootBridge->ResAllocNode[Index2].Alignment) {
+ MaxAlignment = RootBridge->ResAllocNode[Index2].Alignment;
+ Index = Index2;
+ }
+ } // for
+
+ if (Index < TypeMax) {
+
+ ResNodeHandled[Index] = TRUE;
+ Alignment = RootBridge->ResAllocNode[Index].Alignment;
+ //
+ // Get the number of '1' in Alignment.
+ //
+ for (BitsOfAlignment = 0; Alignment != 0; BitsOfAlignment++) {
+ Alignment = RShiftU64 (Alignment, 1);
+ }
+
+ AddrLen = RootBridge->ResAllocNode[Index].Length;
+ Alignment = RootBridge->ResAllocNode[Index].Alignment;
+
+ DEBUG ((DEBUG_INFO, "\n[%d.%d] Resource Type to assign : %s\n", Socket, Stack, mPciResourceTypeStr[Index]));
+ DEBUG ((DEBUG_INFO, " Length to allocate: %lx\n", RootBridge->ResAllocNode[Index].Length));
+ DEBUG ((DEBUG_INFO, " Alignment: %lx\n", Alignment));
+ DEBUG ((DEBUG_INFO, " Base Address: %lx\n", RootBridge->ResAllocNode[Index].Base));
+
+ switch (Index) {
+ case TypeIo:
+ if (RootBridge->Aperture.IoBase < RootBridge->Aperture.IoLimit) {
+ //
+ // It is impossible for 0xFFFF Alignment for IO16
+ //
+ if (BitsOfAlignment >= 16) {
+ Alignment = 0;
+ }
+ BaseAddress = RootBridge->Aperture.IoBase;
+ //
+ // Have to make sure Alignment is handled seeing we are doing direct address allocation
+ //
+ if ((BaseAddress & ~(Alignment)) != BaseAddress) {
+ BaseAddress = ((BaseAddress + Alignment) & ~(Alignment));
+ }
+
+ while((BaseAddress + AddrLen) <= RootBridge->Aperture.IoLimit + 1) {
+ Status = gDS->AllocateIoSpace (EfiGcdAllocateAddress, EfiGcdIoTypeIo, BitsOfAlignment,
+ AddrLen, &BaseAddress, mDriverImageHandle, NULL );
+
+ if (!EFI_ERROR (Status)) {
+ RootBridge->ResAllocNode[Index].Base = (UINT64) BaseAddress;
+ RootBridge->ResAllocNode[Index].Status = ResAllocated;
+ goto TypeIoFound;
+ }
+
+ BaseAddress += (Alignment + 1);
+ } // while
+ } // if
+
+ TypeIoFound:
+ if (RootBridge->ResAllocNode[Index].Status != ResAllocated) {
+ //
+ // No Room at the Inn for this resources request
+ //
+ ReturnStatus = EFI_OUT_OF_RESOURCES;
+ } // if
+ break;
+
+ case TypeMem32:
+ if (RootBridge->Aperture.Mem32Base < RootBridge->Aperture.Mem32Limit) {
+
+ BaseAddress = RootBridge->Aperture.Mem32Base;
+ //
+ // Have to make sure Alignment is handled seeing we are doing direct address allocation
+ //
+ if ((BaseAddress & ~(Alignment)) != BaseAddress) {
+ BaseAddress = ((BaseAddress + Alignment) & ~(Alignment));
+ }
+
+ while ((BaseAddress + AddrLen) <= RootBridge->Aperture.Mem32Limit + 1) {
+ DEBUG ((DEBUG_INFO, " Attempting %s allocation at 0x%llX.....",
+ mPciResourceTypeStr[Index], BaseAddress));
+ Status = gDS->AllocateMemorySpace (EfiGcdAllocateAddress, EfiGcdMemoryTypeMemoryMappedIo,
+ BitsOfAlignment, AddrLen, &BaseAddress, mDriverImageHandle, NULL);
+ if (!EFI_ERROR (Status)) {
+ RootBridge->ResAllocNode[Index].Base = (UINT64) BaseAddress;
+ RootBridge->ResAllocNode[Index].Status = ResAllocated;
+ DEBUG ((DEBUG_INFO, "Passed\n"));
+ goto TypeMem32Found;
+ } // if
+ DEBUG ((DEBUG_INFO, "Failed\n"));
+ BaseAddress += (Alignment + 1);
+ } // while
+ } // if
+
+ TypeMem32Found:
+ if (RootBridge->ResAllocNode[Index].Status != ResAllocated) {
+ //
+ // No Room at the Inn for this resources request
+ //
+ ReturnStatus = EFI_OUT_OF_RESOURCES;
+ }
+ break;
+
+ case TypePMem32:
+ StartTypePMem32:
+ if (RootBridge->Aperture.Mem32Base < RootBridge->Aperture.Mem32Limit) {
+ BaseAddress = RootBridge->Aperture.Mem32Limit + 1;
+ BaseAddress -= AddrLen;
+
+ //
+ // Have to make sure Alignment is handled seeing we are doing direct address allocation
+ //
+ if ((BaseAddress & ~(Alignment)) != BaseAddress) {
+ BaseAddress = ((BaseAddress) & ~(Alignment));
+ }
+
+ while (RootBridge->Aperture.Mem32Base <= BaseAddress) {
+
+ DEBUG ((DEBUG_INFO, " Attempting %s allocation at 0x%llX.....",
+ mPciResourceTypeStr[Index], BaseAddress));
+ Status = gDS->AllocateMemorySpace (EfiGcdAllocateAddress, EfiGcdMemoryTypeMemoryMappedIo,
+ BitsOfAlignment, AddrLen, &BaseAddress, mDriverImageHandle, NULL);
+ if (!EFI_ERROR (Status)) {
+ RootBridge->ResAllocNode[Index].Base = (UINT64) BaseAddress;
+ RootBridge->ResAllocNode[Index].Status = ResAllocated;
+ DEBUG ((DEBUG_INFO, "Passed\n"));
+ goto TypePMem32Found;
+ }
+ DEBUG ((DEBUG_INFO, "Failed\n"));
+ BaseAddress -= (Alignment + 1);
+ } // while
+ } // if
+
+ TypePMem32Found:
+ if (RootBridge->ResAllocNode[Index].Status != ResAllocated) {
+ //
+ // No Room at the Inn for this resources request
+ //
+ ReturnStatus = EFI_OUT_OF_RESOURCES;
+ }
+ break;
+
+ case TypeMem64:
+ case TypePMem64:
+ if ((RootBridge->Aperture.Mem64Limit > RootBridge->Aperture.Mem64Base) &&
+ (mIioUds->IioUdsPtr->PlatformData.Pci64BitResourceAllocation)) {
+
+ if (RootBridge->Aperture.Mem64Limit < AddrLen) {
+ RootBridge->ResAllocNode[Index].Status = ResNone;
+ goto TypeMem64Found;
+ }
+ BaseAddress = RootBridge->Aperture.Mem64Limit + 1;
+ BaseAddress -= AddrLen;
+
+ //
+ // Have to make sure Alignment is handled seeing we are doing direct address allocation
+ //
+ if ((BaseAddress & ~(Alignment)) != BaseAddress) {
+ BaseAddress = ((BaseAddress) & ~(Alignment));
+ }
+
+ while (RootBridge->Aperture.Mem64Base <= BaseAddress) {
+
+ DEBUG ((DEBUG_INFO, " Attempting %s allocation at 0x%llX.....",
+ mPciResourceTypeStr[Index], BaseAddress));
+ Status = gDS->AllocateMemorySpace (EfiGcdAllocateAddress, EfiGcdMemoryTypeMemoryMappedIo,
+ BitsOfAlignment, AddrLen, &BaseAddress, mDriverImageHandle, NULL);
+ if (!EFI_ERROR (Status)) {
+ RootBridge->ResAllocNode[Index].Base = (UINT64) BaseAddress;
+ RootBridge->ResAllocNode[Index].Status = ResAllocated;
+ DEBUG ((DEBUG_INFO, "Passed\n"));
+ goto TypeMem64Found;
+ }
+ DEBUG ((DEBUG_INFO, "Failed\n"));
+ BaseAddress -= (Alignment + 1);
+ } // while
+
+ TypeMem64Found:
+ if (RootBridge->ResAllocNode[Index].Status != ResAllocated) {
+ //
+ // No Room at the Inn for this resources request
+ //
+ ReturnStatus = EFI_OUT_OF_RESOURCES;
+ }
+ } else {
+ //
+ // If 64-bit resourcing is not available, and the requested size is not greater than the Mem32Limit, then try as PMem32
+ //
+ if (AddrLen >= RootBridge->Aperture.Mem32Limit + 1) {
+
+ DEBUG((DEBUG_ERROR, " 64-bit resource length 0x%llX > Mem32Limit (0x%llX). Failed!!\n", AddrLen, RootBridge->Aperture.Mem32Limit + 1));
+ goto TypeMem64Found; // Let it handle out-of-resources case, try MMIO rebalance
+
+ } else {
+
+ DEBUG((DEBUG_ERROR, " 64-bit resourcing not available. Try as PMem32\n"));
+ goto StartTypePMem32;
+ }
+ }
+ break;
+
+ default:
+ DEBUG ((EFI_D_ERROR, "[PCI] ERROR: Unhandled resource type (%d)\n", Index));
+ break;
+ } // End switch (Index)
+
+ DEBUG ((DEBUG_INFO, "Resource Type Assigned: %s\n", mPciResourceTypeStr[Index]));
+ if (RootBridge->ResAllocNode[Index].Status == ResAllocated) {
+ DEBUG ((DEBUG_INFO, " Base Address Assigned: %lx\n", RootBridge->ResAllocNode[Index].Base));
+ DEBUG ((DEBUG_INFO, " Length Assigned: %lx\n", RootBridge->ResAllocNode[Index].Length));
+ } else {
+ DEBUG ((DEBUG_ERROR, " Resource Allocation failed! There was no room at the inn\n"));
+ }
+ } else {
+ //
+ // Index >= TypeMax
+ //
+ ASSERT (FALSE);
+ }
+ }
+ }
+ List = List->ForwardLink;
+ }
+
+ if (ReturnStatus == EFI_OUT_OF_RESOURCES) {
+
+ DEBUG ((DEBUG_ERROR, "[PCI] Resource allocation failed, rebalance resource allocation and reboot\n"));
+ AdjustResourceAmongRootBridges (HostBridge, &RatioAdjustResult);
+ if (RatioAdjustResult == SocketResourceRatioChanged) {
+ DEBUG ((DEBUG_WARN, "[PCI] WARNING: Resource allocation failed. Adjusted the resource requests and resetting the system.\n"));
+ gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
+
+ } else {
+
+ DEBUG ((DEBUG_WARN, "[PCI] WARNING: Resource allocation failed, rebalance not possible, continue boot\n"));
+ }
+ }
+
+ //
+ // Set resource to zero for nodes where allocation fails
+ //
+ List = HostBridge->RootBridges.ForwardLink;
+ while (List != &HostBridge->RootBridges) {
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ for (Index = TypeIo; Index < TypeBus; Index++) {
+ if (RootBridge->ResAllocNode[Index].Status != ResAllocated) {
+ RootBridge->ResAllocNode[Index].Length = 0;
+ }
+ }
+ List = List->ForwardLink;
+ }
+ return ReturnStatus;
+ } else {
+ return EFI_NOT_READY;
+ }
+ //
+ // HostBridge->CanRestarted = FALSE;
+ //
+}
+
+
+/**
+ Enter the EfiPciHostBridgeFreeResources phase of the
+ PCI(e) numeration process.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
+ instance.
+ @retval EFI_SUCCESS Things worked out
+ @retval other Failures as reported by functions leveraged
+*/
+STATIC EFI_STATUS
+BridgeFreeResources (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This
+ )
+{
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ PCI_RESOURCE_TYPE Index;
+ LIST_ENTRY *List;
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 AddrLen;
+ EFI_STATUS Status;
+ EFI_STATUS ReturnStatus;
+
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ ReturnStatus = EFI_SUCCESS;
+ List = HostBridge->RootBridges.ForwardLink;
+
+ while (List != &HostBridge->RootBridges) {
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ for (Index = TypeIo; Index < TypeBus; Index++) {
+ if (RootBridge->ResAllocNode[Index].Status == ResAllocated) {
+ AddrLen = RootBridge->ResAllocNode[Index].Length;
+ BaseAddress = (EFI_PHYSICAL_ADDRESS) RootBridge->ResAllocNode[Index].Base;
+
+ switch (Index) {
+ case TypeIo:
+ Status = gDS->FreeIoSpace (BaseAddress, AddrLen);
+ if (EFI_ERROR (Status)) {
+ ReturnStatus = Status;
+ }
+ break;
+
+ case TypeMem32:
+ Status = gDS->FreeMemorySpace (BaseAddress, AddrLen);
+ if (EFI_ERROR (Status)) {
+ ReturnStatus = Status;
+ }
+ break;
+
+ case TypePMem32:
+ break;
+
+ case TypeMem64:
+ break;
+
+ case TypePMem64:
+ Status = gDS->FreeMemorySpace (BaseAddress, AddrLen);
+ if (EFI_ERROR (Status)) {
+ ReturnStatus = Status;
+ }
+ break;
+
+ default:
+ DEBUG ((DEBUG_ERROR, "[PCI] ERROR: Invalid resource type %d\n", Index));
+ break;
+ }
+
+ RootBridge->ResAllocNode[Index].Type = Index;
+ RootBridge->ResAllocNode[Index].Base = 0;
+ RootBridge->ResAllocNode[Index].Length = 0;
+ RootBridge->ResAllocNode[Index].Status = ResNone;
+ }
+ }
+
+ List = List->ForwardLink;
+ }
+
+ HostBridge->ResourceSubmited = FALSE;
+ HostBridge->CanRestarted = TRUE;
+ return ReturnStatus;
+}
+
+
+/**
+ Enter the EfiPciHostBridgeEndResourceAllocation phase of the
+ PCI(e) numeration process.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
+ instance.
+ @retval EFI_SUCCESS Things worked out
+*/
+STATIC EFI_STATUS
+PciHostBridgeEndResourceAllocation (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This
+ )
+{
+ return EFI_SUCCESS;
+}
+
+
+/**
+
+ Enter a certain phase of the PCI enumeration process.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance.
+ @param Phase The phase during enumeration.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_INVALID_PARAMETER Wrong phase parameter passed in.
+ @retval EFI_NOT_READY Resources have not been submitted yet.
+
+**/
+EFI_STATUS
+EFIAPI
+NotifyPhase (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase
+ )
+{
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+
+ switch (Phase) {
+ case EfiPciHostBridgeBeginEnumeration:
+ return BeginBridgeEnumeration (This);
+
+ case EfiPciHostBridgeEndEnumeration:
+ return EFI_SUCCESS;
+
+ case EfiPciHostBridgeBeginBusAllocation:
+ //
+ // No specific action is required here, can perform any chipset specific programing
+ //
+ HostBridge->CanRestarted = FALSE;
+ break;
+
+ case EfiPciHostBridgeEndBusAllocation:
+ //
+ // No specific action is required here, can perform any chipset specific programing
+ //
+ break;
+
+ case EfiPciHostBridgeBeginResourceAllocation:
+ //
+ // No specific action is required here, can perform any chipset specific programing
+ //
+ break;
+
+ case EfiPciHostBridgeAllocateResources:
+ return BridgeAllocateResources (This);
+
+ case EfiPciHostBridgeSetResources:
+ //
+ // HostBridgeInstance->CanRestarted = FALSE;
+ //
+ break;
+
+ case EfiPciHostBridgeFreeResources:
+ return BridgeFreeResources (This);
+
+ case EfiPciHostBridgeEndResourceAllocation:
+ return PciHostBridgeEndResourceAllocation (This);
+
+ default:
+ return EFI_INVALID_PARAMETER;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Return the device handle of the next PCI root bridge that is associated with
+ this Host Bridge.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle Returns the device handle of the next PCI Root Bridge.
+ On input, it holds the RootBridgeHandle returned by the most
+ recent call to GetNextRootBridge().The handle for the first
+ PCI Root Bridge is returned if RootBridgeHandle is NULL on input.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_NOT_FOUND Next PCI root bridge not found.
+ @retval EFI_INVALID_PARAMETER Wrong parameter passed in.
+
+**/
+EFI_STATUS
+EFIAPI
+GetNextRootBridge (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN OUT EFI_HANDLE *RootBridgeHandle
+ )
+{
+ BOOLEAN NoRootBridge;
+ LIST_ENTRY *List;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ NoRootBridge = TRUE;
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ List = HostBridge->RootBridges.ForwardLink;
+
+ while (List != &HostBridge->RootBridges) {
+ NoRootBridge = FALSE;
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ if (*RootBridgeHandle == NULL) {
+ //
+ // Return the first Root Bridge Handle of the Host Bridge
+ //
+ *RootBridgeHandle = RootBridge->Handle;
+ return EFI_SUCCESS;
+ } else {
+ if (*RootBridgeHandle == RootBridge->Handle) {
+ //
+ // Get next if have
+ //
+ List = List->ForwardLink;
+ if (List != &HostBridge->RootBridges) {
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ *RootBridgeHandle = RootBridge->Handle;
+ return EFI_SUCCESS;
+ } else {
+ return EFI_NOT_FOUND;
+ }
+ }
+ }
+
+ List = List->ForwardLink;
+ //
+ // end while
+ //
+ }
+
+ if (NoRootBridge) {
+ return EFI_NOT_FOUND;
+ } else {
+ return EFI_INVALID_PARAMETER;
+ }
+}
+
+/**
+
+ Returns the attributes of a PCI Root Bridge.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle The device handle of the PCI Root Bridge
+ that the caller is interested in.
+ @param Attributes The pointer to attributes of the PCI Root Bridge.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_INVALID_PARAMETER Attributes parameter passed in is NULL or
+ RootBridgeHandle is not an EFI_HANDLE
+ that was returned on a previous call to
+ GetNextRootBridge().
+
+**/
+EFI_STATUS
+EFIAPI
+GetAttributes (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT UINT64 *Attributes
+ )
+{
+ LIST_ENTRY *Link;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (Attributes == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ for (Link = GetFirstNode (&HostBridge->RootBridges)
+ ; !IsNull (&HostBridge->RootBridges, Link)
+ ; Link = GetNextNode (&HostBridge->RootBridges, Link)
+ ) {
+ RootBridge = ROOT_BRIDGE_FROM_LINK (Link);
+ if (RootBridgeHandle == RootBridge->Handle) {
+ *Attributes = RootBridge->AllocationAttributes;
+ return EFI_SUCCESS;
+ }
+ }
+
+ return EFI_INVALID_PARAMETER;
+}
+
+/**
+
+ This is the request from the PCI enumerator to set up
+ the specified PCI Root Bridge for bus enumeration process.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle The PCI Root Bridge to be set up.
+ @param Configuration Pointer to the pointer to the PCI bus resource descriptor.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_OUT_OF_RESOURCES Not enough pool to be allocated.
+ @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid handle.
+
+**/
+EFI_STATUS
+EFIAPI
+StartBusEnumeration (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT VOID **Configuration
+ )
+{
+ LIST_ENTRY *List;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ VOID *Buffer;
+ UINT8 *Temp;
+ EFI_STATUS Status;
+ UINTN BusStart;
+ UINTN BusEnd;
+ UINT64 BusReserve;
+
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ List = HostBridge->RootBridges.ForwardLink;
+
+ while (List != &HostBridge->RootBridges) {
+
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ if (RootBridgeHandle == RootBridge->Handle) {
+ //
+ // Set up the Root Bridge for Bus Enumeration
+ //
+ BusStart = RootBridge->Aperture.BusBase;
+ BusEnd = RootBridge->Aperture.BusLimit;
+ BusReserve = RootBridge->Aperture.BusReserve;
+ //
+ // Program the Hardware(if needed) if error return EFI_DEVICE_ERROR
+ //
+ Status = gBS->AllocatePool (
+ EfiBootServicesData,
+ sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR),
+ &Buffer
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ Temp = (UINT8 *) Buffer;
+
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->Len = 0x2B;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->GenFlag = 0;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->SpecificFlag = 0;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->AddrSpaceGranularity = 0;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->AddrRangeMin = BusStart;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->AddrRangeMax = BusReserve;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->AddrTranslationOffset = 0;
+ ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp)->AddrLen = BusEnd - BusStart + 1;
+
+ Temp = Temp + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);
+ ((EFI_ACPI_END_TAG_DESCRIPTOR *) Temp)->Desc = ACPI_END_TAG_DESCRIPTOR;
+ ((EFI_ACPI_END_TAG_DESCRIPTOR *) Temp)->Checksum = 0x0;
+
+ *Configuration = Buffer;
+ return EFI_SUCCESS;
+ }
+
+ List = List->ForwardLink;
+ }
+
+ return EFI_INVALID_PARAMETER;
+}
+
+/**
+
+ This function programs the PCI Root Bridge hardware so that
+ it decodes the specified PCI bus range.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle The PCI Root Bridge whose bus range is to be programmed.
+ @param Configuration The pointer to the PCI bus resource descriptor.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_INVALID_PARAMETER Wrong parameters passed in.
+
+**/
+EFI_STATUS
+EFIAPI
+SetBusNumbers (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN VOID *Configuration
+ )
+{
+ LIST_ENTRY *List;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ UINT8 *Ptr;
+ UINTN BusStart;
+ UINTN BusEnd;
+ UINTN BusLen;
+
+ if (Configuration == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Ptr = Configuration;
+
+ //
+ // Check the Configuration is valid
+ //
+ if (*Ptr != ACPI_ADDRESS_SPACE_DESCRIPTOR) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Ptr)->ResType != ACPI_ADDRESS_SPACE_TYPE_BUS) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);
+ if (*Ptr != ACPI_END_TAG_DESCRIPTOR) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ List = HostBridge->RootBridges.ForwardLink;
+ Ptr = Configuration;
+
+ while (List != &HostBridge->RootBridges) {
+
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ if (RootBridgeHandle == RootBridge->Handle) {
+ BusStart = (UINTN) ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Ptr)->AddrRangeMin;
+ BusLen = (UINTN) ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Ptr)->AddrLen;
+ BusEnd = BusStart + BusLen - 1;
+
+ if (BusStart > BusEnd) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if ((BusStart < RootBridge->Aperture.BusBase) || (BusEnd > RootBridge->Aperture.BusLimit)) {
+ return EFI_INVALID_PARAMETER;
+ }
+ //
+ // Update the Bus Range
+ //
+ RootBridge->ResAllocNode[TypeBus].Base = BusStart;
+ RootBridge->ResAllocNode[TypeBus].Length = BusLen + RootBridge->Aperture.BusReserve;
+ RootBridge->ResAllocNode[TypeBus].Status = ResAllocated;
+ RootBridge->BusScanCount++;
+ if (RootBridge->BusScanCount > 0) {
+ //
+ // Only care about the 2nd PCI bus scanning
+ //
+ RootBridge->BusNumberAssigned = TRUE;
+ }
+
+ return EFI_SUCCESS;
+ }
+
+ List = List->ForwardLink;
+ }
+
+ return EFI_INVALID_PARAMETER;
+}
+
+
+/**
+
+ Submits the I/O and memory resource requirements for the specified PCI Root Bridge.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle The PCI Root Bridge whose I/O and memory resource requirements.
+ are being submitted.
+ @param Configuration The pointer to the PCI I/O and PCI memory resource descriptor.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_INVALID_PARAMETER Wrong parameters passed in.
+**/
+EFI_STATUS
+EFIAPI
+SubmitResources (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN VOID *Configuration
+ )
+{
+ LIST_ENTRY *List;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ UINT8 *Temp;
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *ptr;
+ UINT64 AddrLen;
+ UINT64 Alignment;
+ UINT64 Value;
+
+ //
+ // Check the input parameter: Configuration
+ //
+ if (Configuration == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ List = HostBridge->RootBridges.ForwardLink;
+
+ Temp = (UINT8 *) Configuration;
+ while (List != &HostBridge->RootBridges) {
+
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ if (RootBridgeHandle == RootBridge->Handle) {
+ //
+ // Check the resource descriptors.
+ // If the Configuration includes one or more invalid resource descriptors, all the resource
+ // descriptors are ignored and the function returns EFI_INVALID_PARAMETER.
+ //
+ for (; *Temp == ACPI_ADDRESS_SPACE_DESCRIPTOR; Temp += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR)) {
+
+ ptr = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp;
+ //DEBUG ((DEBUG_ERROR, " ptr->ResType:%x", ptr->ResType));
+ //DEBUG ((DEBUG_ERROR, " ptr->AddrLen:0x%llX AddrRangeMin:0x%llX AddrRangeMax:0x%llX\n",ptr->AddrLen,ptr->AddrRangeMin,ptr->AddrRangeMax));
+ //
+ // A zero-length resource request indicates the PCI root bridge doesn't require
+ // any resources. Skip the check and proceed to the next descriptor.
+ //
+ if (ptr->AddrLen == 0) {
+ continue;
+ }
+
+ switch (ptr->ResType) {
+ case ACPI_ADDRESS_SPACE_TYPE_MEM:
+ if (ptr->AddrSpaceGranularity != 32 && ptr->AddrSpaceGranularity != 64) {
+
+ DEBUG ((DEBUG_ERROR, "[PCI] ERROR: Inavlid granularity %d for resource type %d\n",
+ ptr->AddrSpaceGranularity, ptr->ResType));
+ return EFI_INVALID_PARAMETER;
+ }
+ if (ptr->AddrSpaceGranularity == 32 && ptr->AddrLen > 0xffffffff) {
+
+ DEBUG ((DEBUG_ERROR, "[PCI] ERROR: Inavlid granularity %d for resource type %d of size 0x%llX\n",
+ ptr->AddrSpaceGranularity, ptr->ResType, ptr->AddrLen));
+ return EFI_INVALID_PARAMETER;
+ }
+ //
+ // If the PCI root bridge does not support separate windows for nonprefetchable and
+ // prefetchable memory, then the PCI bus driver needs to include requests for
+ // prefetchable memory in the nonprefetchable memory pool.
+ //
+ if ((RootBridge->AllocationAttributes & EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM) != 0 &&
+ ((ptr->SpecificFlag & (BIT2 | BIT1)) != 0)) {
+ return EFI_INVALID_PARAMETER;
+ }
+ case ACPI_ADDRESS_SPACE_TYPE_IO:
+ //
+ // Check alignment, it should be of the form 2^n-1
+ //
+ Value = Power2MaxMemory (ptr->AddrRangeMax + 1);
+ if (Value != (ptr->AddrRangeMax + 1)) {
+ CpuDeadLoop();
+ return EFI_INVALID_PARAMETER;
+ }
+ break;
+ case ACPI_ADDRESS_SPACE_TYPE_BUS:
+ default:
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+ if (*Temp != ACPI_END_TAG_DESCRIPTOR) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Temp = (UINT8 *) Configuration;
+ for (; *Temp == ACPI_ADDRESS_SPACE_DESCRIPTOR; Temp += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR)) {
+ ptr = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp;
+
+ //
+ // If a PCI root bridge does not require any resources, a zero-length resource
+ // request must be explicitly submitted.
+ //
+ if (ptr->AddrLen == 0) {
+ HostBridge->ResourceSubmited = TRUE;
+ continue;
+ }
+
+ switch (ptr->ResType) {
+ case ACPI_ADDRESS_SPACE_TYPE_MEM:
+ AddrLen = (UINT64) ptr->AddrLen;
+ Alignment = (UINT64) ptr->AddrRangeMax;
+ if (ptr->AddrSpaceGranularity == 32) {
+ if (ptr->SpecificFlag == 0x06) {
+ //
+ // Apply from GCD
+ //
+ RootBridge->ResAllocNode[TypePMem32].Status = ResSubmitted;
+ } else {
+ RootBridge->ResAllocNode[TypeMem32].Length = AddrLen;
+ RootBridge->ResAllocNode[TypeMem32].Alignment = Alignment;
+ RootBridge->ResAllocNode[TypeMem32].Status = ResRequested;
+ HostBridge->ResourceSubmited = TRUE;
+ }
+ }
+
+ if (ptr->AddrSpaceGranularity == 64) {
+ if (ptr->SpecificFlag == 0x06) {
+ RootBridge->ResAllocNode[TypePMem64].Status = ResSubmitted;
+ } else {
+ RootBridge->ResAllocNode[TypeMem64].Length = AddrLen;
+ RootBridge->ResAllocNode[TypeMem64].Alignment = Alignment;
+ RootBridge->ResAllocNode[TypeMem64].Status = ResSubmitted;
+ HostBridge->ResourceSubmited = TRUE;
+ }
+ }
+ break;
+
+ case ACPI_ADDRESS_SPACE_TYPE_IO:
+ AddrLen = (UINT64) ptr->AddrLen;
+ Alignment = (UINT64) ptr->AddrRangeMax;
+ RootBridge->ResAllocNode[TypeIo].Length = AddrLen;
+ RootBridge->ResAllocNode[TypeIo].Alignment = Alignment;
+ RootBridge->ResAllocNode[TypeIo].Status = ResRequested;
+ HostBridge->ResourceSubmited = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return EFI_SUCCESS;
+ }
+ List = List->ForwardLink;
+ }
+
+ return EFI_INVALID_PARAMETER;
+}
+
+/**
+
+ This function returns the proposed resource settings for the specified
+ PCI Root Bridge.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle The PCI Root Bridge handle.
+ @param Configuration The pointer to the pointer to the PCI I/O
+ and memory resource descriptor.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_OUT_OF_RESOURCES Not enough pool to be allocated.
+ @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid handle.
+
+**/
+EFI_STATUS
+EFIAPI
+GetProposedResources (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT VOID **Configuration
+ )
+{
+ LIST_ENTRY *List;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ UINTN Index;
+ UINTN Number;
+ VOID *Buffer;
+ UINT8 *Temp;
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *ptr;
+ EFI_STATUS Status;
+ UINT64 ResStatus;
+
+ Buffer = NULL;
+ Number = 0;
+ //
+ // Get the Host Bridge Instance from the resource allocation protocol
+ //
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ List = HostBridge->RootBridges.ForwardLink;
+
+ //
+ // Enumerate the root bridges in this Host bridge
+ //
+ while (List != &HostBridge->RootBridges) {
+
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ if (RootBridgeHandle == RootBridge->Handle) {
+ for (Index = 0; Index < TypeBus; Index++) {
+ if (RootBridge->ResAllocNode[Index].Status != ResNone) {
+ Number++;
+ }
+ }
+
+ Status = gBS->AllocatePool (
+ EfiBootServicesData,
+ Number * sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR),
+ &Buffer
+ );
+
+ if (EFI_ERROR (Status)) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ ZeroMem (Buffer, sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) * Number + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));
+
+ Temp = Buffer;
+ for (Index = 0; Index < TypeBus; Index++) {
+ if (RootBridge->ResAllocNode[Index].Status != ResNone) {
+ ptr = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp;
+ ResStatus = RootBridge->ResAllocNode[Index].Status;
+
+ switch (Index) {
+
+ case TypeIo:
+ //
+ // Io
+ //
+ ptr->Desc = 0x8A;
+ ptr->Len = 0x2B;
+ ptr->ResType = 1;
+ ptr->GenFlag = 0;
+ ptr->SpecificFlag = 0;
+ ptr->AddrRangeMin = RootBridge->ResAllocNode[Index].Base;
+ ptr->AddrRangeMax = 0;
+ ptr->AddrTranslationOffset = (ResStatus == ResAllocated) ? EFI_RESOURCE_SATISFIED : EFI_RESOURCE_LESS;
+ ptr->AddrLen = RootBridge->ResAllocNode[Index].Length;
+ break;
+
+ case TypeMem32:
+ //
+ // Memory 32
+ //
+ ptr->Desc = 0x8A;
+ ptr->Len = 0x2B;
+ ptr->ResType = 0;
+ ptr->GenFlag = 0;
+ ptr->SpecificFlag = 0;
+ ptr->AddrSpaceGranularity = 32;
+ ptr->AddrRangeMin = RootBridge->ResAllocNode[Index].Base;
+ ptr->AddrRangeMax = 0;
+ ptr->AddrTranslationOffset = (ResStatus == ResAllocated) ? EFI_RESOURCE_SATISFIED : EFI_RESOURCE_LESS;
+ ptr->AddrLen = RootBridge->ResAllocNode[Index].Length;
+ break;
+
+ case TypePMem32:
+ //
+ // Prefetch memory 32
+ //
+ ptr->Desc = 0x8A;
+ ptr->Len = 0x2B;
+ ptr->ResType = 0;
+ ptr->GenFlag = 0;
+ ptr->SpecificFlag = 6;
+ ptr->AddrSpaceGranularity = 32;
+ ptr->AddrRangeMin = 0;
+ ptr->AddrRangeMax = 0;
+ ptr->AddrTranslationOffset = EFI_RESOURCE_NONEXISTENT;
+ ptr->AddrLen = 0;
+ break;
+
+ case TypeMem64:
+ //
+ // Memory 64
+ //
+ ptr->Desc = 0x8A;
+ ptr->Len = 0x2B;
+ ptr->ResType = 0;
+ ptr->GenFlag = 0;
+ ptr->SpecificFlag = 0;
+ ptr->AddrSpaceGranularity = 64;
+ ptr->AddrRangeMin = RootBridge->ResAllocNode[Index].Base;
+ ptr->AddrRangeMax = 0;
+ ptr->AddrTranslationOffset = (ResStatus == ResAllocated) ? EFI_RESOURCE_SATISFIED : EFI_RESOURCE_LESS;
+ ptr->AddrLen = RootBridge->ResAllocNode[Index].Length;
+ break;
+
+ case TypePMem64:
+ //
+ // Prefetch memory 64
+ //
+ ptr->Desc = 0x8A;
+ ptr->Len = 0x2B;
+ ptr->ResType = 0;
+ ptr->GenFlag = 0;
+ ptr->SpecificFlag = 6;
+ ptr->AddrSpaceGranularity = 64;
+ ptr->AddrRangeMin = 0;
+ ptr->AddrRangeMax = 0;
+ ptr->AddrTranslationOffset = EFI_RESOURCE_NONEXISTENT;
+ ptr->AddrLen = 0;
+ break;
+ default:
+ DEBUG ((EFI_D_INFO, "default case.\n")); //Auto added. Please review.
+ break;
+ }
+
+ Temp += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);
+ }
+ }
+
+ ((EFI_ACPI_END_TAG_DESCRIPTOR *) Temp)->Desc = 0x79;
+ ((EFI_ACPI_END_TAG_DESCRIPTOR *) Temp)->Checksum = 0x0;
+
+ *Configuration = Buffer;
+
+ return EFI_SUCCESS;
+ }
+
+ List = List->ForwardLink;
+ }
+
+ return EFI_INVALID_PARAMETER;
+}
+
+/**
+
+ This function is called for all the PCI controllers that the PCI
+ bus driver finds. Can be used to Preprogram the controller.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle The PCI Root Bridge handle.
+ @param PciAddress Address of the controller on the PCI bus.
+ @param Phase The Phase during resource allocation.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid handle.
+
+**/
+EFI_STATUS
+EFIAPI
+PreprocessController (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
+ )
+{
+ BOOLEAN RootBridgeFound;
+ LIST_ENTRY *List;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridge;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (RootBridgeHandle == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridgeFound = FALSE;
+ HostBridge = PCI_HOST_BRIDGE_FROM_THIS (This);
+ List = HostBridge->RootBridges.ForwardLink;
+
+ while (List != &HostBridge->RootBridges) {
+
+ RootBridge = ROOT_BRIDGE_FROM_LINK (List);
+ if (RootBridgeHandle == RootBridge->Handle) {
+ RootBridgeFound = TRUE;
+ break;
+ }
+ //
+ // Get next if have
+ //
+ List = List->ForwardLink;
+ }
+
+ if (RootBridgeFound == FALSE) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Calculate maximum memory length that can be fit to a mtrr.
+
+ @param MemoryLength - Input memory length.
+
+ @retval Returned Maximum length.
+
+**/
+UINT64
+Power2MaxMemory (
+ IN UINT64 MemoryLength
+ )
+{
+ UINT64 Result;
+
+ if (RShiftU64 (MemoryLength, 32)) {
+ Result = LShiftU64 ((UINT64) GetPowerOfTwo64 ((UINT32) RShiftU64 (MemoryLength, 32)), 32);
+ } else {
+ Result = (UINT64) GetPowerOfTwo64 ((UINT32) MemoryLength);
+ }
+
+ return Result;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h
new file mode 100644
index 0000000000..4c1b757952
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h
@@ -0,0 +1,300 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_HOST_BRIDGE_H_
+#define _PCI_HOST_BRIDGE_H_
+
+
+#include <PiDxe.h>
+#include <IndustryStandard/Acpi.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PciHostBridgeLib.h>
+#include <Protocol/PciHostBridgeResourceAllocation.h>
+#include <Protocol/IoMmu.h>
+
+#include "PciRootBridge.h"
+
+#define PCI_HOST_BRIDGE_SIGNATURE SIGNATURE_32 ('p', 'h', 'b', 'g')
+typedef struct {
+ UINTN Signature;
+ EFI_HANDLE Handle;
+ UINTN RootBridgeCount;
+ LIST_ENTRY RootBridges;
+ BOOLEAN ResourceSubmited;
+ BOOLEAN CanRestarted;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL ResAlloc;
+} PCI_HOST_BRIDGE_INSTANCE;
+
+#define PCI_HOST_BRIDGE_FROM_THIS(a) CR (a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)
+
+//
+// Driver Entry Point
+//
+/**
+
+ Entry point of this driver.
+
+ @param ImageHandle - Image handle of this driver.
+ @param SystemTable - Pointer to standard EFI system table.
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_DEVICE_ERROR - Fail to install PCI_ROOT_BRIDGE_IO protocol.
+
+**/
+EFI_STATUS
+EFIAPI
+InitializePciHostBridge (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ );
+
+//
+// HostBridge Resource Allocation interface
+//
+/**
+
+ Enter a certain phase of the PCI enumeration process.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance.
+ @param Phase The phase during enumeration.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_INVALID_PARAMETER Wrong phase parameter passed in.
+ @retval EFI_NOT_READY Resources have not been submitted yet.
+
+**/
+EFI_STATUS
+EFIAPI
+NotifyPhase (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase
+ );
+
+/**
+
+ Return the device handle of the next PCI root bridge that is associated with
+ this Host Bridge.
+
+ @param This The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle Returns the device handle of the next PCI Root Bridge.
+ On input, it holds the RootBridgeHandle returned by the most
+ recent call to GetNextRootBridge().The handle for the first
+ PCI Root Bridge is returned if RootBridgeHandle is NULL on input.
+
+ @retval EFI_SUCCESS Succeed.
+ @retval EFI_NOT_FOUND Next PCI root bridge not found.
+ @retval EFI_INVALID_PARAMETER Wrong parameter passed in.
+
+**/
+EFI_STATUS
+EFIAPI
+GetNextRootBridge (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN OUT EFI_HANDLE *RootBridgeHandle
+ );
+
+/**
+
+ Returns the attributes of a PCI Root Bridge.
+
+ @param This - The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ @param RootBridgeHandle - The device handle of the PCI Root Bridge
+ that the caller is interested in
+ @param Attributes - The pointer to attributes of the PCI Root Bridge
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_INVALID_PARAMETER - Attributes parameter passed in is NULL or
+ @retval RootBridgeHandle is not an EFI_HANDLE
+ @retval that was returned on a previous call to
+ @retval GetNextRootBridge().
+
+**/
+EFI_STATUS
+EFIAPI
+GetAttributes (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT UINT64 *Attributes
+ );
+
+/**
+
+ This is the request from the PCI enumerator to set up
+ the specified PCI Root Bridge for bus enumeration process.
+
+ @param This - The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle - The PCI Root Bridge to be set up.
+ @param Configuration - Pointer to the pointer to the PCI bus resource descriptor.
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough pool to be allocated.
+ @retval EFI_INVALID_PARAMETER - RootBridgeHandle is not a valid handle.
+
+**/
+EFI_STATUS
+EFIAPI
+StartBusEnumeration (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT VOID **Configuration
+ );
+
+/**
+
+ This function programs the PCI Root Bridge hardware so that
+ it decodes the specified PCI bus range.
+
+ @param This - The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle - The PCI Root Bridge whose bus range is to be programmed.
+ @param Configuration - The pointer to the PCI bus resource descriptor.
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_INVALID_PARAMETER - Wrong parameters passed in.
+
+**/
+EFI_STATUS
+EFIAPI
+SetBusNumbers (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN VOID *Configuration
+ );
+
+/**
+
+ Submits the I/O and memory resource requirements for the specified PCI Root Bridge.
+
+ @param This - The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ @param RootBridgeHandle - The PCI Root Bridge whose I/O and memory resource requirements
+ are being submitted
+ @param Configuration - The pointer to the PCI I/O and PCI memory resource descriptor
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_INVALID_PARAMETER - Wrong parameters passed in.
+
+**/
+EFI_STATUS
+EFIAPI
+SubmitResources (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN VOID *Configuration
+ );
+
+/**
+
+ This function returns the proposed resource settings for the specified
+ PCI Root Bridge.
+
+ @param This - The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle - The PCI Root Bridge handle.
+ @param Configuration - The pointer to the pointer to the PCI I/O
+ and memory resource descriptor.
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough pool to be allocated.
+ @retval EFI_INVALID_PARAMETER - RootBridgeHandle is not a valid handle.
+
+**/
+EFI_STATUS
+EFIAPI
+GetProposedResources (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT VOID **Configuration
+ );
+
+/**
+
+ This function is called for all the PCI controllers that the PCI
+ bus driver finds. Can be used to Preprogram the controller.
+
+ @param This - The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance.
+ @param RootBridgeHandle - The PCI Root Bridge handle.
+ @param PciAddress - Address of the controller on the PCI bus.
+ @param Phase - The Phase during resource allocation.
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_INVALID_PARAMETER - RootBridgeHandle is not a valid handle.
+
+**/
+EFI_STATUS
+EFIAPI
+PreprocessController (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
+ );
+
+//
+// Host Bridge Silicon specific hooks
+//
+/**
+
+ Returns the Allocation attributes for the BNB Root Bridge.
+
+ @param RootBridgeIndex - The root bridge number. 0 based.
+
+ @retval EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM | EFI_PCI_HOST_BRIDGE_MEM64_DECODE
+
+**/
+UINT64
+GetAllocAttributes (
+ IN UINTN RootBridgeIndex
+ )
+;
+
+/**
+
+ Returns memory apertures for the BNB Root Bridge.
+
+ @param PciRootBridgeIo - Pointer to Efi Pci root bridge Io protocol interface instance.
+ @param Mem32Base - Pointer to 32 bit memory base. This is the lowest 32 bit memory address
+ that is decoded by the Host Bridge.
+ @param Mem32Limit - Pointer to 32 bit memory limit.This is the highest 32 bit memory address
+ that is decoded by the Host Bridge. The size of the 32 bit window is
+ (Mem32Limit - Mem32base + 1).
+ @param Mem64Base - Pointer to 64 bit memory base. This is the lowest 64 bit memory address
+ that is decoded by the Host Bridge.
+ @param Mem64Limit - Pointer to 64 bit memory limit.This is the highest 64 bit memory address
+ that is decoded by the Host Bridge. The size of the 64 bit window is
+ (Mem64Limit - Mem64base + 1). Set Mem64Limit < Mem64Base if the Host bridge
+ does not support 64 bit memory addresses.
+
+ @retval EFI_SUCCESS - Success.
+
+**/
+EFI_STATUS
+GetHostBridgeMemApertures (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
+ OUT UINT32 *Mem32Base,
+ OUT UINT32 *Mem32Limit,
+ OUT UINT64 *Mem64Base,
+ OUT UINT64 *Mem64Limit
+ );
+
+/**
+
+ Calculate maximum memory length that can be fit to a mtrr.
+
+ @param MemoryLength - Input memory length.
+
+ @retval Returned Maximum length.
+
+**/
+UINT64
+Power2MaxMemory (
+ IN UINT64 MemoryLength
+ );
+
+extern EDKII_IOMMU_PROTOCOL *mIoMmu;
+
+#endif // _PCI_HOST_BRIDGE_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
new file mode 100644
index 0000000000..faea9726f7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
@@ -0,0 +1,69 @@
+## @file
+#
+# @copyright
+# Copyright 2009 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PciHostBridge
+ FILE_GUID = D58EBCE1-AF26-488d-BE66-C164417F8C13
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = InitializePciHostBridge
+
+[Sources]
+ PciHostBridge.h
+ PciRootBridge.h
+ PciHostBridge.c
+ PciRootBridgeIo.c
+ PciHostBridgeSupport.c
+ PciHostResource.h
+ PciRebalance.c
+ PciRebalanceIo.c
+ PciRebalanceMmio32.c
+ PciRebalanceMmio64.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/Cpu/CpuRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ DebugLib
+ DxeServicesTableLib
+ DevicePathLib
+ BaseMemoryLib
+ BaseLib
+ UefiLib
+ TimerLib
+ SetupLib
+
+[Protocols]
+ gEfiCpuIo2ProtocolGuid ## CONSUMES
+ gEfiDevicePathProtocolGuid ## BY_START
+ gEfiPciRootBridgeIoProtocolGuid ## BY_START
+ gEfiPciHostBridgeResourceAllocationProtocolGuid ## BY_START
+ gEdkiiIoMmuProtocolGuid ## SOMETIMES_CONSUMES
+ gEfiIioUdsProtocolGuid
+ gDynamicSiLibraryProtocolGuid ## CONSUMES
+
+[Guids]
+ gEfiSocketPciResourceDataGuid
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Depex]
+ gEfiCpuIo2ProtocolGuid AND
+ gEfiIioUdsProtocolGuid AND
+ gDynamicSiLibraryProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c
new file mode 100644
index 0000000000..fe3f274f1f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c
@@ -0,0 +1,127 @@
+/** @file
+ Do platform initialization for PCI bridge.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PciHostBridge.h"
+
+//
+// The default latency for controllers
+//
+#define DEFAULT_PCI_LATENCY 0x20
+
+
+EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo;
+
+/**
+
+ This function is called for all the PCI controllers that the PCI
+ bus driver finds. Can be used to Preprogram the controller.
+
+ @param This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ @param RootBridgeHandle -- The PCI Root Bridge handle
+ @param PciBusAddress -- Address of the controller on the PCI bus
+ @param Phase -- The Phase during resource allocation
+
+ @retval EFI_SUCCESS
+
+**/
+EFI_STATUS
+ChipsetPreprocessController (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
+ )
+{
+
+ EFI_STATUS Status;
+ UINT8 Latency;
+ UINT8 CacheLineSize;
+
+ if (mPciRootBridgeIo == NULL) {
+ //
+ // Get root bridge in the system.
+ //
+ Status = gBS->HandleProtocol (RootBridgeHandle, &gEfiPciRootBridgeIoProtocolGuid, &mPciRootBridgeIo);
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ if (Phase == EfiPciBeforeResourceCollection) {
+ //
+ // Program the latency register, CLS register
+ //
+ PciAddress.Register = PCI_LATENCY_TIMER_OFFSET;
+ mPciRootBridgeIo->Pci.Read (
+ mPciRootBridgeIo,
+ EfiPciWidthUint8,
+ *((UINT64 *) &PciAddress),
+ 1,
+ &Latency
+ );
+
+ //
+ // PCI-x cards come up with a default latency of 0x40. Don't touch them.
+ //
+ if (Latency == 0) {
+ Latency = DEFAULT_PCI_LATENCY;
+ mPciRootBridgeIo->Pci.Write (
+ mPciRootBridgeIo,
+ EfiPciWidthUint8,
+ *((UINT64 *) &PciAddress),
+ 1,
+ &Latency
+ );
+ }
+ //
+ // Program Cache Line Size as 64bytes
+ // 16 of DWORDs = 64bytes (0x10)
+ //
+ PciAddress.Register = PCI_CACHELINE_SIZE_OFFSET;
+ CacheLineSize = 0x10;
+ mPciRootBridgeIo->Pci.Write (
+ mPciRootBridgeIo,
+ EfiPciWidthUint8,
+ *((UINT64 *) &PciAddress),
+ 1,
+ &CacheLineSize
+ );
+
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Returns the Allocation attributes for the BNB Root Bridge.
+
+ @param RootBridgeIndex - The root bridge number. 0 based.
+
+ @retval EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM | EFI_PCI_HOST_BRIDGE_MEM64_DECODE
+
+**/
+UINT64
+GetAllocAttributes (
+ IN UINTN RootBridgeIndex
+ )
+{
+ //
+ // Cannot have more than one Root bridge
+ //
+ //ASSERT (RootBridgeIndex == 0);
+
+ //
+ // PCI Root Bridge does not support separate windows for Non-prefetchable
+ // and Prefetchable memory. A PCI bus driver needs to include requests for
+ // Prefetchable memory in the Non-prefetchable memory pool.
+ // Further TNB does not support 64 bit memory apertures for PCI. BNB
+ // can only have system memory above 4 GB,
+ //
+
+ return EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM | EFI_PCI_HOST_BRIDGE_MEM64_DECODE;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h
new file mode 100644
index 0000000000..dd95e9773f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h
@@ -0,0 +1,62 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_HOST_RESOURCE_H_
+#define _PCI_HOST_RESOURCE_H_
+
+#include <PiDxe.h>
+#include <UncoreCommonIncludes.h>
+
+#define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFF
+#define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFE
+
+typedef struct {
+ UINTN BusBase;
+ UINTN BusLimit;
+ UINTN BusReserve;
+
+ UINT32 Mem32Base;
+ UINT32 Mem32Limit;
+
+ UINT64 Mem64Base;
+ UINT64 Mem64Limit;
+
+ UINTN IoBase;
+ UINTN IoLimit;
+} PCI_ROOT_BRIDGE_RESOURCE_APERTURE;
+
+typedef enum {
+ TypeIo = 0,
+ TypeMem32,
+ TypePMem32,
+ TypeMem64,
+ TypePMem64,
+ TypeBus,
+ TypeMax
+} PCI_RESOURCE_TYPE;
+
+typedef enum {
+ ResNone,
+ ResSubmitted,
+ ResRequested,
+ ResAllocated,
+ ResStatusMax
+} RES_STATUS;
+
+typedef struct {
+ PCI_RESOURCE_TYPE Type;
+ //
+ // Base is a host address
+ //
+ UINT64 Base;
+ UINT64 Length;
+ UINT64 Alignment;
+ RES_STATUS Status;
+} PCI_RES_NODE;
+
+#endif // _PCI_HOST_RESOURCE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c
new file mode 100644
index 0000000000..b32f0bf835
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c
@@ -0,0 +1,1356 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Guid/SocketPciResourceData.h>
+#include <Guid/SocketIioVariable.h>
+#include "PciHostBridge.h"
+#include "PciRootBridge.h"
+#include <CpuAndRevisionDefines.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Protocol/IioUds.h>
+
+#include "PciRebalance.h"
+
+
+/******************************************************************************
+ * Local definitions.
+ ******************************************************************************/
+extern CHAR16 *mAcpiAddressSpaceTypeStr[];
+extern CHAR16 *mPciResourceTypeStr[];
+
+extern EFI_IIO_UDS_PROTOCOL *mIioUds;
+
+/******************************************************************************
+ * Variables.
+ ******************************************************************************/
+/**
+ * The table below is a cache with pointers to protocol instances created at
+ * Host Bridge initialization. It also provides mapping of protocol instance
+ * to the PCI stack.
+ */
+PCI_ROOT_BRIDGE_INSTANCE *mPciRootBridgeTable[MAX_SOCKET][MAX_LOGIC_IIO_STACK] = {0};
+PCI_ROOT_BRIDGE_INSTANCE *mPciRootBridgeTableReserved[MAX_SOCKET][IIO_RESERVED_1] = {0};
+
+
+/******************************************************************************
+ * Functions.
+ ******************************************************************************/
+
+/**
+ Find socket and stack index for given PCI Root Bridge protocol pointer.
+
+ @param[out] PciResConfigPtr - Buffer for the resource configuration variable.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND The variable was not found.
+ @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
+ @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure.
+**/
+EFI_STATUS
+PciRootBridge2SocketStack (
+ IN PCI_ROOT_BRIDGE_INSTANCE *RootBridgePtr,
+ OUT UINT8 *SocketPtr,
+ OUT UINT8 *StackPtr
+ )
+{
+ UINT8 Socket;
+ UINT8 Stack;
+
+ if (RootBridgePtr != NULL) {
+
+ for (Socket = 0; Socket < NELEMENTS(mPciRootBridgeTable); Socket++) {
+
+ for (Stack = 0; Stack < NELEMENTS(mPciRootBridgeTable[Socket]); Stack++) {
+
+ if (mPciRootBridgeTable[Socket][Stack] == RootBridgePtr) {
+ if (SocketPtr != NULL) {
+ *SocketPtr = Socket;
+ }
+ if (StackPtr != NULL) {
+ *StackPtr = Stack;
+ }
+ return EFI_SUCCESS;
+ }
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Determine the last stack for a given socket
+
+ @param Socket the socket for which the last socket is desired
+
+ @return the number of the last socket
+*/
+UINT8
+LastStackOfSocket (
+ UINT8 Socket
+ )
+{
+ UINT8 LastStack;
+ BOOLEAN FoundEnabledStack;
+ UINT8 Stack;
+
+ ASSERT (Socket < ARRAY_SIZE(mIioUds->IioUdsPtr->PlatformData.IIO_resource));
+ ASSERT (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid);
+
+ FoundEnabledStack = FALSE;
+ LastStack = 0;
+
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+ if (mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack)) {
+ LastStack = Stack;
+ FoundEnabledStack = TRUE;
+ }
+ }
+
+ ASSERT (FoundEnabledStack);
+ return LastStack;
+}
+
+
+/**
+ Determine the last stack for a given socket with resources
+
+ @param SocketResources - CPU_RESOURCE structure pointer that stores all resources need per stack
+ @param Socket - Index of the Socket
+ @param ResourceType - Type of resource that requires alignment
+ @param LastStack - Pointer that will store the value of the last stack with resources allocated to it
+ @param ResourceSize - Pointer that will store the sum of the requested resource type
+
+ @return The last stack with resources allocated to it and the
+ total amount of resoures requested of the type
+ requested.
+*/
+VOID
+LastStackWithResources (
+ IN CPU_RESOURCE *SocketResources,
+ IN UINT8 Socket,
+ IN PCI_RESOURCE_TYPE ResourceType,
+ OUT UINT8 *LastStack,
+ OUT UINT64 *ResourceSize
+ )
+{
+ UINT8 Stack;
+
+ *LastStack = 0;
+ *ResourceSize = 0;
+
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+
+ switch (ResourceType) {
+ case TypeIo:
+ if (SocketResources->StackRes[Stack].NumIoPortsDesired != 0) {
+ *ResourceSize += SocketResources->StackRes[Stack].NumIoPortsDesired + 1;
+ *LastStack = Stack;
+ }
+ break;
+ case TypeMem32:
+ if (SocketResources->StackRes[Stack].MmiolLength != 0) {
+ *ResourceSize += SocketResources->StackRes[Stack].MmiolLength + 1;
+ *LastStack = Stack;
+ }
+ break;
+ case TypeMem64:
+ if (SocketResources->StackRes[Stack].MmiohLength != 0) {
+ *ResourceSize += SocketResources->StackRes[Stack].MmiohLength + 1;
+ *LastStack = Stack;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+
+/**
+ Visit all stacks in this socket and recalculate the resource ranges per stack based on resource
+ needs from PCI/PCIe device/functions.
+
+ @param SocketResources - CPU_RESOURCE structure pointer that stores all resources need per stack
+ @param Socket - Index of the Socket
+ @param ResourceType - type of resource that requires alignment
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough resources to be adjusted within the socket.
+**/
+EFI_STATUS
+AdjustResources (
+ CPU_RESOURCE *SocketResources,
+ UINT8 Socket,
+ UINT8 ResourceType
+ )
+{
+ UINT8 Stack;
+ UINT64 NewLength;
+ CONST UINT8 LastStack = LastStackOfSocket (Socket);
+ UINT64 PreviousLimit;
+ BOOLEAN FirstStack = TRUE;
+
+ switch (ResourceType) {
+ case TypeIo:
+ // Return if IoResourceNeeds is not zero which indicates a socket adjustment is needed
+ if(SocketResources->IoResourceNeeds != 0){
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))){
+ continue;
+ }
+ //
+ // For the first enabled stack, use the base I/O address for the socket, otherwise
+ // calculate the new base based off the last enabled stack
+ //
+ if (FirstStack) {
+ // stackPresentBitmap doesn't cover if a valid stack was disable due to resource adjustments.
+ // Start with valid resources for current socket
+ SocketResources->StackRes[Stack].IoBase = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].PciResourceIoBase;
+ FirstStack = FALSE;
+ } else {
+ // Check to see if the previous stack is disabled by checking for equal base and limit
+ if (SocketResources->StackRes[Stack-1].IoBase == SocketResources->StackRes[Stack-1].IoLimit) {
+ if (PreviousLimit % 2 == 1) {
+ PreviousLimit += 1;
+ }
+ SocketResources->StackRes[Stack].IoBase = (UINT16) PreviousLimit;
+ } else {
+ SocketResources->StackRes[Stack].IoBase = (UINT16) PreviousLimit + 1;
+ }
+ }
+
+ NewLength = SocketResources->StackRes[Stack].NumIoPortsDesired;
+
+ //
+ //assign the left space to the last IIO stack. Reserved for across socket resource adjustment.
+ //make adjustments if NewLength is zero
+ //
+ if (Stack == LastStack) {
+ if (NewLength != 0) {
+ if (SocketResources->IoResourcesLeft != 0) {
+ NewLength += SocketResources->IoResourcesLeft + 1;
+ }
+ } else {
+ NewLength = SocketResources->IoResourcesLeft;
+ }
+ }
+
+ SocketResources->StackRes[Stack].NeedIoUpdate = TRUE;
+ SocketResources->StackRes[Stack].IoLimit = (UINT16)(SocketResources->StackRes[Stack].IoBase + NewLength);
+ PreviousLimit = SocketResources->StackRes[Stack].IoLimit;
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].IoBase =%x newLength = %x\n",Socket,Stack,SocketResources->StackRes[Stack].IoBase,NewLength));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].IoLimit =%x\n",Socket,Stack,SocketResources->StackRes[Stack].IoLimit));
+ }
+ break;
+
+ case TypeMem32:
+ //
+ // Return if MmiolResourceNeeds is not zero which indicates a socket adjustment is needed
+ //
+ if (SocketResources->MmiolResourceNeeds != 0) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ //
+ // Visit all Stacks in this Socket and recalculate the New Mem32 Ranges per Stack
+ //
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++){
+
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ //
+ // For the first enabled stack, use the base low mmio address for the socket, otherwize
+ // calculate the new base based off the last enabled stack
+ //
+ if (FirstStack) {
+ // stackPresentBitmap doesn't cover if a valid stack was disable due to resource adjustments.
+ // Start with valid resources for current socket
+ SocketResources->StackRes[Stack].MmiolBase = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio32Base;
+ FirstStack = FALSE;
+ } else {
+ // Check to see if the previous stack is disabled by checking for equal base and limit
+ if (SocketResources->StackRes[Stack-1].MmiolBase == SocketResources->StackRes[Stack-1].MmiolLimit) {
+ if (PreviousLimit % 2 == 1) {
+ PreviousLimit += 1;
+ }
+ SocketResources->StackRes[Stack].MmiolBase = (UINT32) PreviousLimit;
+ } else {
+ SocketResources->StackRes[Stack].MmiolBase = (UINT32) PreviousLimit + 1;
+ }
+ }
+ //
+ // Verify if this Stack is the one that requires an update and calculate the new Limit
+ // otherwise assign the new limit based on the Chunk and Extra Chunk calculation and assign the Newlength
+ //
+ NewLength = SocketResources->StackRes[Stack].MmiolLength;
+ //
+ //assign the left space to the last IIO stack. Reserved for across socket resource adjustment.
+ //make adjustments if NewLength is zero
+ //
+ if (Stack == LastStack) {
+ if (NewLength != 0) {
+ if (SocketResources->MmiolResourcesLeft){
+ NewLength += SocketResources->MmiolResourcesLeft + 1;
+ }
+ } else {
+ NewLength = SocketResources->MmiolResourcesLeft;
+ }
+ }
+
+ SocketResources->StackRes[Stack].MmiolUpdate = 1;
+ SocketResources->StackRes[Stack].MmiolLimit = (UINT32)(SocketResources->StackRes[Stack].MmiolBase + NewLength);
+ PreviousLimit = SocketResources->StackRes[Stack].MmiolLimit;
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiolBase =%x newLength = %x\n",Socket,Stack,SocketResources->StackRes[Stack].MmiolBase,NewLength));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiolLimit =%x\n",Socket,Stack,SocketResources->StackRes[Stack].MmiolLimit));
+ }
+ break;
+
+ case TypeMem64:
+ // Return if MmiohResourceNeeds is not zero which indicates a socket adjustment is needed
+ if (SocketResources->MmiohResourceNeeds != 0){
+ return EFI_OUT_OF_RESOURCES;
+ }
+ //
+ // Visit all Stacks in this Socket and recalculate the New Mem64 Ranges per Stack
+ //
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+
+ if(!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))){
+ continue;
+ }
+ //
+ // For the first enabled stack, use the base high mmio address for the socket, otherwise
+ // calculate the new base based off the last enabled stack
+ //
+ if (FirstStack) {
+ // stackPresentBitmap doesn't cover if a valid stack was disable due to resource adjustments.
+ // Start with valid resources for current socket
+ SocketResources->StackRes[Stack].MmiohBase = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio64Base;
+ FirstStack = FALSE;
+ } else {
+ // Check to see if the previous stack is disabled by checking for equal base and limit
+ if (SocketResources->StackRes[Stack-1].MmiohBase == SocketResources->StackRes[Stack-1].MmiohLimit) {
+ if (PreviousLimit % 2 == 1) {
+ PreviousLimit += 1;
+ }
+ SocketResources->StackRes[Stack].MmiohBase = PreviousLimit;
+ } else {
+ SocketResources->StackRes[Stack].MmiohBase = PreviousLimit + 1;
+ }
+ }
+
+ //
+ // Verify if this Stack is the one that requires an update and calculate the new Limit
+ // otherwise assign the new limit based on the Chunk and Extra Chunk calculation and assign the Newlength
+ //
+
+ NewLength = SocketResources->StackRes[Stack].MmiohLength;
+
+ //
+ //assign the left space to the last IIO stack. Reserved for across socket resource adjustment.
+ //make adjustments if NewLength is zero
+ //
+ if (Stack == LastStack) {
+ if (NewLength != 0) {
+ if (SocketResources->MmiohResourcesLeft) {
+ NewLength += SocketResources->MmiohResourcesLeft + 1;
+ }
+ } else {
+ NewLength = SocketResources->MmiohResourcesLeft;
+ }
+ }
+
+ SocketResources->StackRes[Stack].MmiohUpdate = 1;
+ SocketResources->StackRes[Stack].MmiohLimit = (SocketResources->StackRes[Stack].MmiohBase + NewLength);
+ PreviousLimit = SocketResources->StackRes[Stack].MmiohLimit;
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiohBase =%lx newLength = %lx\n",Socket,Stack,SocketResources->StackRes[Stack].MmiohBase,NewLength));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiohLimit =%lx\n",Socket,Stack,SocketResources->StackRes[Stack].MmiohLimit));
+
+ } // for Stack
+ break;
+ default:
+ DEBUG((DEBUG_ERROR, "[PCI] ERROR: Resource Type Unknown = %x\n", ResourceType));
+ break;
+ }// switch
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Adjust resource ratio assignment among sockets to fit the resource needs from PCI devices.
+
+ @param SocketResources - CPU_RESOURCE structure pointer that stores all resources need per socket
+ @param ResourceType - type of resource that requires alignment
+ @param ValidSockets - Number of Valid Sockets, need it to calculate how resources need to be splitted
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough resources to be adjusted within the socket.
+**/
+EFI_STATUS
+AdjustSocketResources (
+ CPU_RESOURCE *SocketResources,
+ UINT8 ResourceType,
+ UINT8 ValidSockets
+ )
+{
+ EFI_STATUS Status;
+
+ switch(ResourceType){
+ case TypeIo:
+ Status = AdjustSocketIo (SocketResources, ResourceType, ValidSockets);
+ break;
+ case TypeMem32:
+ Status = AdjustSocketMmioL (SocketResources, ResourceType, ValidSockets);
+ break;
+ case TypeMem64:
+ Status = AdjustSocketMmioH (SocketResources, ResourceType, ValidSockets);
+ break;
+ default:
+ DEBUG((DEBUG_ERROR, "ERROR: Resource Type Unknown = %x\n",ResourceType));
+ Status = EFI_INVALID_PARAMETER;
+ break;
+ } // switch
+
+ return Status;
+}
+
+
+/**
+ Calculate current system resource map with retrieved NVRAM variable to see if stored settings were applied
+
+ @param[in] SocketPciResourceData - Pointer to stored CPU resource map
+
+ @retval TRUE - SYSTEM_PCI_BASE_LIMITS has been rejected and was not applied or not initialized
+ @retval FALSE - SYSTEM_PCI_BASE_LIMITS has been applied and still has relevant data
+**/
+BOOLEAN
+IsResourceMapRejected (
+ SYSTEM_PCI_BASE_LIMITS *SocketPciResourceData
+ )
+{
+ UINT8 Socket;
+ UINT8 Stack;
+ BOOLEAN Rejected = FALSE;
+ PCI_BASE_LIMITS *StackLimits;
+ PCI_BASE_LIMITS *UboxStackLimits;
+ PCI_BASE_LIMITS *SocketLimits;
+ STACK_RES *IioUdsUboxStackLimits;
+ STACK_RES *IioUdsStackLimits;
+ IIO_RESOURCE_INSTANCE *IioUdsSocketLimits;
+
+ if (SocketPciResourceData == NULL) {
+ return TRUE;
+ }
+ for (Socket = 0; Socket < MAX_SOCKET; Socket++) {
+
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid) {
+
+ IioUdsSocketLimits = &mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket];
+ SocketLimits = &SocketPciResourceData->Socket[Socket].SocketLimits;
+ IioUdsUboxStackLimits = &mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[UBOX_STACK];
+ UboxStackLimits = &SocketPciResourceData->Socket[Socket].StackLimits[UBOX_STACK];
+
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+
+ if (mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack)) {
+
+ IioUdsStackLimits = &mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack];
+ StackLimits = &SocketPciResourceData->Socket[Socket].StackLimits[Stack];
+ //
+ // Per stack
+ //
+ if (Socket == 0 && Stack == 0) {
+ // First base starts at zero, mIioUds struct reserves 4K of Io for legacy purposes
+ if (StackLimits->Io.Base != 0) {
+ Rejected = TRUE;
+ }
+ } else {
+ if (IioUdsStackLimits->PciResourceIoBase != StackLimits->Io.Base && StackLimits->Io.Base != 0) {
+ Rejected = TRUE;
+ }
+ }
+ if (IioUdsStackLimits->PciResourceIoLimit != StackLimits->Io.Limit && StackLimits->Io.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG ("[%d.%d] Current I/O: 0x%04X..0x%04X\n", Socket, Stack,
+ IioUdsStackLimits->PciResourceIoBase, IioUdsStackLimits->PciResourceIoLimit);
+ PCIDEBUG ("[%d.%d] Saved I/O: 0x%04X..0x%04X %a\n", Socket, Stack,
+ StackLimits->Io.Base, StackLimits->Io.Limit, Rejected ? "rejected" : "");
+
+ if (IioUdsStackLimits->Mmio32Base != StackLimits->LowMmio.Base && StackLimits->LowMmio.Base != 0) {
+ Rejected = TRUE;
+ }
+ if (IioUdsStackLimits->Mmio32Limit != StackLimits->LowMmio.Limit && StackLimits->LowMmio.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG ("[%d.%d] Current MMIOL: 0x%08X..0x%08X\n", Socket, Stack,
+ IioUdsStackLimits->Mmio32Base, IioUdsStackLimits->Mmio32Limit);
+ PCIDEBUG ("[%d.%d] Saved MMIOL: 0x%08X..0x%08X %a\n", Socket, Stack,
+ StackLimits->LowMmio.Base, StackLimits->LowMmio.Limit, Rejected ? "rejected" : "");
+
+ if (IioUdsStackLimits->Mmio64Base != StackLimits->HighMmio.Base && StackLimits->HighMmio.Base != 0) {
+ Rejected = TRUE;
+ }
+ if (IioUdsStackLimits->Mmio64Limit != StackLimits->HighMmio.Limit && StackLimits->HighMmio.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG ("[%d.%d] Current MMIOH: 0x%012llX..0x%012llX\n", Socket, Stack,
+ IioUdsStackLimits->Mmio64Base, IioUdsStackLimits->Mmio64Limit);
+ PCIDEBUG ("[%d.%d] Saved MMIOH: 0x%012llX..0x%012llX %a\n", Socket, Stack,
+ StackLimits->HighMmio.Base, StackLimits->HighMmio.Limit, Rejected ? "rejected" : "");
+ }
+ }
+ //
+ // Per socket
+ //
+ if (IioUdsSocketLimits->PciResourceIoBase != SocketLimits->Io.Base && SocketLimits->Io.Base != 0) {
+ Rejected = TRUE;
+ }
+ if (IioUdsSocketLimits->PciResourceIoLimit != SocketLimits->Io.Limit && SocketLimits->Io.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG("[%d] Current I/O: 0x%04X..0x%04X\n", Socket,
+ IioUdsSocketLimits->PciResourceIoBase, IioUdsSocketLimits->PciResourceIoLimit);
+ PCIDEBUG("[%d] Saved I/O: 0x%04X..0x%04X %a\n", Socket,
+ SocketLimits->Io.Base, SocketLimits->Io.Limit, Rejected ? "rejected" : "");
+
+ if (IioUdsSocketLimits->Mmio32Base != SocketLimits->LowMmio.Base && SocketLimits->LowMmio.Base != 0) {
+ Rejected = TRUE;
+ }
+ if (IioUdsSocketLimits->Mmio32Limit != SocketLimits->LowMmio.Limit && SocketLimits->LowMmio.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG ("[%d] Current MMIOL: 0x%08X..0x%08X\n", Socket,
+ IioUdsSocketLimits->Mmio32Base, IioUdsSocketLimits->Mmio32Limit);
+ PCIDEBUG ("[%d] Saved MMIOL: 0x%08X..0x%08X %a\n", Socket,
+ SocketLimits->LowMmio.Base, SocketLimits->LowMmio.Limit, Rejected ? "rejected" : "");
+
+ if (IioUdsSocketLimits->Mmio64Base != SocketLimits->HighMmio.Base && SocketLimits->HighMmio.Base != 0) {
+ Rejected = TRUE;
+ }
+ if (IioUdsSocketLimits->Mmio64Limit != SocketLimits->HighMmio.Limit && SocketLimits->HighMmio.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG ("[%d] Current MMIOH: 0x%012llX..0x%012llX\n", Socket,
+ IioUdsSocketLimits->Mmio64Base, IioUdsSocketLimits->Mmio64Limit);
+ PCIDEBUG ("[%d] Saved MMIOH: 0x%012llX..0x%012llX %a\n", Socket,
+ SocketLimits->HighMmio.Base, SocketLimits->HighMmio.Limit, Rejected ? "rejected" : "");
+
+ if (IioUdsUboxStackLimits->Mmio64Base != UboxStackLimits->HighMmio.Base && UboxStackLimits->HighMmio.Base != 0) {
+ Rejected = TRUE;
+ }
+ if (IioUdsUboxStackLimits->Mmio64Limit != UboxStackLimits->HighMmio.Limit && UboxStackLimits->HighMmio.Limit != 0) {
+ Rejected = TRUE;
+ }
+ PCIDEBUG ("[%d] Current UBOX: 0x%08X..0x%08X\n", Socket,
+ IioUdsUboxStackLimits->Mmio64Base, IioUdsUboxStackLimits->Mmio64Limit);
+ PCIDEBUG ("[%d] Saved UBOX: 0x%08X..0x%08X %a\n", Socket,
+ UboxStackLimits->HighMmio.Base, UboxStackLimits->HighMmio.Limit, Rejected ? "rejected" : "");
+ }
+ }
+ DEBUG ((DEBUG_INFO, "[PCI] Resource rebalance rejected ? %a\n", Rejected ? "TRUE" : "FALSE"));
+ return Rejected;
+}
+
+
+/**
+ Read SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME variable from flash and verify its content.
+
+ If the variable does not exist, or is not valid for current system configuration
+ the buffer at *PciResConfigPtr is just cleared.
+
+ @param[out] PciResConfigPtr - Buffer for the resource configuration variable.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND The variable was not found.
+ @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
+ @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure.
+**/
+EFI_STATUS
+PciHostReadResourceConfig (
+ OUT SYSTEM_PCI_BASE_LIMITS *PciResConfigPtr
+ )
+{
+ UINTN VarSize;
+ EFI_STATUS Status;
+ UINT8 Socket;
+
+ VarSize = sizeof(*PciResConfigPtr);
+ Status = gRT->GetVariable (SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME, &gEfiSocketPciResourceDataGuid,
+ NULL, &VarSize, PciResConfigPtr);
+ if (EFI_ERROR (Status) && Status != EFI_BUFFER_TOO_SMALL) {
+ goto ErrExit;
+ }
+ if (Status == EFI_BUFFER_TOO_SMALL || VarSize != sizeof(*PciResConfigPtr)) {
+
+ PCIDEBUG ("Got variable '%s' of unexpected size %d (expect %d) - overwrite\n",
+ SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME, VarSize, sizeof(*PciResConfigPtr));
+ Status = EFI_NOT_FOUND;
+ goto ErrExit;
+ }
+ //
+ // If any of the below checks fails clear the buffer and return EFI_NOT_FOUND.
+ //
+ Status = EFI_NOT_FOUND;
+ if (PciResConfigPtr->MmioHBase != mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Base ||
+ PciResConfigPtr->MmioHLimit != mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Limit) {
+
+ PCIDEBUG ("%s: Memory map changed (MMIOH %012llX..%012llX != %012llX..%012llX) - overwrite\n",
+ SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME,
+ PciResConfigPtr->MmioHBase, PciResConfigPtr->MmioHLimit,
+ mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Base,
+ mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Limit);
+ goto ErrExit;
+ }
+ if (PciResConfigPtr->MmioLBase != mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Base ||
+ PciResConfigPtr->MmioLLimit != mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Limit) {
+
+ PCIDEBUG ("%s: Memory map changed (MMIOL %08X..%08X != %08X..%08X) - overwrite\n",
+ SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME,
+ PciResConfigPtr->MmioLBase, PciResConfigPtr->MmioLLimit,
+ mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Base,
+ mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Limit);
+ goto ErrExit;
+ }
+ if (PciResConfigPtr->IoBase != mIioUds->IioUdsPtr->PlatformData.PlatGlobalIoBase ||
+ PciResConfigPtr->IoLimit != mIioUds->IioUdsPtr->PlatformData.PlatGlobalIoLimit) {
+
+ PCIDEBUG ("%s: Memory map changed (I/O %04X..%04X != %04X..%04X) - overwrite\n",
+ SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME,
+ PciResConfigPtr->IoBase, PciResConfigPtr->IoLimit,
+ mIioUds->IioUdsPtr->PlatformData.PlatGlobalIoBase,
+ mIioUds->IioUdsPtr->PlatformData.PlatGlobalIoLimit);
+ goto ErrExit;
+ }
+ for (Socket = 0; Socket < NELEMENTS (PciResConfigPtr->Socket); Socket++) {
+
+ if (PciResConfigPtr->StackPresentBitmap[Socket] !=
+ mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap) {
+
+ PCIDEBUG ("%s: Stack bitmap mismach (%04X != %04X) in socket %d - overwrite\n",
+ SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME, PciResConfigPtr->StackPresentBitmap[Socket],
+ mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap, Socket);
+ goto ErrExit;
+ }
+ }
+ return EFI_SUCCESS;
+
+ ErrExit:
+ ZeroMem (PciResConfigPtr, sizeof(*PciResConfigPtr));
+ return Status;
+} // PciHostReadResourceConfig()
+
+
+/**
+ Adjust resource ratio assignment among CPU sockets to fit the resource needs from PCI devices.
+ Update Setup variable if there are changes from the existing ratio requests for this boot.
+
+ @param[in] HostBridgeInstance - The Host Bridge Instance where the resource adjustment happens.
+ @param[out] Result - Output parameter. Indicates whether changes have been made.
+**/
+VOID
+AdjustResourceAmongRootBridges (
+ IN PCI_HOST_BRIDGE_INSTANCE *HostBridgeInstance,
+ OUT SOCKET_RESOURCE_ADJUSTMENT_RESULT *Result
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridgeInstance;
+ LIST_ENTRY *List;
+ CPU_RESOURCE SocketResources[MAX_SOCKET];
+ UINT64 SocketIoLength;
+ UINT64 SocketMem32Length;
+ UINT64 SocketMem64Length;
+ UINT64 SocketIoBase;
+ UINT64 SocketMem32Base;
+ UINT64 SocketMem64Base;
+ UINT64 RsvLenAtBegin;
+ UINT64 RsvLenAtEnd;
+ UINT64 StackLength;
+ UINT64 NewLength;
+ UINT64 Alignment;
+ UINT64 Remainder;
+ UINT8 Socket;
+ UINT8 ValidSockets;
+ BOOLEAN ChangedType[TypeMax];
+ BOOLEAN ChangedTypeOOR[TypeMax]; // Change type for out of resources
+ UINT8 TypeIndex;
+ UINT8 ChangedBitMap;
+ EFI_STATUS Status;
+ SYSTEM_PCI_BASE_LIMITS SocketPciResourceData;
+ UINT8 Stack;
+ UINT8 LastStack;
+ UINT16 IoGranularity;
+ UINT32 MmiolGranularity;
+ UINT64 MmiohGranularity;
+ BOOLEAN OutOfResources;
+ UINT32 UboxMmioSize;
+ BOOLEAN IsVirtualRootBridge;
+ PCI_BASE_LIMITS *CurStackLimits;
+ PCI_BASE_LIMITS *UboxStackLimits;
+ PCI_BASE_LIMITS *CurSocketLimits;
+ UINT32 PlatGlobalMmiolBase;
+ UINT32 VtdBarSize;
+
+ *Result = SocketResourceRatioNotChanged;
+ SetMem (ChangedType, TypeMax, FALSE);
+ SetMem (ChangedTypeOOR, TypeMax, FALSE);
+ ChangedBitMap = 0;
+ OutOfResources = FALSE;
+ IsVirtualRootBridge = FALSE;
+
+ IoGranularity = mIioUds->IioUdsPtr->PlatformData.IoGranularity;
+ MmiolGranularity = mIioUds->IioUdsPtr->PlatformData.MmiolGranularity;
+ MmiohGranularity = (UINT64) mIioUds->IioUdsPtr->PlatformData.MmiohGranularity.lo;
+ MmiohGranularity |= ((UINT64)mIioUds->IioUdsPtr->PlatformData.MmiohGranularity.hi) << 32;
+ ZeroMem (&SocketResources[0], sizeof(SocketResources));
+ //
+ // Read the system resource cfg from NVRAM. If the variable does not exist, or is
+ // not valid for current system configuration the buffer SocketPciResourceData
+ // is just cleared.
+ //
+ Status = PciHostReadResourceConfig (&SocketPciResourceData);
+ if (EFI_ERROR (Status)) {
+
+ if (Status != EFI_NOT_FOUND) {
+
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+ //
+ // Variable is not initialized yet, go with empty structure.
+ //
+ } else if (IsResourceMapRejected (&SocketPciResourceData)) {
+ //
+ // If variable is already initialized, but rejected by KTI do not reboot to avoid loop.
+ //
+ return;
+ }
+
+ UboxMmioSize = mIioUds->IioUdsPtr->PlatformData.UboxMmioSize;
+ PlatGlobalMmiolBase = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Base;
+ ValidSockets = 0;
+ for (List = HostBridgeInstance->RootBridges.ForwardLink, Socket = 0; Socket < MAX_SOCKET; Socket ++) {
+
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid) {
+ continue;
+ }
+ ValidSockets++;
+ //
+ // Calculate the length of resources available per socket
+ //
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].PciResourceIoBase >=
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].PciResourceIoLimit) {
+ SocketIoBase = 0;
+ SocketIoLength = 0;
+ } else {
+ SocketIoBase = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].PciResourceIoBase;
+ SocketIoLength = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].PciResourceIoLimit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].PciResourceIoBase;
+ }
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio32Base >=
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio32Limit) {
+ SocketMem32Base = 0;
+ SocketMem32Length = 0;
+ } else {
+ SocketMem32Base = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio32Base;
+ SocketMem32Length = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio32Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio32Base;
+ // Reserve 8M for ubox mmio
+ SocketMem32Length = SocketMem32Length - UboxMmioSize;
+ }
+
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio64Base >=
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio64Limit) {
+ SocketMem64Base = 0;
+ SocketMem64Length = 0;
+ } else{
+ SocketMem64Base = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio64Base;
+ SocketMem64Length = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio64Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Mmio64Base;
+ }
+
+ // Get all the resources that are in this socket
+ SocketResources[Socket].IoResourcesLeft = (UINT16)SocketIoLength;
+ SocketResources[Socket].MmiolResourcesLeft = (UINT32)SocketMem32Length;
+ SocketResources[Socket].MmiohResourcesLeft = (UINT64)SocketMem64Length;
+
+ LastStack = LastStackOfSocket (Socket);
+
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ RootBridgeInstance = ROOT_BRIDGE_FROM_LINK (List);
+ //
+ // Check IO Resource
+ //
+ Alignment = RootBridgeInstance->ResAllocNode[TypeIo].Alignment + 1;
+ NewLength = RootBridgeInstance->ResAllocNode[TypeIo].Length;
+
+ if (IsVirtualRootBridge) {
+ NewLength += NewLength;
+ }
+ // IoTrap allocates 256 byte range from GCD for common pool usage
+ // For device to fit move to the next available alignment
+ if ((Socket == 0) && (Stack == 0)) {
+ NewLength += Alignment;
+ }
+
+ if (NewLength != 0) {
+ //
+ // At least 2KB align per KTI requirement. Add the length requested with given alignment.
+ // If the sum is not 2KB aligned add on the remainder that would make it align.
+ // Bump up to 4KB for root bridge requirements
+ // Have to make sure Alignment is handled for direct address allocation
+ //
+ Remainder = SocketIoBase & (Alignment - 1);
+ if (Remainder != 0) {
+ NewLength += Alignment - Remainder;
+ }
+ if (NewLength % (IoGranularity * 2)) {
+ Remainder = (IoGranularity * 2) - (NewLength % (IoGranularity * 2));
+ NewLength += Remainder;
+ }
+ //
+ // Store length as length - 1 for handling
+ //
+ NewLength -= 1;
+
+ // Zero StackLength if its disable or negative
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceIoBase >=
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceIoLimit) {
+ StackLength = 0;
+ } else {
+ StackLength = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceIoLimit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceIoBase;
+ }
+ SocketResources[Socket].StackRes[Stack].NumIoPortsDesired = (UINT16)NewLength;
+ // Check if new length can fit in the socket or stack
+ if (SocketResources[Socket].IoResourcesLeft > (UINT16)NewLength) {
+ SocketResources[Socket].IoResourcesLeft -= (UINT16)NewLength + 1;
+ } else if (SocketResources[Socket].IoResourcesLeft == (UINT16)NewLength) {
+ SocketResources[Socket].IoResourcesLeft -= (UINT16)NewLength;
+ } else {
+ // If there are resources left consume them
+ if (SocketResources[Socket].IoResourcesLeft != 0) {
+ NewLength = NewLength - SocketResources[Socket].IoResourcesLeft - 1;
+ SocketResources[Socket].IoResourcesLeft = 0;
+ }
+
+ SocketResources[Socket].IoResourceNeeds += (UINT16)NewLength + 1;
+ OutOfResources = TRUE;
+ ChangedTypeOOR[TypeIo] = TRUE;
+ }
+ SocketResources[Socket].StackRes[Stack].IoAlignment = Alignment;
+ if (NewLength > StackLength) {
+ SocketResources[Socket].StackRes[Stack].NeedIoUpdate = TRUE;
+
+ //IoResourcesLeft is UINT16 type, not 2's-complement value.
+ if (SocketResources[Socket].IoResourcesLeft > SocketIoLength) {
+ DEBUG ((DEBUG_ERROR, "[PCI] Out of Resources for Socket = %x Stack = %x Type = %x\n",
+ Socket, Stack, TypeIo));
+ SocketResources[Socket].IoResourcesLeft = 0;
+ }
+ ChangedType[TypeIo] = TRUE;
+ }
+ SocketIoBase += SocketResources[Socket].StackRes[Stack].NumIoPortsDesired + 1;
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].IoResourceLeft = %x\n",
+ Socket, SocketResources[Socket].IoResourcesLeft));
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].StackRes[%x].IoAlignment = %x\n",
+ Socket, Stack, SocketResources[Socket].StackRes[Stack].IoAlignment));
+ } else {
+ SocketResources[Socket].StackRes[Stack].NumIoPortsDesired = 0;
+ }
+ //
+ // Check Mmem32 resource. This Host bridge does not support separated MEM / PMEM requests,
+ // so only count MEM requests here.
+ //
+ Alignment = RootBridgeInstance->ResAllocNode[TypeMem32].Alignment + 1;
+ NewLength = RootBridgeInstance->ResAllocNode[TypeMem32].Length;
+ //
+ // Account for reserved regions at begin and end of the stack MMIO32 region.
+ //
+ RsvLenAtBegin = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceMem32Base -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio32Base;
+
+ RsvLenAtEnd = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio32Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceMem32Limit;
+ NewLength += RsvLenAtBegin + RsvLenAtEnd;
+ if (Alignment < RsvLenAtBegin) {
+ Alignment = RsvLenAtBegin;
+ }
+ if (Alignment < RsvLenAtEnd) {
+ Alignment = RsvLenAtEnd;
+ }
+ //
+ // Always account for VT-d reserved resource ranges.
+ // TODO: Remove when VTd BAR is included in RsvLenAtEnd.
+ //
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].VtdBarAddress != 0) {
+
+ VtdBarSize = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceMem32Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].VtdBarAddress + 1;
+ NewLength += VtdBarSize;
+ if (Alignment < VtdBarSize) {
+ Alignment = VtdBarSize;
+ }
+ }
+
+ if (IsVirtualRootBridge) {
+ NewLength += NewLength;
+ }
+ // PCH Allocates reserved MMIO for Sx SMI handler use
+ // For device to fit move to the next available alignment
+ if ((Socket == 0) && (Stack == 0)) {
+ NewLength += Alignment;
+ }
+
+ if (NewLength != 0) {
+ //
+ // At least 4MB align per KTI requirement. Add the length requested with given alignment.
+ // If the sum is not 4MB aligned add on the remainder that would make it align.
+ // Have to make sure Alignment is handled for direct address allocation
+ //
+ Remainder = SocketMem32Base & (Alignment - 1);
+ if (Remainder != 0) {
+ NewLength += Alignment - Remainder;
+ }
+ if (NewLength % MmiolGranularity) {
+
+ Remainder = MmiolGranularity - (NewLength % MmiolGranularity);
+ NewLength += Remainder;
+ }
+
+ if (Stack == LastStack) {
+ //
+ // Ubox address must be 8MB aligned for the base address on most processors; skip check
+ // if uboxMmioSize is 0 (avoid divide by zero exception).
+ // At this point the requested resource has already been calculated to be satisfied.
+ // Add granularity padding if necessary to satisfy Ubox requirement.
+ //
+ if (UboxMmioSize != 0 && (SocketMem32Base + NewLength) % UboxMmioSize) {
+ Remainder = UboxMmioSize - (NewLength % UboxMmioSize);
+ NewLength += Remainder;
+ }
+ }
+ //
+ // Store length as length - 1 for handling
+ //
+ NewLength -= 1;
+
+ // Zero StackLength if its disable or negative
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio32Base >=
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio32Limit) {
+ StackLength = 0;
+ } else {
+ StackLength = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio32Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio32Base;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiolLength = (UINT32)NewLength;
+
+ // Check if new length can fit in the socket or stack
+ if (SocketResources[Socket].MmiolResourcesLeft > (UINT32)NewLength) {
+ SocketResources[Socket].MmiolResourcesLeft -= (UINT32)NewLength + 1;
+ } else if (SocketResources[Socket].MmiolResourcesLeft == (UINT32)NewLength) {
+ SocketResources[Socket].MmiolResourcesLeft -= (UINT32)NewLength;
+ } else {
+ // If there are resources left consume them
+ if (SocketResources[Socket].MmiolResourcesLeft) {
+ NewLength = NewLength - SocketResources[Socket].MmiolResourcesLeft - 1;
+ SocketResources[Socket].MmiolResourcesLeft = 0;
+ }
+
+ SocketResources[Socket].MmiolResourceNeeds += (UINT32)NewLength + 1;
+ OutOfResources = TRUE;
+ ChangedTypeOOR[TypeMem32] = TRUE;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiolAlignment = Alignment;
+
+ if (NewLength > StackLength) {
+ SocketResources[Socket].StackRes[Stack].MmiolUpdate = 1;
+
+ //MmiolResourcesLeft is UINT32 type, not 2's-complement value.
+ if (SocketResources[Socket].MmiolResourcesLeft > SocketMem32Length) {
+ DEBUG ((DEBUG_ERROR, "Out of Resources for Socket = %x Stack = %x Type = %x\n",
+ Socket, Stack, TypeMem32));
+ SocketResources[Socket].MmiolResourcesLeft = 0;
+ }
+ ChangedType[TypeMem32] = TRUE;
+ }
+ SocketMem32Base += SocketResources[Socket].StackRes[Stack].MmiolLength + 1;
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].MmiolResourceLeft = %x\n",
+ Socket, SocketResources[Socket].MmiolResourcesLeft));
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiolAlignment = %x\n",
+ Socket, Stack, SocketResources[Socket].StackRes[Stack].MmiolAlignment));
+ } else {
+ SocketResources[Socket].StackRes[Stack].MmiolLength = 0;
+ }
+ //
+ // Check Mem64 resource. This Host bridge does not support separated MEM / PMEM requests, so only count MEM requests here.
+ //
+ Alignment = RootBridgeInstance->ResAllocNode[TypeMem64].Alignment + 1;
+ NewLength = RootBridgeInstance->ResAllocNode[TypeMem64].Length;
+ //
+ // Account for reserved regions at begin and end of the stack MMIO32 region.
+ //
+ RsvLenAtBegin = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceMem64Base -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio64Base;
+
+ RsvLenAtEnd = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio64Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].PciResourceMem64Limit;
+ NewLength += RsvLenAtBegin + RsvLenAtEnd;
+ if (Alignment < RsvLenAtBegin) {
+ Alignment = RsvLenAtBegin;
+ }
+ if (Alignment < RsvLenAtEnd) {
+ Alignment = RsvLenAtEnd;
+ }
+ if (IsVirtualRootBridge) {
+ NewLength += NewLength;
+ }
+
+ if (NewLength != 0) {
+ //
+ // At least 1GB align per KTI requirement. Add the length requested with given alignment.
+ // If the sum is not 1GB aligned add on the remainder that would make it align.
+ // Have to make sure Alignment is handled for direct address allocation
+ //
+ Remainder = SocketMem64Base & (Alignment - 1);
+ if (Remainder != 0) {
+ NewLength += Alignment - Remainder;
+ }
+ if (NewLength % MmiohGranularity) {
+ Remainder = MmiohGranularity - (NewLength % MmiohGranularity);
+ NewLength += Remainder;
+ }
+ //
+ // Store length as length - 1 for handling
+ //
+ NewLength -= 1;
+
+ // Zero StackLength if it's disable or negative
+ if (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio64Base >=
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio64Limit) {
+ StackLength = 0;
+ } else {
+ StackLength = mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio64Limit -
+ mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].Mmio64Base;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiohLength = NewLength;
+
+ // Check if new length can fit in the socket or stack
+ if (SocketResources[Socket].MmiohResourcesLeft > NewLength) {
+ SocketResources[Socket].MmiohResourcesLeft -= NewLength + 1;
+ } else if (SocketResources[Socket].MmiohResourcesLeft == NewLength) {
+ SocketResources[Socket].MmiohResourcesLeft -= NewLength;
+ } else {
+ // If there are resources left consume them
+ if (SocketResources[Socket].MmiohResourcesLeft != 0) {
+ NewLength = NewLength - SocketResources[Socket].MmiohResourcesLeft - 1;
+ SocketResources[Socket].MmiohResourcesLeft = 0;
+ }
+
+ SocketResources[Socket].MmiohResourceNeeds += NewLength + 1;
+ OutOfResources = TRUE;
+ ChangedTypeOOR[TypeMem64] = TRUE;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiohAlignment = Alignment;
+
+ if (NewLength > StackLength) {
+ SocketResources[Socket].StackRes[Stack].MmiohUpdate = 1;
+
+ //MmiohResourcesLeft is UINT64 type, not 2's-complement value.
+ if (SocketResources[Socket].MmiohResourcesLeft > SocketMem64Length) {
+ DEBUG ((DEBUG_ERROR, "Out of Resources for Socket = %x Stack = %x Type = %x\n",
+ Socket, Stack, TypeMem64));
+ SocketResources[Socket].MmiohResourcesLeft = 0;
+ }
+ ChangedType[TypeMem64] = TRUE;
+ }
+ SocketMem64Base += SocketResources[Socket].StackRes[Stack].MmiohLength + 1;
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].MmiohResourceLeft = %lx\n",
+ Socket, SocketResources[Socket].MmiohResourcesLeft));
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiohAlignment = %lx\n",
+ Socket, Stack, SocketResources[Socket].StackRes[Stack].MmiohAlignment));
+ } else {
+ SocketResources[Socket].StackRes[Stack].MmiohLength = 0;
+ }
+
+ List = List->ForwardLink;
+
+ } // for Stack
+
+ // Check and update all resource types in socket that needs adjustment
+ for (TypeIndex = 0; TypeIndex < TypeMax; TypeIndex++) {
+
+ if (ChangedType[TypeIndex]) {
+
+ DEBUG ((DEBUG_INFO, "[%d] Adjust stack %s resources...\n", Socket, mPciResourceTypeStr[TypeIndex]));
+ Status = AdjustResources (&SocketResources[Socket], Socket, TypeIndex);
+ ChangedType[TypeIndex] = FALSE;
+ if (Status == EFI_SUCCESS) {
+ ChangedBitMap |= (1 << TypeIndex);
+ } else {
+ ChangedBitMap &= ~(1 << TypeIndex);
+ }
+ }
+ }
+ //
+ // Account for Ubox resources to accurately calculate new alignments for the next socket
+ //
+ SocketMem32Base += UboxMmioSize;
+ } // for Socket ..
+
+ ASSERT (List == &HostBridgeInstance->RootBridges);
+
+ //
+ // If a socket is out of resources, try to adjusting sockets for more room.
+ //
+ if (OutOfResources && (MAX_SOCKET > 1) && (ValidSockets > 1)) {
+
+ for (TypeIndex = 0; TypeIndex < TypeMax; TypeIndex++) {
+
+ if (ChangedTypeOOR[TypeIndex]) {
+
+ DEBUG ((DEBUG_INFO, "Adjust socket %s resources...\n", mPciResourceTypeStr[TypeIndex]));
+ Status = AdjustSocketResources (SocketResources, TypeIndex, ValidSockets);
+ if (Status == EFI_SUCCESS) {
+ ChangedBitMap |= (1 << TypeIndex);
+ } else {
+ ChangedBitMap &= ~(1 << TypeIndex);
+ }
+ }
+ }
+ } else if (OutOfResources && ChangedTypeOOR[TypeMem64]){
+ //
+ // Allow mmioh to be adjusted to access max available physical address range.
+ //
+ Status = AdjustSocketResources (SocketResources, TypeMem64, ValidSockets);
+ if (Status == EFI_SUCCESS) {
+ ChangedBitMap |= (1 << TypeIndex);
+ } else {
+ ChangedBitMap &= ~(1 << TypeIndex);
+ }
+ }
+
+ // Update changed resource type.
+ // OemGetResourceMapUpdate() will only update changed resource type so it is alright if data is zero.
+ if (ChangedBitMap != 0) {
+
+ for (Socket = 0; Socket < MAX_SOCKET; Socket++) {
+
+ SocketPciResourceData.StackPresentBitmap[Socket] = mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap;
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ CurStackLimits = &SocketPciResourceData.Socket[Socket].StackLimits[Stack];
+
+ //
+ // Disable stacks that have no resources and are assigned none.
+ // Reaching this far means the stack is valid and should be disabled if base equals limit and
+ // length is zero.
+ // Assigned address will be none zero at this point because CSTACK takes the first 4K in legacy
+ // IO space.
+ //
+ if ((SocketResources[Socket].StackRes[Stack].NeedIoUpdate) &&
+ (SocketResources[Socket].StackRes[Stack].IoLimit -
+ SocketResources[Socket].StackRes[Stack].IoBase == 0)) {
+ SocketResources[Socket].StackRes[Stack].IoBase = (UINT16)(-1);
+ SocketResources[Socket].StackRes[Stack].IoLimit = 0;
+ }
+
+ if ((SocketResources[Socket].StackRes[Stack].MmiolUpdate) &&
+ (SocketResources[Socket].StackRes[Stack].MmiolLimit -
+ SocketResources[Socket].StackRes[Stack].MmiolBase == 0)) {
+ SocketResources[Socket].StackRes[Stack].MmiolBase = (UINT32)(-1);
+ SocketResources[Socket].StackRes[Stack].MmiolLimit = 0;
+ }
+
+ if ((SocketResources[Socket].StackRes[Stack].MmiohUpdate) &&
+ (SocketResources[Socket].StackRes[Stack].MmiohLimit -
+ SocketResources[Socket].StackRes[Stack].MmiohBase == 0)) {
+ SocketResources[Socket].StackRes[Stack].MmiohBase = (UINT64)(-1);
+ SocketResources[Socket].StackRes[Stack].MmiohLimit = 0;
+ }
+
+ // Zero base if 4K because mIioUds struct reserves 4K of Io for legacy purposes
+ // Remove if mIioUds first base starts at zero
+ if (SocketResources[Socket].StackRes[Stack].IoBase == 0x1000){
+ SocketResources[Socket].StackRes[Stack].IoBase = 0;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].NeedIoUpdate) {
+ CurStackLimits->Io.Base = SocketResources[Socket].StackRes[Stack].IoBase;
+ CurStackLimits->Io.Limit = SocketResources[Socket].StackRes[Stack].IoLimit;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].MmiolUpdate) {
+ if ((Socket == 0) && (Stack == 0)) {
+ CurStackLimits->LowMmio.Base = PlatGlobalMmiolBase;
+ } else {
+ CurStackLimits->LowMmio.Base = SocketResources[Socket].StackRes[Stack].MmiolBase;
+ }
+ CurStackLimits->LowMmio.Limit = SocketResources[Socket].StackRes[Stack].MmiolLimit;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].MmiohUpdate) {
+ CurStackLimits->HighMmio.Base = SocketResources[Socket].StackRes[Stack].MmiohBase;
+ CurStackLimits->HighMmio.Limit = SocketResources[Socket].StackRes[Stack].MmiohLimit;
+ }
+
+ DEBUG((DEBUG_INFO, "\nSocketResources[%x].StackRes[%x].IoBase =%x\n",Socket,Stack,SocketResources[Socket].StackRes[Stack].IoBase));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].IoLimit =%x\n",Socket,Stack,SocketResources[Socket].StackRes[Stack].IoLimit));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiolBase =%x\n",Socket,Stack,SocketResources[Socket].StackRes[Stack].MmiolBase));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiolLimit =%x\n",Socket,Stack,SocketResources[Socket].StackRes[Stack].MmiolLimit));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiohBase =%lx\n",Socket,Stack,SocketResources[Socket].StackRes[Stack].MmiohBase));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].StackRes[%x].MmiohLimit =%lx\n",Socket,Stack,SocketResources[Socket].StackRes[Stack].MmiohLimit));
+ } // for Stack
+
+ // Initialize to disabled
+ SocketResources[Socket].IoBase = (UINT16)(-1);
+ SocketResources[Socket].IoLimit = 0;
+ SocketResources[Socket].MmiolBase = (UINT32)(-1);
+ SocketResources[Socket].MmiolLimit = 0;
+ SocketResources[Socket].MmiohBase = (UINT64)(-1);
+ SocketResources[Socket].MmiohLimit = 0;
+
+ // Search backwards to find the beginning valid stack
+ for (Stack = MAX_IIO_STACK - 1; Stack < MAX_IIO_STACK ; Stack--) {
+ CurSocketLimits = &SocketPciResourceData.Socket[Socket].SocketLimits;
+
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].IoBase != (UINT16)(-1)) {
+ SocketResources[Socket].IoBase = SocketResources[Socket].StackRes[Stack].IoBase;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].MmiolBase != (UINT32)(-1)) {
+ SocketResources[Socket].MmiolBase = SocketResources[Socket].StackRes[Stack].MmiolBase;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].MmiohBase != (UINT64)(-1)) {
+ SocketResources[Socket].MmiohBase = SocketResources[Socket].StackRes[Stack].MmiohBase;
+ }
+ } // for Stack
+
+ // Search to find the last valid limit
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].IoLimit != 0) {
+ SocketResources[Socket].IoLimit = SocketResources[Socket].StackRes[Stack].IoLimit;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].MmiolLimit) {
+ SocketResources[Socket].MmiolLimit = SocketResources[Socket].StackRes[Stack].MmiolLimit;
+ }
+
+ if (SocketResources[Socket].StackRes[Stack].MmiohLimit) {
+ SocketResources[Socket].MmiohLimit = SocketResources[Socket].StackRes[Stack].MmiohLimit;
+ }
+ } // for Stack
+
+ // Update socket level resource range
+ if (SocketResources[Socket].StackRes[0].NeedIoUpdate) {
+ CurSocketLimits->Io.Base = SocketResources[Socket].IoBase;
+ CurSocketLimits->Io.Limit = SocketResources[Socket].IoLimit;
+ }
+
+ if (SocketResources[Socket].StackRes[0].MmiolUpdate) {
+ //
+ // Apply stolen 8M for ubox mmio per socket
+ //
+ if (UboxMmioSize != 0) {
+ UboxStackLimits = &SocketPciResourceData.Socket[Socket].StackLimits[UBOX_STACK];
+
+ UboxStackLimits->LowMmio.Base = SocketResources[Socket].MmiolLimit + 1;
+ SocketResources[Socket].MmiolLimit = (UINT32)UboxStackLimits->LowMmio.Base + UboxMmioSize - 1;
+ UboxStackLimits->LowMmio.Limit = SocketResources[Socket].MmiolLimit;
+ }
+ CurSocketLimits->LowMmio.Base = SocketResources[Socket].MmiolBase;
+ CurSocketLimits->LowMmio.Limit = SocketResources[Socket].MmiolLimit;
+ }
+
+ if (SocketResources[Socket].StackRes[0].MmiohUpdate) {
+ CurSocketLimits->HighMmio.Base = SocketResources[Socket].MmiohBase;
+ CurSocketLimits->HighMmio.Limit = SocketResources[Socket].MmiohLimit;
+ }
+
+ DEBUG((DEBUG_INFO, "\nSocketResources[%x].UboxBase =%x\n",Socket,UboxStackLimits->LowMmio.Base));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].UboxLimit =%x\n",Socket,UboxStackLimits->LowMmio.Limit));
+ DEBUG((DEBUG_INFO, "\nSocketResources[%x].IoBase =%x\n",Socket,SocketResources[Socket].IoBase));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].IoLimit =%x\n",Socket,SocketResources[Socket].IoLimit));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].MmiolBase =%x\n",Socket,SocketResources[Socket].MmiolBase));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].MmiolLimit =%x\n",Socket,SocketResources[Socket].MmiolLimit));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].MmiohBase =%lx\n",Socket,SocketResources[Socket].MmiohBase));
+ DEBUG((DEBUG_INFO, "SocketResources[%x].MmiohLimit =%lx\n",Socket,SocketResources[Socket].MmiohLimit));
+ } // for Socket
+ SocketPciResourceData.MmioHBase = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Base;
+ SocketPciResourceData.MmioHLimit = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Limit;
+ SocketPciResourceData.MmioLBase = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Base;
+ SocketPciResourceData.MmioLLimit = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Limit;
+ SocketPciResourceData.IoBase = mIioUds->IioUdsPtr->PlatformData.PlatGlobalIoBase;
+ SocketPciResourceData.IoLimit = mIioUds->IioUdsPtr->PlatformData.PlatGlobalIoLimit;
+
+ PCIDEBUG("Writing resource rebalance request '%s':\n", SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME);
+ PCIDEBUG("System I/O : %04X..%04X\n", SocketPciResourceData.IoBase, SocketPciResourceData.IoLimit);
+ PCIDEBUG("System MMIOL: %08X..%08X\n", SocketPciResourceData.MmioLBase, SocketPciResourceData.MmioLLimit);
+ PCIDEBUG("System MMIOH: %012llX..%012llX\n", SocketPciResourceData.MmioHBase, SocketPciResourceData.MmioHLimit);
+ for (Socket = 0; Socket < NELEMENTS (SocketPciResourceData.Socket); Socket++) {
+
+ PCIDEBUG("[%d] StackPresent: 0x%04X\n", Socket, SocketPciResourceData.StackPresentBitmap[Socket]);
+ PCIDEBUG("[%d] I/O : %04X..%04X\n", Socket,
+ SocketPciResourceData.Socket[Socket].SocketLimits.Io.Base,
+ SocketPciResourceData.Socket[Socket].SocketLimits.Io.Limit);
+ PCIDEBUG("[%d] MMIOL: %08X..%08X\n", Socket,
+ SocketPciResourceData.Socket[Socket].SocketLimits.LowMmio.Base,
+ SocketPciResourceData.Socket[Socket].SocketLimits.LowMmio.Limit);
+ PCIDEBUG("[%d] MMIOH: %012llX..%012llX\n", Socket,
+ SocketPciResourceData.Socket[Socket].SocketLimits.HighMmio.Base,
+ SocketPciResourceData.Socket[Socket].SocketLimits.HighMmio.Limit);
+ for (Stack = 0; Stack < NELEMENTS (SocketPciResourceData.Socket[Socket].StackLimits); Stack++) {
+
+ PCIDEBUG("[%d.%d] I/O : %04X..%04X\n", Socket, Stack,
+ SocketPciResourceData.Socket[Socket].StackLimits[Stack].Io.Base,
+ SocketPciResourceData.Socket[Socket].StackLimits[Stack].Io.Limit);
+ PCIDEBUG("[%d.%d] MMIOL: %08X..%08X\n", Socket, Stack,
+ SocketPciResourceData.Socket[Socket].StackLimits[Stack].LowMmio.Base,
+ SocketPciResourceData.Socket[Socket].StackLimits[Stack].LowMmio.Limit);
+ PCIDEBUG("[%d.%d] MMIOH: %012llX..%012llX\n", Socket, Stack,
+ SocketPciResourceData.Socket[Socket].StackLimits[Stack].HighMmio.Base,
+ SocketPciResourceData.Socket[Socket].StackLimits[Stack].HighMmio.Limit);
+ }
+ }
+
+ *Result = SocketResourceRatioChanged;
+ Status = gRT->SetVariable(
+ SYSTEM_PCI_RESOURCE_CONFIGURATION_DATA_NAME,
+ &gEfiSocketPciResourceDataGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ sizeof(SocketPciResourceData),
+ &SocketPciResourceData
+ );
+ ASSERT_EFI_ERROR(Status);
+ }
+
+ return;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h
new file mode 100644
index 0000000000..85a9192c12
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h
@@ -0,0 +1,158 @@
+/** @file
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCIREBALANCE_H_
+#define _PCIREBALANCE_H_
+
+/******************************************************************************
+ * Definitions.
+ ******************************************************************************/
+/**
+ Uncomment the PCIDEBUG macro to enable tracing the library activity in a test build.
+ **/
+#define PCIDEBUG(...) // { DEBUG((DEBUG_INFO, "[PCI] " __VA_ARGS__)); }
+
+typedef enum {
+ SocketResourceRatioChanged,
+ SocketResourceRatioNotChanged,
+ SocketResourceAdjustMax
+} SOCKET_RESOURCE_ADJUSTMENT_RESULT;
+
+typedef struct {
+ UINT16 IoBase; // IO base of each stack
+ UINT16 IoLimit; // IO limit for each stack
+ UINT16 NumIoPortsDesired;
+ UINT64 IoAlignment;
+ BOOLEAN NeedIoUpdate; // Resource allocation required.
+ UINT32 MmiolBase; // Mmiol base of each stack
+ UINT32 MmiolLimit; // Mmiol limit of each stack
+ UINT32 MmiolLength;
+ UINT64 MmiolAlignment;
+ UINT8 MmiolUpdate; // Resource allocation required.
+ UINT64 MmiohBase; // Mmioh base of each stack
+ UINT64 MmiohLimit; // Mmioh limit of each stack
+ UINT64 MmiohLength;
+ UINT64 MmiohAlignment;
+ UINT8 MmiohUpdate; // Resource allocation required.
+} STACK_RESOURCE;
+
+typedef struct{
+ UINT16 IoBase; // Io base of each socket
+ UINT16 IoLimit; // Io limit for each socket
+ UINT16 IoResourcesLeft; // Io resources left over in socket
+ UINT16 IoResourceNeeds; // Io resources lacking in socket
+ UINT32 MmiolBase; // Mmiol base of each socket
+ UINT32 MmiolLimit; // Mmiol limit of each socket
+ UINT32 MmiolResourcesLeft; // Mmiol resources left over in socket
+ UINT32 MmiolResourceNeeds; // Mmiol resources lacking in socket
+ UINT64 MmiohBase; // Mmioh base of each socket
+ UINT64 MmiohLimit; // Mmioh limit of each socket
+ UINT64 MmiohResourcesLeft; // Mmioh resources left over in socket
+ UINT64 MmiohResourceNeeds; // Mmioh resources lacking in socket
+ STACK_RESOURCE StackRes[MAX_LOGIC_IIO_STACK];
+} CPU_RESOURCE;
+
+
+/******************************************************************************
+ * Function prototypes.
+ ******************************************************************************/
+extern PCI_ROOT_BRIDGE_INSTANCE *mPciRootBridgeTable[MAX_SOCKET][MAX_LOGIC_IIO_STACK];
+extern PCI_ROOT_BRIDGE_INSTANCE *mPciRootBridgeTableReserved[MAX_SOCKET][IIO_RESERVED_1];
+
+
+/******************************************************************************
+ * Function prototypes.
+ ******************************************************************************/
+
+/**
+ Adjust resource ratio assignment among CPU sockets to fit the resource needs from PCI devices.
+ Update Setup variable if there are changes from the existing ratio requests for this boot.
+
+ @param HostBridgeInstance - The Host Bridge Instance where the resource adjustment happens.
+ @param Result - Output parameter. Indicates whether changes have been made.
+**/
+VOID
+AdjustResourceAmongRootBridges (
+ IN PCI_HOST_BRIDGE_INSTANCE *HostBridgeInstance,
+ OUT SOCKET_RESOURCE_ADJUSTMENT_RESULT *Result
+ );
+
+EFI_STATUS
+AdjustSocketIo (
+ IN OUT CPU_RESOURCE *SocketResources,
+ IN UINT8 ResourceType,
+ IN UINT8 ValidSockets
+ );
+
+EFI_STATUS
+AdjustSocketMmioH (
+ IN OUT CPU_RESOURCE *SocketResources,
+ IN UINT8 ResourceType,
+ IN UINT8 ValidSockets
+ );
+
+EFI_STATUS
+AdjustSocketMmioL (
+ IN OUT CPU_RESOURCE *SocketResources,
+ IN UINT8 ResourceType,
+ IN UINT8 ValidSockets
+ );
+
+/**
+ Determine the last stack for a given socket
+
+ @param Socket the socket for which the last socket is desired
+
+ @return The number of the last stack is returned.
+*/
+UINT8
+LastStackOfSocket (
+ IN UINT8 Socket
+ );
+
+/**
+ Determine the last stack for a given socket with resources
+
+ @param SocketResources - CPU_RESOURCE structure pointer that stores all resources need per stack
+ @param Socket - Index of the Socket
+ @param ResourceType - Type of resource that requires alignment
+ @param LastStack - Pointer that will store the value of the last stack with resources allocated to it
+ @param ResourceSize - Pointer that will store the sum of the requested resource type
+
+ @return The last stack with resources allocated to it and the
+ total amount of resoures requested of the type
+ requested.
+*/
+VOID
+LastStackWithResources (
+ IN CPU_RESOURCE *SocketResources,
+ IN UINT8 Socket,
+ IN PCI_RESOURCE_TYPE ResourceType,
+ OUT UINT8 *LastStack,
+ OUT UINT64 *ResourceSize
+ );
+
+/**
+ Find socket and stack index for given PCI Root Bridge protocol pointer.
+
+ @param[out] PciResConfigPtr - Buffer for the resource configuration variable.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND The variable was not found.
+ @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
+ @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure.
+**/
+EFI_STATUS
+PciRootBridge2SocketStack (
+ IN PCI_ROOT_BRIDGE_INSTANCE *RootBridgePtr,
+ OUT UINT8 *SocketPtr,
+ OUT UINT8 *StackPtr
+ );
+
+#endif // _PCIREBALANCE_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c
new file mode 100644
index 0000000000..cc0fd2b562
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c
@@ -0,0 +1,218 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Guid/SocketPciResourceData.h>
+#include <Guid/SocketIioVariable.h>
+#include <Protocol/IioUds.h>
+
+#include "PciHostBridge.h"
+#include "PciRootBridge.h"
+#include "PciRebalance.h"
+
+
+extern EFI_IIO_UDS_PROTOCOL *mIioUds;
+
+/**
+ Return TRUE if the specified socket/stack combination exists,
+ otherwise return FALSE
+
+ @param Socket - the socket to be checked
+ @param Stack - the stack of the socket to be checked
+
+ @retval TRUE - the socket/stack combination exists
+ @retval FALSE - the socket/stack combination does not exist
+*/
+STATIC BOOLEAN
+IsStackPresent (
+ UINT8 Socket,
+ UINT8 Stack
+ )
+{
+ BOOLEAN Result;
+ UINT64 Mask;
+
+ ASSERT (Socket < ARRAY_SIZE (mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo)); // simple overrun check
+ if (Socket >= ARRAY_SIZE (mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo)) {
+ Result = FALSE;
+ goto err_exit;
+ }
+
+ //
+ // if the StackPresentBitmap is a single byte, then we can track 8 stacks,
+ // the sizeof will tell us how many bytes we have, we scale by 8 to
+ // determine the maximum number of stacks we can track. Stacks larger
+ // than this are not present essentially by definition, but could also
+ // be a sign that we need a wider type to store the information; hence we
+ // assert
+ //
+ ASSERT (Stack < 8 * sizeof(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[0].stackPresentBitmap));
+ if (Stack >= 8 * sizeof(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[0].stackPresentBitmap)) {
+ Result = FALSE;
+ goto err_exit;
+ }
+
+ Mask = 1;
+ Mask <<= Stack;
+ Result = (Mask & mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap) != 0;
+
+err_exit:
+ return Result;
+}
+
+
+/**
+ Adjust resource assignment among sockets to fit the IO
+ resources from the PCI() devices in the system
+
+ @param SocketResources - CPU_RESOURCE structure pointer that stores all resources need per socket
+ @param ResourceType - type of resource that requires alignment
+ @param ValidSockets - Number of Valid Sockets, need it
+ to calculate how resources need to
+ be split
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough resources to be adjusted within the socket.
+**/
+EFI_STATUS
+AdjustSocketIo (
+ CPU_RESOURCE *SocketResources,
+ UINT8 ResourceType,
+ UINT8 ValidSockets
+)
+{
+ UINT64 Base; ///< Next base I/O port number to use
+ UINT64 Limit; ///< Most recent limit for I/O port numbers
+ CONST UINT64 MaxLimit = ((UINT64)1 << 16) - 1; ///< Maximum value for limit; used to ensure we don't overflow
+ CPU_RESOURCE *CurSocketResources; ///< Pointer to the CPU_RESOURE structure for the CPU we
+ ///< are examining
+ STACK_RESOURCE *CurStackResources; ///< Pointer to the STACK_RESOURCE structure for the CPU/Stack
+ ///< we are examining
+ UINT16 NumFreePorts; ///< Number of i/o ports allocated to sockets that are not used
+ UINT8 LastStack; ///< Last enabled stack of the last enabled socket
+ CONST UINT8 LastSocketIndex = ValidSockets - 1; ///< Index of the last socket
+ UINT64 TotalResourceSize;
+ UINT64 ResourceSize;
+ UINT8 Socket; ///< Loop variable used to iterate over the sockets
+ UINT8 Stack; ///< Loop variable used to iterate over the stacks of a given socket
+
+ NumFreePorts = 0;
+ for (Socket = 0; Socket < ValidSockets; Socket++) {
+ CurSocketResources = &SocketResources[Socket];
+ if (CurSocketResources->IoResourceNeeds == 0 && CurSocketResources->IoResourcesLeft != 0) {
+ ASSERT (NumFreePorts < NumFreePorts + CurSocketResources->IoResourcesLeft + 1); // check for overflow
+ NumFreePorts += CurSocketResources->IoResourcesLeft + 1;
+ CurSocketResources->IoResourcesLeft = 0;
+ }
+ }
+
+ for (Socket = 0; Socket < ValidSockets; Socket++) {
+ CurSocketResources = &SocketResources[Socket];
+ if (CurSocketResources->IoResourceNeeds != 0 && NumFreePorts >= CurSocketResources->IoResourceNeeds) {
+ ASSERT (NumFreePorts > NumFreePorts - CurSocketResources->IoResourceNeeds); // check for underflow
+ NumFreePorts -= CurSocketResources->IoResourceNeeds;
+ CurSocketResources->IoResourceNeeds = 0;
+ }
+ }
+
+ LastStack = LastStackOfSocket (LastSocketIndex);
+
+ if (NumFreePorts > 0) {
+ CurStackResources = &SocketResources[LastSocketIndex].StackRes[LastStack];
+ if (CurStackResources->NumIoPortsDesired != 0) {
+ CurStackResources->NumIoPortsDesired += NumFreePorts;
+ } else {
+ CurStackResources->NumIoPortsDesired += NumFreePorts - 1;
+ }
+ }
+
+ //
+ // Verify all resource requested can fit into the systems address range.
+ //
+ TotalResourceSize = 0;
+ for (Socket = 0; Socket < ValidSockets; Socket ++) {
+ LastStackWithResources (&SocketResources[Socket], Socket, ResourceType, &LastStack, &ResourceSize);
+ TotalResourceSize += ResourceSize;
+ }
+ DEBUG ((DEBUG_INFO, "Total Request IO Range = %xh\n", TotalResourceSize));
+ DEBUG ((DEBUG_INFO, "Total System IO Range = %xh\n", MaxLimit));
+ if (TotalResourceSize > MaxLimit) {
+ //
+ // Not enough system resources to support the request.
+ // Remove all request to update NVRAM variable for this resource type.
+ //
+ for (Socket = 0; Socket < ValidSockets; Socket ++) {
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack ++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ SocketResources[Socket].StackRes[Stack].NeedIoUpdate = 0;
+ }
+ }
+ DEBUG ((DEBUG_ERROR, "ERROR: Out of adjustable IO resources. Can't adjust across sockets\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ DEBUG((DEBUG_ERROR, "Assigning new socket i/o range...\n"));
+
+ Base = mIioUds->IioUdsPtr->PlatformData.IIO_resource[0].PciResourceIoBase;
+ Limit = Base; // assume no resources are allocated
+ for (Socket = 0, CurSocketResources = SocketResources; Socket < ValidSockets; Socket++, CurSocketResources++) {
+ DEBUG ((DEBUG_INFO, "socket = %d, Base = %x, Limit =%x, MaxLimit = %x\n", Socket, Base, Limit, MaxLimit));
+ ASSERT (Base < MaxLimit);
+ CurSocketResources->IoBase = (UINT16)Base;
+ DEBUG ((DEBUG_INFO, "set socket io base to %x\n", Base));
+
+ for (Stack = 0, CurStackResources = CurSocketResources->StackRes;
+ Stack < MAX_IIO_STACK;
+ Stack++, CurStackResources++) {
+ if (!IsStackPresent (Socket, Stack)) {
+ DEBUG ((DEBUG_INFO, " Stack %d not present, setting base/limit to 0xffff/0\n", Stack));
+ CurStackResources->IoBase = 0xffff;
+ CurStackResources->IoLimit = 0;
+ continue;
+ }
+
+ if (CurStackResources->NumIoPortsDesired == 0) {
+ DEBUG ((DEBUG_INFO, " Stack %d doesn't need i/o resources, setting base/limit to 0xffff/0\n", Stack));
+ CurStackResources->IoBase = 0xffff;
+ CurStackResources->IoLimit = 0;
+ CurStackResources->NeedIoUpdate = TRUE;
+ continue;
+ }
+
+ DEBUG((DEBUG_INFO, " Stack %d setting i/o base to %x, ports desired was %x\n",
+ Stack, Base, CurStackResources->NumIoPortsDesired));
+ ASSERT (Base < MaxLimit);
+ CurStackResources->IoBase = (UINT16)Base;
+ Limit = Base + CurStackResources->NumIoPortsDesired;
+ DEBUG ((DEBUG_INFO, " limit set to %x (var and stack)\n", Limit));
+ ASSERT (Base <= Limit);
+ ASSERT (Limit <= MaxLimit);
+ CurStackResources->IoLimit = (UINT16)Limit;
+ CurStackResources->NeedIoUpdate = TRUE;
+ Base = Limit + 1;
+ DEBUG ((DEBUG_INFO, " Base variable updated to %x\n", Base));
+ }
+ ASSERT (Limit <= MaxLimit);
+ DEBUG ((DEBUG_INFO, " Socket %d limit set to %x\n", Socket, Limit));
+ CurSocketResources->IoLimit = (UINT16)Limit;
+ }
+
+ DEBUG ((DEBUG_INFO, "Dumping new I/O requests\n"));
+ for (Socket = 0, CurSocketResources = SocketResources; Socket < ValidSockets; Socket++, CurSocketResources++) {
+ DEBUG((DEBUG_INFO, "socket %d %x/%x\n", Socket, CurSocketResources->IoBase, CurSocketResources->IoLimit));
+ for (Stack = 0, CurStackResources = CurSocketResources->StackRes;
+ Stack < MAX_IIO_STACK;
+ Stack++, CurStackResources++) {
+ DEBUG ((DEBUG_INFO, "%d/%d: %x/%x\n", Socket, Stack, CurStackResources->IoBase, CurStackResources->IoLimit));
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c
new file mode 100644
index 0000000000..41975dee6f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c
@@ -0,0 +1,163 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Guid/SocketPciResourceData.h>
+#include <Guid/SocketIioVariable.h>
+#include <Protocol/IioUds.h>
+
+#include "PciHostBridge.h"
+#include "PciRootBridge.h"
+#include "PciRebalance.h"
+
+extern EFI_IIO_UDS_PROTOCOL *mIioUds;
+
+
+/**
+ Adjust resource assignments among sockets to fit the low
+ MMIO resources (32-bit addresses) from the PCI(e) devices in the system
+
+ @param[in,out] SocketResources - CPU_RESOURCE structure pointer that stores all resources need per socket
+ @param[in] ResourceType - Type of resource that requires alignment
+ @param[in] ValidSockets - Number of Valid Sockets, need it to calculate how resources need to be splitted
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough resources to be adjusted within the socket.
+ */
+EFI_STATUS
+AdjustSocketMmioL (
+ IN OUT CPU_RESOURCE *SocketResources,
+ IN UINT8 ResourceType,
+ IN UINT8 ValidSockets
+ )
+{
+ CONST UINT8 LastSocket = ValidSockets - 1;
+ UINT8 Socket;
+ UINT8 Stack;
+ UINT8 LastStack;
+ UINT64 Take;
+ UINT32 UboxMmioSize;
+ UINT64 ResourceSize;
+ UINT64 TotalResourceSize;
+ UINT32 TempMmioBase;
+ UINT32 TempMmioLimit;
+
+ Take = 0;
+ UboxMmioSize = mIioUds->IioUdsPtr->PlatformData.UboxMmioSize;
+ //
+ // Get first and last MMIOL address
+ //
+ TempMmioBase = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Base;
+ TempMmioLimit = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio32Limit;
+ //
+ // Find all the extra space left
+ //
+ for (Socket = 0; Socket < ValidSockets; Socket++) {
+ if ((SocketResources[Socket].MmiolResourceNeeds == 0) && (SocketResources[Socket].MmiolResourcesLeft != 0)) {
+
+ Take += SocketResources[Socket].MmiolResourcesLeft + 1;
+ SocketResources[Socket].MmiolResourcesLeft = 0;
+ }
+ }
+ //
+ // Give space to sockets that needs more space favoring first come first served
+ //
+ for (Socket = 0; Socket < ValidSockets; Socket++) {
+ if ((SocketResources[Socket].MmiolResourceNeeds != 0) && (Take >= SocketResources[Socket].MmiolResourceNeeds)) {
+
+ Take -= SocketResources[Socket].MmiolResourceNeeds;
+ DEBUG((DEBUG_ERROR, "SocketResources[%x].MmiolResourceNeeds = %x\n", Socket, SocketResources[Socket].MmiolResourceNeeds));
+ SocketResources[Socket].MmiolResourceNeeds = 0;
+ }
+ }
+ //
+ // Give away leftover resources
+ //
+ LastStack = LastStackOfSocket (LastSocket);
+ if (Take != 0) {
+ if (SocketResources[LastSocket].StackRes[LastStack].MmiolLength != 0) {
+ SocketResources[LastSocket].StackRes[LastStack].MmiolLength += (UINT32)Take;
+ } else{
+ SocketResources[LastSocket].StackRes[LastStack].MmiolLength += ((UINT32)Take - 1);
+ }
+ }
+ //
+ // Verify all resource requested can fit into the systems address range.
+ //
+ TotalResourceSize = 0;
+ for (Socket = 0; Socket < ValidSockets; Socket++) {
+ LastStackWithResources (&SocketResources[Socket], Socket, ResourceType, &LastStack, &ResourceSize);
+ TotalResourceSize += ResourceSize + UboxMmioSize;
+ }
+ DEBUG ((DEBUG_INFO, "Total Request MMIOL Range = %08Xh\n", TotalResourceSize));
+ DEBUG ((DEBUG_INFO, "Total System MMIOL Range = %08Xh\n", (TempMmioLimit - TempMmioBase + 1)));
+ if (TotalResourceSize > (TempMmioLimit - TempMmioBase + 1)) {
+ //
+ // Not enough system resources to support the request.
+ // Remove all request to update NVRAM variable for this resource type.
+ //
+ for (Socket = 0; Socket < ValidSockets; Socket ++) {
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack ++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiolUpdate = 0;
+ }
+ }
+ DEBUG ((DEBUG_ERROR, "[PCI] ERROR: Out of adjustable MMIOL resources. Can't adjust across sockets\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ DEBUG ((DEBUG_ERROR, "Assigning new socket MMIOL range...\n"));
+ for (Socket = 0, TempMmioLimit = TempMmioBase - 1; Socket < ValidSockets; Socket ++) {
+
+ SocketResources[Socket].MmiolBase = TempMmioLimit + 1;
+ //
+ // Update the stacks base and limit values.
+ //
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+
+ SocketResources[Socket].StackRes[Stack].MmiolBase = 0;
+ SocketResources[Socket].StackRes[Stack].MmiolLimit = 0;
+
+ } else {
+
+ SocketResources[Socket].StackRes[Stack].MmiolBase = TempMmioLimit + 1;
+ if (SocketResources[Socket].StackRes[Stack].MmiolLength != 0) {
+ //
+ // MmiolLength is actually length-1, so we should move TempMmioLimit by MmiolLength+1,
+ // but only when it is >0, i.e. only for stack that has resources.
+ //
+ TempMmioLimit += SocketResources[Socket].StackRes[Stack].MmiolLength + 1;
+ SocketResources[Socket].StackRes[Stack].MmiolLimit = TempMmioLimit;
+
+ } else {
+
+ SocketResources[Socket].StackRes[Stack].MmiolLimit = SocketResources[Socket].StackRes[Stack].MmiolBase;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiolUpdate = 1;
+ }
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].StackRes[%x].MmiolBase = %X newLength = %x\n", Socket, Stack,
+ SocketResources[Socket].StackRes[Stack].MmiolBase, SocketResources[Socket].StackRes[Stack].MmiolLength));
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].StackRes[%x].MmiolLimit = %X\n", Socket, Stack,
+ SocketResources[Socket].StackRes[Stack].MmiolLimit));
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].StackRes[%x].MmiolUpdate= %d\n", Socket, Stack,
+ SocketResources[Socket].StackRes[Stack].MmiolUpdate));
+ } // for (Stack...)
+ //
+ // In the socket resources there can be UBOX, unfortunatelly not exposed in stackPresentBitmap
+ // so it has to be handled with such uguly hacks.
+ //
+ TempMmioLimit += UboxMmioSize;
+ SocketResources[Socket].MmiolLimit = TempMmioLimit;
+ } // for (Socket...)
+
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c
new file mode 100644
index 0000000000..0101904285
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c
@@ -0,0 +1,204 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Guid/SocketPciResourceData.h>
+#include <Guid/SocketIioVariable.h>
+#include <Protocol/IioUds.h>
+
+#include "PciHostBridge.h"
+#include "PciRootBridge.h"
+#include "PciRebalance.h"
+
+
+extern EFI_IIO_UDS_PROTOCOL *mIioUds;
+
+
+/**
+ Adjust resource assignments among sockets to fit the high
+ MMIO resources (64-bit addresses, typically above 4GB) from
+ the PCI(e) devices in the system
+
+ @param[in,out] SocketResources - CPU_RESOURCE structure pointer that stores all resources need per socket
+ @param[in] ResourceType - Type of resource that requires alignment
+ @param[in] ValidSockets - Number of Valid Sockets, need it to calculate how resources need to be splitted
+
+ @retval EFI_SUCCESS - Succeed.
+ @retval EFI_OUT_OF_RESOURCES - Not enough resources to be adjusted within the socket.
+ */
+EFI_STATUS
+AdjustSocketMmioH (
+ IN OUT CPU_RESOURCE *SocketResources,
+ IN UINT8 ResourceType,
+ IN UINT8 ValidSockets
+ )
+{
+ CONST UINT8 LastSocket = ValidSockets - 1;
+ UINT8 Socket;
+ UINT8 Stack;
+ UINT8 LastStack;
+ UINT64 Take;
+ UINT32 UboxMmioSize;
+ UINT64 UnAllocatedMmioh;
+ UINT64 MaxMmioh;
+ UINT64 ResourceSize;
+ UINT64 TotalResourceSize;
+ UINT64 TempMmioBase;
+ UINT64 TempMmioLimit;
+
+ Take = 0;
+ UboxMmioSize = mIioUds->IioUdsPtr->PlatformData.UboxMmioSize;
+ UnAllocatedMmioh = 0;
+ //
+ // Get first and last IO base address
+ //
+ TempMmioBase = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Base;
+ TempMmioLimit = mIioUds->IioUdsPtr->PlatformData.PlatGlobalMmio64Limit;
+
+ // Find all the extra space left
+ for (Socket = 0; Socket < ValidSockets; Socket ++) {
+ if ((SocketResources[Socket].MmiohResourceNeeds == 0) && (SocketResources[Socket].MmiohResourcesLeft != 0)) {
+
+ Take += SocketResources[Socket].MmiohResourcesLeft + 1;
+ SocketResources[Socket].MmiohResourcesLeft = 0;
+ }
+ }
+
+ MaxMmioh = (UINT64) mIioUds->IioUdsPtr->PlatformData.MmiohGranularity.lo;
+ MaxMmioh |= ((UINT64) mIioUds->IioUdsPtr->PlatformData.MmiohGranularity.hi) << 32;
+ //
+ // Maximum chunk accessible in the system based on the given granularity
+ //
+ if (UboxMmioSize == 0) {
+ MaxMmioh = MaxMmioh * 32; //for 14nm
+ } else {
+ MaxMmioh = ((UINT64) 1 << mIioUds->IioUdsPtr->PlatformData.MaxAddressBits);
+ }
+
+ //
+ // Find out how much MMIOH has not been allocated
+ //
+ if (MaxMmioh > (TempMmioLimit - TempMmioBase)) {
+ UnAllocatedMmioh = MaxMmioh - (TempMmioLimit - TempMmioBase) - 1;
+ } else {
+ //
+ // Extra MMIOH is not enough to close the gap for a successful adjustment.
+ // Use all extra MMIOH in case if only a small amount is needed for adjustment or
+ // the granularity was reduced due to MMIOH base.
+ // (14nm only) or remove if map is rejected for this case to start over with correct values.
+ // (10nm only) does not have this problem and doesn't need the code below because the limit is removed and we can use max address lines.
+ //
+ Take += MaxMmioh;
+ }
+
+ // Give space to sockets that needs more space favoring first come first served
+ for (Socket = 0; Socket < ValidSockets; Socket ++) {
+ if ((SocketResources[Socket].MmiohResourceNeeds != 0) && (Take >= SocketResources[Socket].MmiohResourceNeeds)) {
+ //
+ // The socket requesting additional resources can be granted by using the already
+ // allocated range given to the whole system originally.
+ //
+ Take -= SocketResources[Socket].MmiohResourceNeeds;
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].MmiohResourceNeeds = %llX\n",Socket, SocketResources[Socket].MmiohResourceNeeds));
+ SocketResources[Socket].MmiohResourceNeeds = 0;
+ } else if ((SocketResources[Socket].MmiohResourceNeeds != 0) &&
+ (Take < SocketResources[Socket].MmiohResourceNeeds) &&
+ ((UnAllocatedMmioh + Take) >= SocketResources[Socket].MmiohResourceNeeds)) {
+ //
+ // Apply unallocated Mmioh to the socket that requires more to satisfy its request
+ // that's outside the allocated range given to the whole system originally.
+ //
+ SocketResources[Socket].MmiohResourceNeeds -= Take;
+ UnAllocatedMmioh -= SocketResources[Socket].MmiohResourceNeeds;
+ DEBUG ((DEBUG_INFO, "SocketResources[%x].MmiohResourceNeeds = %llX\n", Socket, SocketResources[Socket].MmiohResourceNeeds));
+ DEBUG ((DEBUG_INFO, "Unallocated MMIOH left = %llX\n", UnAllocatedMmioh));
+ SocketResources[Socket].MmiohResourceNeeds = 0;
+ }
+ }
+ //
+ // Give away leftover resources
+ //
+ LastStack = LastStackOfSocket (LastSocket);
+ if (Take != 0) {
+ if (SocketResources[LastSocket].StackRes[LastStack].MmiohLength != 0) {
+ SocketResources[LastSocket].StackRes[LastStack].MmiohLength += Take;
+ } else{
+ SocketResources[LastSocket].StackRes[LastStack].MmiohLength += (Take - 1);
+ }
+ }
+ //
+ // Verify all resource requested can fit into the systems address range.
+ //
+ TotalResourceSize = 0;
+ for (Socket = 0; Socket < ValidSockets; Socket++) {
+ LastStackWithResources (&SocketResources[Socket], Socket, ResourceType, &LastStack, &ResourceSize);
+ TotalResourceSize += ResourceSize;
+ }
+ DEBUG ((DEBUG_INFO, "MaxMmioh = %016llXh\n", MaxMmioh));
+ DEBUG ((DEBUG_INFO, "Total Request MMIOH Range= %016llXh\n", TotalResourceSize));
+ DEBUG ((DEBUG_INFO, "Total System MMIOH Range = %016llXh\n", (MaxMmioh - TempMmioBase)));
+ if (TotalResourceSize > MaxMmioh) {
+ //
+ // Not enough system resources to support the request.
+ // Remove all request to update NVRAM variable for this resource type.
+ //
+ for (Socket = 0; Socket < ValidSockets; Socket ++) {
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack ++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiohUpdate = 0;
+ }
+ }
+ DEBUG ((DEBUG_ERROR, "[PCI] ERROR: Out of adjustable MMIOH resources. Can't adjust across sockets\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ DEBUG ((DEBUG_ERROR, "Assigning new socket MMIOH range...\n"));
+ for (Socket = 0, TempMmioLimit = TempMmioBase - 1; Socket < ValidSockets; Socket++) {
+
+ SocketResources[Socket].MmiohBase = TempMmioLimit + 1;
+ //
+ // Update the stacks base and limit values.
+ //
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++) {
+
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+
+ SocketResources[Socket].StackRes[Stack].MmiohBase = 0;
+ SocketResources[Socket].StackRes[Stack].MmiohLimit = 0;
+
+ } else {
+
+ SocketResources[Socket].StackRes[Stack].MmiohBase = TempMmioLimit + 1;
+ if (SocketResources[Socket].StackRes[Stack].MmiohLength != 0) {
+ //
+ // MmiohLength is actually length-1, so we should move TempMmioLimit by MmiohLength+1,
+ // but only when it is >0, i.e. only for stack that has resources.
+ //
+ TempMmioLimit += SocketResources[Socket].StackRes[Stack].MmiohLength + 1;
+ SocketResources[Socket].StackRes[Stack].MmiohLimit = TempMmioLimit;
+
+ } else {
+
+ SocketResources[Socket].StackRes[Stack].MmiohLimit = SocketResources[Socket].StackRes[Stack].MmiohBase;
+ }
+ SocketResources[Socket].StackRes[Stack].MmiohUpdate = 1;
+ }
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].StackRes[%x].MmiohBase = %llX newLength = %llX\n", Socket, Stack,
+ SocketResources[Socket].StackRes[Stack].MmiohBase, SocketResources[Socket].StackRes[Stack].MmiohLength));
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].StackRes[%x].MmiohLimit = %llX\n", Socket, Stack,
+ SocketResources[Socket].StackRes[Stack].MmiohLimit));
+ DEBUG ((DEBUG_ERROR, "SocketResources[%x].StackRes[%x].MmiohUpdate= %d\n", Socket, Stack,
+ SocketResources[Socket].StackRes[Stack].MmiohUpdate));
+ } // for (Stack...)
+
+ SocketResources[Socket].MmiohLimit = TempMmioLimit;
+ } // for (Socket...)
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h
new file mode 100644
index 0000000000..54faf82e98
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h
@@ -0,0 +1,573 @@
+/** @file
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_ROOT_BRIDGE_H_
+#define _PCI_ROOT_BRIDGE_H_
+
+#include <PiDxe.h>
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/Pci.h>
+
+//
+// Driver Consumed Protocol Prototypes
+//
+#include <Protocol/CpuIo2.h>
+#include <Protocol/DevicePath.h>
+#include <Protocol/PciRootBridgeIo.h>
+#include <Library/DebugLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DxeServicesTableLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/BaseLib.h>
+#include <Library/PciSegmentLib.h>
+#include <Library/UefiLib.h>
+#include <Library/TimerLib.h>
+#include "PciHostResource.h"
+
+
+//
+// Define resource status constant
+//
+typedef struct {
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation;
+ UINTN NumberOfBytes;
+ UINTN NumberOfPages;
+ EFI_PHYSICAL_ADDRESS HostAddress;
+ EFI_PHYSICAL_ADDRESS MappedHostAddress;
+} MAP_INFO;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH AcpiDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH;
+
+#define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('e', '2', 'p', 'b')
+
+typedef struct {
+ UINT32 Signature;
+ LIST_ENTRY Link;
+ EFI_HANDLE Handle;
+ UINT64 AllocationAttributes;
+ UINT64 Attributes;
+ UINT64 Supports;
+ PCI_RES_NODE ResAllocNode[TypeMax];
+ PCI_ROOT_BRIDGE_RESOURCE_APERTURE Aperture;
+ EFI_LOCK PciLock;
+ UINTN PciAddress;
+ UINTN PciData;
+ UINT32 HecBase;
+ UINT32 HecLen;
+ UINTN BusScanCount;
+ BOOLEAN BusNumberAssigned;
+ BOOLEAN DmaAbove4G;
+ VOID *ConfigBuffer;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL RootBridgeIo;
+} PCI_ROOT_BRIDGE_INSTANCE;
+
+#define ROOT_BRIDGE_FROM_THIS(a) CR (a, PCI_ROOT_BRIDGE_INSTANCE, RootBridgeIo, PCI_ROOT_BRIDGE_SIGNATURE)
+
+#define ROOT_BRIDGE_FROM_LINK(a) CR (a, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE)
+
+/**
+ Construct the Pci Root Bridge Io protocol.
+
+ @param[out] Protocol - Protocol to initialize.
+ @param[in] HostBridgeHandle - Handle to the HostBridge.
+ @param[in] ResAperture - Resource apperture of the root bridge.
+ @param[in] SegmentNumber - PCI segment of this root bridge
+ @param[in] AllocAttributes - Attribute of resouce allocated.
+
+ @retval EFI_SUCCESS - Success.
+ @retval Others - Fail.
+**/
+EFI_STATUS
+SimpleIioRootBridgeConstructor (
+ OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *Protocol,
+ IN EFI_HANDLE HostBridgeHandle,
+ IN PCI_ROOT_BRIDGE_RESOURCE_APERTURE *ResAperture,
+ IN UINT16 SegmentNumber,
+ IN UINT64 AllocAttributes
+ );
+
+//
+// Protocol Member Function Prototypes
+//
+/**
+
+ Poll an address in memory mapped space until an exit condition is met
+ or a timeout occurs.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Width - Width of the memory operation.
+ @param Address - The base address of the memory operation.
+ @param Mask - Mask used for polling criteria.
+ @param Value - Comparison value used for polling exit criteria.
+ @param Delay - Number of 100ns units to poll.
+ @param Result - Pointer to the last value read from memory location.
+
+ @retval EFI_SUCCESS - Success.
+ @retval EFI_INVALID_PARAMETER - Invalid parameter found.
+ @retval EFI_TIMEOUT - Delay expired before a match occurred.
+ @retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPollMem (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINT64 Mask,
+ IN UINT64 Value,
+ IN UINT64 Delay,
+ OUT UINT64 *Result
+ )
+;
+
+/**
+
+ Poll an address in I/O space until an exit condition is met
+ or a timeout occurs.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Width - Width of I/O operation.
+ @param Address - The base address of the I/O operation.
+ @param Mask - Mask used for polling criteria.
+ @param Value - Comparison value used for polling exit criteria.
+ @param Delay - Number of 100ns units to poll.
+ @param Result - Pointer to the last value read from memory location.
+
+ @retval EFI_SUCCESS - Success.
+ @retval EFI_INVALID_PARAMETER - Invalid parameter found.
+ @retval EFI_TIMEOUT - Delay expired before a match occurred.
+ @retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPollIo (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINT64 Mask,
+ IN UINT64 Value,
+ IN UINT64 Delay,
+ OUT UINT64 *Result
+ )
+;
+
+/**
+
+ Allow read from memory mapped I/O space.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Width - The width of memory operation.
+ @param Address - Base address of the memory operation.
+ @param Count - Number of memory opeartion to perform.
+ @param Buffer - The destination buffer to store data.
+
+ @retval EFI_SUCCESS - Success.
+ @retval EFI_INVALID_PARAMETER - Invalid parameter found.
+ @retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoMemRead (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ )
+;
+
+/**
+
+ Allow write to memory mapped I/O space.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Width - The width of memory operation.
+ @param Address - Base address of the memory operation.
+ @param Count - Number of memory opeartion to perform.
+ @param Buffer - The source buffer to write data from.
+
+ @retval EFI_SUCCESS - Success.
+ @retval EFI_INVALID_PARAMETER - Invalid parameter found.
+ @retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoMemWrite (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ )
+;
+
+/**
+
+ Enable a PCI driver to read PCI controller registers in the
+ PCI root bridge I/O space.
+
+ @param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ @param Width - Signifies the width of the memory operation.
+ @param UserAddress - The base address of the I/O operation.
+ @param Count - The number of I/O operations to perform.
+ @param UserBuffer - The destination buffer to store the results.
+
+ @retval EFI_SUCCESS - The data was read from the PCI root bridge.
+ @retval EFI_INVALID_PARAMETER - Invalid parameters found.
+ @retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
+ @retval resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoIoRead (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 UserAddress,
+ IN UINTN Count,
+ IN OUT VOID *UserBuffer
+ )
+;
+
+/**
+
+ Enable a PCI driver to write to PCI controller registers in the
+ PCI root bridge I/O space.
+
+ @param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ @param Width - Signifies the width of the memory operation.
+ @param UserAddress - The base address of the I/O operation.
+ @param Count - The number of I/O operations to perform.
+ @param UserBuffer - The source buffer to write data from.
+
+ @retval EFI_SUCCESS - The data was written to the PCI root bridge.
+ @retval EFI_INVALID_PARAMETER - Invalid parameters found.
+ @retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
+ @retval resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoIoWrite (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 UserAddress,
+ IN UINTN Count,
+ IN OUT VOID *UserBuffer
+ )
+;
+
+/**
+
+ Copy one region of PCI root bridge memory space to be copied to
+ another region of PCI root bridge memory space.
+
+ @param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Width - Signifies the width of the memory operation.
+ @param DestAddress - Destination address of the memory operation.
+ @param SrcAddress - Source address of the memory operation.
+ @param Count - Number of memory operations to perform.
+
+ @retval EFI_SUCCESS - The data was copied successfully.
+ @retval EFI_INVALID_PARAMETER - Invalid parameters found.
+ @retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
+ @retval resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoCopyMem (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 DestAddress,
+ IN UINT64 SrcAddress,
+ IN UINTN Count
+ )
+;
+
+/**
+
+ Allows read from PCI configuration space.
+
+ @param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ @param Width - Signifies the width of the memory operation.
+ @param Address - The address within the PCI configuration space
+ for the PCI controller.
+ @param Count - The number of PCI configuration operations
+ to perform.
+ @param Buffer - The destination buffer to store the results.
+
+ @retval EFI_SUCCESS - The data was read from the PCI root bridge.
+ @retval EFI_INVALID_PARAMETER - Invalid parameters found.
+ @retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
+ @retval resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPciRead (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ )
+;
+
+/**
+
+ Allows write to PCI configuration space.
+
+ @param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ @param Width - Signifies the width of the memory operation.
+ @param Address - The address within the PCI configuration space
+ for the PCI controller.
+ @param Count - The number of PCI configuration operations
+ to perform.
+ @param Buffer - The source buffer to get the results.
+
+ @retval EFI_SUCCESS - The data was written to the PCI root bridge.
+ @retval EFI_INVALID_PARAMETER - Invalid parameters found.
+ @retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
+ @retval resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPciWrite (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ )
+;
+
+/**
+ Provides the PCI controller-specific address needed to access
+ system memory for DMA.
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Operation Indicate if the bus master is going to read or write
+ to system memory.
+ @param HostAddress The system memory address to map on the PCI controller.
+ @param NumberOfBytes On input the number of bytes to map.
+ On output the number of bytes that were mapped.
+ @param DeviceAddress The resulting map address for the bus master PCI
+ controller to use to access the system memory's HostAddress.
+ @param Mapping The value to pass to Unmap() when the bus master DMA
+ operation is complete.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER Invalid parameters found.
+ @retval EFI_UNSUPPORTED The HostAddress cannot be mapped as a common buffer.
+ @retval EFI_DEVICE_ERROR The System hardware could not map the requested address.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoMap (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
+ IN VOID *HostAddress,
+ IN OUT UINTN *NumberOfBytes,
+ OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
+ OUT VOID **Mapping
+ )
+;
+
+/**
+ Completes the Map() operation and releases any corresponding resources.
+
+ The Unmap() function completes the Map() operation and releases any
+ corresponding resources.
+ If the operation was an EfiPciOperationBusMasterWrite or
+ EfiPciOperationBusMasterWrite64, the data is committed to the target system
+ memory.
+ Any resources used for the mapping are freed.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Mapping The mapping value returned from Map().
+
+ @retval EFI_SUCCESS The range was unmapped.
+ @retval EFI_INVALID_PARAMETER Mapping is not a value that was returned by Map().
+ @retval EFI_DEVICE_ERROR The data was not committed to the target system memory.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoUnmap (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN VOID *Mapping
+ )
+;
+
+/**
+ Allocates pages that are suitable for an EfiPciOperationBusMasterCommonBuffer
+ or EfiPciOperationBusMasterCommonBuffer64 mapping.
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Type This parameter is not used and must be ignored.
+ @param MemoryType The type of memory to allocate, EfiBootServicesData or
+ EfiRuntimeServicesData.
+ @param Pages The number of pages to allocate.
+ @param HostAddress A pointer to store the base system memory address of the
+ allocated range.
+ @param Attributes The requested bit mask of attributes for the allocated
+ range. Only the attributes
+ EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE,
+ EFI_PCI_ATTRIBUTE_MEMORY_CACHED, and
+ EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE may be used with this
+ function.
+
+ @retval EFI_SUCCESS The requested memory pages were allocated.
+ @retval EFI_INVALID_PARAMETER MemoryType is invalid.
+ @retval EFI_INVALID_PARAMETER HostAddress is NULL.
+ @retval EFI_UNSUPPORTED Attributes is unsupported. The only legal
+ attribute bits are MEMORY_WRITE_COMBINE,
+ MEMORY_CACHED, and DUAL_ADDRESS_CYCLE.
+ @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoAllocateBuffer (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_ALLOCATE_TYPE Type,
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN Pages,
+ OUT VOID **HostAddress,
+ IN UINT64 Attributes
+ )
+;
+
+/**
+
+ Free memory allocated in AllocateBuffer.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ instance.
+ @param Pages - Number of pages to free.
+ @param HostAddress - The base system memory address of the
+ allocated range.
+
+ @retval EFI_SUCCESS - Requested memory pages were freed.
+ @retval EFI_INVALID_PARAMETER - Invalid parameter found.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoFreeBuffer (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN UINTN Pages,
+ OUT VOID *HostAddress
+ )
+;
+
+/**
+
+ Flushes all PCI posted write transactions from a PCI host
+ bridge to system memory.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+
+ @retval EFI_SUCCESS - PCI posted write transactions were flushed
+ @retval from PCI host bridge to system memory.
+ @retval EFI_DEVICE_ERROR - Fail due to hardware error.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoFlush (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
+ )
+;
+
+/**
+ Gets the attributes that a PCI root bridge supports setting with
+ SetAttributes(), and the attributes that a PCI root bridge is currently
+ using.
+
+ The GetAttributes() function returns the mask of attributes that this PCI
+ root bridge supports and the mask of attributes that the PCI root bridge is
+ currently using.
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Supported A pointer to the mask of attributes that this PCI root
+ bridge supports setting with SetAttributes().
+ @param Attributes A pointer to the mask of attributes that this PCI root
+ bridge is currently using.
+
+ @retval EFI_SUCCESS If Supports is not NULL, then the attributes
+ that the PCI root bridge supports is returned
+ in Supports. If Attributes is not NULL, then
+ the attributes that the PCI root bridge is
+ currently using is returned in Attributes.
+ @retval EFI_INVALID_PARAMETER Both Supports and Attributes are NULL.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoGetAttributes (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ OUT UINT64 *Supported,
+ OUT UINT64 *Attributes
+ )
+;
+
+/**
+
+ Sets the attributes for a resource range on a PCI root bridge.
+
+ @param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Attributes - The mask of attributes to set.
+ @param ResourceBase - Pointer to the base address of the resource range
+ to be modified by the attributes specified by Attributes.
+ @param ResourceLength - Pointer to the length of the resource range to be modified.
+
+ @retval EFI_SUCCESS - Success.
+ @retval EFI_INVALID_PARAMETER - Invalid parameter found.
+ @retval EFI_OUT_OF_RESOURCES - Not enough resources to set the attributes upon.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoSetAttributes (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN UINT64 Attributes,
+ IN OUT UINT64 *ResourceBase,
+ IN OUT UINT64 *ResourceLength
+ )
+;
+
+/**
+
+ Retrieves the current resource settings of this PCI root bridge
+ in the form of a set of ACPI resource descriptor.
+
+ @param This - Pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
+ @param Resources - Pointer to the resource descriptor that
+ describe the current configuration of this PCI root
+ bridge.
+
+ @retval EFI_SUCCESS - Success.
+ @retval EFI_UNSUPPORTED - Current configuration of the PCI root bridge
+ @retval could not be retrieved.
+
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoConfiguration (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ OUT VOID **Resources
+ )
+;
+
+extern EFI_CPU_IO2_PROTOCOL *mCpuIo;
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c
new file mode 100644
index 0000000000..ed5fb7e4a3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c
@@ -0,0 +1,1664 @@
+/** @file
+ IIO PCI Root Bridge Io Protocol code. Generic enough to work for all IIOs.
+ Does not support configuration accesses to the extended PCI Express registers yet.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PciHostBridge.h"
+#include "PciRootBridge.h"
+
+#include <Protocol/IioUds.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+
+#include "PciRebalance.h"
+
+extern EFI_IIO_UDS_PROTOCOL *mIioUds;
+
+
+//
+// Pci Root Bridge Io Module Variables
+//
+EFI_CPU_IO2_PROTOCOL *mCpuIo;
+STATIC DYNAMIC_SI_LIBARY_PROTOCOL *mDynamicSiLibraryProtocol;
+
+/**
+ Construct the Pci Root Bridge Io protocol.
+
+ @param[out] Protocol - Protocol to initialize.
+ @param[in] HostBridgeHandle - Handle to the HostBridge.
+ @param[in] ResAperture - Resource apperture of the root bridge.
+ @param[in] SegmentNumber - PCI segment of this root bridge
+ @param[in] AllocAttributes - Attribute of resouce allocated.
+
+ @retval EFI_SUCCESS - Success.
+ @retval Others - Fail.
+**/
+EFI_STATUS
+SimpleIioRootBridgeConstructor (
+ OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *Protocol,
+ IN EFI_HANDLE HostBridgeHandle,
+ IN PCI_ROOT_BRIDGE_RESOURCE_APERTURE *ResAperture,
+ IN UINT16 SegmentNumber,
+ IN UINT64 AllocAttributes
+ )
+{
+ EFI_STATUS Status;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ PCI_RESOURCE_TYPE Index;
+ UINT32 HecBase;
+ UINT32 HecSize;
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (Protocol);
+
+ //
+ // Initialize the apertures with default values
+ //
+ CopyMem (
+ &RootBridge->Aperture,
+ ResAperture,
+ sizeof (PCI_ROOT_BRIDGE_RESOURCE_APERTURE)
+ );
+
+ for (Index = TypeIo; Index < TypeMax; Index++) {
+ RootBridge->ResAllocNode[Index].Type = Index;
+ RootBridge->ResAllocNode[Index].Base = 0;
+ RootBridge->ResAllocNode[Index].Length = 0;
+ RootBridge->ResAllocNode[Index].Status = ResNone;
+ }
+
+ EfiInitializeLock (&RootBridge->PciLock, TPL_HIGH_LEVEL);
+ RootBridge->PciAddress = 0xCF8;
+ RootBridge->PciData = 0xCFC;
+
+ RootBridge->AllocationAttributes = AllocAttributes;
+ RootBridge->Attributes = 0;
+ RootBridge->Supports = EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO |
+ EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO |
+ EFI_PCI_ATTRIBUTE_ISA_IO_16 |
+ EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16 |
+ EFI_PCI_ATTRIBUTE_VGA_MEMORY |
+ EFI_PCI_ATTRIBUTE_VGA_IO_16;
+
+ //
+ // Don't support BASE above 4GB currently
+ // Position to bit 39:28
+ //
+ HecBase = (UINT32) mIioUds->IioUdsPtr->PlatformData.PciExpressBase;
+ HecSize = (UINT32) mIioUds->IioUdsPtr->PlatformData.PciExpressSize;
+ ASSERT (HecBase != 0);
+
+ RootBridge->HecBase = HecBase;
+ RootBridge->HecLen = HecSize;
+
+ RootBridge->BusNumberAssigned = FALSE;
+ RootBridge->BusScanCount = 0;
+
+ Protocol->ParentHandle = HostBridgeHandle;
+
+ Protocol->PollMem = RootBridgeIoPollMem;
+ Protocol->PollIo = RootBridgeIoPollIo;
+
+ Protocol->Mem.Read = RootBridgeIoMemRead;
+ Protocol->Mem.Write = RootBridgeIoMemWrite;
+
+ Protocol->Io.Read = RootBridgeIoIoRead;
+ Protocol->Io.Write = RootBridgeIoIoWrite;
+
+ Protocol->CopyMem = RootBridgeIoCopyMem;
+
+ Protocol->Pci.Read = RootBridgeIoPciRead;
+ Protocol->Pci.Write = RootBridgeIoPciWrite;
+
+ Protocol->Map = RootBridgeIoMap;
+ Protocol->Unmap = RootBridgeIoUnmap;
+
+ Protocol->AllocateBuffer = RootBridgeIoAllocateBuffer;
+ Protocol->FreeBuffer = RootBridgeIoFreeBuffer;
+
+ Protocol->Flush = RootBridgeIoFlush;
+
+ Protocol->GetAttributes = RootBridgeIoGetAttributes;
+ Protocol->SetAttributes = RootBridgeIoSetAttributes;
+
+ Protocol->Configuration = RootBridgeIoConfiguration;
+
+ Protocol->SegmentNumber = SegmentNumber;
+
+ Status = gBS->LocateProtocol (
+ &gEfiCpuIo2ProtocolGuid,
+ NULL,
+ &mCpuIo
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &mDynamicSiLibraryProtocol);
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Return the result of (Multiplicand * Multiplier / Divisor).
+
+ @param Multiplicand A 64-bit unsigned value.
+ @param Multiplier A 64-bit unsigned value.
+ @param Divisor A 32-bit unsigned value.
+ @param Remainder A pointer to a 32-bit unsigned value. This parameter is
+ optional and may be NULL.
+
+ @return Multiplicand * Multiplier / Divisor.
+**/
+UINT64
+MultThenDivU64x64x32 (
+ IN UINT64 Multiplicand,
+ IN UINT64 Multiplier,
+ IN UINT32 Divisor,
+ OUT UINT32 *Remainder OPTIONAL
+ )
+{
+ UINT64 Uint64;
+ UINT32 LocalRemainder;
+ UINT32 Uint32;
+ if (Multiplicand > DivU64x64Remainder (MAX_UINT64, Multiplier, NULL)) {
+ //
+ // Make sure Multiplicand is the bigger one.
+ //
+ if (Multiplicand < Multiplier) {
+ Uint64 = Multiplicand;
+ Multiplicand = Multiplier;
+ Multiplier = Uint64;
+ }
+ //
+ // Because Multiplicand * Multiplier overflows,
+ // Multiplicand * Multiplier / Divisor
+ // = (2 * Multiplicand' + 1) * Multiplier / Divisor
+ // = 2 * (Multiplicand' * Multiplier / Divisor) + Multiplier / Divisor
+ //
+ Uint64 = MultThenDivU64x64x32 (RShiftU64 (Multiplicand, 1), Multiplier, Divisor, &LocalRemainder);
+ Uint64 = LShiftU64 (Uint64, 1);
+ Uint32 = 0;
+ if ((Multiplicand & 0x1) == 1) {
+ Uint64 += DivU64x32Remainder (Multiplier, Divisor, &Uint32);
+ }
+ return Uint64 + DivU64x32Remainder (Uint32 + LShiftU64 (LocalRemainder, 1), Divisor, Remainder);
+ } else {
+ return DivU64x32Remainder (MultU64x64 (Multiplicand, Multiplier), Divisor, Remainder);
+ }
+}
+
+/**
+ Return the elapsed tick count from CurrentTick.
+
+ @param CurrentTick On input, the previous tick count.
+ On output, the current tick count.
+ @param StartTick The value the performance counter starts with when it
+ rolls over.
+ @param EndTick The value that the performance counter ends with before
+ it rolls over.
+
+ @return The elapsed tick count from CurrentTick.
+**/
+UINT64
+GetElapsedTick (
+ UINT64 *CurrentTick,
+ UINT64 StartTick,
+ UINT64 EndTick
+ )
+{
+ UINT64 PreviousTick;
+
+ PreviousTick = *CurrentTick;
+ *CurrentTick = GetPerformanceCounter();
+ if (StartTick < EndTick) {
+ return *CurrentTick - PreviousTick;
+ } else {
+ return PreviousTick - *CurrentTick;
+ }
+}
+
+/**
+ Polls an address in memory mapped I/O space until an exit condition is met,
+ or a timeout occurs.
+
+ This function provides a standard way to poll a PCI memory location. A PCI
+ memory read operation is performed at the PCI memory address specified by
+ Address for the width specified by Width. The result of this PCI memory read
+ operation is stored in Result. This PCI memory read operation is repeated
+ until either a timeout of Delay 100 ns units has expired, or (Result & Mask)
+ is equal to Value.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Width Signifies the width of the memory operations.
+ @param[in] Address The base address of the memory operations. The caller
+ is responsible for aligning Address if required.
+ @param[in] Mask Mask used for the polling criteria. Bytes above Width
+ in Mask are ignored. The bits in the bytes below Width
+ which are zero in Mask are ignored when polling the
+ memory address.
+ @param[in] Value The comparison value used for the polling exit
+ criteria.
+ @param[in] Delay The number of 100 ns units to poll. Note that timer
+ available may be of poorer granularity.
+ @param[out] Result Pointer to the last value read from the memory
+ location.
+
+ @retval EFI_SUCCESS The last data returned from the access matched
+ the poll exit criteria.
+ @retval EFI_INVALID_PARAMETER Width is invalid.
+ @retval EFI_INVALID_PARAMETER Result is NULL.
+ @retval EFI_TIMEOUT Delay expired before a match occurred.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPollMem (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINT64 Mask,
+ IN UINT64 Value,
+ IN UINT64 Delay,
+ OUT UINT64 *Result
+ )
+{
+ EFI_STATUS Status;
+ UINT64 NumberOfTicks;
+ UINT32 Remainder;
+ UINT64 StartTick;
+ UINT64 EndTick;
+ UINT64 CurrentTick;
+ UINT64 ElapsedTick;
+ UINT64 Frequency;
+
+ if (Result == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if ((UINT32)Width > EfiPciWidthUint64) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // No matter what, always do a single poll.
+ //
+ Status = This->Mem.Read (This, Width, Address, 1, Result);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if ((*Result & Mask) == Value) {
+ return EFI_SUCCESS;
+ }
+
+ if (Delay == 0) {
+ return EFI_SUCCESS;
+
+ } else {
+ //
+ // NumberOfTicks = Frenquency * Delay / EFI_TIMER_PERIOD_SECONDS(1)
+ //
+ Frequency = GetPerformanceCounterProperties (&StartTick, &EndTick);
+ NumberOfTicks = MultThenDivU64x64x32 (Frequency, Delay, (UINT32)EFI_TIMER_PERIOD_SECONDS(1), &Remainder);
+ if (Remainder >= (UINTN)EFI_TIMER_PERIOD_SECONDS(1) / 2) {
+ NumberOfTicks++;
+ }
+ for ( ElapsedTick = 0, CurrentTick = GetPerformanceCounter()
+ ; ElapsedTick <= NumberOfTicks
+ ; ElapsedTick += GetElapsedTick (&CurrentTick, StartTick, EndTick)
+ ) {
+ Status = This->Mem.Read (This, Width, Address, 1, Result);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if ((*Result & Mask) == Value) {
+ return EFI_SUCCESS;
+ }
+ }
+ }
+ return EFI_TIMEOUT;
+}
+
+/**
+ Reads from the I/O space of a PCI Root Bridge. Returns when either the
+ polling exit criteria is satisfied or after a defined duration.
+
+ This function provides a standard way to poll a PCI I/O location. A PCI I/O
+ read operation is performed at the PCI I/O address specified by Address for
+ the width specified by Width.
+ The result of this PCI I/O read operation is stored in Result. This PCI I/O
+ read operation is repeated until either a timeout of Delay 100 ns units has
+ expired, or (Result & Mask) is equal to Value.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Width Signifies the width of the I/O operations.
+ @param[in] Address The base address of the I/O operations. The caller is
+ responsible for aligning Address if required.
+ @param[in] Mask Mask used for the polling criteria. Bytes above Width in
+ Mask are ignored. The bits in the bytes below Width
+ which are zero in Mask are ignored when polling the I/O
+ address.
+ @param[in] Value The comparison value used for the polling exit criteria.
+ @param[in] Delay The number of 100 ns units to poll. Note that timer
+ available may be of poorer granularity.
+ @param[out] Result Pointer to the last value read from the memory location.
+
+ @retval EFI_SUCCESS The last data returned from the access matched
+ the poll exit criteria.
+ @retval EFI_INVALID_PARAMETER Width is invalid.
+ @retval EFI_INVALID_PARAMETER Result is NULL.
+ @retval EFI_TIMEOUT Delay expired before a match occurred.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPollIo (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINT64 Mask,
+ IN UINT64 Value,
+ IN UINT64 Delay,
+ OUT UINT64 *Result
+ )
+{
+ EFI_STATUS Status;
+ UINT64 NumberOfTicks;
+ UINT32 Remainder;
+ UINT64 StartTick;
+ UINT64 EndTick;
+ UINT64 CurrentTick;
+ UINT64 ElapsedTick;
+ UINT64 Frequency;
+
+ //
+ // No matter what, always do a single poll.
+ //
+
+ if (Result == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if ((UINT32)Width > EfiPciWidthUint64) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Status = This->Io.Read (This, Width, Address, 1, Result);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ if ((*Result & Mask) == Value) {
+ return EFI_SUCCESS;
+ }
+
+ if (Delay == 0) {
+ return EFI_SUCCESS;
+
+ } else {
+ //
+ // NumberOfTicks = Frenquency * Delay / EFI_TIMER_PERIOD_SECONDS(1)
+ //
+ Frequency = GetPerformanceCounterProperties (&StartTick, &EndTick);
+ NumberOfTicks = MultThenDivU64x64x32 (Frequency, Delay, (UINT32)EFI_TIMER_PERIOD_SECONDS(1), &Remainder);
+ if (Remainder >= (UINTN)EFI_TIMER_PERIOD_SECONDS(1) / 2) {
+ NumberOfTicks++;
+ }
+ for ( ElapsedTick = 0, CurrentTick = GetPerformanceCounter()
+ ; ElapsedTick <= NumberOfTicks
+ ; ElapsedTick += GetElapsedTick (&CurrentTick, StartTick, EndTick)
+ ) {
+ Status = This->Io.Read (This, Width, Address, 1, Result);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if ((*Result & Mask) == Value) {
+ return EFI_SUCCESS;
+ }
+ }
+ }
+ return EFI_TIMEOUT;
+}
+
+/**
+ Enables a PCI driver to access PCI controller registers in the PCI root
+ bridge memory space.
+
+ The Mem.Read(), and Mem.Write() functions enable a driver to access PCI
+ controller registers in the PCI root bridge memory space.
+ The memory operations are carried out exactly as requested. The caller is
+ responsible for satisfying any alignment and memory width restrictions that a
+ PCI Root Bridge on a platform might require.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Width Signifies the width of the memory operation.
+ @param[in] Address The base address of the memory operation. The caller
+ is responsible for aligning the Address if required.
+ @param[in] Count The number of memory operations to perform. Bytes
+ moved is Width size * Count, starting at Address.
+ @param[out] Buffer For read operations, the destination buffer to store
+ the results. For write operations, the source buffer
+ to write data from.
+
+ @retval EFI_SUCCESS The data was read from or written to the PCI
+ root bridge.
+ @retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
+ @retval EFI_INVALID_PARAMETER Buffer is NULL.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoMemRead (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ OUT VOID *Buffer
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ if (Buffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Width < 0 ||Width >= EfiPciWidthMaximum ) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+ //
+ // Check memory access limit
+ //
+ if (RootBridge->Aperture.Mem64Limit > RootBridge->Aperture.Mem64Base) {
+ if (Address > RootBridge->Aperture.Mem64Limit) {
+ return EFI_INVALID_PARAMETER;
+ }
+ } else {
+ if (Address > RootBridge->Aperture.Mem32Limit) {
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+
+ return mCpuIo->Mem.Read (
+ mCpuIo,
+ (EFI_CPU_IO_PROTOCOL_WIDTH) Width,
+ Address,
+ Count,
+ Buffer
+ );
+}
+
+/**
+ Enables a PCI driver to access PCI controller registers in the PCI root
+ bridge memory space.
+
+ The Mem.Read(), and Mem.Write() functions enable a driver to access PCI
+ controller registers in the PCI root bridge memory space.
+ The memory operations are carried out exactly as requested. The caller is
+ responsible for satisfying any alignment and memory width restrictions that a
+ PCI Root Bridge on a platform might require.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Width Signifies the width of the memory operation.
+ @param[in] Address The base address of the memory operation. The caller
+ is responsible for aligning the Address if required.
+ @param[in] Count The number of memory operations to perform. Bytes
+ moved is Width size * Count, starting at Address.
+ @param[in] Buffer For read operations, the destination buffer to store
+ the results. For write operations, the source buffer
+ to write data from.
+
+ @retval EFI_SUCCESS The data was read from or written to the PCI
+ root bridge.
+ @retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
+ @retval EFI_INVALID_PARAMETER Buffer is NULL.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoMemWrite (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN VOID *Buffer
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (Buffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Width < 0 || Width >= EfiPciWidthMaximum ) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ //
+ // Check memory access limit
+ //
+ if (RootBridge->Aperture.Mem64Limit > RootBridge->Aperture.Mem64Base) {
+ if (Address > RootBridge->Aperture.Mem64Limit) {
+ return EFI_INVALID_PARAMETER;
+ }
+ } else {
+ if (Address > RootBridge->Aperture.Mem32Limit) {
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+ return mCpuIo->Mem.Write (
+ mCpuIo,
+ (EFI_CPU_IO_PROTOCOL_WIDTH) Width,
+ Address,
+ Count,
+ Buffer
+ );
+}
+
+/**
+ Enables a PCI driver to access PCI controller registers in the PCI root
+ bridge I/O space.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Width Signifies the width of the memory operations.
+ @param[in] Address The base address of the I/O operation. The caller is
+ responsible for aligning the Address if required.
+ @param[in] Count The number of I/O operations to perform. Bytes moved
+ is Width size * Count, starting at Address.
+ @param[out] Buffer For read operations, the destination buffer to store
+ the results. For write operations, the source buffer
+ to write data from.
+
+ @retval EFI_SUCCESS The data was read from or written to the PCI
+ root bridge.
+ @retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
+ @retval EFI_INVALID_PARAMETER Buffer is NULL.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoIoRead (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ OUT VOID *Buffer
+ )
+{
+ UINTN AlignMask;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (Buffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Width < 0 || Width >= EfiPciWidthMaximum ) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ //
+ // AlignMask = (1 << Width) - 1;
+ //
+ AlignMask = (1 << (Width & 0x03)) - 1;
+
+ //
+ // check Io access limit
+ //
+ if (Address > RootBridge->Aperture.IoLimit) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Address & AlignMask) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ return mCpuIo->Io.Read (
+ mCpuIo,
+ (EFI_CPU_IO_PROTOCOL_WIDTH) Width,
+ Address,
+ Count,
+ Buffer
+ );
+
+}
+
+/**
+ Enables a PCI driver to access PCI controller registers in the PCI root
+ bridge I/O space.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Width Signifies the width of the memory operations.
+ @param[in] Address The base address of the I/O operation. The caller is
+ responsible for aligning the Address if required.
+ @param[in] Count The number of I/O operations to perform. Bytes moved
+ is Width size * Count, starting at Address.
+ @param[in] Buffer For read operations, the destination buffer to store
+ the results. For write operations, the source buffer
+ to write data from.
+
+ @retval EFI_SUCCESS The data was read from or written to the PCI
+ root bridge.
+ @retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
+ @retval EFI_INVALID_PARAMETER Buffer is NULL.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoIoWrite (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN VOID *Buffer
+ )
+{
+ UINTN AlignMask;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (Buffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Width < 0 || Width >= EfiPciWidthMaximum ) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ //
+ // AlignMask = (1 << Width) - 1;
+ //
+ AlignMask = (1 << (Width & 0x03)) - 1;
+
+ //
+ // Check Io access limit
+ //
+ if (Address > RootBridge->Aperture.IoLimit) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Address & AlignMask) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ return mCpuIo->Io.Write (
+ mCpuIo,
+ (EFI_CPU_IO_PROTOCOL_WIDTH) Width,
+ Address,
+ Count,
+ Buffer
+ );
+
+}
+
+/**
+ Enables a PCI driver to copy one region of PCI root bridge memory space to
+ another region of PCI root bridge memory space.
+
+ The CopyMem() function enables a PCI driver to copy one region of PCI root
+ bridge memory space to another region of PCI root bridge memory space. This
+ is especially useful for video scroll operation on a memory mapped video
+ buffer.
+ The memory operations are carried out exactly as requested. The caller is
+ responsible for satisfying any alignment and memory width restrictions that a
+ PCI root bridge on a platform might require.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ instance.
+ @param[in] Width Signifies the width of the memory operations.
+ @param[in] DestAddress The destination address of the memory operation. The
+ caller is responsible for aligning the DestAddress if
+ required.
+ @param[in] SrcAddress The source address of the memory operation. The caller
+ is responsible for aligning the SrcAddress if
+ required.
+ @param[in] Count The number of memory operations to perform. Bytes
+ moved is Width size * Count, starting at DestAddress
+ and SrcAddress.
+
+ @retval EFI_SUCCESS The data was copied from one memory region
+ to another memory region.
+ @retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoCopyMem (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 DestAddress,
+ IN UINT64 SrcAddress,
+ IN UINTN Count
+ )
+{
+ EFI_STATUS Status;
+ BOOLEAN Forward;
+ UINTN Stride;
+ UINTN Index;
+ UINT64 Result;
+
+ if ((UINT32) Width > EfiPciWidthUint64) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (DestAddress == SrcAddress) {
+ return EFI_SUCCESS;
+ }
+
+ Stride = (UINTN)1 << Width;
+
+ Forward = TRUE;
+ if ((DestAddress > SrcAddress) &&
+ (DestAddress < (SrcAddress + Count * Stride))) {
+ Forward = FALSE;
+ SrcAddress = SrcAddress + (Count - 1) * Stride;
+ DestAddress = DestAddress + (Count - 1) * Stride;
+ }
+
+ for (Index = 0; Index < Count; Index++) {
+ Status = RootBridgeIoMemRead (
+ This,
+ Width,
+ SrcAddress,
+ 1,
+ &Result
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ Status = RootBridgeIoMemWrite (
+ This,
+ Width,
+ DestAddress,
+ 1,
+ &Result
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ if (Forward) {
+ SrcAddress += Stride;
+ DestAddress += Stride;
+ } else {
+ SrcAddress -= Stride;
+ DestAddress -= Stride;
+ }
+ }
+ return EFI_SUCCESS;
+}
+
+
+/**
+
+Arguments:
+
+**/
+STATIC
+EFI_STATUS
+RootBridgeIoPciRW (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN BOOLEAN Write,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 UserAddress,
+ IN UINTN Count,
+ IN OUT VOID *UserBuffer
+ )
+{
+ PCI_CONFIG_ACCESS_CF8 Pci;
+ PCI_CONFIG_ACCESS_CF8 PciAligned;
+ UINT32 Stride;
+ UINTN PciData;
+ UINTN PciDataStride;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (Width >= EfiPciWidthMaximum) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ ASSERT (((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*)&UserAddress)->ExtendedRegister == 0x00);
+
+ Stride = 1 << Width;
+
+ Pci.Bits.Reg = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &UserAddress)->Register;
+ Pci.Bits.Func = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &UserAddress)->Function;
+ Pci.Bits.Dev = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &UserAddress)->Device;
+ Pci.Bits.Bus = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &UserAddress)->Bus;
+ Pci.Bits.Reserved = 0;
+ Pci.Bits.Enable = 1;
+
+ //
+ // PCI Configure access are all 32-bit aligned, but by accessing the
+ // CONFIG_DATA_REGISTER (0xcfc) with different widths more cycle types
+ // are possible on PCI.
+ //
+ // To read a byte of PCI configuration space you load 0xcf8 and
+ // read 0xcfc, 0xcfd, 0xcfe, 0xcff
+ //
+ PciDataStride = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS*) &UserAddress)->Register & 0x03;
+
+ while (Count) {
+ PciAligned = Pci;
+ PciAligned.Bits.Reg &= 0xfc;
+ PciData = RootBridge->PciData + PciDataStride;
+ EfiAcquireLock(&RootBridge->PciLock);
+ This->Io.Write (This, EfiPciWidthUint32, \
+ RootBridge->PciAddress, 1, &PciAligned);
+ if (Write) {
+ This->Io.Write (This, Width, PciData, 1, UserBuffer);
+ } else {
+ This->Io.Read (This, Width, PciData, 1, UserBuffer);
+ }
+ EfiReleaseLock(&RootBridge->PciLock);
+ UserBuffer = ((UINT8 *)UserBuffer) + Stride;
+ PciDataStride = (PciDataStride + Stride) % 4;
+ Count -= 1;
+
+ //
+ // Only increment the PCI address if Width is not a FIFO.
+ //
+ if (Width >= EfiPciWidthUint8 && Width <= EfiPciWidthUint64) {
+ Pci.Bits.Reg += Stride;
+ }
+ }
+ return EFI_SUCCESS;
+}
+
+/**
+ Allows read from PCI configuration space.
+
+ @param This A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ @param Width Signifies the width of the memory operation.
+ @param Address The address within the PCI configuration space
+ for the PCI controller.
+ @param Count The number of PCI configuration operations
+ to perform.
+ @param Buffer The destination buffer to store the results.
+
+ @retval EFI_SUCCESS The data was read from the PCI root bridge.
+ @retval EFI_INVALID_PARAMETER Invalid parameters found.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPciRead (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ UINT32 PciBus;
+ UINT32 PciDev;
+ UINT32 PciFn;
+ UINT32 PciExtReg;
+ USRA_ADDRESS EndPointPciAddress;
+ UINT8 *pData8 = Buffer;
+ UINT8 Size;
+
+ Size = 1 << (Width & 0x3);
+
+ if (Buffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Width < 0 || Width >= EfiPciWidthMaximum ) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Read Pci configuration space
+ //
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ if (RootBridge->HecBase == 0) {
+ return RootBridgeIoPciRW (This, FALSE, Width, Address, Count, Buffer);
+ }
+
+ if (!((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->ExtendedRegister) {
+ PciExtReg = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Register;
+ } else {
+ PciExtReg = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->ExtendedRegister & 0x0FFF;
+ }
+
+ PciBus = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Bus;
+ PciDev = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Device;
+ PciFn = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Function;
+
+ USRA_BLOCK_PCIE_ADDRESS (EndPointPciAddress, Width, Count, This->SegmentNumber, PciBus, PciDev, PciFn, PciExtReg);
+ mDynamicSiLibraryProtocol->RegisterRead (&EndPointPciAddress, pData8);
+ return EFI_SUCCESS;
+}
+
+/**
+ Allows write to PCI configuration space.
+
+ @param This A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
+ @param Width Signifies the width of the memory operation.
+ @param Address The address within the PCI configuration space
+ for the PCI controller.
+ @param Count The number of PCI configuration operations
+ to perform.
+ @param Buffer The source buffer to get the results.
+
+ @retval EFI_SUCCESS The data was written to the PCI root bridge.
+ @retval EFI_INVALID_PARAMETER Invalid parameters found.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoPciWrite (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ UINT32 PciBus;
+ UINT32 PciDev;
+ UINT32 PciFn;
+ UINT32 PciExtReg;
+ USRA_ADDRESS EndPointPciAddress;
+ UINT8 *pData8 = Buffer;
+ UINT8 Size;
+
+ Size = 1 << (Width & 0x3);
+
+ if (Buffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Width < 0 || Width >= EfiPciWidthMaximum) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Write Pci configuration space
+ //
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ if (RootBridge->HecBase == 0) {
+ return RootBridgeIoPciRW (This, TRUE, Width, Address, Count, Buffer);
+ }
+
+ if (!((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->ExtendedRegister) {
+ PciExtReg = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Register;
+ } else {
+ PciExtReg = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->ExtendedRegister & 0x0FFF;
+ }
+
+ PciBus = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Bus;
+ PciDev = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Device;
+ PciFn = ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &Address)->Function;
+
+ USRA_BLOCK_PCIE_ADDRESS (EndPointPciAddress, Width, Count, This->SegmentNumber, PciBus, PciDev, PciFn, PciExtReg);
+ mDynamicSiLibraryProtocol->RegisterWrite (&EndPointPciAddress, pData8);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides the PCI controller-specific address needed to access
+ system memory for DMA.
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Operation Indicate if the bus master is going to read or write
+ to system memory.
+ @param HostAddress The system memory address to map on the PCI controller.
+ @param NumberOfBytes On input the number of bytes to map.
+ On output the number of bytes that were mapped.
+ @param DeviceAddress The resulting map address for the bus master PCI
+ controller to use to access the system memory's HostAddress.
+ @param Mapping The value to pass to Unmap() when the bus master DMA
+ operation is complete.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_INVALID_PARAMETER Invalid parameters found.
+ @retval EFI_UNSUPPORTED The HostAddress cannot be mapped as a common buffer.
+ @retval EFI_DEVICE_ERROR The System hardware could not map the requested address.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to lack of resources.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoMap (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
+ IN VOID *HostAddress,
+ IN OUT UINTN *NumberOfBytes,
+ OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
+ OUT VOID **Mapping
+ )
+{
+ EFI_STATUS Status;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ EFI_PHYSICAL_ADDRESS PhysicalAddress;
+ MAP_INFO *MapInfo;
+
+ if (NumberOfBytes == NULL || Mapping == NULL || DeviceAddress == NULL || HostAddress == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+ //
+ // Initialize the return values to their defaults
+ //
+ *Mapping = NULL;
+
+ //
+ // Make sure that Operation is valid
+ //
+ if ((UINT32) Operation >= EfiPciOperationMaximum) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ if (mIoMmu != NULL) {
+ if (!RootBridge->DmaAbove4G) {
+ //
+ // Clear 64bit support
+ //
+ if (Operation > EfiPciOperationBusMasterCommonBuffer) {
+ Operation = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION) (Operation - EfiPciOperationBusMasterRead64);
+ }
+ }
+ Status = mIoMmu->Map (
+ mIoMmu,
+ (EDKII_IOMMU_OPERATION) Operation,
+ HostAddress,
+ NumberOfBytes,
+ DeviceAddress,
+ Mapping
+ );
+ return Status;
+ }
+ //
+ // Most PCAT like chipsets can not handle performing DMA above 4GB.
+ // If any part of the DMA transfer being mapped is above 4GB, then
+ // map the DMA transfer to a buffer below 4GB.
+ //
+ PhysicalAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress;
+ if ((PhysicalAddress + *NumberOfBytes) > SIZE_4GB) {
+ //
+ // Common Buffer operations can not be remapped. If the common buffer
+ // if above 4GB, then it is not possible to generate a mapping, so return
+ // an error.
+ //
+ if (Operation == EfiPciOperationBusMasterCommonBuffer || Operation == EfiPciOperationBusMasterCommonBuffer64) {
+ return EFI_INVALID_PARAMETER;
+ }
+ //
+ // Allocate a MAP_INFO structure to remember the mapping when Unmap() is
+ // called later.
+ //
+ MapInfo = AllocatePool (sizeof (MAP_INFO));
+ if (MapInfo == NULL) {
+ *NumberOfBytes = 0;
+ return EFI_OUT_OF_RESOURCES;
+ }
+ //
+ // Return a pointer to the MAP_INFO structure in Mapping
+ //
+ *Mapping = MapInfo;
+
+ //
+ // Initialize the MAP_INFO structure
+ //
+ MapInfo->Operation = Operation;
+ MapInfo->NumberOfBytes = *NumberOfBytes;
+ MapInfo->NumberOfPages = EFI_SIZE_TO_PAGES (*NumberOfBytes);
+ MapInfo->HostAddress = PhysicalAddress;
+ MapInfo->MappedHostAddress = SIZE_4GB - 1;
+
+ //
+ // Allocate a buffer below 4GB to map the transfer to.
+ //
+ Status = gBS->AllocatePages (
+ AllocateMaxAddress,
+ EfiBootServicesData,
+ MapInfo->NumberOfPages,
+ &MapInfo->MappedHostAddress
+ );
+ if (EFI_ERROR (Status)) {
+ FreePool (MapInfo);
+ *NumberOfBytes = 0;
+ return Status;
+ }
+ //
+ // If this is a read operation from the Bus Master's point of view,
+ // then copy the contents of the real buffer into the mapped buffer
+ // so the Bus Master can read the contents of the real buffer.
+ //
+ if (Operation == EfiPciOperationBusMasterRead || Operation == EfiPciOperationBusMasterRead64) {
+ CopyMem (
+ (VOID *) (UINTN) MapInfo->MappedHostAddress,
+ (VOID *) (UINTN) MapInfo->HostAddress,
+ MapInfo->NumberOfBytes
+ );
+ }
+ //
+ // The DeviceAddress is the address of the maped buffer below 4GB
+ //
+ *DeviceAddress = MapInfo->MappedHostAddress;
+ } else {
+ //
+ // The transfer is below 4GB, so the DeviceAddress is simply the HostAddress
+ //
+ *DeviceAddress = PhysicalAddress;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Completes the Map() operation and releases any corresponding resources.
+
+ The Unmap() function completes the Map() operation and releases any
+ corresponding resources.
+ If the operation was an EfiPciOperationBusMasterWrite or
+ EfiPciOperationBusMasterWrite64, the data is committed to the target system
+ memory.
+ Any resources used for the mapping are freed.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[in] Mapping The mapping value returned from Map().
+
+ @retval EFI_SUCCESS The range was unmapped.
+ @retval EFI_INVALID_PARAMETER Mapping is not a value that was returned by Map().
+ @retval EFI_DEVICE_ERROR The data was not committed to the target system memory.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoUnmap (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN VOID *Mapping
+ )
+{
+ EFI_STATUS Status;
+ MAP_INFO *MapInfo;
+
+ if (mIoMmu != NULL) {
+ Status = mIoMmu->Unmap (
+ mIoMmu,
+ Mapping
+ );
+ return Status;
+ }
+ //
+ // See if the Map() operation associated with this Unmap() required a mapping buffer.
+ // If a mapping buffer was not required, then this function simply returns EFI_SUCCESS.
+ //
+ if (Mapping != NULL) {
+ //
+ // Get the MAP_INFO structure from Mapping
+ //
+ MapInfo = (MAP_INFO *) Mapping;
+
+ //
+ // If this is a write operation from the Bus Master's point of view,
+ // then copy the contents of the mapped buffer into the real buffer
+ // so the processor can read the contents of the real buffer.
+ //
+ if ((MapInfo->Operation == EfiPciOperationBusMasterWrite) ||
+ (MapInfo->Operation == EfiPciOperationBusMasterWrite64)
+ ) {
+ CopyMem (
+ (VOID *) (UINTN) MapInfo->HostAddress,
+ (VOID *) (UINTN) MapInfo->MappedHostAddress,
+ MapInfo->NumberOfBytes
+ );
+ }
+ //
+ // Free the mapped buffer and the MAP_INFO structure.
+ //
+ gBS->FreePages (MapInfo->MappedHostAddress, MapInfo->NumberOfPages);
+ FreePool (Mapping);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Allocates pages that are suitable for an EfiPciOperationBusMasterCommonBuffer
+ or EfiPciOperationBusMasterCommonBuffer64 mapping.
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Type This parameter is not used and must be ignored.
+ @param MemoryType The type of memory to allocate, EfiBootServicesData or
+ EfiRuntimeServicesData.
+ @param Pages The number of pages to allocate.
+ @param HostAddress A pointer to store the base system memory address of the
+ allocated range.
+ @param Attributes The requested bit mask of attributes for the allocated
+ range. Only the attributes
+ EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE,
+ EFI_PCI_ATTRIBUTE_MEMORY_CACHED, and
+ EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE may be used with this
+ function.
+
+ @retval EFI_SUCCESS The requested memory pages were allocated.
+ @retval EFI_INVALID_PARAMETER MemoryType is invalid.
+ @retval EFI_INVALID_PARAMETER HostAddress is NULL.
+ @retval EFI_UNSUPPORTED Attributes is unsupported. The only legal
+ attribute bits are MEMORY_WRITE_COMBINE,
+ MEMORY_CACHED, and DUAL_ADDRESS_CYCLE.
+ @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoAllocateBuffer (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN EFI_ALLOCATE_TYPE Type,
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN Pages,
+ OUT VOID **HostAddress,
+ IN UINT64 Attributes
+ )
+{
+ EFI_STATUS Status;
+ EFI_PHYSICAL_ADDRESS PhysicalAddress;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ //
+ // Validate Attributes
+ //
+ if ((Attributes & EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER) != 0) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Check for invalid inputs
+ //
+ if (HostAddress == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // The only valid memory types are EfiBootServicesData and
+ // EfiRuntimeServicesData
+ //
+ if (MemoryType != EfiBootServicesData &&
+ MemoryType != EfiRuntimeServicesData) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ if (mIoMmu != NULL) {
+
+ if (!RootBridge->DmaAbove4G) {
+ //
+ // Clear DUAL_ADDRESS_CYCLE
+ //
+ Attributes &= ~((UINT64) EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE);
+ }
+ Status = mIoMmu->AllocateBuffer (
+ mIoMmu,
+ Type,
+ MemoryType,
+ Pages,
+ HostAddress,
+ Attributes
+ );
+ return Status;
+ }
+
+ //
+ // Limit allocations to memory below 4GB
+ //
+ PhysicalAddress = SIZE_4GB - 1;
+
+ Status = gBS->AllocatePages (
+ AllocateMaxAddress,
+ MemoryType,
+ Pages,
+ &PhysicalAddress
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ *HostAddress = (VOID *) (UINTN) PhysicalAddress;
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Frees memory that was allocated with AllocateBuffer().
+
+ The FreeBuffer() function frees memory that was allocated with
+ AllocateBuffer().
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Pages The number of pages to free.
+ @param HostAddress The base system memory address of the allocated range.
+
+ @retval EFI_SUCCESS The requested memory pages were freed.
+ @retval EFI_INVALID_PARAMETER The memory range specified by HostAddress and
+ Pages was not allocated with AllocateBuffer().
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoFreeBuffer (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN UINTN Pages,
+ OUT VOID *HostAddress
+ )
+{
+ EFI_STATUS Status;
+
+ if (mIoMmu != NULL) {
+ Status = mIoMmu->FreeBuffer (
+ mIoMmu,
+ Pages,
+ HostAddress
+ );
+ return Status;
+ }
+
+ return gBS->FreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress, Pages);
+}
+
+/**
+ Flushes all PCI posted write transactions from a PCI host bridge to system
+ memory.
+
+ The Flush() function flushes any PCI posted write transactions from a PCI
+ host bridge to system memory. Posted write transactions are generated by PCI
+ bus masters when they perform write transactions to target addresses in
+ system memory.
+ This function does not flush posted write transactions from any PCI bridges.
+ A PCI controller specific action must be taken to guarantee that the posted
+ write transactions have been flushed from the PCI controller and from all the
+ PCI bridges into the PCI host bridge. This is typically done with a PCI read
+ transaction from the PCI controller prior to calling Flush().
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+
+ @retval EFI_SUCCESS The PCI posted write transactions were flushed
+ from the PCI host bridge to system memory.
+ @retval EFI_DEVICE_ERROR The PCI posted write transactions were not flushed
+ from the PCI host bridge due to a hardware error.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoFlush (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Gets the attributes that a PCI root bridge supports setting with
+ SetAttributes(), and the attributes that a PCI root bridge is currently
+ using.
+
+ The GetAttributes() function returns the mask of attributes that this PCI
+ root bridge supports and the mask of attributes that the PCI root bridge is
+ currently using.
+
+ @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Supported A pointer to the mask of attributes that this PCI root
+ bridge supports setting with SetAttributes().
+ @param Attributes A pointer to the mask of attributes that this PCI root
+ bridge is currently using.
+
+ @retval EFI_SUCCESS If Supports is not NULL, then the attributes
+ that the PCI root bridge supports is returned
+ in Supports. If Attributes is not NULL, then
+ the attributes that the PCI root bridge is
+ currently using is returned in Attributes.
+ @retval EFI_INVALID_PARAMETER Both Supports and Attributes are NULL.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoGetAttributes (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ OUT UINT64 *Supported,
+ OUT UINT64 *Attributes
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ if (Attributes == NULL && Supported == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+ //
+ // Set the return value for Supported and Attributes
+ //
+ if (Supported != NULL) {
+ *Supported = RootBridge->Supports;
+ }
+
+ if (Attributes != NULL) {
+ *Attributes = RootBridge->Attributes;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Sets attributes for a resource range on a PCI root bridge.
+
+ The SetAttributes() function sets the attributes specified in Attributes for
+ the PCI root bridge on the resource range specified by ResourceBase and
+ ResourceLength. Since the granularity of setting these attributes may vary
+ from resource type to resource type, and from platform to platform, the
+ actual resource range and the one passed in by the caller may differ. As a
+ result, this function may set the attributes specified by Attributes on a
+ larger resource range than the caller requested. The actual range is returned
+ in ResourceBase and ResourceLength. The caller is responsible for verifying
+ that the actual range for which the attributes were set is acceptable.
+
+ @param This A pointer to the
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Attributes The mask of attributes to set. If the
+ attribute bit MEMORY_WRITE_COMBINE,
+ MEMORY_CACHED, or MEMORY_DISABLE is set,
+ then the resource range is specified by
+ ResourceBase and ResourceLength. If
+ MEMORY_WRITE_COMBINE, MEMORY_CACHED, and
+ MEMORY_DISABLE are not set, then
+ ResourceBase and ResourceLength are ignored,
+ and may be NULL.
+ @param ResourceBase A pointer to the base address of the
+ resource range to be modified by the
+ attributes specified by Attributes.
+ @param ResourceLength A pointer to the length of the resource
+ range to be modified by the attributes
+ specified by Attributes.
+
+ @retval EFI_SUCCESS The current configuration of this PCI root bridge
+ was returned in Resources.
+ @retval EFI_UNSUPPORTED The current configuration of this PCI root bridge
+ could not be retrieved.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoSetAttributes (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ IN UINT64 Attributes,
+ IN OUT UINT64 *ResourceBase,
+ IN OUT UINT64 *ResourceLength
+ )
+{
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ if ((Attributes & (~RootBridge->Supports)) != 0) {
+ return EFI_UNSUPPORTED;
+ }
+
+ RootBridge->Attributes = Attributes;
+ return EFI_SUCCESS;
+}
+
+/**
+ Retrieves the current resource settings of this PCI root bridge in the form
+ of a set of ACPI resource descriptors.
+
+ There are only two resource descriptor types from the ACPI Specification that
+ may be used to describe the current resources allocated to a PCI root bridge.
+ These are the QWORD Address Space Descriptor, and the End Tag. The QWORD
+ Address Space Descriptor can describe memory, I/O, and bus number ranges for
+ dynamic or fixed resources. The configuration of a PCI root bridge is described
+ with one or more QWORD Address Space Descriptors followed by an End Tag.
+
+ @param[in] This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param[out] Resources A pointer to the resource descriptors that
+ describe the current configuration of this PCI root
+ bridge. The storage for the resource
+ descriptors is allocated by this function. The
+ caller must treat the return buffer as read-only
+ data, and the buffer must not be freed by the
+ caller.
+
+ @retval EFI_SUCCESS The current configuration of this PCI root bridge
+ was returned in Resources.
+ @retval EFI_UNSUPPORTED The current configuration of this PCI root bridge
+ could not be retrieved.
+**/
+EFI_STATUS
+EFIAPI
+RootBridgeIoConfiguration (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
+ OUT VOID **Resources
+ )
+{
+ EFI_STATUS Status;
+ UINTN Idx;
+
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridge;
+ PCI_RES_NODE *ResAllocNode;
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Config;
+
+ //
+ // Get this instance of the Root Bridge.
+ //
+ RootBridge = ROOT_BRIDGE_FROM_THIS (This);
+
+ //
+ // If the pointer is not NULL, it points to a buffer already allocated.
+ //
+ if (RootBridge->ConfigBuffer == NULL) {
+ Status = gBS->AllocatePool (
+ EfiBootServicesData,
+ TypeMax * sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR),
+ &RootBridge->ConfigBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ }
+
+ Config = RootBridge->ConfigBuffer;
+
+ ZeroMem (Config, TypeMax * sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));
+
+ for (Idx = 0; Idx < TypeMax; Idx++) {
+
+ ResAllocNode = &RootBridge->ResAllocNode[Idx];
+
+ if (ResAllocNode->Status != ResAllocated) {
+ continue;
+ }
+
+ switch (ResAllocNode->Type) {
+
+ case TypeIo:
+ Config->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ Config->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
+ Config->ResType = ACPI_ADDRESS_SPACE_TYPE_IO;
+ Config->AddrRangeMin = ResAllocNode->Base;
+ Config->AddrRangeMax = ResAllocNode->Base + ResAllocNode->Length - 1;
+ Config->AddrLen = ResAllocNode->Length;
+ break;
+
+ case TypeMem32:
+ Config->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ Config->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
+ Config->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
+ Config->AddrSpaceGranularity = 32;
+ Config->AddrRangeMin = ResAllocNode->Base;
+ Config->AddrRangeMax = ResAllocNode->Base + ResAllocNode->Length - 1;
+ Config->AddrLen = ResAllocNode->Length;
+ break;
+
+ case TypePMem32:
+ Config->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ Config->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
+ Config->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
+ Config->SpecificFlag = 6;
+ Config->AddrSpaceGranularity = 32;
+ Config->AddrRangeMin = ResAllocNode->Base;
+ Config->AddrRangeMax = ResAllocNode->Base + ResAllocNode->Length - 1;
+ Config->AddrLen = ResAllocNode->Length;
+ break;
+
+ case TypeMem64:
+ Config->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ Config->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
+ Config->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
+ Config->SpecificFlag = 6;
+ Config->AddrSpaceGranularity = 64;
+ Config->AddrRangeMin = ResAllocNode->Base;
+ Config->AddrRangeMax = ResAllocNode->Base + ResAllocNode->Length - 1;
+ Config->AddrLen = ResAllocNode->Length;
+ break;
+
+ case TypePMem64:
+ Config->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ Config->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
+ Config->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
+ Config->SpecificFlag = 6;
+ Config->AddrSpaceGranularity = 64;
+ Config->AddrRangeMin = ResAllocNode->Base;
+ Config->AddrRangeMax = ResAllocNode->Base + ResAllocNode->Length - 1;
+ Config->AddrLen = ResAllocNode->Length;
+ break;
+
+ case TypeBus:
+ Config->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
+ Config->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;
+ Config->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;
+ Config->AddrRangeMin = ResAllocNode->Base;
+ Config->AddrRangeMax = ResAllocNode->Base + ResAllocNode->Length - 1;
+ Config->AddrLen = ResAllocNode->Length;
+ break;
+
+ default:
+ break;
+ }
+
+ Config++;
+ }
+ //
+ // Terminate the entries.
+ //
+ ((EFI_ACPI_END_TAG_DESCRIPTOR *) Config)->Desc = ACPI_END_TAG_DESCRIPTOR;
+ ((EFI_ACPI_END_TAG_DESCRIPTOR *) Config)->Checksum = 0x0;
+
+ *Resources = RootBridge->ConfigBuffer;
+ return EFI_SUCCESS;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c
new file mode 100644
index 0000000000..32775fafe7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c
@@ -0,0 +1,99 @@
+/** @file
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiDxe.h>
+#include "PciPlatform.h"
+#include <Guid/SetupVariable.h>
+
+#ifdef EFI_PCI_IOV_SUPPORT
+
+/**
+
+ The GetSystemLowestPageSize() function retrieves the system lowest page size.
+
+ @param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
+ @param SystemLowestPageSize - The system lowest page size. (This system supports a
+ page size of 2^(n+12) if bit n is set.)
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_INVALID_PARAMETER - SystemLowestPageSize is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+GetSystemLowestPageSize (
+ IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
+ OUT UINT32 *SystemLowestPageSize
+)
+{
+ UINT8 SystemPageSizeOption;
+
+ CopyMem (&SystemPageSizeOption, (((UINT8*) PcdGetPtr (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, SystemPageSize)), sizeof (UINT8));
+
+ if (SystemLowestPageSize != NULL) {
+ //
+ // Convert page size option to page size
+ // Option is n in 2^n
+ // Page size is number of 4KiB pages
+ //
+
+ *SystemLowestPageSize = (UINT32) (1 << SystemPageSizeOption);
+ }
+ return EFI_SUCCESS;
+}
+
+/**
+
+ The GetIovPlatformPolicy() function retrieves the platform policy regarding PCI IOV.
+
+ @param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
+ @param PciIovPolicy - The platform policy for PCI IOV configuration.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_INVALID_PARAMETER - PciPolicy is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+GetIovPlatformPolicy (
+ IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_IOV_PLATFORM_POLICY *PciIovPolicy
+)
+{
+ UINT8 PolicyEnable;
+ UINT8 ARIEnable;
+ UINT8 SRIOVEnable;
+ UINT8 MRIOVEnable;
+
+ PolicyEnable = 0;
+
+ CopyMem (&ARIEnable, (((UINT8*) PcdGetPtr (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, ARIEnable)), sizeof (UINT8));
+ CopyMem (&SRIOVEnable, (((UINT8*) PcdGetPtr (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, SRIOVEnable)), sizeof (UINT8));
+ CopyMem (&MRIOVEnable, (((UINT8*) PcdGetPtr (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, MRIOVEnable)), sizeof (UINT8));
+
+ if (ARIEnable == TRUE) {
+ PolicyEnable = PolicyEnable | EFI_PCI_IOV_POLICY_ARI;
+ }
+
+ if (SRIOVEnable == TRUE) {
+ PolicyEnable = PolicyEnable | EFI_PCI_IOV_POLICY_SRIOV;
+ }
+
+ if (MRIOVEnable == TRUE) {
+ PolicyEnable = PolicyEnable | EFI_PCI_IOV_POLICY_MRIOV;
+ }
+
+ if (PciIovPolicy != NULL) {
+ //*PciIovPolicy = EFI_PCI_IOV_POLICY_ARI | EFI_PCI_IOV_POLICY_SRIOV;
+ *PciIovPolicy = PolicyEnable;
+ }
+ return EFI_SUCCESS;
+}
+
+#endif
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h
new file mode 100644
index 0000000000..ecd57292e2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h
@@ -0,0 +1,53 @@
+/** @file
+ Include file for PciIovPlatformPolicy.c
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_IOV_PLATFORM_POLICY_H_
+#define _PCI_IOV_PLATFORM_POLICY_H_
+
+/**
+
+ The GetSystemLowestPageSize() function retrieves the system lowest page size.
+
+ @param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
+ @param SystemLowestPageSize - The system lowest page size. (This system supports a
+ page size of 2^(n+12) if bit n is set.)
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_INVALID_PARAMETER - SystemLowestPageSize is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+GetSystemLowestPageSize (
+ IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
+ OUT UINT32 *SystemLowestPageSize
+)
+;
+
+
+/**
+
+ The GetPlatformPolicy() function retrieves the platform policy regarding PCI IOV.
+
+ @param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
+ @param PciIovPolicy - The platform policy for PCI IOV configuration.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_INVALID_PARAMETER - PciPolicy is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+GetIovPlatformPolicy (
+ IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_IOV_PLATFORM_POLICY *PciIovPolicy
+)
+;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c
new file mode 100644
index 0000000000..8584c0f330
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c
@@ -0,0 +1,541 @@
+/** @file
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiDxe.h>
+#include "PciPlatform.h"
+#include <Library/PcdLib.h>
+#include <Library/PlatformOpromPolicyLib.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+#include <Protocol/UbaCfgDb.h>
+#ifdef EFI_PCI_IOV_SUPPORT
+#include "PciIovPlatformPolicy.h"
+#endif
+
+#include <Library/UbaPlatLib.h>
+
+PCI_PLATFORM_PRIVATE_DATA mPciPrivateData;
+
+BOOLEAN FirstCall = TRUE;
+UINT8 sSataRaidLoadEfiDriverOption;
+UINT8 SataRaidLoadEfiDriverOption[PCH_MAX_SATA_CONTROLLERS];
+UINT8 BootNetworkOption;
+
+STATIC
+BOOLEAN
+InternalPlatformCheckPcieRootPort (
+ IN UINTN Bus,
+ IN UINT32 PcieSlotOpromBitMap
+)
+{
+ EFI_STATUS Status;
+
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+ UINTN DataLength = 0;
+ PLATFORM_OPTION_ROM_UPDATE_DATA OptionRomUpdateTable;
+
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_INFO," InternalPlatformCheckPcieRootPort fail!\n"));
+ return TRUE;
+ }
+
+ DataLength = sizeof (OptionRomUpdateTable);
+ Status = UbaConfigProtocol->GetData (
+ UbaConfigProtocol,
+ &gPlatformOptionRomUpdateConfigDataGuid,
+ &OptionRomUpdateTable,
+ &DataLength
+ );
+ if (EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_INFO,"InternalPlatformCheckPcieRootPort fail!\n"));
+ return TRUE;
+ }
+
+ ASSERT (OptionRomUpdateTable.Signature == PLATFORM_OPTION_ROM_UPDATE_SIGNATURE);
+ ASSERT (OptionRomUpdateTable.Version == PLATFORM_OPTION_ROM_UPDATE_VERSION);
+
+ return OptionRomUpdateTable.CallCheckRootPort (Bus, PcieSlotOpromBitMap);
+}
+
+STATIC
+EFI_STATUS
+InternalGetSystemBoardInfo (
+ IN OUT DXE_SYSTEM_BOARD_INFO **SystemboardInfoTableBuffer
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+ UINTN DataLength = 0;
+ SYSTEM_BOARD_INFO_DATA SystemBoardInfoData;
+
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+
+ if (EFI_ERROR(Status)) {
+ DEBUG ((EFI_D_ERROR," [GetSystemBoardInfo] Locate UbaConfigProtocol fail!\n"));
+ return Status;
+ }
+
+ DataLength = sizeof(SystemBoardInfoData);
+ Status = UbaConfigProtocol->GetData (
+ UbaConfigProtocol,
+ &gSystemBoardInfoConfigDataGuid,
+ &SystemBoardInfoData,
+ &DataLength
+ );
+
+ if (EFI_ERROR(Status)) {
+ DEBUG ((EFI_D_ERROR," [GetSystemBoardInfo] Get Data fail!\n"));
+ return Status;
+ }
+
+ ASSERT (SystemBoardInfoData.Signature == SYSTEM_SYSTEM_BOARD_INFO_SIGNATURE);
+ ASSERT (SystemBoardInfoData.Version == SYSTEM_SYSTEM_BOARD_INFO_VERSION);
+
+ *SystemboardInfoTableBuffer = SystemBoardInfoData.CallUpdate ();
+
+ return Status;
+}
+
+/**
+
+ Set the PciPolicy as EFI_RESERVE_ISA_IO_NO_ALIAS | EFI_RESERVE_VGA_IO_NO_ALIAS.
+
+ @param This - The pointer to the Protocol itself.
+ PciPolicy - the returned Policy.
+
+ @retval EFI_UNSUPPORTED - Function not supported.
+ @retval EFI_INVALID_PARAMETER - Invalid PciPolicy value.
+
+**/
+EFI_STATUS
+EFIAPI
+GetPlatformPolicy (
+ IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
+ )
+{
+ if (PciPolicy == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ return EFI_UNSUPPORTED;
+}
+
+/**
+
+ Get an indicated image in raw sections.
+
+ @param NameGuid - NameGuid of the image to get.
+ @param Buffer - Buffer to store the image get.
+ @param Size - size of the image get.
+
+ @retval EFI_NOT_FOUND - Could not find the image.
+ @retval EFI_LOAD_ERROR - Error occurred during image loading.
+ @retval EFI_SUCCESS - Image has been successfully loaded.
+
+**/
+EFI_STATUS
+GetRawImage(
+ IN EFI_GUID *NameGuid,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *Size
+ ) {
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN HandleCount;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
+ UINT32 AuthenticationStatus;
+
+ Status = gBS->LocateHandleBuffer(
+ ByProtocol,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ NULL,
+ &HandleCount,
+ &HandleBuffer
+ );
+ if (EFI_ERROR(Status) || HandleCount == 0) {
+ return EFI_NOT_FOUND;
+ }
+ //
+ // Find desired image in all Fvs
+ //
+ for (Index = 0; Index < HandleCount; Index++) {
+ Status = gBS->HandleProtocol(
+ HandleBuffer[Index],
+ &gEfiFirmwareVolume2ProtocolGuid,
+ &Fv
+ );
+ if (EFI_ERROR(Status)) {
+ return EFI_LOAD_ERROR;
+ }
+ //
+ // Try a raw file
+ //
+ *Buffer = NULL;
+ *Size = 0;
+ Status = Fv->ReadSection(
+ Fv,
+ NameGuid,
+ EFI_SECTION_RAW,
+ 0,
+ Buffer,
+ Size,
+ &AuthenticationStatus
+ );
+ if (!EFI_ERROR(Status)) {
+ DEBUG((EFI_D_INFO, "Read the OROM successfully!\n"));
+ break;
+ }
+ }
+
+ if (Index >= HandleCount) {
+ return EFI_NOT_FOUND;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Return a PCI ROM image for the onboard device represented by PciHandle.
+
+ @param This - Protocol instance pointer.
+ PciHandle - PCI device to return the ROM image for.
+ RomImage - PCI Rom Image for onboard device.
+ RomSize - Size of RomImage in bytes.
+
+ @retval EFI_SUCCESS - RomImage is valid.
+ @retval EFI_NOT_FOUND - No RomImage.
+
+**/
+EFI_STATUS
+EFIAPI
+GetPciRom (
+ IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE PciHandle,
+ OUT VOID **RomImage,
+ OUT UINTN *RomSize
+ )
+{
+ EFI_STATUS Status;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ UINTN Segment;
+ UINTN Bus;
+ UINTN Device;
+ UINTN Function;
+ UINT16 VendorId;
+ UINT16 DeviceId;
+ UINT16 DeviceClass;
+ UINTN TableIndex;
+ UINTN RomImageNumber;
+ VOID *OpRomBase;
+ UINTN OpRomSize;
+ EFI_PCI_ROM_HEADER RomHeader;
+ PCI_DATA_STRUCTURE *Pcir;
+ OPROM_LOAD_POLICY OpromPolicy;
+ BOOLEAN SlotOptionRomDisabled;
+ DXE_SYSTEM_BOARD_INFO *SystemBoardInfo = NULL;
+ UINT32 Index;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ OpRomBase = NULL;
+ OpRomSize = 0;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ //
+ // Get System Board Info
+ //
+ Status = InternalGetSystemBoardInfo (&SystemBoardInfo);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "[GetPciRom] Get system board info fail!\n"));
+ return Status;
+ }
+
+ Status = gBS->HandleProtocol (
+ PciHandle,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_FOUND;
+ }
+
+ if (FirstCall == TRUE) {
+ Status = GetOptionData (&gEfiSetupVariableGuid, OFFSET_OF(SYSTEM_CONFIGURATION, BootNetwork), &BootNetworkOption, sizeof(BootNetworkOption));
+ if (EFI_ERROR (Status)) {
+ BootNetworkOption = 0;
+ }
+ Status = GetOptionData (&gPchSetupVariableGuid,
+ OFFSET_OF(PCH_SETUP, SataRaidLoadEfiDriver),
+ &SataRaidLoadEfiDriverOption,
+ sizeof(SataRaidLoadEfiDriverOption) * PCH_MAX_SATA_CONTROLLERS);
+ if (EFI_ERROR (Status)) {
+ for (Index = 0; Index < DynamicSiLibraryProtocol->MaxSataControllerNum(); Index++) {
+ SataRaidLoadEfiDriverOption[Index] = 0;
+ }
+ }
+
+ FirstCall = FALSE;
+ }
+
+ PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Function);
+ PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_CLASSCODE_OFFSET + 1, 1, &DeviceClass);
+
+ //
+ // Run PXE ROM only if Boot network is enabled
+ //
+ if ((BootNetworkOption == 0) &&
+ (DeviceClass == ((PCI_CLASS_NETWORK << 8) | PCI_CLASS_NETWORK_ETHERNET))
+ ) {
+ return EFI_NOT_FOUND;
+ }
+
+ //
+ // Run each PCI-E slot ROM only if PCI-E Slot Oprom is enabled.
+ //
+ if ( Bus != 0 ) {
+ SlotOptionRomDisabled = InternalPlatformCheckPcieRootPort (Bus, PcdGet32(PcdOemSkuPcieSlotOpromBitMap));
+
+ if (SlotOptionRomDisabled) {
+ return EFI_NOT_FOUND;
+ }
+ }
+
+ PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_VENDOR_ID_OFFSET, 1, &VendorId);
+ PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_DEVICE_ID_OFFSET, 1, &DeviceId);
+
+ //DEBUG ((EFI_D_INFO, "GetPciRom - VenID:DevID: %04x:%04x\n", (UINTN)VendorId, (UINTN)DeviceId));
+
+ //
+ // Fix MS-HD5770 video adapter can not work:
+ // This device is not a OPROM 3.0 and does not have device id list as well.
+ // It only have 1 device id in OPROM.
+ // Device Id in OpROM is not same with the value in PCI configuration space
+ // it will cause VBIOS fails to start
+ //
+ if ((VendorId == 0x1002) && (DeviceId == 0x68BE)) {
+ DEBUG ((DEBUG_INFO, "MS-HD5770 video adapter\n"));
+ RomHeader.Raw = PciIo->RomImage;
+ if (RomHeader.Raw != NULL) {
+ Pcir = (PCI_DATA_STRUCTURE *)(RomHeader.Raw + RomHeader.Generic->PcirOffset);
+ if ((Pcir->VendorId == 0x1002) && (Pcir->DeviceId == 0x68B8)) {
+ //
+ // Assign same device id in PCI configuration space
+ //
+ Pcir->DeviceId = DeviceId;
+ }
+ } else {
+ DEBUG ((EFI_D_ERROR, "MS-HD5770 video adapter detected but PciIo->RomImage == NULL!\n"));
+ }
+ }
+
+ //Check if user disables the option rom loading for this device.
+ if (!PlatformOpromLoadDevicePolicy(PciIo)) {
+ return EFI_NOT_FOUND;
+ }
+
+ // If setup value requested EFI, we don't load the RAID OROM.
+ if (VendorId == V_SATA_CFG_VENDOR_ID) {
+ for (Index = 0; Index < DynamicSiLibraryProtocol->MaxSataControllerNum(); Index++) {
+ if (Bus == DEFAULT_PCI_BUS_NUMBER_PCH &&
+ Device == DynamicSiLibraryProtocol->SataDevNumber (Index) &&
+ Function == DynamicSiLibraryProtocol->SataFuncNumber (Index) &&
+ SataRaidLoadEfiDriverOption[Index] == 1) {
+ return EFI_NOT_FOUND;
+ }
+ }
+ }
+
+ //
+ // Loop through table of video option rom descriptions
+ //
+ RomImageNumber = 0;
+ for (TableIndex = 0; SystemBoardInfo->PciOptionRomTable[TableIndex].VendorId != 0xffff; TableIndex++) {
+ //
+ // See if the PCI device specified by PciHandle matches at device in mPciOptionRomTable
+ //
+ if (VendorId != SystemBoardInfo->PciOptionRomTable[TableIndex].VendorId ||
+ DeviceId != SystemBoardInfo->PciOptionRomTable[TableIndex].DeviceId ||
+ Device != SystemBoardInfo->PciOptionRomTable[TableIndex].Device ||
+ Function != SystemBoardInfo->PciOptionRomTable[TableIndex].Function
+ ) {
+ continue;
+ }
+
+ //Check if user wants to exclusively run this option rom for the device.
+ OpromPolicy = PlatformOpromLoadTypePolicy(PciHandle, TableIndex);
+ if(OpromPolicy == DONT_LOAD) {
+ continue;
+ }
+
+ Status = GetRawImage (
+ &SystemBoardInfo->PciOptionRomTable[TableIndex].FileName,
+ &OpRomBase,
+ &OpRomSize
+ );
+
+ if (EFI_ERROR (Status)) {
+ continue;
+ } else {
+ RomImageNumber++;
+ if (RomImageNumber == PcdGet8(PcdMaxOptionRomNumber) || OpromPolicy == EXCLUSIVE_LOAD) {
+ break;
+ }
+ }
+ }
+
+ if (RomImageNumber == 0) {
+
+ return EFI_NOT_FOUND;
+
+ } else {
+
+ *RomImage = OpRomBase;
+ *RomSize = OpRomSize;
+
+ return EFI_SUCCESS;
+ }
+}
+
+/**
+
+ GC_TODO: Add function description
+
+ @param This - GC_TODO: add argument description
+ @param Function - GC_TODO: add argument description
+ @param Phase - GC_TODO: add argument description
+
+ @retval EFI_INVALID_PARAMETER - GC_TODO: Add description for return value
+ @retval EFI_INVALID_PARAMETER - GC_TODO: Add description for return value
+ @retval EFI_UNSUPPORTED - GC_TODO: Add description for return value
+ @retval EFI_SUCCESS - GC_TODO: Add description for return value
+
+**/
+EFI_STATUS
+EFIAPI
+RegisterPciCallback (
+ IN EFI_PCI_CALLBACK_PROTOCOL *This,
+ IN EFI_PCI_CALLBACK_FUNC Function,
+ IN EFI_PCI_ENUMERATION_PHASE Phase
+ )
+{
+ LIST_ENTRY *NodeEntry;
+ PCI_CALLBACK_DATA *PciCallbackData;
+
+ if (Function == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if ( (Phase & (EfiPciEnumerationDeviceScanning | EfiPciEnumerationBusNumberAssigned \
+ | EfiPciEnumerationResourceAssigned)) == 0) {
+ return EFI_INVALID_PARAMETER;
+ }
+ //
+ // Check if the node has been added
+ //
+ NodeEntry = GetFirstNode (&mPciPrivateData.PciCallbackList);
+ while (!IsNull (&mPciPrivateData.PciCallbackList, NodeEntry)) {
+ PciCallbackData = PCI_CALLBACK_DATA_FROM_LINK (NodeEntry);
+ if (PciCallbackData->Function == Function) {
+ return EFI_UNSUPPORTED;
+ }
+
+ NodeEntry = GetNextNode (&mPciPrivateData.PciCallbackList, NodeEntry);
+ }
+
+ PciCallbackData = NULL;
+ PciCallbackData = AllocateZeroPool (sizeof (PCI_CALLBACK_DATA));
+ ASSERT (PciCallbackData != NULL);
+
+ if(PciCallbackData != NULL){
+ PciCallbackData->Signature = PCI_CALLBACK_DATA_SIGNATURE;
+ PciCallbackData->Function = Function;
+ PciCallbackData->Phase = Phase;
+ InsertTailList (&mPciPrivateData.PciCallbackList, &PciCallbackData->Link);
+ return EFI_SUCCESS;
+ } else {
+ return EFI_UNSUPPORTED;
+ }
+}
+
+
+/**
+
+ Main Entry point of the Pci Platform Driver.
+
+ @param ImageHandle - Handle to the image.
+ @param SystemTable - Handle to System Table.
+
+ @retval EFI_STATUS - Status of the function calling.
+
+**/
+EFI_STATUS
+EFIAPI
+PciPlatformDriverEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_HOB_GUID_TYPE *GuidHob;
+
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ mPciPrivateData.PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+
+ //EDK2_TODO Check if clearing mPciPrivateData.PlatformInfo (got above) is intended.
+ ZeroMem (&mPciPrivateData, sizeof (mPciPrivateData));
+ InitializeListHead (&mPciPrivateData.PciCallbackList);
+
+ mPciPrivateData.PciPlatform.PlatformNotify = PhaseNotify;
+ mPciPrivateData.PciPlatform.PlatformPrepController = PlatformPrepController;
+ mPciPrivateData.PciPlatform.GetPlatformPolicy = GetPlatformPolicy;
+ mPciPrivateData.PciPlatform.GetPciRom = GetPciRom;
+ mPciPrivateData.PciCallback.RegisterPciCallback = RegisterPciCallback;
+#ifdef EFI_PCI_IOV_SUPPORT
+ mPciPrivateData.PciIovPlatform.GetSystemLowestPageSize = GetSystemLowestPageSize;
+ mPciPrivateData.PciIovPlatform.GetPlatformPolicy = GetIovPlatformPolicy;
+#endif
+
+ //
+ // Install on a new handle
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mPciPrivateData.PciPlatformHandle,
+ &gEfiPciPlatformProtocolGuid,
+ &mPciPrivateData.PciPlatform,
+ &gEfiPciCallbackProtocolGuid,
+ &mPciPrivateData.PciCallback,
+#ifdef EFI_PCI_IOV_SUPPORT
+ &gEfiPciIovPlatformProtocolGuid,
+ &mPciPrivateData.PciIovPlatform,
+#endif
+ NULL
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h
new file mode 100644
index 0000000000..45d9c38b16
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h
@@ -0,0 +1,209 @@
+/** @file
+ This is PCI platform initialization code.
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_PLATFORM_MODULE_H_
+#define _PCI_PLATFORM_MODULE_H_
+
+#include <PiDxe.h>
+#include <Register/PchRegsEva.h>
+#include <PchAccess.h>
+#include <Platform.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/S3PciLib.h>
+#include <Library/PciLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/HobLib.h>
+#include <Library/SetupLib.h>
+#include <Protocol/Runtime.h>
+#include <Protocol/CpuIo2.h>
+#include <Protocol/PciCallback.h>
+#include <Protocol/PciPlatform.h>
+#include <Protocol/PciIovPlatform.h>
+#include <Protocol/PciIo.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <SystemBoard.h>
+#include <Guid/SetupVariable.h>
+#include <Guid/SocketVariable.h>
+#include <Guid/PlatformInfo.h>
+#include <IndustryStandard/Pci.h>
+
+
+#ifndef NELEMENTS
+#define NELEMENTS(Array) (sizeof(Array)/sizeof((Array)[0]))
+#endif
+//
+// Global variables for Option ROMs
+//
+
+#define INVALID 0xBD
+
+#define PCI_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'c')
+
+typedef struct {
+ UINT32 Signature;
+ LIST_ENTRY Link;
+ EFI_PCI_CALLBACK_FUNC Function;
+ EFI_PCI_ENUMERATION_PHASE Phase;
+} PCI_CALLBACK_DATA;
+
+typedef struct {
+ EFI_HANDLE PciPlatformHandle;
+ EFI_HANDLE RootBridgeHandle;
+ EFI_PCI_PLATFORM_PROTOCOL PciPlatform;
+ EFI_PCI_CALLBACK_PROTOCOL PciCallback;
+#ifdef EFI_PCI_IOV_SUPPORT
+ EFI_PCI_IOV_PLATFORM_PROTOCOL PciIovPlatform;
+#endif
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo[MAX_SOCKET][MAX_IIO_STACK];
+ EFI_CPU_IO2_PROTOCOL *CpuIo;
+ EFI_LIST_ENTRY PciCallbackList;
+ EFI_PCI_CALLBACK_CONTEXT Context;
+ EFI_PCI_ENUMERATION_PHASE PciEnumerationPhase;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ UINT8 BusAssignedTime;
+} PCI_PLATFORM_PRIVATE_DATA;
+
+#define PCI_CALLBACK_DATA_FROM_LINK(_node) \
+ CR ( \
+ _node, \
+ PCI_CALLBACK_DATA, \
+ Link, \
+ PCI_CALLBACK_DATA_SIGNATURE \
+ )
+
+extern PCI_PLATFORM_PRIVATE_DATA mPciPrivateData;
+extern EFI_GUID gPchSataEfiLoadProtocolGuid;
+
+/**
+
+ Perform initialization by the phase indicated.
+
+ @param This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param HostBridge - The associated PCI Host bridge handle.
+ @param Phase - The phase of the PCI controller enumeration.
+ @param ChipsetPhase - Defines the execution phase of the PCI chipset driver.
+
+ @retval EFI_SUCCESS - Must return with success.
+
+**/
+EFI_STATUS
+EFIAPI
+PhaseNotify (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
+ )
+;
+
+/**
+
+ The PlatformPrepController() function can be used to notify the platform driver so that
+ it can perform platform-specific actions. No specific actions are required.
+ Several notification points are defined at this time. More synchronization points may be
+ added as required in the future. The PCI bus driver calls the platform driver twice for
+ every PCI controller-once before the PCI Host Bridge Resource Allocation Protocol driver
+ is notified, and once after the PCI Host Bridge Resource Allocation Protocol driver has
+ been notified.
+ This member function may not perform any error checking on the input parameters. It also
+ does not return any error codes. If this member function detects any error condition, it
+ needs to handle those errors on its own because there is no way to surface any errors to
+ the caller.
+
+ @param This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param HostBridge - The associated PCI Host bridge handle.
+ @param RootBridge - The associated PCI root bridge handle.
+ @param PciAddress - The address of the PCI device on the PCI bus.
+ @param Phase - The phase of the PCI controller enumeration.
+ @param ChipsetPhase - Defines the execution phase of the PCI chipset driver.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformPrepController (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_HANDLE RootBridge,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
+ )
+;
+
+/**
+
+ Set the PciPolicy as EFI_RESERVE_ISA_IO_NO_ALIAS | EFI_RESERVE_VGA_IO_NO_ALIAS.
+
+ @param This - The pointer to the Protocol itself.
+ PciPolicy - the returned Policy.
+
+ @retval EFI_UNSUPPORTED - Function not supported.
+ @retval EFI_INVALID_PARAMETER - Invalid PciPolicy value.
+
+**/
+EFI_STATUS
+EFIAPI
+GetPlatformPolicy (
+ IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
+ )
+;
+
+/**
+
+ Return a PCI ROM image for the onboard device represented by PciHandle.
+
+ @param This - Protocol instance pointer.
+ PciHandle - PCI device to return the ROM image for.
+ RomImage - PCI Rom Image for onboard device.
+ RomSize - Size of RomImage in bytes.
+
+ @retval EFI_SUCCESS - RomImage is valid.
+ @retval EFI_NOT_FOUND - No RomImage.
+
+**/
+EFI_STATUS
+EFIAPI
+GetPciRom (
+ IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE PciHandle,
+ OUT VOID **RomImage,
+ OUT UINTN *RomSize
+ )
+;
+
+/**
+
+ Register a callback during PCI bus enumeration
+
+ @param This - Protocol instance pointer.
+ @param Function - Callback function pointer.
+ @param Phase - PCI enumeration phase.
+
+ @retval EFI_SUCCESS - Function has registed successfully
+ @retval EFI_UNSUPPORTED - The function has been regisered
+ @retval EFI_InVALID_PARAMETER - The parameter is incorrect
+
+**/
+EFI_STATUS
+EFIAPI
+RegisterPciCallback (
+ IN EFI_PCI_CALLBACK_PROTOCOL *This,
+ IN EFI_PCI_CALLBACK_FUNC Function,
+ IN EFI_PCI_ENUMERATION_PHASE Phase
+ )
+;
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
new file mode 100644
index 0000000000..4121ea8982
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
@@ -0,0 +1,87 @@
+## @file
+#
+# @copyright
+# Copyright 2006 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PciPlatform
+ FILE_GUID = E2441B64-7EF4-41fe-B3A3-8CAA7F8D3017
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PciPlatformDriverEntry
+
+[Sources]
+ PciPlatform.c
+ PciPlatform.h
+ PciPlatformHooks.c
+ PciPlatformHooks.h
+ PciIovPlatformPolicy.c
+ PciIovPlatformPolicy.h
+ PciSupportLib.c
+ PciSupportLib.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/Cpu/CpuRcPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ IoLib
+ BaseMemoryLib
+ DebugLib
+ UefiRuntimeServicesTableLib
+ UefiBootServicesTableLib
+ HobLib
+ S3PciLib
+ SetupLib
+ PcdLib
+ PlatformOpromPolicyLib
+
+[Protocols]
+ gEfiPciCallbackProtocolGuid
+ gEfiCpuIo2ProtocolGuid
+ gEfiFirmwareVolume2ProtocolGuid
+ gEfiPciIoProtocolGuid
+ gEfiPciPlatformProtocolGuid
+ gEfiIioUdsProtocolGuid
+ gEfiPciRootBridgeIoProtocolGuid
+ gEfiPciIovPlatformProtocolGuid
+ gEfiIioSystemProtocolGuid
+ gEfiPciHostBridgeResourceAllocationProtocolGuid
+ gUbaConfigDatabaseProtocolGuid
+ gDynamicSiLibraryProtocolGuid ## CONSUMES
+
+[Guids]
+ gEfiPlatformInfoGuid
+ gEfiSetupVariableGuid
+ gPchSetupVariableGuid
+ gSystemBoardInfoConfigDataGuid
+
+[Pcd]
+ gPlatformTokenSpaceGuid.PcdOemSkuPcieSlotOpromBitMap
+ gPlatformTokenSpaceGuid.PcdMaxOptionRomNumber
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSystemPageSize
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport
+ gStructPcdTokenSpaceGuid.PcdSetup
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxNestedLevel
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuCoreCount
+
+[Depex]
+ gSystemBoardInfoConfigDataGuid AND
+ gEfiPciHostBridgeResourceAllocationProtocolGuid AND
+ gUbaConfigDatabaseProtocolGuid AND
+ gDynamicSiLibraryProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c
new file mode 100644
index 0000000000..89154cb6e1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c
@@ -0,0 +1,939 @@
+/** @file
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PchLimits.h>
+#include <PiDxe.h>
+#include <Protocol/IioUds.h>
+#include <PciPlatform.h>
+#include <PciPlatformHooks.h>
+#include <PciSupportLib.h>
+#include <IoApic.h>
+#include <Library/S3BootScriptLib.h>
+#include <Library/IoLib.h>
+#include <Protocol/DynamicSiLibraryProtocol.h>
+#include "../PciHostBridge/PciRootBridge.h"
+#include "../PciHostBridge/PciHostBridge.h"
+
+
+/******************************************************************************
+ * Local definitions.
+ ******************************************************************************/
+/**
+ Uncomment the PCIDEBUG macro to enable tracing the library activity in a test build.
+ **/
+#define PCIDEBUG(...) // { DEBUG((DEBUG_INFO, "[PCI] " __VA_ARGS__)); }
+
+
+/******************************************************************************
+ * Variables.
+ ******************************************************************************/
+SYSTEM_CONFIGURATION mSystemConfiguration;
+EFI_IIO_UDS_PROTOCOL *mIioUds = NULL;
+
+
+/******************************************************************************
+ * Functions.
+ ******************************************************************************/
+VOID
+ChipsetCallback (
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_ENUMERATION_PHASE Phase,
+ IN EFI_PCI_CALLBACK_CONTEXT *ContextPtr
+ )
+{
+ EFI_LIST_ENTRY *NodePtr;
+ PCI_CALLBACK_DATA *CallbackDataPtr;
+
+ //
+ // Check if the node has been added
+ //
+ for (NodePtr = GetFirstNode (&mPciPrivateData.PciCallbackList);
+ !IsNull (&mPciPrivateData.PciCallbackList, NodePtr);
+ NodePtr = GetNextNode (&mPciPrivateData.PciCallbackList, NodePtr)) {
+ CallbackDataPtr = PCI_CALLBACK_DATA_FROM_LINK (NodePtr);
+ if (CallbackDataPtr->Phase & Phase) {
+ (CallbackDataPtr->Function) (RootBridgeHandle, PciAddress, Phase, ContextPtr);
+ }
+ }
+}
+
+/**
+
+ GC_TODO: add routine description
+
+ @param StartBus - GC_TODO: add arg description
+
+ @retval EFI_SUCCESS - GC_TODO: add retval description
+
+**/
+EFI_STATUS
+PciTreeTraverse (
+ IN UINT8 Socket,
+ IN UINT8 Stack,
+ IN UINT8 StartBus
+ )
+{
+ UINT64 PciAddress;
+ UINT8 Device;
+ UINT8 Func;
+ UINT8 SecondaryBus;
+ BOOLEAN MultiFunc;
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
+
+ if (Socket >= NELEMENTS (mPciPrivateData.PciRootBridgeIo) ||
+ Stack >= NELEMENTS (mPciPrivateData.PciRootBridgeIo[Socket]) ||
+ mPciPrivateData.PciRootBridgeIo[Socket][Stack] == NULL) {
+ ASSERT (FALSE);
+ return EFI_INVALID_PARAMETER;
+ }
+
+ PciRootBridgeIo = mPciPrivateData.PciRootBridgeIo[Socket][Stack];
+
+ for (Device = 0; Device <= PCI_MAX_DEVICE; Device++) {
+ MultiFunc = FALSE;
+ for (Func = 0; Func <= PCI_MAX_FUNC; Func++) {
+ if (IsPciDevicePresent (
+ PciRootBridgeIo,
+ &mPciPrivateData.Context.PciHeader,
+ StartBus,
+ Device,
+ Func
+ )) {
+ if ((Func == 0) && IS_PCI_MULTI_FUNC(&mPciPrivateData.Context.PciHeader)) {
+ MultiFunc = TRUE;
+ }
+ PciAddress = EFI_PCI_ADDRESS (StartBus, Device, Func, 0);
+ mPciPrivateData.Context.PciRootBridgeIo = PciRootBridgeIo;
+ ChipsetCallback (
+ mPciPrivateData.RootBridgeHandle,
+ *(EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *) &PciAddress,
+ mPciPrivateData.PciEnumerationPhase,
+ &(mPciPrivateData.Context)
+ );
+ if (IS_PCI_BRIDGE (&(mPciPrivateData.Context.PciHeader))) {
+ PciAddress = EFI_PCI_ADDRESS (StartBus, Device, Func, PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET);
+ PciRootBridgeIo->Pci.Read (
+ PciRootBridgeIo,
+ EfiPciWidthUint8,
+ *(UINT64 *) &PciAddress,
+ 1,
+ &SecondaryBus
+ );
+ if ((SecondaryBus > 0) && (SecondaryBus < 0xFF)) {
+ //
+ // Recursive call for next bus in this stack
+ //
+ PciTreeTraverse (Socket, Stack, SecondaryBus);
+ }
+ }
+ }
+
+ if (!MultiFunc) {
+ //
+ // Skip sub functions, this is not a multi function device
+ //
+ Func = PCI_MAX_FUNC;
+ }
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Program Io Apic Id
+
+ @param IoApicAddress and IoApicId
+
+ @retval None
+
+**/
+VOID
+ProgramIoApicId (
+ IN UINT32 IoApicAddress,
+ IN UINT8 IoApicId
+ )
+{
+
+ UINT32 Data;
+
+ mPciPrivateData.CpuIo->Mem.Read (
+ mPciPrivateData.CpuIo,
+ EfiCpuIoWidthUint32,
+ IoApicAddress + EFI_IO_APIC_INDEX_OFFSET,
+ 1,
+ &Data
+ );
+
+ //
+ // IOAPIC is not there
+ //
+ if (Data == (UINT32) -1) {
+ return ;
+ }
+ //
+ // Set up IO APIC ID and enable FSB delivery
+ // Use CPU IO protocol since the IO APIC ranges
+ // are not included in PCI apertures
+ //
+ Data = EFI_IO_APIC_ID_REGISTER;
+ mPciPrivateData.CpuIo->Mem.Write (
+ mPciPrivateData.CpuIo,
+ EfiCpuIoWidthUint32,
+ IoApicAddress + EFI_IO_APIC_INDEX_OFFSET,
+ 1,
+ &Data
+ );
+
+ Data = IoApicId << EFI_IO_APIC_ID_BITSHIFT;
+ mPciPrivateData.CpuIo->Mem.Write (
+ mPciPrivateData.CpuIo,
+ EfiCpuIoWidthUint32,
+ IoApicAddress + EFI_IO_APIC_DATA_OFFSET,
+ 1,
+ &Data
+ );
+
+ Data = EFI_IO_APIC_BOOT_CONFIG_REGISTER;
+ mPciPrivateData.CpuIo->Mem.Write (
+ mPciPrivateData.CpuIo,
+ EfiCpuIoWidthUint32,
+ IoApicAddress + EFI_IO_APIC_INDEX_OFFSET,
+ 1,
+ &Data
+ );
+
+ Data = EFI_IO_APIC_FSB_INT_DELIVERY;
+ mPciPrivateData.CpuIo->Mem.Write (
+ mPciPrivateData.CpuIo,
+ EfiCpuIoWidthUint32,
+ IoApicAddress + EFI_IO_APIC_DATA_OFFSET,
+ 1,
+ &Data
+ );
+}
+
+#ifdef EFI_PCI_IOV_SUPPORT
+/**
+
+ Initialize the Pci Iov Platform Data.
+
+ @param ImageHandle - Handle to the image.
+ @param SystemTable - Handle to System Table.
+
+ @retval EFI_STATUS - Status of the function calling.
+
+**/
+EFI_STATUS
+EFIAPI
+PciPlatformInitPciIovData (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_PCI_IOV_PLATFORM_POLICY PciIovPolicy;
+ UINT32 SystemPageSize;
+ EFI_PCI_IOV_PLATFORM_PROTOCOL *gPciIovPlatformProtocol;
+
+ Status = gBS->LocateProtocol (
+ &gEfiPciIovPlatformProtocolGuid,
+ NULL,
+ &gPciIovPlatformProtocol
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = gPciIovPlatformProtocol->GetSystemLowestPageSize (
+ gPciIovPlatformProtocol,
+ &SystemPageSize
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = PcdSet32S (PcdSrIovSystemPageSize, SystemPageSize);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ } else {
+ return Status;
+ }
+ Status = gPciIovPlatformProtocol->GetPlatformPolicy (
+ gPciIovPlatformProtocol,
+ &PciIovPolicy
+ );
+ if (!EFI_ERROR (Status)) {
+ if (PciIovPolicy & EFI_PCI_IOV_POLICY_ARI) {
+ Status = PcdSetBoolS (PcdAriSupport, TRUE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ } else {
+ Status = PcdSetBoolS (PcdAriSupport, FALSE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ }
+ if (PciIovPolicy & EFI_PCI_IOV_POLICY_SRIOV) {
+ Status = PcdSetBoolS (PcdSrIovSupport, TRUE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ } else {
+ Status = PcdSetBoolS (PcdSrIovSupport, FALSE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ }
+ if (PciIovPolicy & EFI_PCI_IOV_POLICY_MRIOV) {
+ Status = PcdSetBoolS (PcdMrIovSupport, TRUE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ } else {
+ Status = PcdSetBoolS (PcdMrIovSupport, FALSE);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ }
+ } else {
+ return Status;
+ }
+ DEBUG ((
+ EFI_D_INFO,
+ " Initialized SR-IOV Platform Data: PCIIovPolicy = 0x%x; SystemPageSize = 0x%x;\n",
+ PciIovPolicy, SystemPageSize
+ ));
+ } else {
+ DEBUG ((
+ EFI_D_INFO,
+ " Using default values for SystemPageSize;\n"
+ ));
+ }
+ return Status;
+}
+#endif
+
+/**
+
+ Platform Pci Express init.
+
+ @param HostBridgeInstance - Pointer to Host Bridge private data
+ does not support 64 bit memory addresses.
+
+ @retval EFI_SUCCESS - Success.
+
+**/
+EFI_STATUS
+PciPlatformEarlyInit (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ Status = EFI_SUCCESS;
+
+#ifdef EFI_PCI_IOV_SUPPORT
+ Status = PciPlatformInitPciIovData(); // Update IOV PCD values
+#endif
+ return Status;
+}
+
+/**
+
+ Attempts to set the XHCI controller's PCI CMD.MSE and CMD.BME bits to enable OS kernel debugging over XHCI.
+
+**/
+VOID
+AttemptToSetXhciMse (
+ )
+
+{
+ UINT32 XhciBar;
+ UINT16 Command;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+ EFI_STATUS Status;
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ //
+ // Step 1. Make sure the XHCI BAR is initialized.
+ // Check if lower 32 bits of 64-bit BAR are configured.
+ //
+ XhciBar = MmioRead32 (DynamicSiLibraryProtocol->MmPciBase (DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_XHCI, PCI_FUNCTION_NUMBER_PCH_XHCI) + R_XHCI_CFG_BAR0) & ~(0xF);
+ if (XhciBar == 0xFFFFFFF0) {
+ return;
+ }
+ if ((XhciBar & 0xFFFF0000) == 0) {
+ //
+ // If lower 32 bits are not configured, check upper 32 bits.
+ //
+ XhciBar = MmioRead32 (DynamicSiLibraryProtocol->MmPciBase (DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_XHCI, PCI_FUNCTION_NUMBER_PCH_XHCI) + R_XHCI_CFG_BAR0 + 4);
+ if (XhciBar == 0) {
+ return;
+ }
+ }
+
+ //
+ // Step 2. If XHCI's MSE (Memory Space Enable) or BME (Bus Master Enable) bits are cleared, set them.
+ //
+ Command = MmioRead16 (DynamicSiLibraryProtocol->MmPciBase (DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_XHCI, PCI_FUNCTION_NUMBER_PCH_XHCI) + PCI_COMMAND_OFFSET);
+ if ((Command & (EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER)) != (EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER)) {
+ MmioOr16 (DynamicSiLibraryProtocol->MmPciBase (DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_XHCI, PCI_FUNCTION_NUMBER_PCH_XHCI) + PCI_COMMAND_OFFSET, (EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER));
+ }
+}
+
+
+/**
+
+ Init pci device registers after the device resources have been allocated, so
+ that devices behind a bus could be accessed.
+
+ @param HostBridgeInstance - PCI_HOST_BRIDGE_INSTANCE.
+
+ @retval EFI_SUCCESS - Function has completed successfully.
+
+**/
+EFI_STATUS
+PciPlatformPostInit (
+ VOID
+ )
+{
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+ EFI_STATUS Status;
+
+ //
+ // Program all the IOAPIC in system
+ //
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ UINT8 Socket, Stack, IoApicId, ApicIndex = 0;
+ CPU_CSR_ACCESS_VAR *CpuCsrAccessVarPtr = NULL;
+ Stack = 0;
+ IoApicId = 0;
+ CpuCsrAccessVarPtr = DynamicSiLibraryProtocol->GetSysCpuCsrAccessVar ();
+ DEBUG ((DEBUG_INFO, "PciPlatformPostInit: setting up IOAPIC for PCH\n"));
+ ProgramIoApicId (mIioUds->IioUdsPtr->PlatformData.IIO_resource[0].StackRes[0].IoApicBase, PCH_IOAPIC_ID);
+ for (Socket = 0; Socket < MAX_SOCKET; Socket++) {
+ if (!(CpuCsrAccessVarPtr->socketPresentBitMap & (1 << Socket))) {
+ continue;
+ }
+
+ for (Stack = 0; Stack < MAX_IIO_STACK; Stack++, ApicIndex++) {
+ if (!(mIioUds->IioUdsPtr->PlatformData.CpuQpiInfo[Socket].stackPresentBitmap & (1 << Stack))) {
+ continue;
+ }
+ switch (ApicIndex) {
+ case 0:
+ IoApicId = PC00_IOAPIC_ID;
+ break;
+ case 1:
+ IoApicId = PC01_IOAPIC_ID;
+ break;
+ case 2:
+ IoApicId = PC02_IOAPIC_ID;
+ break;
+ case 3:
+ IoApicId = PC03_IOAPIC_ID;
+ break;
+ case 4:
+ IoApicId = PC04_IOAPIC_ID;
+ break;
+ case 5:
+ IoApicId = PC05_IOAPIC_ID;
+ break;
+ case 6:
+ IoApicId = PC06_IOAPIC_ID;
+ break;
+ case 7:
+ IoApicId = PC07_IOAPIC_ID;
+ break;
+ case 8:
+ IoApicId = PC08_IOAPIC_ID;
+ break;
+ case 9:
+ IoApicId = PC09_IOAPIC_ID;
+ break;
+ case 10:
+ IoApicId = PC10_IOAPIC_ID;
+ break;
+ case 11:
+ IoApicId = PC11_IOAPIC_ID;
+ break;
+ case 12:
+ IoApicId = PC12_IOAPIC_ID;
+ break;
+ case 13:
+ IoApicId = PC13_IOAPIC_ID;
+ break;
+ case 14:
+ IoApicId = PC14_IOAPIC_ID;
+ break;
+ case 15:
+ IoApicId = PC15_IOAPIC_ID;
+ break;
+ case 16:
+ IoApicId = PC16_IOAPIC_ID;
+ break;
+ case 17:
+ IoApicId = PC17_IOAPIC_ID;
+ break;
+ case 18:
+ IoApicId = PC18_IOAPIC_ID;
+ break;
+ case 19:
+ IoApicId = PC19_IOAPIC_ID;
+ break;
+ case 20:
+ IoApicId = PC20_IOAPIC_ID;
+ break;
+ case 21:
+ IoApicId = PC21_IOAPIC_ID;
+ break;
+ case 22:
+ IoApicId = PC22_IOAPIC_ID;
+ break;
+ case 23:
+ IoApicId = PC23_IOAPIC_ID;
+ break;
+ case 24:
+ IoApicId = PC24_IOAPIC_ID;
+ break;
+ case 25:
+ IoApicId = PC25_IOAPIC_ID;
+ break;
+ case 26:
+ IoApicId = PC26_IOAPIC_ID;
+ break;
+ case 27:
+ IoApicId = PC27_IOAPIC_ID;
+ break;
+ case 28:
+ IoApicId = PC28_IOAPIC_ID;
+ break;
+ case 29:
+ IoApicId = PC29_IOAPIC_ID;
+ break;
+ case 30:
+ IoApicId = PC30_IOAPIC_ID;
+ break;
+ case 31:
+ IoApicId = PC31_IOAPIC_ID;
+ break;
+ case 32:
+ IoApicId = PC32_IOAPIC_ID;
+ break;
+ case 33:
+ IoApicId = PC33_IOAPIC_ID;
+ break;
+ case 34:
+ IoApicId = PC34_IOAPIC_ID;
+ break;
+ case 35:
+ IoApicId = PC35_IOAPIC_ID;
+ break;
+ case 36:
+ IoApicId = PC36_IOAPIC_ID;
+ break;
+ case 37:
+ IoApicId = PC37_IOAPIC_ID;
+ break;
+ case 38:
+ IoApicId = PC38_IOAPIC_ID;
+ break;
+ case 39:
+ IoApicId = PC39_IOAPIC_ID;
+ break;
+ case 40:
+ IoApicId = PC40_IOAPIC_ID;
+ break;
+ case 41:
+ IoApicId = PC41_IOAPIC_ID;
+ break;
+ case 42:
+ IoApicId = PC42_IOAPIC_ID;
+ break;
+ case 43:
+ IoApicId = PC43_IOAPIC_ID;
+ break;
+ case 44:
+ IoApicId = PC44_IOAPIC_ID;
+ break;
+ case 45:
+ IoApicId = PC45_IOAPIC_ID;
+ break;
+ case 46:
+ IoApicId = PC46_IOAPIC_ID;
+ break;
+ case 47:
+ IoApicId = PC47_IOAPIC_ID;
+ break;
+ default:
+ break;
+ }
+ if ((Socket == 0) && (Stack == 0)) {
+ ProgramIoApicId ((mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].IoApicBase + 0x1000), IoApicId);
+ } else {
+ ProgramIoApicId (mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].StackRes[Stack].IoApicBase, IoApicId);
+ }
+ }
+ }
+
+ AttemptToSetXhciMse ();
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ The PlatformPrepController() function can be used to notify the platform driver so that
+ it can perform platform-specific actions. No specific actions are required.
+ Several notification points are defined at this time. More synchronization points may be
+ added as required in the future. The PCI bus driver calls the platform driver twice for
+ every PCI controller-once before the PCI Host Bridge Resource Allocation Protocol driver
+ is notified, and once after the PCI Host Bridge Resource Allocation Protocol driver has
+ been notified.
+ This member function may not perform any error checking on the input parameters. It also
+ does not return any error codes. If this member function detects any error condition, it
+ needs to handle those errors on its own because there is no way to surface any errors to
+ the caller.
+
+ @param This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param HostBridge - The associated PCI Host bridge handle.
+ @param RootBridge - The associated PCI root bridge handle.
+ @param PciAddress - The address of the PCI device on the PCI bus.
+ @param Phase - The phase of the PCI controller enumeration.
+ @param ChipsetPhase - Defines the execution phase of the PCI chipset driver.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_UNSUPPORTED - Not supported.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformPrepController (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_HANDLE RootBridge,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *RootBridgeIo;
+ PCI_TYPE00 Pci0;
+ UINT64 Address;
+ UINT8 SecBus;
+ UINT8 Device;
+ UINT8 Func;
+ UINT64 DummyData = 0xFFFFFFFF;
+ UINT32 DidVid;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ if (mPciPrivateData.RootBridgeHandle == NULL) {
+ mPciPrivateData.RootBridgeHandle = RootBridge;
+ }
+
+ Status = gBS->HandleProtocol (
+ mPciPrivateData.RootBridgeHandle,
+ &gEfiPciRootBridgeIoProtocolGuid,
+ (VOID **) &RootBridgeIo
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+// Workaround for PCI devices under Pilot IV, this video controller can only be exposed if write 0xFFFFFFFF to it and read back
+ if (Phase == EfiPciBeforeChildBusEnumeration && ChipsetPhase == ChipsetExit ) {
+
+// Read the entire config header
+ Address = EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, 0);
+ Status = RootBridgeIo->Pci.Read (
+ RootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ sizeof (PCI_TYPE00) / sizeof (UINT32),
+ &Pci0
+ );
+
+ if (!EFI_ERROR (Status) && IS_PCI_BRIDGE(&Pci0)) {
+
+ // Read the secondary bus number
+ Address = EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, PCI_BRIDGE_SECONDARY_BUS_REGISTER_OFFSET);
+ Status = RootBridgeIo->Pci.Read (
+ RootBridgeIo,
+ EfiPciWidthUint8,
+ Address,
+ 1,
+ &SecBus
+ );
+
+ if (!EFI_ERROR (Status)) {
+
+ //
+ // For this bridge with existing secondary bus apply PCI Intel WAs
+ //
+ DidVid = ((Pci0.Hdr).DeviceId << 16) | (Pci0.Hdr).VendorId;
+ DynamicSiLibraryProtocol->IioPciHookBeforeEnumeration ((UINT8)RootBridgeIo->SegmentNumber, PciAddress.Bus, PciAddress.Device, PciAddress.Function, DidVid);
+
+ for (Device = 0; Device <= PCI_MAX_DEVICE; Device++) {
+ for (Func = 0; Func <= PCI_MAX_FUNC; Func++) {
+ Address = EFI_PCI_ADDRESS (SecBus, Device, Func, 0);
+ Status = RootBridgeIo->Pci.Read (
+ RootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ 1,
+ &Pci0
+ );
+
+ if ( !EFI_ERROR (Status) && (Pci0.Hdr).VendorId == 0xffff) {
+
+ Status = RootBridgeIo->Pci.Write(
+ RootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ 1,
+ &DummyData
+ );
+ PCIDEBUG ("%a: For B(0x%x)-D(0x%x)-F(0x%x),Pci.Write() returns with %r\n",
+ __FUNCTION__, SecBus, Device, Func, Status);
+
+ if (EFI_ERROR (Status)) {
+ //
+ // If error, go to next function
+ //
+ continue;
+ } else {
+ Func = PCI_MAX_FUNC; // skip the remaining function
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Perform initialization by the phase indicated.
+
+ @param This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param HostBridge - The associated PCI Host bridge handle.
+ @param Phase - The phase of the PCI controller enumeration.
+ @param ChipsetPhase - Defines the execution phase of the PCI chipset driver.
+
+ @retval EFI_SUCCESS - Must return with success.
+
+**/
+EFI_STATUS
+EFIAPI
+PhaseNotify (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ UINT16 StackBit;
+ UINT8 Socket;
+ UINT8 Stack;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *HostResAllocPtr;
+ PCI_HOST_BRIDGE_INSTANCE *HostBridgePtr;
+ PCI_ROOT_BRIDGE_INSTANCE *RootBridgePtr;
+ LIST_ENTRY *NodePtr;
+ CPU_CSR_ACCESS_VAR *CpuCsrAccessVarPtr;
+ DYNAMIC_SI_LIBARY_PROTOCOL *DynamicSiLibraryProtocol = NULL;
+
+ static CHAR8 *NotifyPhase2Name[] = {"EfiPciHostBridgeBeginEnumeration",
+ "EfiPciHostBridgeBeginBusAllocation",
+ "EfiPciHostBridgeEndBusAllocation",
+ "EfiPciHostBridgeBeginResourceAllocation",
+ "EfiPciHostBridgeAllocateResources",
+ "EfiPciHostBridgeSetResources",
+ "EfiPciHostBridgeFreeResources",
+ "EfiPciHostBridgeEndResourceAllocation",
+ "EfiPciHostBridgeEndEnumeration"};
+
+ if (Phase < NELEMENTS (NotifyPhase2Name)) {
+ DEBUG ((DEBUG_INFO, "[PCI] %a phase notified (execution %d)\n", NotifyPhase2Name[Phase], ChipsetPhase));
+ } else {
+ DEBUG ((DEBUG_ERROR, "[PCI] ERROR: Unknown phase %d notified (execution %d)\n", Phase, ChipsetPhase));
+ }
+
+ Status = gBS->LocateProtocol (&gDynamicSiLibraryProtocolGuid, NULL, &DynamicSiLibraryProtocol);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ CpuCsrAccessVarPtr = DynamicSiLibraryProtocol->GetSysCpuCsrAccessVar ();
+
+ if (ChipsetPhase == ChipsetEntry) {
+ return EFI_SUCCESS;
+ }
+ //
+ // If for multiple Host bridges, need special consideration
+ //
+ switch (Phase) {
+
+ case EfiPciHostBridgeBeginEnumeration:
+ //
+ // Pre-initialization before PCI bus enumeration
+ // No bus number and no PCI resource
+ // Locate the IIO Protocol Interface
+ //
+ Status = gBS->LocateProtocol (
+ &gEfiIioUdsProtocolGuid,
+ NULL,
+ &mIioUds
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gBS->LocateProtocol (
+ &gEfiCpuIo2ProtocolGuid,
+ NULL,
+ &mPciPrivateData.CpuIo
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ mPciPrivateData.Context.CpuIo = mPciPrivateData.CpuIo;
+ DEBUG ((DEBUG_INFO, "[PCI] Platform Pre-Initialization (Before bus scanning)\n"));
+ //
+ // Locate gEfiPciRootBridgeIoProtocolGuid instance created for each IIO stack.
+ // They were created by host bridge driver and linked to the
+ // gEfiPciHostBridgeResourceAllocationProtocolGuid protocol.
+ //
+ Status = gBS->LocateProtocol (
+ &gEfiPciHostBridgeResourceAllocationProtocolGuid,
+ NULL,
+ &HostResAllocPtr
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ HostBridgePtr = CR (HostResAllocPtr, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE);
+ for (NodePtr = GetFirstNode (&HostBridgePtr->RootBridges);
+ !IsNull (&HostBridgePtr->RootBridges, NodePtr);
+ NodePtr = GetNextNode (&HostBridgePtr->RootBridges, NodePtr)) {
+ RootBridgePtr = CR (NodePtr, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE);
+ for (Socket = 0; Socket < NELEMENTS (mPciPrivateData.PciRootBridgeIo); Socket++) {
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid) {
+ continue;
+ }
+ for (StackBit = 1, Stack = 0;
+ Stack < NELEMENTS (mPciPrivateData.PciRootBridgeIo[Socket]);
+ StackBit <<= 1, Stack++) {
+ if ((CpuCsrAccessVarPtr->stackPresentBitmap[Socket] & StackBit) &&
+ CpuCsrAccessVarPtr->StackBus[Socket][Stack] == RootBridgePtr->Aperture.BusBase) {
+ //
+ // This is the stack handled by this instance of root bridge IO protocol. Store it for future use.
+ //
+ mPciPrivateData.PciRootBridgeIo[Socket][Stack] = &RootBridgePtr->RootBridgeIo;
+ Socket = NELEMENTS (mPciPrivateData.PciRootBridgeIo);
+ break;
+ }
+ }
+ }
+ }
+ PciPlatformEarlyInit ();
+ break;
+
+ case EfiPciHostBridgeEndBusAllocation:
+ //
+ // There are two rounds PCI bus scanning
+ // First round will initilize the PCI hotplug device
+ // Second round will be the final one
+ //
+ if (mPciPrivateData.BusAssignedTime == 0) {
+ mPciPrivateData.PciEnumerationPhase = EfiPciEnumerationDeviceScanning;
+ for (Socket = 0; Socket < NELEMENTS (mPciPrivateData.PciRootBridgeIo); Socket++) {
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid) {
+ continue;
+ }
+ for (Stack = 0; Stack < NELEMENTS (mPciPrivateData.PciRootBridgeIo[Socket]); Stack ++) {
+ if (mPciPrivateData.PciRootBridgeIo[Socket][Stack] == NULL) {
+ continue;
+ }
+ PciTreeTraverse (Socket, Stack, CpuCsrAccessVarPtr->StackBus[Socket][Stack]);
+ }
+ }
+ mPciPrivateData.BusAssignedTime++;
+ DEBUG ((DEBUG_INFO, "[PCI] Platform bus assigned\n"));
+ }
+ break;
+
+ case EfiPciHostBridgeBeginResourceAllocation:
+ //
+ // PCI bus number has been assigned, but resource is still empty
+ //
+ DEBUG ((DEBUG_INFO, "[PCI] Platform Mid-Initialization (After bus number assignment)\n"));
+ mPciPrivateData.PciEnumerationPhase = EfiPciEnumerationBusNumberAssigned;
+ for (Socket = 0; Socket < NELEMENTS (mPciPrivateData.PciRootBridgeIo); Socket++) {
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid) {
+ continue;
+ }
+ for (Stack = 0; Stack < NELEMENTS (mPciPrivateData.PciRootBridgeIo[Socket]); Stack ++) {
+ if (mPciPrivateData.PciRootBridgeIo[Socket][Stack] == NULL) {
+ continue;
+ }
+ PciTreeTraverse (Socket, Stack, CpuCsrAccessVarPtr->StackBus[Socket][Stack]);
+ }
+ }
+ //PciPlatformMidInit ();
+ break;
+
+ case EfiPciHostBridgeEndResourceAllocation:
+ //
+ // Resource enumeration is done.
+ // Both bus number and resource have been assigned
+ // Do any post initialization.
+ //
+ DEBUG ((DEBUG_INFO, "[PCI] Platform Post-Initialization (After resource alloction)\n"));
+ mPciPrivateData.PciEnumerationPhase = EfiPciEnumerationResourceAssigned;
+ for (Socket = 0; Socket < NELEMENTS (mPciPrivateData.PciRootBridgeIo); Socket++) {
+ if (!mIioUds->IioUdsPtr->PlatformData.IIO_resource[Socket].Valid) {
+ continue;
+ }
+ for (Stack = 0; Stack < NELEMENTS (mPciPrivateData.PciRootBridgeIo[Socket]); Stack ++) {
+ if (mPciPrivateData.PciRootBridgeIo[Socket][Stack] == NULL) {
+ continue;
+ }
+ PciTreeTraverse (Socket, Stack, CpuCsrAccessVarPtr->StackBus[Socket][Stack]);
+ }
+ }
+ PciPlatformPostInit ();
+ break;
+
+ default:
+ return EFI_UNSUPPORTED;
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h
new file mode 100644
index 0000000000..b52b5de16e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h
@@ -0,0 +1,31 @@
+/** @file
+ This code supports a the private implementation
+ of the Legacy BIOS Platform protocol
+
+ @copyright
+ Copyright 2004 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCI_PLATFORM_HOOKS_H_
+#define _PCI_PLATFORM_HOOKS_H_
+
+#include <Library/IoLib.h>
+
+VOID
+ChipsetCallback (
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_ENUMERATION_PHASE Phase,
+ EFI_PCI_CALLBACK_CONTEXT *Context
+ );
+
+EFI_STATUS
+PciTreeTraverse (
+ IN UINT8 Socket,
+ IN UINT8 Stack,
+ IN UINT8 StartBus
+ );
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c
new file mode 100644
index 0000000000..7b5d45711d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c
@@ -0,0 +1,108 @@
+/** @file
+ Support PCI chipset initialization.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PiDxe.h"
+#include <Base.h>
+#include <Guid/SocketIioVariable.h>
+#include <Library/IoLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include "IndustryStandard/Pci.h"
+#include "PciSupportLib.h"
+
+PCIE_STACK mPcieStack;
+
+
+/**
+
+ This routine is used to check whether the pci device is present
+
+ @retval None
+
+**/
+BOOLEAN
+IsPciDevicePresent (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
+ OUT PCI_TYPE00 *Pci,
+ UINT8 Bus,
+ UINT8 Device,
+ UINT8 Func
+ )
+// TODO: PciRootBridgeIo - add argument and description to function comment
+// TODO: Pci - add argument and description to function comment
+// TODO: Bus - add argument and description to function comment
+// TODO: Device - add argument and description to function comment
+// TODO: Func - add argument and description to function comment
+// TODO: EFI_SUCCESS - add return value to function comment
+// TODO: EFI_NOT_FOUND - add return value to function comment
+{
+ UINT64 Address;
+ UINT32 Dummy;
+ EFI_STATUS Status;
+
+ Dummy = 0xFFFFFFFF;
+ //
+ // Create PCI address map in terms of Bus, Device and Func
+ //
+ Address = EFI_PCI_ADDRESS (Bus, Device, Func, 0);
+
+ //
+ // Read the Vendor Id register
+ //
+ Status = PciRootBridgeIo->Pci.Read (
+ PciRootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ 1,
+ Pci
+ );
+ if ((Pci->Hdr).VendorId == 0xFFFF) {
+ //
+ // The PCIe card could have been assigned a temporary bus number earlier in
+ // the boot flow. Performing a write cycle can be used to cause the PCIe
+ // card to latch the new bus number. Try to writing the Vendor Id register,
+ // then recheck if the card is present.
+ //
+ Status = PciRootBridgeIo->Pci.Write(
+ PciRootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ 1,
+ &Dummy
+ );
+
+ //
+ // Retry the previous read after the PCI write cycle.
+ //
+ Status = PciRootBridgeIo->Pci.Read (
+ PciRootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ 1,
+ Pci
+ );
+ }
+
+ if (!EFI_ERROR (Status) && (Pci->Hdr).VendorId != 0xFFFF) {
+ //
+ // Read the entire config header for the device
+ //
+ Status = PciRootBridgeIo->Pci.Read (
+ PciRootBridgeIo,
+ EfiPciWidthUint32,
+ Address,
+ sizeof (PCI_TYPE00) / sizeof (UINT32),
+ Pci
+ );
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h
new file mode 100644
index 0000000000..e173125c97
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h
@@ -0,0 +1,46 @@
+/** @file
+ Support PCI chipset initialization.
+
+ @copyright
+ Copyright 1999 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _EFI_PCI_SUPPORT_H_
+#define _EFI_PCI_SUPPORT_H_
+
+#include <Protocol/PciRootBridgeIo.h>
+
+#include <Guid/SetupVariable.h>
+
+typedef struct {
+ UINT8 PcieCapPtr;
+ UINT8 Function;
+ UINT8 Device;
+ UINT8 Bus;
+ UINT16 PcieLnkCap;
+ UINT16 PcieDevCap;
+ //Added to Support AtomicOp Request-->Start
+ UINT16 PcieDevCap2;
+ //Added to Support AtomicOp Request-->End
+} PCIE_CAP_INFO;
+
+typedef struct {
+ INTN Top;
+ PCIE_CAP_INFO PcieCapInfo[FixedPcdGet32(PcdMaxNestedLevel)];
+} PCIE_STACK;
+
+extern PCIE_STACK mPcieStack;
+
+BOOLEAN
+IsPciDevicePresent (
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
+ OUT PCI_TYPE00 *Pci,
+ UINT8 Bus,
+ UINT8 Device,
+ UINT8 Func
+ );
+
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c
new file mode 100644
index 0000000000..003787a163
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c
@@ -0,0 +1,274 @@
+/** @file
+ Platform variable initialization PEIM.
+
+ This PEIM determines whether to load variable defaults. Ordinarily, the
+ decision is based on the boot mode, but an OEM hook is provided to override
+ that. The appropriate HOBs and PCDs are created to signal DXE code to update
+ the variable default values.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PlatformVariableInitPei.h"
+#include <Guid/PlatformVariableCommon.h>
+#include <Uefi/UefiInternalFormRepresentation.h>
+
+UINT16 BoardId = BOARD_ID_DEFAULT;
+
+EFI_PEI_PPI_DESCRIPTOR mPpiListPlatformVariableInit = {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gPlatformVariableInitPpiGuid,
+ NULL
+};
+
+/**
+Apply platform variable defaults.
+
+Create HOBs and set PCDs to prompt the (re-)loading of variable defaults.
+Each step is attempted regardless of whether the previous steps succeeded.
+If multiple errors occur, only the last error code is returned.
+
+@param[in] Events Bitmap of events that occurred.
+@param[in] DefaultId Default store ID, STANDARD or MANUFACTURING.
+
+@retval EFI_SUCCESS All steps completed successfully.
+@retval EFI_OUT_OF_RESOURCES One of the HOBs could not be created.
+@retval EFI_NOT_FOUND The default data could not be found in FFS.
+**/
+
+EFI_STATUS
+ApplyPlatformVariableDefaults(
+ IN UINT8 Events,
+ IN UINT16 DefaultId
+ )
+{
+ VOID *Hob;
+ EFI_STATUS Status;
+ EFI_STATUS ReturnStatus;
+
+ DEBUG((DEBUG_INFO, "Applying platform variable defaults:\n"));
+ DEBUG((DEBUG_INFO, " Events = 0x%02x\n", Events));
+ DEBUG((DEBUG_INFO, " DefaultId = 0x%04x\n", DefaultId));
+
+ //
+ // Assume success up front. This will be overwritten if errors occur.
+ //
+ ReturnStatus = EFI_SUCCESS;
+
+ //
+ // Send the bitmap of events to the platform variable DXE driver.
+ //
+ Hob = BuildGuidDataHob(&gPlatformVariableHobGuid, &Events, sizeof(Events));
+ if (Hob == NULL) {
+ DEBUG((DEBUG_ERROR, "Create platform var event HOB: %r!\n", EFI_OUT_OF_RESOURCES));
+ ReturnStatus = EFI_OUT_OF_RESOURCES;
+ }
+
+ //
+ // Locate variable default data in FFS and send it to the core variable DXE
+ // driver to write.
+ //
+ Status = CreateDefaultVariableHob(DefaultId, BoardId);
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "create default var HOB: %r!\n", Status));
+ ReturnStatus = Status;
+ }
+
+ //
+ // Set the PCD SKU ID.
+ //
+ LibPcdSetSku(BoardId);
+
+ //
+ // Set the PCD default store ID.
+ //
+ Status = PcdSet16S(PcdSetNvStoreDefaultId, DefaultId);
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "setNVstore default ID PCD: %r!\n", Status));
+ ReturnStatus = Status;
+ }
+
+ return ReturnStatus;
+}
+
+/**
+Perform the default variable initializations after variable service is ready.
+
+@param[in] PeiServices General purpose services available to every PEIM.
+@param[in] NotifyDescriptor Pointer to Notify PPI descriptor.
+@param[in] Interface Pointer to PPI.
+
+@retval EFI_SUCCESS Default setting is initialized into variable.
+@retval Other values Can't find the matched default setting.
+**/
+EFI_STATUS
+EFIAPI
+PlatformVariablePeiInit(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *Interface
+)
+{
+ EFI_STATUS Status;
+ UINT8 *SystemConfiguration;
+ EFI_GUID *SystemConfigurationGuid;
+ UINTN DataSize;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
+ UINT8 Events;
+ UINT16 DefaultId;
+ BOOLEAN ApplyDefaults;
+
+ SystemConfigurationGuid = PcdGetPtr(PcdSetupVariableGuid);
+ Events = 0;
+ DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+
+ if (PlatformVariableHookForHobGeneration(Interface, &Events, &DefaultId)) {
+ //
+ // Use events bitmap and default ID returned by PlatformVariableHook.
+ //
+ ApplyDefaults = TRUE;
+ }
+ else {
+ //
+ // If the setup variable does not exist (yet), defaults should be applied.
+ //
+ VariableServices = (EFI_PEI_READ_ONLY_VARIABLE2_PPI *)Interface;
+ SystemConfiguration = NULL;
+ DataSize = 0;
+ Status = VariableServices->GetVariable(
+ VariableServices,
+ PLATFORM_SETUP_VARIABLE_NAME,
+ SystemConfigurationGuid,
+ NULL,
+ &DataSize,
+ SystemConfiguration
+ );
+ //
+ // Setup variable is not found. So, set the default setting.
+ //
+ if (Status == EFI_NOT_FOUND) {
+ Events = NULL_VARIABLE_EVENT;
+ DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+ ApplyDefaults = TRUE;
+ }
+ else {
+ ApplyDefaults = FALSE;
+ }
+ }
+
+
+ if (ApplyDefaults) {
+ Status = ApplyPlatformVariableDefaults(Events, DefaultId);
+ }
+ else {
+ //
+ // Normal case boot flow
+ //
+ Events = 0; // no events occurred
+ BuildGuidDataHob (&gPlatformVariableHobGuid, &Events, sizeof (UINT8));
+
+ //
+ // Patch RP variable value with PC variable in the begining of PEI
+ //
+ Status = CreateRPVariableHob (EFI_HII_DEFAULT_CLASS_STANDARD, BoardId);
+ }
+
+ PeiServicesInstallPpi (&mPpiListPlatformVariableInit);
+ return Status;
+}
+
+
+/**
+Variable Init BootMode CallBack
+Prepare Knob values based on boot mode
+Execute after discovering BootMode
+
+@param[in] PeiServices General purpose services available to every PEIM.
+@param[in] NotifyDescriptor Pointer to Notify PPI descriptor.
+@param[in] Interface Pointer to PPI.
+
+@retval EFI_SUCCESS Knob Values.
+@retval Other values
+**/
+EFI_STATUS
+EFIAPI
+VariableInitBootModeCallBack(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *Interface
+) {
+ EFI_BOOT_MODE BootMode;
+ BOOLEAN ApplyDefaults;
+ UINT8 Events;
+ UINT16 DefaultId;
+ EFI_STATUS Status;
+
+ Events = 0;
+ DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+ ApplyDefaults = FALSE;
+
+ //
+ // Certain boot modes require defaults to be (re-)applied.
+ //
+ Status = PeiServicesGetBootMode(&BootMode);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ BootMode = BOOT_WITH_DEFAULT_SETTINGS;
+ }
+ if (BootMode == BOOT_WITH_MFG_MODE_SETTINGS) {
+ Events = MFG_MODE_EVENT;
+ DefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;
+ ApplyDefaults = TRUE;
+ }
+ else if (BootMode == BOOT_IN_RECOVERY_MODE) {
+ Events = RECOVERY_MODE_EVENT;
+ DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+ ApplyDefaults = TRUE;
+ }
+ else if (BootMode == BOOT_WITH_DEFAULT_SETTINGS) {
+ Events = CMOS_CLEAR_EVENT;
+ DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+ ApplyDefaults = TRUE;
+ }
+ if (ApplyDefaults) {
+ Status = ApplyPlatformVariableDefaults(Events, DefaultId);
+ }
+ return Status;
+}
+
+EFI_PEI_NOTIFY_DESCRIPTOR mVariableNotifyList[] = {
+ {
+ (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK),
+ &gEfiPeiReadOnlyVariable2PpiGuid,
+ PlatformVariablePeiInit
+ },
+ {
+ (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gUpdateBootModePpiGuid,
+ VariableInitBootModeCallBack
+ }
+};
+
+EFI_STATUS
+EFIAPI
+PlatformVariableInitPeiEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+/*++
+
+--*/
+{
+ EFI_STATUS Status;
+
+ PlatformVariableHookForEntry();
+
+ // Register notify to set default variable once variable service is ready.
+ //
+ Status = PeiServicesNotifyPpi(&mVariableNotifyList[0]);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h b/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h
new file mode 100644
index 0000000000..f4701426ff
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h
@@ -0,0 +1,41 @@
+/** @file
+ Platform variable initialization PEIM.
+
+ This PEIM determines whether to load variable defaults. Ordinarily, the
+ decision is based on the boot mode, but an OEM hook is provided to override
+ that. The appropriate HOBs and PCDs are created to signal DXE code to update
+ the variable default values.
+
+ @copyright
+ Copyright 2012 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PLATFORM_VARIABLE_INIT_PEI_H_
+#define _PLATFORM_VARIABLE_INIT_PEI_H_
+
+#include <PiPei.h>
+
+#include <Library/MultiPlatSupportLib.h>
+
+#include <Ppi/ReadOnlyVariable2.h>
+#include <Ppi/FirmwareVolumeInfo.h>
+#include <Ppi/CpuIo.h>
+
+#include <Library/PcdLib.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/IoLib.h>
+#include <Library/PlatformVariableHookLib.h>
+#include <Library/PlatformSetupVariableSyncLib.h>
+
+//
+// We only have one ID for all the platforms.
+//
+#define BOARD_ID_DEFAULT 0
+
+#endif // #ifndef _PLATFORM_VARIABLE_INIT_PEI_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf b/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
new file mode 100644
index 0000000000..02d216206e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
@@ -0,0 +1,58 @@
+## @file
+# Platform variable initialization PEIM.
+#
+# This PEIM determines whether to load variable defaults. Ordinarily, the
+# decision is based on the boot mode, but an OEM hook is provided to override
+# that. The appropriate HOBs and PCDs are created to signal DXE code to update
+# the variable default values.
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformVariableInitPei
+ FILE_GUID = B88303F6-2E0E-41cc-8510-F5892BF1D9D9
+ MODULE_TYPE = PEIM
+ ENTRY_POINT = PlatformVariableInitPeiEntry
+
+[Sources]
+ PlatformVariableInitPei.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ SecurityPkg/SecurityPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ HobLib
+ IoLib
+ PciLib
+ PcdLib
+ MultiPlatSupportLib
+ PlatformVariableHookLib
+ PlatformSetupVariableSyncLib
+
+[Pcd]
+ gPlatformTokenSpaceGuid.PcdSetupVariableGuid ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetNvStoreDefaultId ## PRODUCES
+
+[Guids]
+ gPlatformVariableHobGuid ## PRODUCES ## HOB
+
+[Ppis]
+ gPlatformVariableInitPpiGuid ## PRODUCES
+ gEfiPeiReadOnlyVariable2PpiGuid ## SOMETIMES_CONSUMES ## NOTIFY
+ gUpdateBootModePpiGuid ## CONSUMES
+
+[Depex]
+ TRUE
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 13/17] WhitleyOpenBoardPkg: Add UBA Modules
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (11 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 12/17] WhitleyOpenBoardPkg: Add Feature Modules Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 14/17] WhitleyOpenBoardPkg: Add build scripts and package metadata Nate DeSimone
` (5 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../Uba/BoardInit/Dxe/BoardInitDxe.c | 87 ++
.../Uba/BoardInit/Dxe/BoardInitDxe.h | 30 +
.../Uba/BoardInit/Dxe/BoardInitDxe.inf | 70 +
.../Uba/BoardInit/Pei/BoardInitPei.c | 48 +
.../Uba/BoardInit/Pei/BoardInitPei.h | 20 +
.../Uba/BoardInit/Pei/BoardInitPei.inf | 55 +
.../Uba/CfgDb/Dxe/CfgDbDxe.c | 518 +++++++
.../Uba/CfgDb/Dxe/CfgDbDxe.h | 32 +
.../Uba/CfgDb/Dxe/CfgDbDxe.inf | 54 +
.../Uba/CfgDb/Pei/CfgDbPei.c | 803 ++++++++++
.../Uba/CfgDb/Pei/CfgDbPei.h | 33 +
.../Uba/CfgDb/Pei/CfgDbPei.inf | 54 +
.../WhitleyOpenBoardPkg/Uba/UbaCommon.dsc | 29 +
.../WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf | 16 +
.../Uba/UbaDxeRpBoards.fdf | 22 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.c | 206 +++
.../SystemBoardInfoDxe/SystemBoardInfoDxe.h | 33 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.inf | 45 +
.../SystemConfigUpdateDxe.c | 94 ++
.../SystemConfigUpdateDxe.h | 30 +
.../SystemConfigUpdateDxe.inf | 48 +
.../Uba/UbaMain/Common/Pei/BoardInfo.c | 69 +
.../Uba/UbaMain/Common/Pei/Clockgen.c | 27 +
.../Uba/UbaMain/Common/Pei/ClocksConfig.c | 177 +++
.../UbaMain/Common/Pei/GpioPlatformConfig.c | 166 ++
.../UbaMain/Common/Pei/HsioPtssTableConfig.c | 460 ++++++
.../Common/Pei/IioBifurcationSlotTable.h | 156 ++
.../UbaMain/Common/Pei/IioPortBifurcation.c | 913 +++++++++++
.../Common/Pei/IioPortBifurcationVer1.c | 1356 +++++++++++++++++
.../UbaMain/Common/Pei/PchHsioPtssTables.h | 51 +
.../Common/Pei/PchLbgHsioPtssTablesBx.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesBx.h | 18 +
.../Common/Pei/PchLbgHsioPtssTablesBx_Ext.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesBx_Ext.h | 20 +
.../Common/Pei/PchLbgHsioPtssTablesSx.c | 27 +
.../Common/Pei/PchLbgHsioPtssTablesSx.h | 21 +
.../Common/Pei/PchLbgHsioPtssTablesSx_Ext.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesSx_Ext.h | 21 +
.../Common/Pei/PeiCommonBoardInitLib.c | 75 +
.../Common/Pei/PeiCommonBoardInitLib.h | 55 +
.../Common/Pei/PeiCommonBoardInitLib.inf | 76 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 107 ++
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 161 ++
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 48 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 108 ++
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
.../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 48 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 124 ++
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
.../TypeCooperCityRP/Pei/AcpiTablePcds.c | 51 +
.../UbaMain/TypeCooperCityRP/Pei/GpioTable.c | 297 ++++
.../TypeCooperCityRP/Pei/IioBifurInit.c | 393 +++++
.../UbaMain/TypeCooperCityRP/Pei/KtiEparam.c | 241 +++
.../UbaMain/TypeCooperCityRP/Pei/PcdData.c | 259 ++++
.../TypeCooperCityRP/Pei/PchEarlyUpdate.c | 81 +
.../TypeCooperCityRP/Pei/PeiBoardInit.h | 96 ++
.../TypeCooperCityRP/Pei/PeiBoardInitLib.c | 224 +++
.../TypeCooperCityRP/Pei/PeiBoardInitLib.inf | 163 ++
.../UbaMain/TypeCooperCityRP/Pei/SlotTable.c | 164 ++
.../TypeCooperCityRP/Pei/SoftStrapFixup.c | 110 ++
.../Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c | 123 ++
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 99 ++
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 118 ++
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 47 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 115 ++
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
.../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 47 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 127 ++
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
.../TypeWilsonCityRP/Pei/AcpiTablePcds.c | 53 +
.../UbaMain/TypeWilsonCityRP/Pei/GpioTable.c | 287 ++++
.../TypeWilsonCityRP/Pei/IioBifurInit.c | 387 +++++
.../UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c | 107 ++
.../UbaMain/TypeWilsonCityRP/Pei/PcdData.c | 274 ++++
.../TypeWilsonCityRP/Pei/PchEarlyUpdate.c | 92 ++
.../TypeWilsonCityRP/Pei/PeiBoardInit.h | 77 +
.../TypeWilsonCityRP/Pei/PeiBoardInitLib.c | 156 ++
.../TypeWilsonCityRP/Pei/PeiBoardInitLib.inf | 166 ++
.../UbaMain/TypeWilsonCityRP/Pei/SlotTable.c | 171 +++
.../TypeWilsonCityRP/Pei/SoftStrapFixup.c | 120 ++
.../Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c | 126 ++
.../Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf | 24 +
.../WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc | 44 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c | 43 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h | 20 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf | 50 +
88 files changed, 11951 insertions(+)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c
new file mode 100644
index 0000000000..d8274fa7ad
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c
@@ -0,0 +1,87 @@
+/** @file
+ BOARD INIT DXE Driver.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "BoardInitDxe.h"
+#include <PlatformInfoTypes.h>
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+BoardInitDxeDriverEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+ UINT32 PlatformType = 0;
+ EFI_HANDLE Handle = NULL;
+
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->GetSku(
+ UbaConfigProtocol,
+ &PlatformType,
+ NULL,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ DEBUG ((DEBUG_INFO, "Uba init Dxe driver:PlatformType=%d\n", PlatformType));
+
+ //according to the platform type to install different dummy maker.
+ //later, the PEIM will be loaded by the dependency.
+ switch(PlatformType)
+ {
+ case TypeWilsonCityRP:
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gEfiPlatformTypeWilsonCityRPProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ break;
+
+ case TypeCooperCityRP:
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gEfiPlatformTypeCooperCityRPProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ break;
+
+ default:
+ // CAN'T GO TO HERE.
+ ASSERT_EFI_ERROR (FALSE);
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h
new file mode 100644
index 0000000000..f9825eafb5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h
@@ -0,0 +1,30 @@
+/** @file
+ BOARD INIT DXE Driver.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _BOARD_INIT_DXE_H_
+#define _BOARD_INIT_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+#include <PiDxe.h> // For Hob
+
+#include <Protocol/UbaCfgDb.h>
+#include <Protocol/UbaMakerProtocol.h>
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HobLib.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include <Platform.h>
+
+#endif // _BOARD_INIT_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf
new file mode 100644
index 0000000000..206d95658a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf
@@ -0,0 +1,70 @@
+## @file
+# Uba init for multi-boards support in DXE phase.
+#
+# @copyright
+# Copyright 2014 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BoardInitDxe
+ FILE_GUID = 69E6DD6D-F09E-485f-9627-EB70E9CFC82A
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+
+ ENTRY_POINT = BoardInitDxeDriverEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+ BoardInitDxe.c
+ BoardInitDxe.h
+
+[Packages]
+ MdeModulePkg/MdeModulePkg.dec
+ MdePkg/MdePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+
+[LibraryClasses]
+ DebugLib
+ IoLib
+ HobLib
+ UefiLib
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ UefiDriverEntryPoint
+ PrintLib
+
+[Guids]
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid #CONSUMER
+ gEfiPlatformTypeNeonCityEPRPProtocolGuid #PRODUCER
+ gEfiPlatformTypeHedtCRBProtocolGuid #PRODUCER
+ gEfiPlatformTypeLightningRidgeEXRPProtocolGuid #PRODUCER
+ gEfiPlatformTypeLightningRidgeEX8S1NProtocolGuid #PRODUCER
+ gEfiPlatformTypeWilsonCityRPProtocolGuid #PRODUCER
+ gEfiPlatformTypeWilsonCityModularProtocolGuid #PRODUCER
+ gEfiPlatformTypeIsoscelesPeakProtocolGuid #PRODUCER
+ gEfiPlatformTypeWilsonCitySMTProtocolGuid #PRODUCER
+ gEfiPlatformTypeCooperCityRPProtocolGuid #PRODUCER
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+
+[Depex]
+ gUbaConfigDatabaseProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c
new file mode 100644
index 0000000000..9200e84023
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c
@@ -0,0 +1,48 @@
+/** @file
+ Board Init PEIM.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "BoardInitPei.h"
+
+EFI_PEI_PPI_DESCRIPTOR mPpiListBoardInit = {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gBoardInitGuid,
+ NULL
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+EFIAPI
+BoardInitPeimEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+)
+{
+ EFI_STATUS Status;
+ DEBUG ((DEBUG_INFO, "UBA :UbaMainPeimEntry!\n"));
+
+ //
+ // Inform board init ready, then peims which will use board init data such as
+ // pcd data in uba database can take gBoardInitGuid as dependency.
+ //
+ Status = PeiServicesInstallPpi (&mPpiListBoardInit);
+ if (Status != EFI_SUCCESS) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h
new file mode 100644
index 0000000000..9e0a7343c6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h
@@ -0,0 +1,20 @@
+/** @file
+ Board Init PEIM.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _BOARD_INIT_PEI_PEIM_H_
+#define _BOARD_INIT_PEI_PEIM_H_
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+
+#endif // _BOARD_INIT_PEI_PEIM_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf
new file mode 100644
index 0000000000..f09a3934a2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf
@@ -0,0 +1,55 @@
+## @file
+# Board Init for multi-boards support in PEI phase.
+#
+# @copyright
+# Copyright 2015 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BoardInitPeim
+ FILE_GUID = 64980BB9-7BA3-4cb0-AA83-FE396A7F6724
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+
+ ENTRY_POINT = BoardInitPeimEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+ BoardInitPei.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+
+[Guids]
+ gEfiPlatformInfoGuid
+
+[Ppis]
+ gEfiPeiReadOnlyVariable2PpiGuid ## CONSUMES
+ gBoardInitGuid ## PRODUCES
+
+[Pcd]
+
+[FixedPcd]
+
+[Depex]
+ gUbaConfigDatabasePpiGuid AND
+ gEfiPeiReadOnlyVariable2PpiGuid AND
+ gEfiPlatformInfoGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c
new file mode 100644
index 0000000000..9a524a0d00
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c
@@ -0,0 +1,518 @@
+/** @file
+ UbaConfigDatabaseDxe Driver.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "CfgDbDxe.h"
+
+#include <PiDxe.h> // For Hob
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HobLib.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+/**
+ Internal function for getting the platform record node in the database.
+
+ @param This uba Protocol instance.
+ @param SkuNode The pointer to pointer of Platform record node.
+
+ @retval EFI_NOT_FOUND Platform record not found.
+ @retval EFI_SUCCESS Platform found.
+**/
+EFI_STATUS
+InternalGetSkuNode (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ OUT UBA_BOARD_NODE **SkuNode
+ )
+{
+ UBA_DXE_PRIVATE_DATA *UbaDxePrivate;
+ UbaDxePrivate = NULL;
+
+ UbaDxePrivate = PRIVATE_DATA_FROM_PROTOCOL (This);
+ *SkuNode = UbaDxePrivate->CurrentSku;
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Internal function for init the platform record to database.
+ Create the connections between UBA_BOARD_NODE and UBA_DXE_PRIVATE_DATA
+
+ @param This UBA Protocol instance.
+ @param BoardId The platform type.
+ @param BoardGuid The platform GUID.
+ @param BoardName The platform user friendly name.
+ @param SkuNode The pointer to pointer of Platform record node.
+
+ @retval EFI_ALREADY_STARTED Platform record already exist.
+ @retval EFI_OUT_OF_RESOURCES No enough resource.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalInitSkuDxe (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN UINT32 BoardId,
+ IN EFI_GUID *BoardGuid, OPTIONAL
+ IN CHAR8 *BoardName, OPTIONAL
+ OUT UBA_BOARD_NODE **SkuNode OPTIONAL
+ )
+{
+ UBA_DXE_PRIVATE_DATA *UbaDxePrivate;
+ UBA_BOARD_NODE *NewSkuNode;
+ UbaDxePrivate = NULL;
+ NewSkuNode = NULL;
+
+ UbaDxePrivate = PRIVATE_DATA_FROM_PROTOCOL (This);
+
+ NewSkuNode = AllocateZeroPool (sizeof (UBA_BOARD_NODE));
+ if (NewSkuNode == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ NewSkuNode->Signature = UBA_BOARD_SIGNATURE;
+ NewSkuNode->Version = UBA_BOARD_VERSION;
+ NewSkuNode->BoardId = BoardId;
+
+ if (BoardName != NULL) {
+ AsciiStrnCpyS (NewSkuNode->BoardName, AsciiStrSize (BoardName) / sizeof (CHAR8), BoardName, sizeof (NewSkuNode->BoardName) - 1);
+ }
+
+ if (BoardGuid != NULL) {
+ CopyMem (&NewSkuNode->BoardGuid, BoardGuid, sizeof (EFI_GUID));
+ }
+
+ // Initialize the list head for Datalink.
+ InitializeListHead (&NewSkuNode->DataLinkHead);
+
+ if (SkuNode != NULL) {
+ // Output the point of sku node.
+ *SkuNode = NewSkuNode;
+ // Pass the point to CurrentSku in UbaDxePrivate.
+ UbaDxePrivate->CurrentSku = NewSkuNode;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Internal function for adding new configuration data record to database.
+
+ @param This uba Protocol instance.
+ @param ResId The resource ID.
+ @param Data Data pointer.
+ @param DataSize Data size.
+
+ @retval EFI_INVALID_PARAMETER Parameter invalid.
+ @retval EFI_OUT_OF_RESOURCES No enough resource.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalAddNewConfigData (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN EFI_GUID *ResId,
+ IN VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE Handle;
+ UBA_DXE_PRIVATE_DATA *UbaDxePrivate;
+ UBA_CONFIG_NODE *NewDataNode;
+ UBA_BOARD_NODE *SkuNode;
+ UbaDxePrivate = NULL;
+ NewDataNode = NULL;
+ SkuNode = NULL;
+
+ if ((ResId == NULL) || (Data == NULL) || (DataSize <= 0)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ UbaDxePrivate = PRIVATE_DATA_FROM_PROTOCOL (This);
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ NewDataNode = AllocateZeroPool (sizeof (UBA_CONFIG_NODE));
+ if (NewDataNode == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ NewDataNode->Signature = UBA_BOARD_SIGNATURE;
+ NewDataNode->Version = UBA_BOARD_VERSION;
+ NewDataNode->Handle = (EFI_HANDLE) (UINTN) UbaDxePrivate->HandleCount;
+ NewDataNode->Data = AllocateCopyPool (DataSize, Data);
+ NewDataNode->Size = (UINT32) DataSize;
+
+ CopyMem (&NewDataNode->ResId, ResId, sizeof (EFI_GUID));
+
+ InsertTailList (&SkuNode->DataLinkHead, &NewDataNode->DataLink);
+ SkuNode->DataCount ++;
+ UbaDxePrivate->ConfigDataCount ++;
+ UbaDxePrivate->HandleCount ++;
+
+ //
+ // This Protocol just install for Protocol notify
+ // The Protocol instance UbaCfgDbProtocol should not used
+ //
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &NewDataNode->ResId,
+ EFI_NATIVE_INTERFACE,
+ &UbaDxePrivate->UbaCfgDbProtocol
+ );
+ ASSERT_EFI_ERROR (Status);
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Internal function for Getting configuration data from database.
+
+ @param This uba Protocol instance.
+ @param SkuNode The platform node record.
+ @param ResId The resource ID.
+ @param Data Data pointer.
+ @param DataSize Data size pointer.
+
+ @retval EFI_INVALID_PARAMETER Parameter invalid.
+ @retval EFI_NOT_FOUND Resource not found.
+ @retval EFI_BUFFER_TOO_SMALL The buffer is too small to copy the data.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalGetConfigData (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN UBA_BOARD_NODE *SkuNode,
+ IN EFI_GUID *ResId,
+ OUT VOID *Data, OPTIONAL
+ OUT UINTN *DataSize OPTIONAL
+ )
+{
+ LIST_ENTRY *ListHead;
+ LIST_ENTRY *Link;
+ UBA_CONFIG_NODE *DataNode;
+ ListHead = NULL;
+ Link = NULL;
+ DataNode = NULL;
+
+ if ((SkuNode == NULL) || (ResId == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ ListHead = &SkuNode->DataLinkHead;
+ if (IsListEmpty (ListHead)) {
+ return EFI_NOT_FOUND;
+ }
+
+ for (Link = GetFirstNode (ListHead); !IsNull (ListHead, Link); Link = GetNextNode (ListHead, Link)) {
+
+ DataNode = CONFIG_NODE_INSTANCE_FROM_THIS (Link);
+ ASSERT (DataNode != NULL);
+ if (DataNode == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+ if (CompareGuid (ResId, &DataNode->ResId)) {
+
+ if (DataSize != NULL) {
+
+ if (*DataSize < DataNode->Size) {
+ *DataSize = DataNode->Size;
+ return EFI_BUFFER_TOO_SMALL;
+ }
+
+ *DataSize = DataNode->Size;
+
+ if (Data != NULL) {
+ CopyMem (Data, DataNode->Data, DataNode->Size);
+ }
+ }
+
+ return EFI_SUCCESS;
+ }
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Get platform's GUID and user friendly name by BoardId.
+
+ This is used when you need a BoardGuid to Add/Get platform data
+
+ Core will create a new platform for you if the BoardId is not
+ recorded in database, and assgin a unique GUID for this platform.
+
+ @param This uba Protocol instance.
+ @param BoardId The platform type, same define as Platform.h.
+ @param BoardGuid The GUID for this platform.
+ @param BoardName The user friendly name for this platform.
+
+ @retval EFI_ALREADY_STARTED Create new for an exist platform.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+DxeUbaGetPlatformSku (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ OUT UINT32 *BoardId,
+ OUT EFI_GUID *BoardGuid, OPTIONAL
+ OUT CHAR8 *BoardName OPTIONAL
+ )
+{
+ EFI_STATUS Status;
+ UBA_BOARD_NODE *SkuNode;
+ SkuNode = NULL;
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+
+ if (!EFI_ERROR (Status)) {
+ if (BoardId != NULL) {
+ *BoardId = SkuNode->BoardId;
+ }
+ if (BoardName != NULL) {
+ AsciiStrCpyS (BoardName, AsciiStrSize (SkuNode->BoardName) / sizeof (CHAR8) , SkuNode->BoardName);
+ }
+
+ if (BoardGuid != NULL) {
+ CopyMem (BoardGuid, &SkuNode->BoardGuid, sizeof (EFI_GUID));
+ }
+
+ return EFI_SUCCESS;
+ }
+
+ return Status;
+}
+
+/**
+ Add configuration data to uba configuration database.
+
+ @param This uba Protocol instance.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize Size of data want to add into database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+DxeUbaAddData (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN EFI_GUID *ResId,
+ IN VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ EFI_STATUS Status;
+ UBA_BOARD_NODE *SkuNode;
+ SkuNode = NULL;
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = InternalAddNewConfigData (This, ResId, Data, DataSize);
+
+ return Status;
+}
+
+/**
+ Get configuration data from uba configuration database.
+
+ @param This uba Protocol instance.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize IN:Size of data want to get, OUT: Size of data in database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_BUFFER_TOO_SMALL The DataSize of Data buffer is too small to get this configuration data
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform or data not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+DxeUbaGetData (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This,
+ IN EFI_GUID *ResId,
+ OUT VOID *Data,
+ OUT UINTN *DataSize
+ )
+{
+ EFI_STATUS Status;
+ UBA_DXE_PRIVATE_DATA *UbaDxePrivate;
+ UBA_BOARD_NODE *SkuNode;
+ UbaDxePrivate = NULL;
+ SkuNode = NULL;
+
+ if ((ResId == NULL) || (Data == NULL) || (DataSize == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ UbaDxePrivate = PRIVATE_DATA_FROM_PROTOCOL (This);
+
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = InternalGetConfigData (This, SkuNode, ResId, Data, DataSize);
+ if (!EFI_ERROR (Status)) {
+ return EFI_SUCCESS;
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Internal function for getting current platform's configuration data from HOB, which passed by PEIM.
+
+ @param This uba Protocol instance.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform or data not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalGetConfigDataFromHob (
+ IN UBA_CONFIG_DATABASE_PROTOCOL *This
+ )
+{
+ EFI_STATUS Status;
+ EFI_PEI_HOB_POINTERS Hob;
+ UINT8 *HobDataStart;
+ UBA_CONFIG_HOB_HEADER *HobHeader;
+ UBA_CONFIG_HOB_FIELD *HobDataFieldStart;
+ UINTN Index;
+ UBA_DXE_PRIVATE_DATA *UbaDxePrivate;
+ UBA_BOARD_NODE *SkuNode;
+ HobHeader = NULL;
+ HobDataFieldStart = NULL;
+ UbaDxePrivate = NULL;
+ SkuNode = NULL;
+
+ UbaDxePrivate = PRIVATE_DATA_FROM_PROTOCOL (This);
+
+ Hob.Raw = GetFirstGuidHob (&gUbaCurrentConfigHobGuid);
+ ASSERT (Hob.Raw != NULL);
+ if (Hob.Raw == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+
+ DEBUG ((DEBUG_INFO, "UbaConfigDatabasedxeEntry: get first hob!\n"));
+
+ HobDataStart = GET_GUID_HOB_DATA (Hob);
+
+ HobHeader = (UBA_CONFIG_HOB_HEADER *) HobDataStart;
+ HobDataFieldStart = HobHeader->HobField;
+
+ //Call internal function for SKU init, accroding to hob data.
+ Status = InternalInitSkuDxe (This, HobHeader->BoardId, &HobHeader->BoardGuid, HobHeader->BoardName, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ // Obtain all data stored in the hob from PEI phase.
+ for (Index = 0; Index < HobHeader->DataCount; Index ++) {
+ Status = This->AddData (
+ This,
+ &HobDataFieldStart[Index].ResId,
+ (VOID *) ((UINTN) HobDataFieldStart[Index].DataOffset + (UINTN) HobHeader),
+ HobDataFieldStart[Index].Size
+ );
+ ASSERT_EFI_ERROR (Status);
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+**/
+EFI_STATUS
+EFIAPI
+UbaConfigDatabaseEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ UBA_DXE_PRIVATE_DATA *UbaDxePrivate;
+ EFI_HANDLE Handle;
+ UbaDxePrivate = NULL;
+
+ UbaDxePrivate = AllocateZeroPool (sizeof (UBA_DXE_PRIVATE_DATA));
+ ASSERT (UbaDxePrivate != NULL);
+ if (UbaDxePrivate == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ DEBUG ((DEBUG_INFO, "UbaConfigDatabasedxeEntry: after allocate Memory!\n"));
+ UbaDxePrivate->Signature = UBA_BOARD_SIGNATURE;
+ UbaDxePrivate->Version = UBA_BOARD_VERSION;
+
+ UbaDxePrivate->ConfigDataCount = 0;
+ UbaDxePrivate->HandleCount = 0;
+
+ UbaDxePrivate->UbaCfgDbProtocol.Signature = UBA_CONFIG_PROTOCOL_SIGNATURE;
+ UbaDxePrivate->UbaCfgDbProtocol.Version = UBA_CONFIG_PROTOCOL_VERSION;
+
+ UbaDxePrivate->UbaCfgDbProtocol.GetSku = DxeUbaGetPlatformSku;
+ UbaDxePrivate->UbaCfgDbProtocol.AddData = DxeUbaAddData;
+ UbaDxePrivate->UbaCfgDbProtocol.GetData = DxeUbaGetData;
+
+ //
+ // Just produce our Protocol
+ //
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gUbaConfigDatabaseProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &UbaDxePrivate->UbaCfgDbProtocol
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ DEBUG ((DEBUG_INFO, "UbaConfigDatabasedxeEntry: before get data from hob!\n"));
+ // Init sku dxe and get configuration data from hob passed by PEIM.
+ Status = InternalGetConfigDataFromHob (&UbaDxePrivate->UbaCfgDbProtocol);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h
new file mode 100644
index 0000000000..fdd958ca5a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h
@@ -0,0 +1,32 @@
+/** @file
+ UbaConfigDatabase Dxe Driver head file.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CONFIG_DATABASE_DXE_H_
+#define _UBA_CONFIG_DATABASE_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Protocol/UbaCfgDb.h>
+#include <Guid/UbaCfgHob.h>
+
+typedef struct _UBA_DXE_PRIVATE_DATA {
+ UINT32 Signature;
+ UINT32 Version;
+
+ UINTN ConfigDataCount; //for AllConfigDataSize
+ UINTN HandleCount;
+ UBA_BOARD_NODE *CurrentSku;
+
+ UBA_CONFIG_DATABASE_PROTOCOL UbaCfgDbProtocol;
+} UBA_DXE_PRIVATE_DATA;
+
+#define PRIVATE_DATA_FROM_PROTOCOL(p) CR(p, UBA_DXE_PRIVATE_DATA, UbaCfgDbProtocol, UBA_BOARD_SIGNATURE)
+
+#endif // _UBA_CONFIG_DATABASE_DXE_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf
new file mode 100644
index 0000000000..72e7e8ee71
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf
@@ -0,0 +1,54 @@
+## @file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UbaConfigDatabaseDxe
+ FILE_GUID = E0471A15-76DC-4203-8B27-6DB4F8BA644A
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+
+ ENTRY_POINT = UbaConfigDatabaseEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[Sources]
+ CfgDbDxe.c
+ CfgDbDxe.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ HobLib
+ UefiLib
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ UefiDriverEntryPoint
+
+[Guids]
+ gUbaCurrentConfigHobGuid
+
+[Ppis]
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ TRUE
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c
new file mode 100644
index 0000000000..0a37d49998
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c
@@ -0,0 +1,803 @@
+/** @file
+ UbaConfigDatabase Peim.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "CfgDbPei.h"
+
+#include <Ppi/EndOfPeiPhase.h>
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HobLib.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+
+/**
+ Internal function for getting the platform record node in the database.
+
+ @param This uba Ppi instance.
+ @param SkuNode The pointer to pointer of Platform record node.
+
+ @retval EFI_NOT_FOUND Platform record not found.
+ @retval EFI_SUCCESS Platform found.
+**/
+EFI_STATUS
+InternalGetSkuNode (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ OUT UBA_BOARD_NODE **SkuNode
+ )
+{
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UbaPeimPrivate = NULL;
+
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (This);
+ *SkuNode = UbaPeimPrivate->CurrentSku;
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Internal function for init the platform record to database.
+ Create the connections between UBA_BOARD_NODE and UBA_PEIM_PRIVATE_DATA
+
+ @param This uba Ppi instance.
+ @param BoardId The platform type.
+ @param BoardGuid The platform GUID.
+ @param BoardName The platform user friendly name.
+ @param SkuNode The pointer to pointer of Platform record node.
+
+ @retval EFI_ALREADY_STARTED Platform record already exist.
+ @retval EFI_OUT_OF_RESOURCES No enough resource.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalInitSku (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN UINT32 BoardId,
+ IN EFI_GUID *BoardGuid, OPTIONAL
+ IN CHAR8 *BoardName, OPTIONAL
+ OUT UBA_BOARD_NODE **SkuNode OPTIONAL
+ )
+{
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UBA_BOARD_NODE *NewSkuNode;
+ UbaPeimPrivate = NULL;
+ NewSkuNode = NULL;
+
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (This);
+
+ NewSkuNode = AllocateZeroPool (sizeof (UBA_BOARD_NODE));
+ if (NewSkuNode == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ NewSkuNode->Signature = UBA_BOARD_SIGNATURE;
+ NewSkuNode->Version = UBA_BOARD_VERSION;
+ NewSkuNode->BoardId = BoardId;
+
+ if (BoardName != NULL) {
+ AsciiStrnCpyS (NewSkuNode->BoardName, sizeof (NewSkuNode->BoardName), BoardName, sizeof (NewSkuNode->BoardName) - 1);
+ }
+
+ if (BoardGuid != NULL) {
+ CopyMem (&NewSkuNode->BoardGuid, BoardGuid, sizeof (EFI_GUID));
+ }
+
+ //Initialize the list head for Datalink.
+ InitializeListHead (&NewSkuNode->DataLinkHead);
+
+
+ if (SkuNode != NULL) {
+ *SkuNode = NewSkuNode;
+ UbaPeimPrivate->CurrentSku = NewSkuNode;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Internal function for adding new configuration data record to database.
+
+ @param This uba Ppi instance.
+ @param ResId The resource ID.
+ @param Data Data pointer.
+ @param DataSize Data size.
+
+ @retval EFI_INVALID_PARAMETER Parameter invalid.
+ @retval EFI_OUT_OF_RESOURCES No enough resource.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalAddNewConfigData (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN EFI_GUID *ResId,
+ IN VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ EFI_STATUS Status;
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UBA_CONFIG_NODE *NewDataNode;
+ UBA_BOARD_NODE *SkuNode;
+ EFI_PEI_PPI_DESCRIPTOR *ConfigDataPpi;
+ UbaPeimPrivate = NULL;
+ NewDataNode = NULL;
+ SkuNode = NULL;
+ ConfigDataPpi = NULL;
+
+ if ((ResId == NULL) || (Data == NULL) || (DataSize <= 0)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (This);
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ NewDataNode = AllocateZeroPool (sizeof (UBA_CONFIG_NODE));
+ if (NewDataNode == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ NewDataNode->Signature = UBA_BOARD_SIGNATURE;
+ NewDataNode->Version = UBA_BOARD_VERSION;
+ NewDataNode->Handle = (EFI_HANDLE) (UINTN) UbaPeimPrivate->HandleCount;
+ NewDataNode->Data = AllocateCopyPool (DataSize, Data);
+ NewDataNode->Size = (UINT32) DataSize;
+
+ CopyMem (&NewDataNode->ResId, ResId, sizeof (EFI_GUID));
+
+ InsertTailList (&SkuNode->DataLinkHead, &NewDataNode->DataLink);
+ SkuNode->DataCount ++;
+ UbaPeimPrivate->ConfigDataCount ++;
+ UbaPeimPrivate->HandleCount ++;
+
+ //
+ // This PPI just install for NotifyPpi
+ // The PPI instance UbaCfgDbPpi should not used
+ //
+ ConfigDataPpi = AllocateZeroPool (sizeof (EFI_PEI_PPI_DESCRIPTOR));
+ if (ConfigDataPpi == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ ConfigDataPpi->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
+ ConfigDataPpi->Guid = &NewDataNode->ResId;
+ ConfigDataPpi->Ppi = &UbaPeimPrivate->UbaCfgDbPpi;
+
+ Status = PeiServicesInstallPpi (ConfigDataPpi);
+ ASSERT_EFI_ERROR (Status);
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Internal function for Getting configuration data from database.
+
+ @param This uba Ppi instance.
+ @param SkuNode The platform node record.
+ @param ResId The resource ID.
+ @param Data Data pointer.
+ @param DataSize Data size pointer.
+
+ @retval EFI_INVALID_PARAMETER Parameter invalid.
+ @retval EFI_NOT_FOUND Resource not found.
+ @retval EFI_BUFFER_TOO_SMALL The buffer is too small to copy the data.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalGetConfigData (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN UBA_BOARD_NODE *SkuNode,
+ IN EFI_GUID *ResId,
+ OUT VOID *Data, OPTIONAL
+ OUT UINTN *DataSize OPTIONAL
+ )
+{
+ LIST_ENTRY *ListHead;
+ LIST_ENTRY *Link;
+ UBA_CONFIG_NODE *DataNode;
+ ListHead = NULL;
+ Link = NULL;
+ DataNode = NULL;
+
+ if ((SkuNode == NULL) || (ResId == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ ListHead = &SkuNode->DataLinkHead;
+ if (IsListEmpty (ListHead)) {
+ return EFI_NOT_FOUND;
+ }
+
+ for (Link = GetFirstNode (ListHead); !IsNull (ListHead, Link); Link = GetNextNode (ListHead, Link)) {
+
+ DataNode = CONFIG_NODE_INSTANCE_FROM_THIS (Link);
+ ASSERT (DataNode != NULL);
+ if (DataNode == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+
+ if (CompareGuid (ResId, &DataNode->ResId)) {
+
+ if (DataSize != NULL) {
+
+ if (*DataSize < DataNode->Size) {
+ *DataSize = DataNode->Size;
+ return EFI_BUFFER_TOO_SMALL;
+ }
+
+ *DataSize = DataNode->Size;
+
+ if (Data != NULL) {
+ CopyMem (Data, DataNode->Data, DataNode->Size);
+ }
+ }
+
+ return EFI_SUCCESS;
+ }
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Covert the LIST_ENTRY pointer from CAR to RAM after memory init.
+
+ @param Link The LIST_ENTRY pointer want to convert.
+ @param PtrPositive The pointer need positive fix.
+ @param PtrDelta The pointer delta value after memory init.
+
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+PeiConvertListPointer (
+ IN LIST_ENTRY *Link,
+ IN BOOLEAN PtrPositive,
+ IN UINTN PtrDelta
+ )
+{
+ if (PtrPositive) {
+ Link->ForwardLink = (LIST_ENTRY *) ((UINTN) Link->ForwardLink + PtrDelta);
+ Link->BackLink = (LIST_ENTRY *) ((UINTN) Link->BackLink + PtrDelta);
+ } else {
+ Link->ForwardLink = (LIST_ENTRY *) ((UINTN) Link->ForwardLink - PtrDelta);
+ Link->BackLink = (LIST_ENTRY *) ((UINTN) Link->BackLink - PtrDelta);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Covert general pointer from CAR to RAM after memory init.
+
+ @param Ptr The VOID pointer want to convert.
+ @param PtrPositive The pointer need positive fix.
+ @param PtrDelta The pointer delta value after memory init.
+
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+PeiConvertVoidPointer (
+ IN VOID **Ptr,
+ IN BOOLEAN PtrPositive,
+ IN UINTN PtrDelta
+ )
+{
+ if (PtrPositive) {
+ *Ptr = (VOID *) ((UINTN)*Ptr + PtrDelta);
+ } else {
+ *Ptr = (VOID *) ((UINTN)*Ptr - PtrDelta);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Covert all pointers from CAR to RAM after memory init.
+
+ @param This The uba Ppi pointer.
+ @param PtrPositive The pointer need positive fix.
+ @param PtrDelta The pointer delta value after memory init.
+
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+PeiConvertDataPointer (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN BOOLEAN PtrPositive,
+ IN UINTN PtrDelta
+ )
+{
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UBA_BOARD_NODE *SkuNode;
+ UBA_CONFIG_NODE *DataNode;
+ LIST_ENTRY *DataListHead;
+ LIST_ENTRY *DataLink;
+ UbaPeimPrivate = NULL;
+ SkuNode = NULL;
+ DataNode = NULL;
+ DataListHead = NULL;
+ DataLink = NULL;
+
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (This);
+ if (UbaPeimPrivate->ThisAddress == (UINTN) This) {
+ return EFI_SUCCESS;
+ }
+
+ PeiConvertVoidPointer ((VOID**) &UbaPeimPrivate->CurrentSku, PtrPositive, PtrDelta);
+
+ SkuNode = UbaPeimPrivate->CurrentSku;
+ DataListHead = &SkuNode->DataLinkHead;
+
+ PeiConvertListPointer (DataListHead, PtrPositive, PtrDelta);
+
+ DataLink = DataListHead->ForwardLink;
+ while (DataListHead != DataLink) {
+
+ PeiConvertListPointer (DataLink, PtrPositive, PtrDelta);
+ DataNode = CONFIG_NODE_INSTANCE_FROM_THIS (DataLink);
+ PeiConvertVoidPointer (&DataNode->Data, PtrPositive, PtrDelta);
+
+ DataLink = DataLink->ForwardLink;
+ }
+
+ UbaPeimPrivate->ThisAddress = (UINTN) This;
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Check whether the This pointer have been relocated after memory init,
+ if true, we need also relocate our own pointers in the heap, because core won't
+ do it for us.
+
+ @param This The uba Ppi pointer.
+
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+PeiCheckPointerRelocated (
+ IN UBA_CONFIG_DATABASE_PPI *This
+ )
+{
+ EFI_STATUS Status;
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ BOOLEAN PtrPositive;
+ UINTN PtrDelta;
+ Status = EFI_SUCCESS;
+ UbaPeimPrivate = NULL;
+ PtrPositive = FALSE;
+ PtrDelta = 0;
+
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (This);
+ if (UbaPeimPrivate->ThisAddress != (UINTN) This) {
+ if ((UINTN) This > UbaPeimPrivate->ThisAddress) {
+ PtrPositive = TRUE;
+ PtrDelta = (UINTN) This - UbaPeimPrivate->ThisAddress;
+ } else {
+ PtrPositive = FALSE;
+ PtrDelta = UbaPeimPrivate->ThisAddress - (UINTN) This;
+ }
+ Status = PeiConvertDataPointer (This, PtrPositive, PtrDelta);
+ }
+
+ return Status;
+}
+
+/**
+ Set platform's GUID and user friendly name by BoardId.
+
+ If the BoardId is not exist in database, it will create a new platform.
+
+ @param This UBA Ppi instance.
+ @param BoardId The platform type, same define as Platform.h.
+ @param BoardGuid The GUID for this platform.
+ @param BoardName The user friendly name for this platform.
+
+ @retval EFI_ALREADY_STARTED Create new for an exist platform.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+PeiUbaInit (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN UINT32 BoardId,
+ IN EFI_GUID *BoardGuid, OPTIONAL
+ IN CHAR8 *BoardName OPTIONAL
+ )
+{
+ EFI_STATUS Status;
+ UBA_BOARD_NODE *SkuNode;
+ Status = EFI_SUCCESS;
+ SkuNode = NULL;
+
+ PeiCheckPointerRelocated (This);
+ Status = InternalInitSku (This, BoardId, BoardGuid, BoardName, &SkuNode);
+ return Status;
+}
+
+/**
+ Get platform's GUID and user friendly name by BoardId.
+
+ This is used when you need a BoardGuid to Add/Get platform data
+
+ Core will create a new platform for you if the BoardId is not
+ recorded in database, and assgin a unique GUID for this platform.
+
+ @param This uba Ppi instance.
+ @param BoardId The platform type, same define as Platform.h.
+ @param BoardGuid The GUID for this platform.
+ @param BoardName The user friendly name for this platform.
+
+ @retval EFI_ALREADY_STARTED Create new for an exist platform.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+PeiUbaGetSku (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ OUT UINT32 *BoardId,
+ OUT EFI_GUID *BoardGuid, OPTIONAL
+ OUT CHAR8 *BoardName OPTIONAL
+ )
+{
+ EFI_STATUS Status;
+ UBA_BOARD_NODE *SkuNode;
+ SkuNode = NULL;
+
+ PeiCheckPointerRelocated (This);
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+
+ if (!EFI_ERROR (Status)) {
+ if (BoardId != NULL) {
+ *BoardId = SkuNode->BoardId;
+ }
+ if (BoardName != NULL) {
+ AsciiStrCpyS (BoardName, AsciiStrSize (SkuNode->BoardName) / sizeof (CHAR8), SkuNode->BoardName);
+ }
+
+ if (BoardGuid != NULL) {
+ CopyMem (BoardGuid, &SkuNode->BoardGuid, sizeof (EFI_GUID));
+ }
+
+ return EFI_SUCCESS;
+ }
+
+ return Status;
+}
+
+/**
+ Add configuration data to uba configuration database.
+
+ @param This uba Ppi instance.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize Size of data want to add into database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+PeiUbaAddData (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN EFI_GUID *ResId,
+ IN VOID *Data,
+ IN UINTN DataSize
+ )
+{
+ EFI_STATUS Status;
+ UBA_BOARD_NODE *SkuNode;
+ SkuNode = NULL;
+
+ PeiCheckPointerRelocated (This);
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = InternalAddNewConfigData (This, ResId, Data, DataSize);
+ return Status;
+}
+
+/**
+ Get configuration data from uba configuration database.
+
+ @param This uba Ppi instance.
+ @param ResId The configuration data resource id.
+ @param Data The data buffer pointer.
+ @param DataSize IN:Size of data want to get, OUT: Size of data in database.
+
+ @retval EFI_INVALID_PARAMETER Required parameters not correct.
+ @retval EFI_BUFFER_TOO_SMALL The DataSize of Data buffer is too small to get this configuration data
+ @retval EFI_OUT_OF_RESOURCES Resource not enough.
+ @retval EFI_NOT_FOUND Platform or data not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EFIAPI
+PeiUbaGetData (
+ IN UBA_CONFIG_DATABASE_PPI *This,
+ IN EFI_GUID *ResId,
+ OUT VOID *Data,
+ OUT UINTN *DataSize
+ )
+{
+ EFI_STATUS Status;
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UBA_BOARD_NODE *SkuNode;
+ UbaPeimPrivate = NULL;
+ SkuNode = NULL;
+
+ if ((ResId == NULL) || (Data == NULL) || (DataSize == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ PeiCheckPointerRelocated (This);
+
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (This);
+
+ Status = InternalGetSkuNode (This, &SkuNode);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = InternalGetConfigData (This, SkuNode, ResId, Data, DataSize);
+ if (!EFI_ERROR (Status)) {
+ return EFI_SUCCESS;
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ Internal function for creating a HOB for platform data,
+ and copy all the platform information and configuration data to the HOB,
+ it will be passed to DXE driver.
+
+ @param SkuNode The platform node in database.
+ @param HobGuid The Hob GUID want to build.
+
+ @retval EFI_OUT_OF_RESOURCES No enough resource.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+InternalCreateHobForSkuNode (
+ IN UBA_BOARD_NODE *SkuNode,
+ IN EFI_GUID *HobGuid
+ )
+{
+ UINT8 *HobData;
+ UBA_CONFIG_HOB_HEADER *HobHeader;
+ UBA_CONFIG_HOB_FIELD *HobDataFieldStart;
+ UINT8 *ConfigDataHobPtr;
+ UINTN DataLength;
+ UINTN Index;
+ LIST_ENTRY *ListHead;
+ LIST_ENTRY *Link;
+ UBA_CONFIG_NODE *DataNode;
+ HobData = NULL;
+ HobHeader = NULL;
+ HobDataFieldStart = NULL;
+ ConfigDataHobPtr = NULL;
+ DataLength = 0;
+ ListHead = NULL;
+ Link = NULL;
+ DataNode = NULL;
+
+ if (SkuNode->DataCount != 0) {
+ DataLength = sizeof (UBA_CONFIG_HOB_HEADER) +
+ sizeof (UBA_CONFIG_HOB_FIELD) * (SkuNode->DataCount - 1);
+
+ //
+ // Get config data size
+ //
+ ListHead = &SkuNode->DataLinkHead;
+ for (Link = GetFirstNode (ListHead); !IsNull (ListHead, Link); Link = GetNextNode (ListHead, Link)) {
+ DataNode = CONFIG_NODE_INSTANCE_FROM_THIS (Link);
+ DataLength += DataNode->Size;
+ }
+
+ HobData = BuildGuidHob (HobGuid, DataLength);
+ ASSERT (HobData != NULL);
+ if (HobData == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ HobHeader = (UBA_CONFIG_HOB_HEADER *) HobData;
+ HobDataFieldStart = HobHeader->HobField;
+ ConfigDataHobPtr = (UINT8 *) HobDataFieldStart + (sizeof (UBA_CONFIG_HOB_FIELD) * SkuNode->DataCount);
+
+ //
+ // Copy our HOB header
+ //
+ HobHeader->Signature = UBA_CONFIG_HOB_SIGNATURE;
+ HobHeader->Version = UBA_CONFIG_HOB_VERSION;
+ HobHeader->HobLength = DataLength;
+ CopyGuid (&HobHeader->DataGuid, HobGuid);
+
+ HobHeader->BoardId = SkuNode->BoardId;
+ HobHeader->DataCount = SkuNode->DataCount;
+ CopyGuid (&HobHeader->BoardGuid, &SkuNode->BoardGuid);
+ CopyMem (HobHeader->BoardName, SkuNode->BoardName, AsciiStrSize (SkuNode->BoardName));
+
+ //
+ // Copy N * (UBA_CONFIG_HOB_NODE & UBA_CONFIG_HOB_NODE->Data)
+ //
+ Index = 0;
+ ListHead = &SkuNode->DataLinkHead;
+ for (Link = GetFirstNode (ListHead); !IsNull (ListHead, Link); Link = GetNextNode (ListHead, Link)) {
+ DataNode = CONFIG_NODE_INSTANCE_FROM_THIS (Link);
+ ASSERT (DataNode != NULL);
+ if (DataNode == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+
+ HobDataFieldStart[Index].Size = DataNode->Size;
+ HobDataFieldStart[Index].Signature = DataNode->Signature;
+ HobDataFieldStart[Index].Version = DataNode->Version;
+ CopyGuid (&HobDataFieldStart[Index].ResId, &DataNode->ResId);
+
+ CopyMem (ConfigDataHobPtr, DataNode->Data, DataNode->Size);
+
+ //
+ // Fix the config data pointer after memory copy
+ // Set the pointer address into memory in HOB
+ //
+ HobDataFieldStart[Index].DataOffset = ((UINTN) ConfigDataHobPtr - (UINTN) HobHeader);
+
+ Index ++;
+ ConfigDataHobPtr += DataNode->Size;
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ End of PEI phase callback, we need build configuration data HOB in this callback,
+ it will pass to DXE driver.
+
+ @param PeiServices The PEI service pointer.
+ @param NotifyDescriptor The notify descriptor.
+ @param Ppi The PPI was notified.
+
+ @retval EFI_OUT_OF_RESOURCES No enough resource.
+ @retval EFI_NOT_FOUND Platform/data not found.
+ @retval EFI_SUCCESS Operation success.
+**/
+EFI_STATUS
+EndOfPeiPpiNotifyCallback (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *Ppi
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi;
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UBA_BOARD_NODE *SkuNode;
+ UbaPeimPrivate = NULL;
+ SkuNode = NULL;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ (VOID**) &UbaConfigPpi
+ );
+ ASSERT_EFI_ERROR (Status);
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+
+ PeiCheckPointerRelocated (UbaConfigPpi);
+
+ //
+ // Build GUID data HOB for current platform configuration data
+ //
+ UbaPeimPrivate = PRIVATE_DATA_FROM_PPI (UbaConfigPpi);
+ if (UbaPeimPrivate->CurrentSku != NULL) {
+ SkuNode = UbaPeimPrivate->CurrentSku;
+ Status = InternalCreateHobForSkuNode (SkuNode, &gUbaCurrentConfigHobGuid);
+ ASSERT_EFI_ERROR (Status);
+ if (Status != EFI_SUCCESS) {
+ return Status;
+ }
+ }
+
+ //
+ // Other will not pass to DXE because it's useless
+ //
+ return EFI_SUCCESS;
+}
+
+EFI_PEI_NOTIFY_DESCRIPTOR mNotifyList[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gEfiEndOfPeiSignalPpiGuid,
+ EndOfPeiPpiNotifyCallback
+ }
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+**/
+EFI_STATUS
+EFIAPI
+UbaConfigDatabasePeimEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ UBA_PEIM_PRIVATE_DATA *UbaPeimPrivate;
+ UbaPeimPrivate = NULL;
+
+ UbaPeimPrivate = AllocateZeroPool (sizeof (UBA_PEIM_PRIVATE_DATA));
+ if (UbaPeimPrivate == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ DEBUG ((DEBUG_INFO, "UbaConfigDatabasePeimEntry!\n"));
+ UbaPeimPrivate->Signature = UBA_BOARD_SIGNATURE;
+ UbaPeimPrivate->Version = UBA_BOARD_VERSION;
+
+ UbaPeimPrivate->ConfigDataCount = 0;
+ UbaPeimPrivate->HandleCount = 0;
+ UbaPeimPrivate->ThisAddress = (UINTN) &UbaPeimPrivate->UbaCfgDbPpi;
+
+ UbaPeimPrivate->UbaPeimPpiList.Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
+ UbaPeimPrivate->UbaPeimPpiList.Guid = &gUbaConfigDatabasePpiGuid;
+ UbaPeimPrivate->UbaPeimPpiList.Ppi = &UbaPeimPrivate->UbaCfgDbPpi;
+
+ UbaPeimPrivate->UbaCfgDbPpi.Signature = UBA_CONFIG_PPI_SIGNATURE;
+ UbaPeimPrivate->UbaCfgDbPpi.Version = UBA_CONFIG_PPI_VERSION;
+
+ UbaPeimPrivate->UbaCfgDbPpi.InitSku = PeiUbaInit;
+ UbaPeimPrivate->UbaCfgDbPpi.GetSku = PeiUbaGetSku;
+
+ UbaPeimPrivate->UbaCfgDbPpi.AddData = PeiUbaAddData;
+ UbaPeimPrivate->UbaCfgDbPpi.GetData = PeiUbaGetData;
+
+ //
+ // Just produce our PPI
+ //
+ Status = PeiServicesInstallPpi (&UbaPeimPrivate->UbaPeimPpiList);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = PeiServicesNotifyPpi (&mNotifyList[0]);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h
new file mode 100644
index 0000000000..4a517c734c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h
@@ -0,0 +1,33 @@
+/** @file
+ UbaConfigDatabase Peim head file.
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UBA_CONFIG_DATABASE_PEIM_H_
+#define _UBA_CONFIG_DATABASE_PEIM_H_
+
+#include <PiPei.h>
+#include <Uefi/UefiSpec.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Guid/UbaCfgHob.h>
+
+typedef struct _UBA_PEIM_PRIVATE_DATA {
+ UINT32 Signature;
+ UINT32 Version;
+
+ UINTN ConfigDataCount; //for AllConfigDataSize
+ UINTN HandleCount;
+ UBA_BOARD_NODE *CurrentSku;
+ UINTN ThisAddress;
+
+ UBA_CONFIG_DATABASE_PPI UbaCfgDbPpi;
+ EFI_PEI_PPI_DESCRIPTOR UbaPeimPpiList;
+} UBA_PEIM_PRIVATE_DATA;
+
+#define PRIVATE_DATA_FROM_PPI(p) CR(p, UBA_PEIM_PRIVATE_DATA, UbaCfgDbPpi, UBA_BOARD_SIGNATURE)
+
+#endif // _UBA_CONFIG_DATABASE_PEIM_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf
new file mode 100644
index 0000000000..454651e8c1
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf
@@ -0,0 +1,54 @@
+## @file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UbaConfigDatabasePei
+ FILE_GUID = 2C181BE1-8BAC-4433-873C-E5074CB5A723
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+
+ ENTRY_POINT = UbaConfigDatabasePeimEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+ CfgDbPei.c
+ CfgDbPei.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ HobLib
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ PeiServicesTablePointerLib
+
+[Guids]
+ gUbaCurrentConfigHobGuid
+
+[Ppis]
+ gUbaConfigDatabasePpiGuid
+ gEfiEndOfPeiSignalPpiGuid
+
+[Pcd]
+
+[Depex]
+ TRUE
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc
new file mode 100644
index 0000000000..a3e961aa76
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc
@@ -0,0 +1,29 @@
+## @file UbaCommon.dsc
+# UBA DSC include file containing common build items.
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[LibraryClasses.IA32]
+ UbaPlatLib|$(RP_PKG)/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
+ UbaGpioInitLib|$(RP_PKG)/Library/UbaGpioInitLib/UbaGpioInitLib.inf
+
+[Components.IA32]
+ $(RP_PKG)/Uba/CfgDb/Pei/CfgDbPei.inf
+ $(RP_PKG)/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
+
+[Components.X64]
+ #
+ # Requires a board specific library port
+ #
+ $(RP_PKG)/Uba/BoardInit/Dxe/BoardInitDxe.inf
+ $(RP_PKG)/Uba/CfgDb/Dxe/CfgDbDxe.inf
+
+ #
+ # Common
+ #
+ $(RP_PKG)/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
+ $(RP_PKG)/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
new file mode 100644
index 0000000000..73dba1dad8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
@@ -0,0 +1,16 @@
+## @file UbaDxeCommon.fdf
+# UBA common DXE component FDF include file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#
+# Common
+#
+INF $(RP_PKG)/Uba/CfgDb/Dxe/CfgDbDxe.inf
+INF $(RP_PKG)/Uba/BoardInit/Dxe/BoardInitDxe.inf
+INF $(RP_PKG)/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
+INF $(RP_PKG)/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
new file mode 100644
index 0000000000..cb40d6da78
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
@@ -0,0 +1,22 @@
+## @file UbaDxeRpBoards.fdf
+# UBA DXE components for Intel reference boards
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#
+# Platform TypeWilsonCityRP
+#
+INF $(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
+INF $(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
+INF $(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
+
+#
+# Platform TypeCooperCityRP
+#
+INF $(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
+INF $(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
+INF $(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c
new file mode 100644
index 0000000000..f19fa7d61c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c
@@ -0,0 +1,206 @@
+/** @file
+ System Board Info.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "SystemBoardInfoDxe.h"
+
+
+//
+// Describes Local APICs' connections.
+//
+STATIC DEVICE_DATA_HW_LOCAL_INT DeviceDataHwLocalInt1[] = {
+ {
+ {{0},{{0xFF,0},{0xFF,0},{0xFF,0}}},
+ 0x00,
+ 0xff,
+ 0x00,
+ EfiLegacyMpTableEntryLocalIntTypeExtInt,
+ EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec,
+ EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec
+ },
+ {
+ {{0},{{0xFF,0},{0xFF,0},{0xFF,0}}},
+ 0x00,
+ 0xff,
+ 0x01,
+ EfiLegacyMpTableEntryLocalIntTypeInt,
+ EfiLegacyMpTableEntryLocalIntFlagsPolaritySpec,
+ EfiLegacyMpTableEntryLocalIntFlagsTriggerSpec
+ },
+};
+
+//
+// Describes system's address space mapping, specific to the system.
+//
+STATIC DEVICE_DATA_HW_ADDR_SPACE_MAPPING DeviceDataHwAddrSpace1[] = {
+ //
+ // Legacy IO addresses.
+ //
+ { {0}, EfiLegacyMpTableEntryExtSysAddrSpaceMappingIo, 0x0000, 0x1000 },
+ /*
+ { {0}, EfiLegacyMpTableEntryExtSysAddrSpaceMappingMemory, 0xXXXXXXXX, 0xXXXXXXXX},
+ { {0}, EfiLegacyMpTableEntryExtSysAddrSpaceMappingPrefetch, 0xXXXXXXXX, 0xXXXXXXXX},
+ */
+};
+
+//
+// IRQ priority
+//
+STATIC EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY IrqPriorityTable1[] = {
+ {11, 0},
+ {10, 0},
+ {9, 0},
+ {5, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0}
+};
+
+//
+// Note : UpdateBusNumbers updates the bus numeber
+//
+STATIC EFI_LEGACY_PIRQ_TABLE PirqTableHead1 [] = {
+ {
+ {
+ EFI_PIRQ_TABLE_SIGNATURE,
+ 00,
+ 01,
+ 0000,
+ 00,
+ 00,
+ 0000,
+ V_INTEL_VID,
+ 30,
+ 00000000,
+ {
+ 00,
+ 00,
+ 00,
+ 00,
+ 00,
+ 00,
+ 00,
+ 00,
+ 00,
+ 00,
+ 00
+ },
+ 00
+ }
+ }
+};
+
+//
+// Instantiation of the system device data.
+//
+DEVICE_DATA mDeviceData = {
+ DeviceDataHwLocalInt1, sizeof (DeviceDataHwLocalInt1) / sizeof (DeviceDataHwLocalInt1[0]),
+ DeviceDataHwAddrSpace1, sizeof (DeviceDataHwAddrSpace1)/ sizeof (DeviceDataHwAddrSpace1[0])
+};
+
+//
+// Instantiation of platform PIRQ data.
+//
+PLATFORM_PIRQ_DATA mPlatformPirqData = {
+ IrqPriorityTable1, sizeof(IrqPriorityTable1) / sizeof(IrqPriorityTable1[0]),
+ PirqTableHead1, sizeof(PirqTableHead1) / sizeof(PirqTableHead1[0])
+};
+
+
+PCI_OPTION_ROM_TABLE mPciOptionRomTable[] = {
+ //
+ // End of OptionROM Entries
+ //
+ {
+ NULL_ROM_FILE_GUID, // Guid
+ 0, // Segment
+ 0, // Bus Number
+ 0, // Device Number
+ 0, // Function Number
+ 0xffff, // Vendor ID
+ 0xffff // Device ID
+ }
+};
+
+//
+// system board information structure
+//
+DXE_SYSTEM_BOARD_INFO SystemBoardInfoTable = {
+ //
+ // System board configuration data
+ //
+ mPciOptionRomTable,
+
+ //
+ // System board CPU data
+ //
+ 2, // Cpu socket count
+
+ //
+ // System board legacy data
+ //
+ &mDeviceData,
+ &mPlatformPirqData
+};
+
+DXE_SYSTEM_BOARD_INFO *SystemBoardInfoCallback ()
+{
+ return (DXE_SYSTEM_BOARD_INFO*) &SystemBoardInfoTable;
+}
+
+SYSTEM_BOARD_INFO_DATA SystemBoardInfoData = {
+ SYSTEM_SYSTEM_BOARD_INFO_SIGNATURE,
+ SYSTEM_SYSTEM_BOARD_INFO_VERSION,
+ SystemBoardInfoCallback
+};
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+SystemBoardInfoEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((EFI_D_INFO, "UBA:System Board Info Table.\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gSystemBoardInfoConfigDataGuid,
+ &SystemBoardInfoData,
+ sizeof(SystemBoardInfoData)
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h
new file mode 100644
index 0000000000..32c16ff911
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h
@@ -0,0 +1,33 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SYSTEM_BOARD_INFO_DXE_H_
+#define _SYSTEM_BOARD_INFO_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Protocol/UbaCfgDb.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/UbaSystemBoardInfoLib.h>
+#include <SystemBoard.h>
+
+// Protocol
+#include <Platform.h>
+#include <Ppi/PchPolicy.h>
+
+#include <IndustryStandard/LegacyBiosMpTable.h>
+#include <UncoreCommonIncludes.h>
+
+#endif //_SYSTEM_BOARD_INFO_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
new file mode 100644
index 0000000000..0baf387b38
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
@@ -0,0 +1,45 @@
+## @file
+#
+# @copyright
+# Copyright 2017 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SystemBoardInfo
+ FILE_GUID = 9826a826-004e-4197-b179-9f489af1e3c9
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = SystemBoardInfoEntry
+
+[Sources]
+ SystemBoardInfoDxe.c
+ SystemBoardInfoDxe.h
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+
+[Guids]
+ gSystemBoardInfoConfigDataGuid
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gUbaConfigDatabaseProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c
new file mode 100644
index 0000000000..18205d16c8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c
@@ -0,0 +1,94 @@
+/** @file
+ System Congfig Update.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "SystemConfigUpdateDxe.h"
+#include <PlatformInfoTypes.h>
+
+EFI_PLATFORM_INFO *mPlatformInfo = NULL;
+
+/**
+
+ Update the IioDefaults
+
+ @param *SYSTEM_CONFIGURATION Pointer to the SystemConfiguration structure
+
+ @retval None
+
+**/
+VOID
+IioDefaultConfigUpdateCallback (
+ IN SYSTEM_CONFIGURATION *Default
+ )
+{
+ UINT8 BoardId;
+
+ BoardId = mPlatformInfo->BoardId;
+ Default->PlatformOCSupport = 0;
+ if (BoardId == TypeHedtCRB) {
+ Default->PlatformOCSupport = 1;
+ }
+}
+
+SYSTEM_CONFIG_UPDATE_DATA SystemConfigUpdateTable = {
+ SYSTEM_CONFIG_UPDATE_SIGNATURE,
+ SYSTEM_CONFIG_UPDATE_VERSION,
+ IioDefaultConfigUpdateCallback
+};
+
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+SystemConfigUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+ EFI_HOB_GUID_TYPE *GuidHob;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ mPlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+
+ DEBUG((DEBUG_INFO, "UBA:System Config Update Table.\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gSystemConfigUpdateDataGuid,
+ &SystemConfigUpdateTable,
+ sizeof(SystemConfigUpdateTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h
new file mode 100644
index 0000000000..f7daaa9212
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h
@@ -0,0 +1,30 @@
+/** @file
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UPDATE_SYSTEM_CONFIG_DXE_H_
+#define _UPDATE_SYSTEM_CONFIG_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Protocol/UbaCfgDb.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+
+#include <Library/UbaSystemConfigUpdateLib.h>
+
+#include <Guid/SetupVariable.h>
+#include <Guid/PlatformInfo.h>
+
+#endif //_UPDATE_SYSTEM_CONFIG_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
new file mode 100644
index 0000000000..3490dbef21
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
@@ -0,0 +1,48 @@
+## @file
+#
+# @copyright
+# Copyright 2017 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SystemConfigUpdate
+ FILE_GUID = 9f048812-a546-4c85-a5cf-a0785423705d
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = SystemConfigUpdateEntry
+
+[sources]
+ SystemConfigUpdateDxe.c
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ PcdLib
+ HobLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[Guids]
+ gEfiPlatformInfoGuid
+
+[Pcd]
+ gOemSkuTokenSpaceGuid.PcdOemSkuSubBoardID
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gUbaConfigDatabaseProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c
new file mode 100644
index 0000000000..63acdbaf56
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c
@@ -0,0 +1,69 @@
+/** @file
+ Install Board Info Data.
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiCommonBoardInitLib.h"
+#include <Library/UbaBoardSioInfoLib.h>
+#include <SioRegs.h>
+#include <Platform.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+STATIC SIO_INDEX_DATA mSioInitTable[] = {
+ //
+ // Init GPIO
+ //
+ {
+ PILOTIV_LOGICAL_DEVICE,
+ PILOTIV_SIO_GPIO
+ },
+ {
+ PILOTIV_ACTIVATE,
+ 0x01
+ },
+ {
+ PILOTIV_BASE_ADDRESS_HIGH0,
+ (UINT8) ((UINT16) SIO_GPIO_BASE_ADDRESS >> 8)
+ },
+ {
+ PILOTIV_BASE_ADDRESS_LOW0,
+ (UINT8) (SIO_GPIO_BASE_ADDRESS & 0x00ff)
+ }
+};
+
+//
+// Platform board sio information structure
+//
+static PEI_BOARD_SIO_INFO BoardSioInfoData = {
+ BOARD_SIO_INFO_DATA_SIGNATURE,
+ BOARD_SIO_INFO_DATA_VERSION,
+ //
+ // SIO Initialization table
+ //
+ PILOTIV_SIO_INDEX_PORT, // SIO Index port
+ PILOTIV_SIO_DATA_PORT, // SIO Data port
+ mSioInitTable, // mSioInitTable - contains the settings for initializing the SIO.
+ sizeof(mSioInitTable)/sizeof(SIO_INDEX_DATA) // NumSioItems - Number of items in the SIO init table.
+};
+
+
+EFI_STATUS
+InstallBoardInfoData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformBoardSioInfoDataGuid,
+ &BoardSioInfoData,
+ sizeof(PEI_BOARD_SIO_INFO)
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c
new file mode 100644
index 0000000000..f65e762702
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c
@@ -0,0 +1,27 @@
+/** @file
+ ACPI table pcds update.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiCommonBoardInitLib.h"
+
+#include <Library/UbaClkGenUpdateLib.h>
+
+//
+// No External clockgen, Use ICC Hybrid mode
+//
+
+EFI_STATUS
+InstallClockgenData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c
new file mode 100644
index 0000000000..196164ad9b
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c
@@ -0,0 +1,177 @@
+/** @file
+ Install Platform Clocks Config Data.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiCommonBoardInitLib.h"
+#include <Library/PlatformClocksLib.h>
+#include <Library/UbaClocksConfigLib.h>
+#include <Library/SpsPeiLib.h>
+#include <Library/PchInfoLib.h>
+#include <Ppi/PchPolicy.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+//
+// Table providing details on clocks supported by this library
+//
+// It is critical that this table be properly constructed.
+// The table entries must line up with the clock generatory types
+//
+CLOCK_GENERATOR_DETAILS mSupportedClockGeneratorTable[] = {
+{
+ ClockGeneratorCk410,
+ CK410_GENERATOR_ID,
+ CK410_GENERATOR_SPREAD_SPECTRUM_BYTE,
+ CK410_GENERATOR_SPREAD_SPECTRUM_BIT
+ },
+{
+ ClockGeneratorCk420,
+ CK420_GENERATOR_ID,
+ CK420_GENERATOR_SPREAD_SPECTRUM_BYTE,
+ CK420_GENERATOR_SPREAD_SPECTRUM_BIT
+ },
+{
+ ClockGeneratorCk440,
+ CK440_GENERATOR_ID,
+ CK440_GENERATOR_SPREAD_SPECTRUM_BYTE,
+ CK440_GENERATOR_SPREAD_SPECTRUM_BIT
+ },
+{
+ ClockGeneratorCk505,
+ CK505_GENERATOR_ID,
+ CK505_GENERATOR_SPREAD_SPECTRUM_BYTE,
+ CK505_GENERATOR_SPREAD_SPECTRUM_BIT
+ }
+};
+
+/**
+
+ Configure the clock generator and enable Spread Spectrum if applicable.
+
+ @param None
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_UNSUPPORTED Clock generator configuration is not supported
+
+**/
+EFI_STATUS
+PlatformClocksConfigCallback (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *Ppi
+ )
+{
+ EFI_STATUS Status;
+ CLOCKING_MODES ClockingMode;
+ UINT8 *ConfigurationTable;
+ UINT8 ConfigurationTablePlatformSRP[] = CLOCK_GENERATOR_SETTINGS_PLATFORMSRP;
+ UINT8 ConfigurationTableCK505[] = CLOCK_GENERATOR_SETTINGS_CK505;
+ UINTN Length;
+ CLOCK_GENERATOR_TYPE ClockType;
+ BOOLEAN SecondarySmbus = FALSE;
+ BOOLEAN EnableSpreadSpectrum;
+ PCH_POLICY_PPI *PchPolicyPpi;
+ UINT8 ClockGeneratorAddress = 0;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR(Status)) {
+ DEBUG ((DEBUG_ERROR, "ConfigurePlatformClocks. Can not read gDynamicSiLibraryPpiGuid\n"));
+ return Status;
+ }
+
+ ClockGeneratorAddress = PcdGet8 (PcdOemSkuClockGeneratorAddress);
+
+ ClockingMode = InternalAlternate;
+ Status = EFI_SUCCESS;
+ if (EFI_ERROR (Status)) {
+ if (Status != EFI_UNSUPPORTED) {
+ DEBUG ((DEBUG_ERROR, "ConfigurePlatformClocks. Can't read clock mode! EFI_STATUS = %r\n", Status));
+ }
+ return Status;
+ }
+
+ if (External == ClockingMode)
+ {
+ DEBUG ((DEBUG_INFO, "ConfigurePlatformClocks. Clock Mode: External\n"));
+
+ //
+ // If the clocking mode is external and CPX is present, then no further configuration of the
+ // clock is supported at this time.
+ //
+ if (DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CPX, REV_ALL)) {
+ return EFI_UNSUPPORTED;
+ }
+
+ if (DynamicSiLibraryPpi->IsSimicsEnvironment()) {
+ //
+ // Simics implements CK505 model
+ //
+ ConfigurationTable = ConfigurationTableCK505;
+ Length = sizeof (ConfigurationTableCK505);
+ ClockType = ClockGeneratorCk505;
+ }
+ else {
+ //
+ // SRP/DVP configuration
+ //
+ ConfigurationTable = ConfigurationTablePlatformSRP;
+ Length = sizeof (ConfigurationTablePlatformSRP);
+ ClockType = ClockGeneratorCk420;
+ }
+ Status = (*PeiServices)->LocatePpi (PeiServices,
+ &gPchPlatformPolicyPpiGuid,
+ 0,
+ NULL,
+ (VOID **)&PchPolicyPpi
+ );
+ ASSERT_EFI_ERROR (Status);
+ EnableSpreadSpectrum = (BOOLEAN) PchPolicyPpi->PchConfig.EnableClockSpreadSpec;
+ if (1 == EnableSpreadSpectrum) {
+ ConfigurationTable[mSupportedClockGeneratorTable[ClockType].SpreadSpectrumByteOffset] |= mSupportedClockGeneratorTable[ClockType].SpreadSpectrumBitOffset;
+ } else {
+ ConfigurationTable[mSupportedClockGeneratorTable[ClockType].SpreadSpectrumByteOffset] &= ~(mSupportedClockGeneratorTable[ClockType].SpreadSpectrumBitOffset);
+ }
+ Status = ConfigureClockGenerator (PeiServices,
+ ClockType,
+ ClockGeneratorAddress,
+ Length,
+ ConfigurationTable,
+ EnableSpreadSpectrum,
+ &mSupportedClockGeneratorTable[ClockType],
+ SecondarySmbus
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ return EFI_SUCCESS;
+}
+
+PLATFORM_CLOCKS_CONFIG_TABLE PlatformClocksConfigTable =
+{
+ PLATFORM_CLOCKS_CONFIG_SIGNATURE,
+ PLATFORM_CLOCKS_CONFIG_VERSION,
+ PlatformClocksConfigCallback
+};
+
+EFI_STATUS
+InstallPlatformClocksConfigData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformClocksConfigDataGuid,
+ &PlatformClocksConfigTable,
+ sizeof(PlatformClocksConfigTable)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c
new file mode 100644
index 0000000000..d18a3038ef
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c
@@ -0,0 +1,166 @@
+/** @file
+
+ @copyright
+ Copyright 2013 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiCommonBoardInitLib.h"
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+#include <Library/UbaGpioPlatformConfig.h>
+#include <Library/PchInfoLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+STATIC PLATFORM_GPIO_CONFIG_TABLE mGpioPlatformConfig = {
+
+ PLATFORM_GPIO_CONFIG_SIGNATURE,
+ PLATFORM_GPIO_CONFIG_VERSION,
+
+ //MFG pad
+ {
+ GPIO_SKL_H_GPP_C9, //To be verified with the Board schematics
+ {GpioPadModeGpio, GpioHostOwnGpio, GpioDirIn, GpioOutDefault, GpioIntDis, GpioPlatformReset, GpioTermNone}
+ },
+
+ GPIO_SKL_H_GPP_A18,
+
+ //Recovery jumper pad
+ GPIO_SKL_H_GPP_B14,
+
+ //FM ADR Trigger
+ GPIO_SKL_H_GPP_E3,
+
+ //ADR enable GPIO output
+ GPIO_SKL_H_GPP_D4,
+
+ // Force to S1 config mode pad
+ GPIO_SKL_H_GPP_A17,
+
+ //
+ // Used by PC Platforms
+ //
+ GPIO_SKL_H_GPP_B3,
+ //
+ // Used by PC platforms. This is the first GPIO pad of the pad series to indicate Board ID
+ //
+ GPIO_SKL_H_GPP_G12,
+
+ //
+ // WHEA SCI generation pad
+ //
+ GPIO_SKL_H_GPP_A12,
+
+ //
+ // Used to generate CPU HP SMI
+ //
+ GPIO_SKL_H_GPP_E6,
+
+ //
+ // FPGA error indicator
+ //
+ GPIO_SKL_H_GPP_E4,
+
+ //
+ // FPGA error indicator
+ //
+ GPIO_SKL_H_GPP_E5,
+
+ // Flash Security
+ UNUSED_GPIO,
+};
+
+STATIC PLATFORM_GPIO_CONFIG_TABLE mGpioMiniPchPlatformConfig = {
+
+ PLATFORM_GPIO_CONFIG_SIGNATURE,
+ PLATFORM_GPIO_CONFIG_VERSION,
+
+ //MFG pad
+ {
+ UNUSED_GPIO, //To be verified with the Board schematics
+ {0, 0, 0, 0, 0, 0, 0}
+ },
+
+ UNUSED_GPIO,
+
+ //Recovery jumper pad
+ UNUSED_GPIO,
+
+ //FM ADR Trigger
+ UNUSED_GPIO,
+
+ //ADR enable GPIO output
+ UNUSED_GPIO,
+
+ // Force to S1 config mode pad
+ UNUSED_GPIO,
+
+ //
+ // Used by PC Platforms
+ //
+ UNUSED_GPIO,
+ //
+ // Used by PC platforms. This is the first GPIO pad of the pad series to indicate Board ID
+ //
+ UNUSED_GPIO,
+
+ //
+ // WHEA SCI generation pad
+ //
+ UNUSED_GPIO,
+
+ //
+ // Used to generate CPU HP SMI
+ //
+ UNUSED_GPIO,
+
+ //
+ // FPGA error indicator
+ //
+ UNUSED_GPIO,
+
+ //
+ // FPGA error indicator
+ //
+ UNUSED_GPIO,
+
+};
+
+
+EFI_STATUS
+InstallGpioPlatformData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ if (DynamicSiLibraryPpi->GetPchSeries () == PchMini) {
+ return UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformGpioPlatformConfigDataGuid,
+ &mGpioMiniPchPlatformConfig,
+ sizeof(mGpioMiniPchPlatformConfig)
+ );
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformGpioPlatformConfigDataGuid,
+ &mGpioPlatformConfig,
+ sizeof(mGpioPlatformConfig)
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c
new file mode 100644
index 0000000000..75abf28d8c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c
@@ -0,0 +1,460 @@
+/** @file
+ Install Platform Hsio Ptss Table Data.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiCommonBoardInitLib.h"
+#include <Library/UbaHsioPtssTableConfigLib.h>
+#include <Library/SpsPeiLib.h>
+#include <Library/PchInfoLib.h>
+#include <Ppi/PchPolicy.h>
+#include <Library/HobLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Ppi/PchHsioPtssTable.h>
+#include "PchLbgHsioPtssTablesBx.h"
+#include "PchLbgHsioPtssTablesBx_Ext.h"
+#include "PchLbgHsioPtssTablesSx.h"
+#include "PchLbgHsioPtssTablesSx_Ext.h"
+#include <Guid/PlatformInfo.h>
+#include <Library/IoLib.h>
+#include <Library/EmulationConfigurationLib.h>
+#include <Library/PchMultiPchBase.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+
+VOID
+InstallPlatformHsioPtssTableCallback (
+ IN PCH_SETUP *PchSetup,
+ IN OUT PCH_POLICY_PPI *PchPolicy
+ )
+{
+ HSIO_PTSS_TABLES *PtssTables;
+ UINT8 PtssTableIndex;
+ UINT32 TableSize;
+ UINT32 Entry;
+ UINT8 LaneNum;
+ UINT8 Index;
+ UINT8 MaxSataPorts;
+ UINT8 MaxsSataPorts;
+ UINT8 MaxPciePorts;
+ UINT8 PcieTopologyReal[PCH_MAX_PCIE_ROOT_PORTS];
+ UINT8 PciePort;
+ UINTN RpBase;
+ UINTN RpDevice;
+ UINTN RpFunction;
+ UINT32 StrapFuseCfg;
+ UINT8 PcieControllerCfg;
+ EFI_STATUS Status;
+ UINT16 BoardId;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ switch (DynamicSiLibraryPpi->PchStepping ()) {
+ case LbgA0:
+ case LbgB0:
+ case LbgB1:
+ case LbgB2:
+ case LbgB3:
+ {
+ PtssTables = PchLbgHsioPtss_Bx;
+ TableSize = PchLbgHsioPtss_Bx_Size;
+ }
+ if (DynamicSiLibraryPpi->HybridSystemLevelEmulationEnabled ()) {
+ PtssTables = PchLbgHsioPtss_Bx;
+ TableSize = PchLbgHsioPtss_Bx_Size;
+ }
+ break;
+ case LbgS0:
+ case LbgS1:
+ case LbgS2:
+ {
+ PtssTables = PchLbgHsioPtss_Sx;
+ TableSize = PchLbgHsioPtss_Sx_Size;
+ }
+ if (DynamicSiLibraryPpi->HybridSystemLevelEmulationEnabled ()) {
+ PtssTables = PchLbgHsioPtss_Sx;
+ TableSize = PchLbgHsioPtss_Sx_Size;
+ }
+ break;
+ default:
+ PtssTables = NULL;
+ TableSize = 0;
+ DEBUG ((DEBUG_ERROR, "Cannot find PTSS table for this PCH Stepping\n"));
+ ASSERT (FALSE);
+ }
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT(GuidHob != NULL);
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+ BoardId = PlatformInfo->BoardId;
+ PtssTableIndex = 0;
+ MaxSataPorts = DynamicSiLibraryPpi->GetPchMaxSataPortNum ();
+ MaxsSataPorts = DynamicSiLibraryPpi->GetPchMaxsSataPortNum ();
+ MaxPciePorts = DynamicSiLibraryPpi->GetPchMaxPciePortNum ();
+ ZeroMem (PcieTopologyReal, sizeof (PcieTopologyReal));
+ //Populate PCIe topology based on lane configuration
+
+ CopyMem (
+ PcieTopologyReal,
+ PchSetup->PcieTopology,
+ sizeof (PcieTopologyReal)
+ );
+ for (PciePort = 0; PciePort < MaxPciePorts; PciePort += 4) {
+ Status = DynamicSiLibraryPpi->GetPchPcieRpDevFunByPchId (PCH_LEGACY_ID, PciePort, &RpDevice, &RpFunction);
+ RpBase = DynamicSiLibraryPpi->MmPciBase (0, (UINT32) RpDevice, (UINT32) RpFunction);
+ StrapFuseCfg = MmioRead32 (RpBase + R_PCH_PCIE_STRPFUSECFG);
+ PcieControllerCfg = (UINT8) ((StrapFuseCfg & B_PCH_PCIE_STRPFUSECFG_RPC) >> N_PCH_PCIE_STRPFUSECFG_RPC);
+ DEBUG ((DEBUG_INFO, "PCIE Port %d StrapFuseCfg Value = %d\n", PciePort, PcieControllerCfg));
+ PcieTopologyReal[PciePort] = PchSetup->PcieTopology[PciePort];
+ if (PcieControllerCfg != V_PCH_PCIE_STRPFUSECFG_RPC_1_1_1_1) {
+ PcieTopologyReal[PciePort + 1] = PchSetup->PcieTopology[PciePort];
+ }
+ if (PcieControllerCfg == V_PCH_PCIE_STRPFUSECFG_RPC_4) {
+ PcieTopologyReal[PciePort + 2] = PchSetup->PcieTopology[PciePort];
+ PcieTopologyReal[PciePort + 3] = PchSetup->PcieTopology[PciePort];
+ }
+ if (PcieControllerCfg == V_PCH_PCIE_STRPFUSECFG_RPC_2_2) {
+ PcieTopologyReal[PciePort + 2] = PchSetup->PcieTopology[PciePort + 2];
+ PcieTopologyReal[PciePort + 3] = PchSetup->PcieTopology[PciePort + 2];
+ }
+ if (PcieControllerCfg == V_PCH_PCIE_STRPFUSECFG_RPC_2_1_1) {
+ PcieTopologyReal[PciePort + 2] = PchSetup->PcieTopology[PciePort + 2];
+ PcieTopologyReal[PciePort + 3] = PchSetup->PcieTopology[PciePort + 3];
+ }
+ }
+ for (Index = 0; Index < MaxPciePorts; Index++) {
+ DEBUG ((DEBUG_INFO, "PCIE PTSS Setup RP %d Topology = %d\n", Index, PchSetup->PcieTopology[Index]));
+ DEBUG ((DEBUG_INFO, "PCIE PTSS Assigned RP %d Topology = %d\n", Index, PcieTopologyReal[Index]));
+ }
+ //Case 1: BoardId is known, Topology is known/unknown
+ //Case 1a: SATA
+ for (Index = 0; Index < MaxSataPorts; Index++) {
+ if (DynamicSiLibraryPpi->PchGetSataLaneNumByPchId (PCH_LEGACY_ID, Index, &LaneNum) == EFI_SUCCESS) {
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_SATA) &&
+ (PchSetup->SataTopology[Index] == PtssTables[Entry].Topology) &&
+ (BoardId == PtssTables[Entry].BoardId)) {
+ PtssTableIndex++;
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD20) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0) == (UINT32) B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0)) {
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioRxGen3EqBoostMagEnable = TRUE;
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioRxGen3EqBoostMag = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_TX_DWORD8)) {
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) {
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen1DownscaleAmpEnable = TRUE;
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen1DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0;
+ }
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) {
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen2DownscaleAmpEnable = TRUE;
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen2DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0;
+ }
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+
+ //Case 1a continued: Secondary SATA
+ for (Index = 0; Index < MaxsSataPorts; Index++) {
+ if (DynamicSiLibraryPpi->PchGetsSataLaneNumByPchId (PCH_LEGACY_ID, Index, &LaneNum) == EFI_SUCCESS) {
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_SATA) &&
+ (PchSetup->sSataTopology[Index] == PtssTables[Entry].Topology) &&
+ (BoardId == PtssTables[Entry].BoardId)) {
+ PtssTableIndex++;
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD20) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0) == (UINT32) B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0)) {
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioRxGen3EqBoostMagEnable = TRUE;
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioRxGen3EqBoostMag = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_TX_DWORD8)) {
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) {
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen1DownscaleAmpEnable = TRUE;
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen1DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0;
+ }
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) {
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen2DownscaleAmpEnable = TRUE;
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen2DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0;
+ }
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+
+ //Case 1b: PCIe
+ for (Index = 0; Index < MaxPciePorts; Index++) {
+ if (DynamicSiLibraryPpi->PchGetPcieLaneNumByPchId (PCH_LEGACY_ID, Index, &LaneNum) == EFI_SUCCESS) {
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ // Skip matching Lanes when the table record has settings for WM20 FIA
+ if ((PtssTables[Entry].PtssTable.SbPortID == PID_MODPHY4) ||
+ (PtssTables[Entry].PtssTable.SbPortID == PID_MODPHY5)){
+ continue;
+ }
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_PCIEDMI) &&
+ (PcieTopologyReal[Index] == PtssTables[Entry].Topology) &&
+ (BoardId == PtssTables[Entry].BoardId)) {
+ PtssTableIndex++;
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD25) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0) == (UINT32) B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRxSetCtleEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRxSetCtle = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0;
+ }
+ else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD39) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0) == (UINT32) B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioIcfgAdjLimitLoEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioIcfgAdjLimitLo = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD40) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP) == (UINT32) B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioSampOffstEvenErrSpEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioSampOffstEvenErrSp = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD41) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS) == (UINT32) B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRemainingSamplerOffEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRemainingSamplerOff = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD7) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL) == (UINT32) B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioVgaGainCalEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioVgaGainCal = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL;
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+
+ //Case 1b Continued: PCIe for WM20 FIA
+ for (Index = 0; Index < PCH_MAX_WM20_LANES_NUMBER; Index++) {
+ LaneNum = Index;
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ // Skip entries which are not for WM20 FIA
+ if ((PtssTables[Entry].PtssTable.SbPortID != PID_MODPHY4) &&
+ (PtssTables[Entry].PtssTable.SbPortID != PID_MODPHY5)){
+ continue;
+ }
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_PCIEDMI) &&
+ (BoardId == PtssTables[Entry].BoardId)) {
+ PtssTableIndex++;
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD25) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0) == (UINT32) B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRxSetCtleEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRxSetCtle = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD39) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0) == (UINT32) B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioIcfgAdjLimitLoEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioIcfgAdjLimitLo = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD40) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP) == (UINT32) B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioSampOffstEvenErrSpEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioSampOffstEvenErrSp = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD41) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS) == (UINT32) B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRemainingSamplerOffEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRemainingSamplerOff = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD7) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL) == (UINT32) B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioVgaGainCalEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioVgaGainCal = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL;
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+
+ //Case 2: BoardId is unknown, Topology is known/unknown
+ if (PtssTableIndex == 0) {
+ for (Index = 0; Index < MaxSataPorts; Index++) {
+ if (DynamicSiLibraryPpi->PchGetSataLaneNumByPchId (PCH_LEGACY_ID, Index, &LaneNum) == EFI_SUCCESS) {
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_SATA) &&
+ (PchSetup->SataTopology[Index] == PtssTables[Entry].Topology) &&
+ (PtssTables[Entry].BoardId == TypePlatformUnknown)) {
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD20) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0) == (UINT32) B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0)) {
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioRxGen3EqBoostMagEnable = TRUE;
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioRxGen3EqBoostMag = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0;
+ } else if (PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_TX_DWORD8) {
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) {
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen1DownscaleAmpEnable = TRUE;
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen1DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0;
+ }
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) {
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen2DownscaleAmpEnable = TRUE;
+ PchPolicy->HsioSataConfig.PortLane[Index].HsioTxGen2DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0;
+ }
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+
+ // Case 2 Continued secondary SATA when BoardId is unknown, Topology is known/unknown
+ for (Index = 0; Index < MaxsSataPorts; Index++) {
+ if (DynamicSiLibraryPpi->PchGetsSataLaneNumByPchId (PCH_LEGACY_ID, Index, &LaneNum) == EFI_SUCCESS) {
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_SATA) &&
+ (PchSetup->sSataTopology[Index] == PtssTables[Entry].Topology) &&
+ (PtssTables[Entry].BoardId == TypePlatformUnknown)) {
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD20) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0) == (UINT32) B_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0)) {
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioRxGen3EqBoostMagEnable = TRUE;
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioRxGen3EqBoostMag = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD20_ICFGCTLEDATATAP_FULLRATE_5_0;
+ } else if (PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_TX_DWORD8) {
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) {
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen1DownscaleAmpEnable = TRUE;
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen1DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE00MARGIN_5_0;
+ }
+ if (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) == (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) {
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen2DownscaleAmpEnable = TRUE;
+ PchPolicy->HsiosSataConfig.PortLane[Index].HsioTxGen2DownscaleAmp = (PtssTables[Entry].PtssTable.Value & (UINT32) B_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0) >> N_HSIO_PCR_TX_DWORD8_ORATE01MARGIN_5_0;
+ }
+ }
+ else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+
+ for (Index = 0; Index < MaxPciePorts; Index++) {
+ if (DynamicSiLibraryPpi->PchGetPcieLaneNumByPchId (PCH_LEGACY_ID, Index, &LaneNum) == EFI_SUCCESS) {
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ // Skip matching Lanes when the table record has settings for WM20 FIA
+ if ((PtssTables[Entry].PtssTable.SbPortID == PID_MODPHY4) ||
+ (PtssTables[Entry].PtssTable.SbPortID == PID_MODPHY5)){
+ continue;
+ }
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_PCIEDMI) &&
+ (PcieTopologyReal[Index] == PtssTables[Entry].Topology) &&
+ (PtssTables[Entry].BoardId == TypePlatformUnknown)) {
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD25) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0) == (UINT32) B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRxSetCtleEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRxSetCtle = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD39) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0) == (UINT32) B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioIcfgAdjLimitLoEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioIcfgAdjLimitLo = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD40) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP) == (UINT32) B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioSampOffstEvenErrSpEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioSampOffstEvenErrSp = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD41) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS) == (UINT32) B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRemainingSamplerOffEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioRemainingSamplerOff = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD7) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL) == (UINT32) B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL)) {
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioVgaGainCalEnable = TRUE;
+ PchPolicy->HsioPcieConfig.Lane[Index].HsioVgaGainCal = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL;
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+
+ //Continued for PCIe ports in WM20 FIA
+ for (Index = 0; Index < PCH_MAX_WM20_LANES_NUMBER; Index++) {
+ LaneNum = Index;
+ for (Entry = 0; Entry < TableSize; Entry++) {
+ // Skip entries which are not for WM20 FIA
+ if ((PtssTables[Entry].PtssTable.SbPortID != PID_MODPHY4) &&
+ (PtssTables[Entry].PtssTable.SbPortID != PID_MODPHY5)){
+ continue;
+ }
+ if ((LaneNum == PtssTables[Entry].PtssTable.LaneNum) &&
+ (PtssTables[Entry].PtssTable.PhyMode == V_PCH_PCR_FIA_LANE_OWN_PCIEDMI) &&
+ (PtssTables[Entry].BoardId == TypePlatformUnknown)) {
+ if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD25) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0) == (UINT32) B_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRxSetCtleEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRxSetCtle = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD25_CTLE_ADAPT_OFFSET_CFG_4_0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD39) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0) == (UINT32) B_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioIcfgAdjLimitLoEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioIcfgAdjLimitLo = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD39_ICFG_ADJ_LIMITL0;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD40) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP) == (UINT32) B_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioSampOffstEvenErrSpEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioSampOffstEvenErrSp = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD40_SAMP_OFFST_EVEN_ERRSP;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD41) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS) == (UINT32) B_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRemainingSamplerOffEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioRemainingSamplerOff = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD41_REMAINING_SAMP_OFFSTS;
+ } else if ((PtssTables[Entry].PtssTable.Offset == (UINT32) R_HSIO_PCR_RX_DWORD7) &&
+ (((UINT32) ~PtssTables[Entry].PtssTable.BitMask & B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL) == (UINT32) B_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL)) {
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioVgaGainCalEnable = TRUE;
+ PchPolicy->HsioPcieConfigFIAWM20.Lane[Index].HsioVgaGainCal = (PtssTables[Entry].PtssTable.Value & (UINT32) ~PtssTables[Entry].PtssTable.BitMask) >> N_HSIO_PCR_RX_DWORD7_VGA_GAIN_CAL;
+ } else {
+ DEBUG ((DEBUG_ERROR, "ERROR! PTSS programming: The PTSS table offset and/or mask are not compatible with the BIOS Code.\n"));
+ }
+ }
+ }
+ }
+ }
+}
+
+PLATFORM_HSIO_PTSS_CONFIG_TABLE PlatformHsioPtssConfigTable =
+{
+ PLATFORM_HSIO_PTSS_TABLE_SIGNATURE,
+ PLATFORM_HSIO_PTSS_TABLE_VERSION,
+ InstallPlatformHsioPtssTableCallback
+};
+
+EFI_STATUS
+InstallPlatformHsioPtssTableData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ if (DynamicSiLibraryPpi->GetPchSeries() == PchMini) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformHsioPtssTableGuid,
+ &PlatformHsioPtssConfigTable,
+ sizeof(PlatformHsioPtssConfigTable)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h
new file mode 100644
index 0000000000..b3a265b664
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h
@@ -0,0 +1,156 @@
+/** @file
+ Contains several definitions for table structures used for Bifurcation and slot configuration
+ on the different platforms.
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIOBIFURCATIONSLOTTABLE_H_
+#define _IIOBIFURCATIONSLOTTABLE_H_
+
+#include "IioPlatformData.h"
+
+#define QAT_ENABLED 0 // QAT is active-low
+#define RISER_PRESENT 0
+#define RISER_NOT_PRESENT 1
+#define RISER_HP_EN 1
+#define RISER_WINGED_IN 0
+#define RISER_SLOT9_DISABLE 1
+
+typedef struct {
+ UINT8 Socket;
+ UINT8 IouNumber;
+ UINT8 BroadwayAddress; // 0xff, no override bifurcation settings.
+ // 0-2 BW5 card can be present
+} IIO_BROADWAY_ADDRESS_ENTRY;
+
+typedef enum {
+ Bw5_Addr_0 = 0,
+ Bw5_Addr_1,
+ Bw5_Addr_2,
+ Bw5_Addr_3,
+ Bw5_Addr_Max
+} BW5_ADDRESS;
+
+typedef union {
+ struct {
+ UINT8 PresentSignal:1;
+ UINT8 HPConf:1;
+ UINT8 WingConf:1;
+ UINT8 Slot9En:1;
+ } Bits;
+ UINT8 Data;
+} PCIE_RISER_ID;
+
+enum {
+ Iio_PortA = 0,
+ Iio_PortB = 1,
+ Iio_PortC = 2,
+ Iio_PortD = 3
+};
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Iou3,
+ Iio_Iou4,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ VPP_PORT_0 = 0,
+ VPP_PORT_1,
+ VPP_PORT_2,
+ VPP_PORT_3
+} VPP_PORTS;
+///
+/// Platform Port/Socket assignments.
+///
+
+#define ENABLE 1
+#define DISABLE 0
+#define NO_SLT_IMP 0xFF
+#define SLT_IMP 1
+#define HIDE 1
+#define NOT_HIDE 0
+#define VPP_PORT_0 0
+#define VPP_PORT_1 1
+#define VPP_PORT_MAX 0xFF
+#define VPP_ADDR_MAX 0xFF
+#define PWR_VAL_MAX 0xFF
+#define PWR_SCL_MAX 0xFF
+
+//
+// BW5 SMbus slave address
+//
+#define BW5_SMBUS_ADDRESS 0x4C
+#define PCA9555_COMMAND_CONFIG_PORT0_REG 0x06
+#define PCA9555_COMMAND_INPUT_PORT0_REG 0x00
+#define NUM_OF_RETRIES 0x03
+#define BW5_0_ID_MASK 0x0007
+#define BW5_1_ID_MASK 0x0070
+#define BW5_2_ID_MASK 0x0700
+#define BW5_3_ID_MASK 0x7000
+#define BW5_CONFIG_REG_MASK 0xFF
+#define BW5_CARDS_PRESENT 0x04
+#define BW5_CARD_NOT_PRESENT 0x07
+
+
+// Bifurcation read from MCU
+#define BW5_BIFURCATE_x4x4x4x4 0
+#define BW5_BIFURCATE_xxx8x4x4 1
+#define BW5_BIFURCATE_x4x4xxx8 2
+#define BW5_BIFURCATE_xxx8xxx8 3
+
+#define BW4_DATA_OFFSET 0
+#define BW4_CONFIG_OFFSET 3
+
+typedef union {
+ struct {
+ UINT8 BifBits:3;
+ UINT8 ExtPresent:1;
+ UINT8 HotPlugEna:1;
+ UINT8 Rsvd:2;
+ UINT8 ExtId:1;
+ } Bits;
+ UINT8 Data;
+} BW5_BIFURCATION_DATA_STRUCT;
+
+/**
+ This function prepare the data for silicon initialization based on
+ bifuraction and slots table
+
+ This function is for tables in version PLATFORM_IIO_CONFIG_UPDATE_VERSION = 1
+ */
+VOID
+IioPortBifurcationInitVer1 (
+ IN IIO_GLOBALS *IioGlobalData
+ );
+
+/**
+ Function returns the board ID from running HW
+
+ @return BoardId
+**/
+UINT8
+EFIAPI
+SystemBoardIdValue (
+ VOID
+ );
+
+
+#endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c
new file mode 100644
index 0000000000..4f23abc1e0
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c
@@ -0,0 +1,913 @@
+/** @file
+ Install Iio Port Bifurcation Init Data.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#include <PiPei.h>
+#include <Upi/KtiHost.h>
+
+#include <Guid/SetupVariable.h>
+#include <Guid/PlatformInfo.h>
+#include <Ppi/Smbus2.h>
+#include <GpioInitData.h>
+
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/GpioLib.h>
+#include <Library/UbaIioConfigLib.h>
+#include <Library/UbaPlatLib.h>
+#include <Library/HobLib.h>
+#include <Library/UbaIioPortBifurcationInitLib.h>
+#include <Library/PchMultiPchBase.h>
+#include <CpuAndRevisionDefines.h>
+
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+#include "PeiCommonBoardInitLib.h"
+#include "IioBifurcationSlotTable.h"
+
+
+#define IIO_D_UBALOG(...) { DEBUG((DEBUG_ERROR, "[IIO](UBA) " __VA_ARGS__)); } // Important log always printed
+#define IIO_D_UBADBG(...) { DEBUG((DEBUG_INFO, "[IIO](UBA) " __VA_ARGS__)); } // Debug log, printed with BIOS debug jumper
+#define IIO_D_UBAWARN(...) { DEBUG((DEBUG_ERROR, "[IIO](UBA) WARNING: " __VA_ARGS__)); } // Warning log, not necessary error
+#define IIO_D_UBAERR(...) { DEBUG((DEBUG_ERROR, "[IIO](UBA) ERROR: " __VA_ARGS__)); } // Errorneous situation, probably bug or hw problem
+
+EFI_PLATFORM_INFO*
+GetPlatformInfoFromHob (
+ VOID
+ )
+{
+ EFI_HOB_GUID_TYPE *GuidHob;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ if (GuidHob == NULL) {
+ ASSERT (FALSE);
+ return NULL;
+ }
+ return GET_GUID_HOB_DATA (GuidHob);
+}
+
+/**
+ Check if QAT-UPLINK override is needed
+
+ @param[in] Socket Socket index
+ @param[in] Iou IOU index
+ @param[out] Bifurcation Buffer for bifurcation needed to support QAT
+
+ @return TRUE if custom bifurcation is necessary
+ */
+BOOLEAN
+IsQatUplinkOverrideNeeded (
+ IN UINT8 Socket,
+ IN UINT8 Iou,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi,
+ OUT UINT8 *Bifurcation
+ )
+{
+ EFI_PLATFORM_INFO *PlatformInfo;
+ UINT32 Gpio;
+ EFI_STATUS Status;
+
+ PlatformInfo = GetPlatformInfoFromHob ();
+ if (PlatformInfo == NULL) {
+ return FALSE;
+ }
+
+ switch (PlatformInfo->BoardId) {
+ case TypeWilsonCityRP:
+ case TypeWilsonCityModular:
+ case TypeWilsonCitySMT:
+ case TypeWilsonCityPPV:
+ case TypeWilsonPointRP:
+ case TypeWilsonPointModular:
+ case TypeCooperCityRP:
+ if (Socket %2 == 0 && Iou == 3) {
+ //
+ // It is possible that special bifurcation for QAT-UPLINK if needed
+ // It can be recognized by GPIO D8: 0 means that there is no UPLINK
+ //
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_D8, &Gpio);
+ if (EFI_ERROR (Status)) {
+ return FALSE;
+ }
+ if (Gpio != 0) {
+ *Bifurcation = IIO_BIFURCATE_xxx8xxx8;
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+ break;
+ }
+
+ //
+ // By default there is no QAT-UPLINK support
+ //
+ return FALSE;
+}
+
+/**
+ Check if QAT-CABLE override is needed
+
+ @param[in] Socket Socket index
+ @param[in] Iou IOU index
+ @param[out] Bifurcation Buffer for bifurcation needed to support QAT
+
+ @return TRUE if custom bifurcation is necessary
+ */
+BOOLEAN
+IsQatCableOverrideNeeded (
+ IN UINT8 Socket,
+ IN UINT8 Iou,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi,
+ OUT UINT8 *Bifurcation
+ )
+{
+ EFI_PLATFORM_INFO *PlatformInfo;
+ UINT32 Gpio;
+ EFI_STATUS Status;
+
+ PlatformInfo = GetPlatformInfoFromHob ();
+ if (PlatformInfo == NULL) {
+ return FALSE;
+ }
+
+ switch (PlatformInfo->BoardId) {
+ case TypeWilsonCityRP:
+ case TypeWilsonCityModular:
+ case TypeWilsonCitySMT:
+ case TypeWilsonCityPPV:
+ case TypeWilsonPointRP:
+ case TypeWilsonPointModular:
+ if (Iou == 4) {
+ //
+ // It is possible that special bifurcation for Oculink QAT cable is needed
+ // Then cable is used to connect oculinks ports with QAT
+ // To determine it if cable is needed GPIO-B3 needs to be examined
+ // GPIO-B3 == 0 means that cable is present
+ //
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_B3, &Gpio);
+ if (EFI_ERROR (Status)) {
+ return FALSE;
+ }
+
+ if (Gpio != 0) {
+ //
+ // There is no cable
+ //
+ return FALSE;
+ }
+
+ //
+ // Cable is present to check which MEZZ IOU is used GPIO B4 needs to be examined
+ // GPIO-B4 == 1: MEZZ IOU from Socket0 is used;
+ // GPIO-B4 == 0: MEZZ IOU from Socket1 is used;
+ //
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_B4, &Gpio);
+ if (EFI_ERROR (Status)) {
+ return FALSE;
+ }
+
+ if ((Socket == 0 && Gpio == 1) || (Socket == 1 && Gpio == 0)) {
+ *Bifurcation = IIO_BIFURCATE_xxx8x4x4;
+ return TRUE;
+ }
+ }
+ } //switch: Board-Id
+
+ //
+ // By default there is no QAT-cable support
+ //
+ return FALSE;
+}
+
+/**
+ Check if QAT override is needed.
+ There are two possible QAT variants:
+ - QAT uplink
+ - QAT cable
+ If LBG with QAT is detected (by GPIO read) custom bifurcation should be set.
+
+ @param[in] IioGlobalData Pointer to IioGlobalData
+ */
+VOID
+CheckQatBifurcationOverrides (
+ IN IIO_GLOBALS *IioGlobalData,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi
+ )
+{
+ UINT8 Socket;
+ UINT8 Iou;
+ UINT8 Bifurcation;
+ UINT8 StackIndex;
+
+ for (Socket = 0; Socket < MAX_SOCKET; Socket++) {
+ for (Iou = 0; Iou < MAX_IOU_PER_SOCKET; Iou++) {
+
+ StackIndex = Iou+1;
+
+ if (!DynamicSiLibraryPpi->IioIsSocketPresent (Socket)) {
+ //
+ // Skip sockets which are not present on the platform
+ //
+ continue;
+ }
+
+ if (!DynamicSiLibraryPpi->IioIsStackPresent (Socket, StackIndex)) {
+ //
+ // Skips stacks which are not present on the platform
+ //
+ continue;
+ }
+ //
+ // Override if QAT is enabled
+ //
+ if (IsQatUplinkOverrideNeeded (Socket, Iou, DynamicSiLibraryPpi, &Bifurcation)) {
+ if (IioGlobalData->SetupData.ConfigIOU[Socket][Iou] == IIO_BIFURCATE_AUTO) {
+ IioGlobalData->SetupData.ConfigIOU[Socket][Iou] = Bifurcation;
+ IIO_D_UBALOG ("[%d.%d] QAT-uplink detected; bif=%d\n", Socket, StackIndex, Bifurcation);
+ }
+ } else if (IsQatCableOverrideNeeded (Socket, Iou, DynamicSiLibraryPpi, &Bifurcation)) {
+ if (IioGlobalData->SetupData.ConfigIOU[Socket][Iou] == IIO_BIFURCATE_AUTO) {
+ IioGlobalData->SetupData.ConfigIOU[Socket][Iou] = Bifurcation;
+ IIO_D_UBALOG ("[%d.%d] QAT-cable detected; bif=%d\n", Socket, StackIndex, Bifurcation);
+ }
+ }
+ } // for each Iou
+ } // for each Socket
+}
+
+/**
+ Check if MRL sensor is present for given port.
+ It depends on board architecture.
+ Sometimes slot doesn't support it in contrast to Ext.Card.
+
+ @param[in] TotalPortIndex Index of the port (across all ports on platform)
+ @param[in] ExtCardPresent TRUE if Ext. card presence was detected
+
+ @return TRUE if MRL sensor presence is expected
+ */
+BOOLEAN
+IsMrlSensorPresent (
+ IN UINT16 TotalPortIndex,
+ IN BOOLEAN ExtCardPresent
+ )
+{
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ //
+ // This data should be read from platform specific config (slot table IIO_BIFURCATION_DATA_ENTRY_EX)
+ // but for now there is no such information
+ // Let this be a temp. workaround until the update of UBA slot configs
+ //
+
+ if (ExtCardPresent) {
+ //
+ // MRL sensor is always present for Ext. Cards
+ //
+ return TRUE;
+ }
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ if (GuidHob == NULL) {
+ ASSERT (FALSE);
+ return FALSE;
+ }
+
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+ switch (PlatformInfo->BoardId) {
+ case TypeWilsonCityRP:
+ //
+ // This is version for ICX
+ //
+ switch (TotalPortIndex) {
+ case SOCKET_1_INDEX + PORT_1A_INDEX:
+ case SOCKET_1_INDEX + PORT_1B_INDEX:
+ case SOCKET_1_INDEX + PORT_1C_INDEX:
+ case SOCKET_1_INDEX + PORT_1D_INDEX:
+ //
+ // only one slot on WilsonCity supports MRL
+ //
+ return TRUE;
+ default:
+ return FALSE;
+ }
+ break;
+
+ case TypeCooperCityRP:
+ //
+ // Let's assume that MRL is supported by all slots on CooperCity - where HP is enabled!
+ //
+ return TRUE;
+ default:
+ //
+ // For the rest of platforms the situation is unknown for now
+ //
+ return FALSE;
+ }
+}
+
+/**
+ Verify if VMD is enabled and override Slot configuration
+ based on the VMD settings
+
+ @param[in] IioGlobalData Pointer to Iio Globals.
+ @param[in] Slot Slot configuration settings
+ @param[in] SlotEntries Number of slot entries
+ @param[in] ExtCardPresent Table with results of Ext. Card detection
+**/
+#define SLOT_NUM_OFFSET_FOR_EXT_CARD_SLOT 0x50
+
+VOID
+ConfigureSlots (
+ IN OUT IIO_GLOBALS *IioGlobalData,
+ IN IIO_SLOT_CONFIG_DATA_ENTRY_EX *Slot,
+ IN UINT8 SlotEntries,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi,
+ IN BOOLEAN ExtCardPresent[MAX_SOCKET][MAX_IOU_PER_SOCKET]
+ )
+{
+ UINT8 Index;
+ UINT16 TotalPortIndex;
+ UINT8 IioIndex = 0;
+ UINT8 Stack;
+ UINT8 PortIndex = 0;
+ UINT8 Iou;
+ BOOLEAN IsHpSupportedBySlot;
+ BOOLEAN IsVmdEnabledForSlot = TRUE;
+ BOOLEAN IsExtCardInSlot = TRUE;
+ BOOLEAN AreLanesAssignedToPort = TRUE;
+
+ for (Index = 0; Index < SlotEntries; Index ++) {
+
+ TotalPortIndex = Slot[Index].PortIndex;
+ if (DynamicSiLibraryPpi->GetMaxPortNumPerSocket() == 0 || DynamicSiLibraryPpi->GetMaxPortNumPerSocket() == 0) {
+ return;
+ }
+ IioIndex = (UINT8) (TotalPortIndex / DynamicSiLibraryPpi->GetMaxPortNumPerSocket ());
+ PortIndex = (UINT8) (TotalPortIndex - (IioIndex * DynamicSiLibraryPpi->GetMaxPortNumPerSocket ()));
+ Stack = IioGlobalData->IioVar.IioVData.StackPerPort[IioIndex][PortIndex];
+ Iou = Stack - 1;
+ IsHpSupportedBySlot = FALSE;
+ IsVmdEnabledForSlot = DynamicSiLibraryPpi->IsVMDEnabledForPort (IioIndex, PortIndex);
+ IsExtCardInSlot = (Slot[Index].ExtensionCardSupport && ExtCardPresent[IioIndex][Iou]);
+ AreLanesAssignedToPort = DynamicSiLibraryPpi->IioAreLanesAssignedToPort (IioGlobalData, IioIndex, PortIndex);
+
+ if (Slot[Index].Hidden || !AreLanesAssignedToPort) {
+ //
+ // Hide rootports which are hidden in slots table or don't have any lanes assigned
+ //
+ IioGlobalData->SetupData.HidePEXPMenu[TotalPortIndex] = HIDE;
+ IioGlobalData->SetupData.PEXPHIDE[TotalPortIndex] = HIDE;
+ } else {
+ //
+ // Unhide active rootports (hided by default)
+ //
+ IioGlobalData->SetupData.HidePEXPMenu[TotalPortIndex] = NOT_HIDE;
+ IioGlobalData->SetupData.PEXPHIDE[TotalPortIndex] = NOT_HIDE;
+ }
+
+ if (Slot[Index].SlotPowerLimitScale != PWR_SCL_MAX) {
+ IioGlobalData->SetupData.SLOTSPLS[TotalPortIndex] = Slot[Index].SlotPowerLimitScale;
+ IioGlobalData->SetupData.SLOTSPLV[TotalPortIndex] = Slot[Index].SlotPowerLimitValue;
+ }
+
+ if (Slot[Index].SlotNumber != NO_SLT_IMP) {
+ IioGlobalData->SetupData.SLOTIMP[TotalPortIndex] = SLT_IMP;
+ IioGlobalData->SetupData.SLOTPSP[TotalPortIndex] = Slot[Index].SlotNumber;
+ } else if (AreLanesAssignedToPort) {
+ //
+ // If slot is not marked as implemented yet, but is exposed in current bifurcation
+ // assume that there will be a slot
+ //
+ IioGlobalData->SetupData.SLOTIMP[TotalPortIndex] = 1;
+ IioGlobalData->SetupData.SLOTPSP[TotalPortIndex] = SLOT_NUM_OFFSET_FOR_EXT_CARD_SLOT + TotalPortIndex;
+ }
+
+ if (IsVmdEnabledForSlot) {
+ //
+ // Disable Electromechanical Interlock presence for VMD
+ //
+ IioGlobalData->SetupData.SLOTEIP[TotalPortIndex] = DISABLE;
+ } else {
+ IioGlobalData->SetupData.SLOTEIP[TotalPortIndex] = Slot[Index].InterLockPresent;
+ }
+
+ //
+ // HotPlug related settings:
+ // - first check the presence of Ext. Card in the slot and apply specific setting
+ // - next apply common settings for HotPlug
+ //
+ if (IsExtCardInSlot && Slot[Index].ExtnCardHotPlugCapable) {
+ IsHpSupportedBySlot = TRUE;
+ //
+ // Apply specific overrides for HP with Ext. Card
+ //
+ if (Slot[Index].ExtnCardHPVppPort != VPP_PORT_MAX) {
+ IioGlobalData->SetupData.VppEnabled[TotalPortIndex] = TRUE;
+ IioGlobalData->SetupData.VppPort[TotalPortIndex] = Slot[Index].ExtnCardHPVppPort;
+ IioGlobalData->SetupData.VppAddress[TotalPortIndex] = Slot[Index].ExtnCardHPVppAddress;
+ }
+ } else if (Slot[Index].HotPlugCapable) {
+ //
+ // HP settings when there is no Ext. Card
+ //
+ IsHpSupportedBySlot = TRUE;
+
+ if (Slot[Index].VppPort != VPP_PORT_MAX) {
+ IioGlobalData->SetupData.VppEnabled[TotalPortIndex] = TRUE;
+ IioGlobalData->SetupData.VppPort[TotalPortIndex] = Slot[Index].VppPort;
+ IioGlobalData->SetupData.VppAddress[TotalPortIndex] = Slot[Index].VppAddress;
+ }
+ }
+
+ if (IsHpSupportedBySlot) {
+ //
+ // There are common setting for HP
+ //
+ IioGlobalData->SetupData.SLOTHPCAP[TotalPortIndex] = ENABLE;
+ IioGlobalData->SetupData.SLOTAIP[TotalPortIndex] = ENABLE; // Attention Indicator Present
+ IioGlobalData->SetupData.SLOTPIP[TotalPortIndex] = ENABLE; // Power Indicator Present
+
+ if (IsVmdEnabledForSlot) {
+ IioGlobalData->SetupData.SLOTHPSUP[TotalPortIndex] = ENABLE; // HotPlug Surprise is always enabled for VMD
+ }
+
+ if (!IsVmdEnabledForSlot && IsMrlSensorPresent (TotalPortIndex, IsExtCardInSlot)) {
+ //
+ // Let's assume that if MRL sensor is present Attention button and Power Controller is also present
+ //
+ IioGlobalData->SetupData.SLOTMRLSP[TotalPortIndex] = ENABLE;
+ IioGlobalData->SetupData.SLOTABP[TotalPortIndex] = ENABLE;
+ IioGlobalData->SetupData.SLOTPCP[TotalPortIndex] = ENABLE;
+ } else {
+ IioGlobalData->SetupData.SLOTMRLSP[TotalPortIndex] = DISABLE;
+ IioGlobalData->SetupData.SLOTABP[TotalPortIndex] = DISABLE;
+ IioGlobalData->SetupData.SLOTPCP[TotalPortIndex] = DISABLE;
+ }
+ }
+ } // for each slot entry
+}
+
+/**
+ Check if lanes are reversed for given IOU - this is important when non-symetrical
+ bifurcation is requested.
+
+ @param[in] BifurcationTable record from bifurcation table
+
+ @return TRUE if lanes are in reversed order
+ */
+BOOLEAN
+IsLaneReversed (
+ IN IIO_BIFURCATION_DATA_ENTRY_EX *BifurcationTable
+ )
+{
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ //
+ // This data should be read from platform specific config - but for now we don't have this information there
+ // Let this be a temp. workaround until the update of biffurcation config.
+ //
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ if (GuidHob == NULL) {
+ ASSERT (FALSE);
+ return FALSE;
+ }
+
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+ switch (PlatformInfo->BoardId) {
+ case TypeCooperCityRP:
+ //
+ // For CooperCityRP lane reversed are:
+ // - on even sockets: on IOU4
+ // - on odd sockets: on IOU1
+ //
+ return ((BifurcationTable->Socket&1) == 1 && BifurcationTable->IouNumber == Iio_Iou1);
+ default:
+ //
+ // Let's assume that WilsonCity config is a default one.
+ //
+ //
+ // This is version for ICX (default)
+ //
+ return (BifurcationTable->Socket == 1 &&
+ (BifurcationTable->IouNumber == Iio_Iou0 || BifurcationTable->IouNumber == Iio_Iou4));
+ }
+}
+
+/**
+ Read the bifurcation info stored at I/O Expander (PCA9554) which BIOS
+ can get through Smbus.
+ To communicate with IO Expander first MUX PCA9545 needs to be configured.
+
+ The bifurcation encoding is [3:0]:
+ BW5_BIFURCATE_x4x4x4x4 1 0 0 0
+ BW5_BIFURCATE_x4x4xxx8 1 0 0 1 Lanes to port ACD on board
+ BW5_BIFURCATE_xxx8x4x4 1 0 1 0 Lanes to port ABC on board
+ BW5_BIFURCATE_xxx8xxx8 1 0 1 1 Lanes to port AC on board
+ No BW5 1 1 x x
+
+ @param IioGlobalData - Pointer to IioGlobals
+ @param BroadwayTablePtr - Pointer to BroadwayTable
+
+ @retval IIO_BIFURCATE_xxxxxxxx BW communication failure
+ @retval IIO_BIFURCATE_x4x4x4x4 Requested bifurcation x4x4x4x4
+ @retval IIO_BIFURCATE_x4x4xxx8 Requested bifurcation x4x4xxx8
+ @retval IIO_BIFURCATE_xxx8x4x4 Requested bifurcation xxx8x4x4
+ @retval IIO_BIFURCATE_xxx8xxx8 Requested bifurcation xxx8xxx8
+**/
+UINT8
+GetBw5Bifurcation (
+ IN IIO_BIFURCATION_DATA_ENTRY_EX *BifurcationTable,
+ IN IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi
+ )
+{
+ EFI_STATUS Status;
+ EFI_SMBUS_DEVICE_ADDRESS SmbDevAddr;
+ EFI_PEI_SMBUS2_PPI *SmbPpi = NULL;
+ UINT16 SmbData = 0;
+ UINT8 SmbByteData = 0;
+ UINT8 RetryCount;
+ UINTN SmbLen = 2;
+ UINTN SmbByteLen = 1;
+
+ if (BifurcationTable->ExtnCardSMBusAddress == SMB_ADDR_MAX ) {
+ return IIO_BIFURCATE_xxxxxxxx;
+ }
+
+ Status = PeiServicesLocatePpi (&gEfiPeiSmbus2PpiGuid, 0, NULL, &SmbPpi);
+
+ // Initialize Bw5Id to not present
+
+ if (Status != EFI_SUCCESS || SmbPpi == NULL) {
+ DEBUG ((DEBUG_ERROR, "[Iio] Get SMBus protocol error %x\n", Status));
+ return IIO_BIFURCATE_xxxxxxxx;
+ }
+
+ for (RetryCount = 0; RetryCount < NUM_OF_RETRIES; RetryCount++) {
+
+ //
+ // Configure through the smbus MUX PCA9545 to start communicate to GPIO expander
+ //
+ SmbDevAddr.SmbusDeviceAddress = BifurcationTable->MuxSMBusAddress >> 1;
+ SmbByteData = BifurcationTable->MuxSMBusChannel;
+ Status = SmbPpi->Execute (SmbPpi, SmbDevAddr, 0, EfiSmbusSendByte, FALSE, &SmbByteLen, &SmbByteData);
+ if (EFI_ERROR (Status)) {
+ continue;
+ }
+
+ //
+ // Read the current I/O pins configuration for Port0
+ //
+ SmbDevAddr.SmbusDeviceAddress = BifurcationTable->ExtnCardSMBusAddress >> 1;
+ Status = SmbPpi->Execute (SmbPpi, SmbDevAddr, BW4_CONFIG_OFFSET, EfiSmbusReadWord, FALSE, &SmbLen, &SmbData);
+ if (!EFI_ERROR (Status)) {
+ //
+ // Configure the direction of I/O pins for Port0/Port1 as Input.
+ //
+ SmbData = SmbData | BW5_CONFIG_REG_MASK;
+ Status = SmbPpi->Execute (SmbPpi, SmbDevAddr, BW4_CONFIG_OFFSET, EfiSmbusWriteWord, FALSE, &SmbLen, &SmbData);
+ if (!EFI_ERROR (Status)) {
+ //
+ // Read Input Port0/Port1 register to identify BW5 Id
+ //
+ Status = SmbPpi->Execute (SmbPpi, SmbDevAddr, BW4_DATA_OFFSET, EfiSmbusReadWord, FALSE, &SmbLen, &SmbData);
+ if (!EFI_ERROR (Status)){
+ //
+ // Mask the Input Port0/1 register data [15:0] to get BW5 ID [3:0].
+ //
+ // The bifurcation encoding is [3:0]:
+ // BW5_BIFURCATE_x4x4x4x4 1 0 0 0
+ // BW5_BIFURCATE_x4x4xxx8 1 0 0 1 Lanes to port ACD on board
+ // BW5_BIFURCATE_xxx8x4x4 1 0 1 0 Lanes to port ABC on board
+ // BW5_BIFURCATE_xxx8xxx8 1 0 1 1 Lanes to port AC on board
+ // No BW5 1 1 x x
+ //
+ switch (SmbData & 0xF) {
+ case 0x8:
+ return IIO_BIFURCATE_x4x4x4x4;
+ break;
+ case 0x9:
+ if (IsLaneReversed (BifurcationTable)) {
+ return IIO_BIFURCATE_xxx8x4x4;
+ } else {
+ return IIO_BIFURCATE_x4x4xxx8;
+ }
+ break;
+ case 0xA:
+ if (IsLaneReversed (BifurcationTable)) {
+ return IIO_BIFURCATE_x4x4xxx8;
+ } else {
+ return IIO_BIFURCATE_xxx8x4x4;
+ }
+ break;
+ case 0xB:
+ return IIO_BIFURCATE_xxx8xxx8;
+ break;
+ default:
+ return IIO_BIFURCATE_xxxxxxxx;
+ break;
+ }
+ } // Read Port0
+ } // Configure Port0
+ } // Read Port0 Config
+
+ //
+ // Configure through the smbus MUX PCA9545 to end communicate to GPIO expander
+ //
+ SmbDevAddr.SmbusDeviceAddress = BifurcationTable->MuxSMBusAddress >> 1;
+ SmbByteData &= ~BifurcationTable->MuxSMBusChannel;
+ Status = SmbPpi->Execute (SmbPpi, SmbDevAddr, 0, EfiSmbusSendByte, FALSE, &SmbByteLen, &SmbByteData);
+ if (EFI_ERROR (Status)) {
+ continue;
+ }
+ } //RetryCount
+
+ return IIO_BIFURCATE_xxxxxxxx;
+}
+
+/**
+ Set bifurcation base of default settings and Ext. Card presence
+ (detected by BW)
+
+ @param[in] IioGlobalData Pointer to Iio Globals.
+ @param[in] BifurcationTable Bifurcation configuration settings
+ @param[in] BifurcationEntries Number of bif. table entries
+ @param[in] ExtCardPresent Table with results of Ext. Card detection
+**/
+VOID
+DetectExtCards (
+ IN IIO_GLOBALS *IioGlobalData,
+ IN IIO_BIFURCATION_DATA_ENTRY_EX *BifurcationTable,
+ IN UINT8 BifurcationEntries,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi,
+ OUT BOOLEAN ExtCardPresent[MAX_SOCKET][MAX_IOU_PER_SOCKET]
+ )
+{
+ UINT8 Index;
+ UINT8 BwBifurcation;
+ UINT8 Socket;
+ UINT8 Iou;
+
+ //
+ // Try to communicate with Ext.Card which can request custom bifurcation on the stack
+ //
+ for (Index = 0; Index < BifurcationEntries; Index++){
+
+ Socket = BifurcationTable[Index].Socket;
+ Iou = BifurcationTable[Index].IouNumber;
+
+ ExtCardPresent[Socket][Iou] = FALSE; // by default
+
+ if (BifurcationTable[Index].ExtnCardSMBusAddress != SMB_ADDR_MAX) {
+ //
+ // ExtCard can be supported at this stack - try to detect it
+ //
+ BwBifurcation = GetBw5Bifurcation (&BifurcationTable[Index], DynamicSiLibraryPpi);
+ if (BwBifurcation != IIO_BIFURCATE_xxxxxxxx) {
+ //
+ // Ext. Card is detected on this IOU
+ //
+ IIO_D_UBALOG ("[%d.%d] Ext. Card detected; bif=%d\n", Socket, Iou+1, BwBifurcation);
+ ExtCardPresent[Socket][Iou] = TRUE;
+ }
+ }
+
+ //
+ // Set custom bifurcation requested by Ext. Card
+ //
+ if (IioGlobalData->SetupData.ConfigIOU[Socket][Iou] == IIO_BIFURCATE_AUTO) {
+ //
+ // There are no overrides for this IOU
+ //
+ if (ExtCardPresent[Socket][Iou]) {
+ //
+ // Set bifurcation requested by Ext. Card
+ //
+ IioGlobalData->SetupData.ConfigIOU[Socket][Iou] = BwBifurcation;
+ } else {
+ //
+ // Set the default bifurcation for this IOU
+ //
+ IioGlobalData->SetupData.ConfigIOU[Socket][Iou] = BifurcationTable[Index].Bifurcation;
+ }
+ }
+
+ IIO_D_UBADBG ("[%d.%d] final bifurcation = %X\n", Socket, Iou+1, IioGlobalData->SetupData.ConfigIOU[Socket][Iou]);
+
+ } // for bifurcation table entry
+}
+
+/**
+ Dump prepared configuration to log.
+
+ @param[in] SetupData Pointer to SetupData structure
+**/
+VOID
+DumpConfiguration (
+ IN IIO_CONFIG *SetupData,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi
+ )
+{
+ UINT8 IioIndex;
+ UINT8 StackIndex = 0;
+ UINT8 Iou;
+ UINT8 PortIndex = 0;
+ UINT8 PortInStackIndex = 0;
+ UINT16 TotalPortIndex =0;
+
+ for (IioIndex = 0; IioIndex < MAX_SOCKET ; IioIndex++) {
+
+ if (!DynamicSiLibraryPpi->IioIsSocketPresent (IioIndex)) {
+ //
+ // Skips sockets which are not present on the platform
+ //
+ continue;
+ }
+ for (StackIndex = 0; StackIndex < DynamicSiLibraryPpi->GetMaxStackNumPerSocket (); StackIndex++) {
+
+ if (DynamicSiLibraryPpi->IsDmiStack (StackIndex)) {
+ //
+ // Skip DMI stacks in dump
+ //
+ continue;
+ }
+
+ if (!DynamicSiLibraryPpi->IioIsStackPresent (IioIndex, StackIndex)) {
+ //
+ // Skips stacks which are not present on the platform
+ //
+ continue;
+ }
+
+ if (StackIndex >= MAX_IIO_STACK) {
+ break;
+ }
+ Iou = StackIndex - 1;
+
+ IIO_D_UBALOG("[%d.%d] Bifurcation = %X\n", IioIndex, StackIndex, SetupData->ConfigIOU[IioIndex][Iou]);
+ IIO_D_UBALOG (" [ IDX ], PortHide, SlotImpl, SlotNumber, HotPlug, Vpp, Interlock\n");
+
+ for (PortInStackIndex = 0; PortInStackIndex < DynamicSiLibraryPpi->GetMaxPortNumPerStack (StackIndex); PortInStackIndex++) {
+ PortIndex = DynamicSiLibraryPpi->GetPortIndexbyStack (StackIndex, PortInStackIndex);
+ TotalPortIndex = (IioIndex * DynamicSiLibraryPpi->GetMaxPortNumPerSocket ()) + PortIndex;
+ IIO_D_UBALOG (" [%d p%02d] %2d | %2d | %3d | %3d | 0x%02x | %2d \n",
+ IioIndex, PortIndex,
+ SetupData->PEXPHIDE[TotalPortIndex],
+ SetupData->SLOTIMP[TotalPortIndex],
+ SetupData->SLOTPSP[TotalPortIndex],
+ SetupData->SLOTHPCAP[TotalPortIndex],
+ SetupData->VppAddress[TotalPortIndex] | SetupData->VppPort[TotalPortIndex],
+ SetupData->SLOTEIP[TotalPortIndex]);
+ } // foreach PortInStack
+ } //foreach StackIndex
+ } // foreach IioIndex
+}
+
+/**
+ This function prepare the data for silicon initialization based on
+ bifurcations and slots table
+
+ This function is for tables in version PLATFORM_IIO_CONFIG_UPDATE_VERSION = 2
+
+ @param[in] IioGlobalData IIO Global data structure
+ @param[in] IioConfigTable
+ */
+VOID
+IioPortBifurcationInitVer2 (
+ IN IIO_GLOBALS *IioGlobalData,
+ IN PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX IioConfigTable,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi
+ )
+{
+ IIO_BIFURCATION_DATA_ENTRY_EX *BifurcationTableEx;
+ UINT8 BifurcationEntries;
+ IIO_SLOT_CONFIG_DATA_ENTRY_EX *SlotTableEx;
+ UINT8 SlotEntries;
+ BOOLEAN ExtCardDetected[MAX_SOCKET][MAX_IOU_PER_SOCKET];
+
+ //
+ // Init bifurcation and slots tables
+ //
+ BifurcationTableEx = IioConfigTable.IioBifurcationTablePtr;
+ BifurcationEntries = (UINT8) (IioConfigTable.IioBifurcationTableSize / sizeof (IIO_BIFURCATION_DATA_ENTRY_EX));
+ SlotTableEx = IioConfigTable.IioSlotTablePtr;
+ SlotEntries = (UINT8) (IioConfigTable.IioSlotTableSize / sizeof (IIO_SLOT_CONFIG_DATA_ENTRY_EX));
+
+ //
+ // Set the bifurcations for each IOU:
+ // - if any override is set in setup menu - stay bifurcation not changed
+ // - next check if QAT is detected (this is LBG specific) - QAT requires special bifurcation
+ // - next try to detect ext. cards with BW bifurcation
+ // - at the end set default bifurcation if no other options wer applied before
+
+ if (DynamicSiLibraryPpi->IsCpuAndRevision (CPU_ICXSP, REV_ALL) ||
+ DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CPX, REV_ALL) ||
+ DynamicSiLibraryPpi->IsCpuAndRevision (CPU_SKX, REV_ALL) ||
+ DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CLX, REV_ALL)
+ ) {
+ //
+ // This is important only for programs with LBG PCH
+ //
+ CheckQatBifurcationOverrides (IioGlobalData, DynamicSiLibraryPpi);
+ }
+ DetectExtCards (IioGlobalData, BifurcationTableEx, BifurcationEntries, DynamicSiLibraryPpi, ExtCardDetected);
+
+ //
+ // Set each rootport settings based on slots table
+ //
+ ConfigureSlots (IioGlobalData, SlotTableEx, SlotEntries, DynamicSiLibraryPpi, ExtCardDetected);
+
+ //
+ // Configuration is ready - dump the config to log
+ //
+ DumpConfiguration (&IioGlobalData->SetupData, DynamicSiLibraryPpi);
+}
+
+/**
+
+ Program the IIO_GLOBALS data structure with OEM IIO init values for SLOTs and Bifurcation.
+
+ @param mSB - pointer to this protocol
+ @param IioUds - Pointer to the IIO UDS data structure.
+
+ @retval EFI_SUCCESS
+**/
+VOID
+IioPortBifurcationInitCallback (
+ IN IIO_GLOBALS *IioGlobalData
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX IioConfigTable;
+ UINTN TableSize;
+
+ //
+ // Locate PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX
+ //
+ Status = PeiServicesLocatePpi (&gUbaConfigDatabasePpiGuid, 0, NULL, &UbaConfigPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT (FALSE);
+ return;
+ }
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ TableSize = sizeof (IioConfigTable);
+ Status = UbaConfigPpi->GetData (UbaConfigPpi, &gPlatformIioConfigDataGuid, &IioConfigTable, &TableSize);
+ if (EFI_ERROR (Status)) {
+ ASSERT (FALSE);
+ return;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+
+ //
+ // Call the right version of bifurcation init procedure
+ //
+ switch (IioConfigTable.Version) {
+ case PLATFORM_IIO_CONFIG_UPDATE_VERSION_2:
+ IioPortBifurcationInitVer2 (IioGlobalData, IioConfigTable, DynamicSiLibraryPpi);
+ break;
+ case PLATFORM_IIO_CONFIG_UPDATE_VERSION:
+ IioPortBifurcationInitVer1 (IioGlobalData);
+ break;
+ default:
+ ASSERT (FALSE);
+ break;
+ }
+}
+
+IIO_PORT_BIFURCATION_INIT_TABLE IioPortBifurcationInitTable =
+ {
+ IIO_PORT_BIFURCATION_INIT_SIGNATURE,
+ IIO_PORT_BIFURCATION_INIT_VERSION,
+ IioPortBifurcationInitCallback
+ };
+
+EFI_STATUS
+InstallIioPortBifurcationInitData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+ )
+{
+ return UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gIioPortBifurcationInitDataGuid,
+ &IioPortBifurcationInitTable,
+ sizeof (IioPortBifurcationInitTable)
+ );
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c
new file mode 100644
index 0000000000..8666717a8d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c
@@ -0,0 +1,1356 @@
+/** @file
+ Install Iio Port Bifurcation Init Data.
+ This is depreciated version of the code used for PLATFORM_IIO_CONFIG_UPDATE_VERSION == 1
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiCommonBoardInitLib.h"
+#include <PiPei.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Guid/SetupVariable.h>
+#include <Guid/PlatformInfo.h>
+#include <Ppi/Smbus2.h>
+#include <GpioInitData.h>
+#include <Upi/KtiHost.h>
+#include "IioBifurcationSlotTable.h"
+#include <Library/GpioLib.h>
+#include <Library/UbaPlatLib.h>
+#include <Library/HobLib.h>
+#include <Library/UbaIioPortBifurcationInitLib.h>
+#include <Library/PchMultiPchBase.h>
+#include <CpuAndRevisionDefines.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+/**
+ Function returns the board ID from running HW
+
+ @return BoardId
+**/
+UINT8
+EFIAPI
+SystemBoardIdValue (
+ VOID
+ )
+{
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *mPlatformInfo;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return TypePlatformUnknown;
+ }
+ mPlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+ return mPlatformInfo->BoardId;
+}
+
+
+/**
+ DVP/Neon City platform support BW5 bifurcation card in socket0 and socket1
+ Lightning Ridge platform support BW5 bifurcation card in socket1, socket2 and socket3
+ The bifurcation info stored at I/O Expander (PCA9555) which BIOS
+ can get through Smbus read.
+
+ PCA9555 SMBus slave Address: 0x4C
+
+----------------------------------
+ Neon
+----------------------------------
+ data0 = BW5 socket0 iio2
+ data1 = BW5 socket1 iio0
+ data2 = BW5 socket1 iio3
+----------------------------------
+ Lighting Ridge
+----------------------------------
+ data1 = BW5 socket1 iio2
+ data2 = BW5 socket2 iio1
+ data3 = BW5 socket3 iio3
+
+ The bifurcation encoding is [2:0]:
+ BW5_BIFURCATE_x4x4x4x4 x 0 0 0
+ BW5_BIFURCATE_xxx8x4x4 x 0 0 1
+ BW5_BIFURCATE_x4x4xxx8 x 0 1 0
+ BW5_BIFURCATE_xxx8xxx8 x 0 1 1
+ No BW5 x 1 1 1
+
+ @param IioGlobalData - Pointer to IioGlobals
+ @param Bw5Id - Pointer to BW5ID
+
+ @retval None
+
+**/
+VOID
+GetBw5Id (
+ IN IIO_GLOBALS *IioGlobalData,
+ IN OUT BW5_BIFURCATION_DATA_STRUCT *Bw5Id
+ )
+{
+ CONST EFI_PEI_SERVICES **PeiServices;
+ EFI_STATUS Status;
+ EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
+ EFI_SMBUS_DEVICE_COMMAND SmbusCommand;
+ EFI_PEI_SMBUS2_PPI *Smbus = NULL;
+ UINT16 SmbusData = 0;
+ UINT8 RetryCount;
+ UINTN SmbusLength = 2;
+ UINT8 Index;
+
+ PeiServices = GetPeiServicesTablePointer ();
+
+ Status = (**PeiServices).LocatePpi (
+ PeiServices,
+ &gEfiPeiSmbus2PpiGuid,
+ 0,
+ NULL,
+ &Smbus
+ );
+
+ // Initialize Bw5Id to not present
+ for (Index = 0; Index < BW5_CARDS_PRESENT; Index++){
+ Bw5Id[Index].Data = BW5_CARD_NOT_PRESENT;
+ }
+
+ if (Status != EFI_SUCCESS || Smbus == NULL) {
+ DEBUG ((EFI_D_INFO, "!!!!Get SMBus protocol error %x\n", Status));
+ } else {
+
+ // Read Socket 0 HP Controller
+ SmbusDeviceAddress.SmbusDeviceAddress = (BW5_SMBUS_ADDRESS >> 1);
+
+ for (RetryCount = 0; RetryCount < NUM_OF_RETRIES; RetryCount++) {
+ //
+ // Read the current I/O pins Config for Port0
+ //
+ SmbusCommand = PCA9555_COMMAND_CONFIG_PORT0_REG;
+ Status = Smbus->Execute (
+ Smbus,
+ SmbusDeviceAddress,
+ SmbusCommand,
+ EfiSmbusReadWord,
+ FALSE,
+ &SmbusLength,
+ &SmbusData
+ );
+ if (!EFI_ERROR(Status)) {
+ //
+ // Configure the direction of I/O pins for Port0/Port1 as Input.
+ //
+ SmbusData = SmbusData | BW5_CONFIG_REG_MASK;
+ Status = Smbus->Execute (
+ Smbus,
+ SmbusDeviceAddress,
+ SmbusCommand,
+ EfiSmbusWriteWord,
+ FALSE,
+ &SmbusLength,
+ &SmbusData
+ );
+ if (!EFI_ERROR(Status)) {
+ //
+ // Read Input Port0/Port1 register to identify BW5 Id
+ //
+ SmbusCommand = PCA9555_COMMAND_INPUT_PORT0_REG;
+ Status = Smbus->Execute( Smbus,
+ SmbusDeviceAddress,
+ SmbusCommand,
+ EfiSmbusReadWord,
+ FALSE,
+ &SmbusLength,
+ &SmbusData );
+ if (!EFI_ERROR(Status)){
+ DEBUG ((EFI_D_INFO, "SmbusData Port0/1 %x\n", SmbusData));
+ //
+ // Mask the Input Port0/1 register data [15:0] to get BW5 ID.
+ //
+ Bw5Id[0].Data = (SmbusData & BW5_0_ID_MASK);
+ Bw5Id[1].Data = (SmbusData & BW5_1_ID_MASK) >> 4;
+ Bw5Id[2].Data = (SmbusData & BW5_2_ID_MASK) >> 8;
+ Bw5Id[3].Data = (SmbusData & BW5_3_ID_MASK) >> 12;
+ break; // Break Loop if read was successfully.
+ } // Read Port0
+ } // Configure Port0
+ } // Read Port0 Config
+ } //RetryCount
+ } // (Status != EFI_SUCCESS || Smbus == NULL)
+
+ return;
+}
+
+EFI_STATUS
+InternalPlatformGetSlotTableData2 (
+ IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
+ IN OUT UINT8 *IOU0Setting,
+ IN OUT UINT8 *FlagValue,
+ IN OUT UINT8 *IOU2Setting,
+ IN UINT8 SkuPersonalityType
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_SLOT_UPDATE_TABLE2 IioSlotTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ TableSize = sizeof(IioSlotTable);
+ if ((SkuPersonalityType == 1) || (SkuPersonalityType == 3)) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid2_1,
+ &IioSlotTable,
+ &TableSize
+ );
+ } else {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid2,
+ &IioSlotTable,
+ &TableSize
+ );
+ }
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioSlotTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE);
+ ASSERT (IioSlotTable.Version == PLATFORM_SLOT_UPDATE_VERSION);
+
+ *BroadwayTable = IioSlotTable.BroadwayTablePtr;
+ *IOU0Setting = IioSlotTable.GetIOU0Setting (*IOU0Setting);
+ *FlagValue = IioSlotTable.FlagValue;
+ *IOU2Setting = IioSlotTable.GetIOU2Setting (SkuPersonalityType, *IOU2Setting);
+
+ return Status;
+}
+
+EFI_STATUS
+InternalPlatformIioConfigInit2 (
+ IN UINT8 SkuPersonalityType,
+ IN OUT IIO_BIFURCATION_DATA_ENTRY **BifurcationTable,
+ IN OUT UINT8 *BifurcationEntries,
+ IN OUT IIO_SLOT_CONFIG_DATA_ENTRY **SlotTable,
+ IN OUT UINT8 *SlotEntries
+)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE IioConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ TableSize = sizeof(IioConfigTable);
+ if (SkuPersonalityType == 1) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_1,
+ &IioConfigTable,
+ &TableSize
+ );
+ } else if (SkuPersonalityType == 2) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_2,
+ &IioConfigTable,
+ &TableSize
+ );
+ } else if (SkuPersonalityType == 3) {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_3,
+ &IioConfigTable,
+ &TableSize
+ );
+ } else {
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &IioConfigTable,
+ &TableSize
+ );
+ }
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+ ASSERT (IioConfigTable.Version == PLATFORM_IIO_CONFIG_UPDATE_VERSION);
+
+ *BifurcationTable = IioConfigTable.IioBifurcationTablePtr;
+ *BifurcationEntries = (UINT8) (IioConfigTable.IioBifurcationTableSize / sizeof(IIO_BIFURCATION_DATA_ENTRY));
+
+ *SlotTable = IioConfigTable.IioSlotTablePtr;
+ *SlotEntries = (UINT8) (IioConfigTable.IioSlotTableSize / sizeof(IIO_SLOT_CONFIG_DATA_ENTRY));
+
+ return Status;
+}
+
+VOID
+EnableHotPlug_SKX (
+ IN OUT IIO_GLOBALS *IioGlobalData,
+ IN UINT8 Port,
+ IN UINT8 VppPort,
+ IN UINT8 VppAddress,
+ IN UINT8 PortOwnership
+ )
+{
+ IioGlobalData->SetupData.SLOTHPCAP[Port]= ENABLE;
+ IioGlobalData->SetupData.SLOTAIP[Port] = ENABLE; // Attention Indicator Present
+ IioGlobalData->SetupData.SLOTPIP[Port] = ENABLE; // Power Indicator Present
+ IioGlobalData->SetupData.SLOTMRLSP[Port]= ENABLE; // MRL Sensor Present
+ IioGlobalData->SetupData.SLOTABP[Port] = ENABLE; // Attention Button Present
+ IioGlobalData->SetupData.SLOTPCP[Port] = ENABLE; // Power Controlled Present
+
+ if (PortOwnership == PCIEAIC_OCL_OWNERSHIP){
+ IioGlobalData->SetupData.SLOTAIP[Port] = DISABLE; // Attention Indicator Present
+ IioGlobalData->SetupData.SLOTPIP[Port] = DISABLE; // Power Indicator Present
+ }
+ if (PortOwnership == VMD_OWNERSHIP){
+ IioGlobalData->SetupData.SLOTABP[Port] = DISABLE;
+ IioGlobalData->SetupData.SLOTPCP[Port] = DISABLE;
+ IioGlobalData->SetupData.SLOTMRLSP[Port]= DISABLE;
+ }
+ //
+ // Set SLTCAP settings based on VMD/PCIe SSD Ownership
+ //
+ if ((PortOwnership == PCIEAIC_OCL_OWNERSHIP) ||
+ (PortOwnership == VMD_OWNERSHIP)){
+ IioGlobalData->SetupData.SLOTHPSUP[Port]= ENABLE; // HotPlug Surprise
+ }
+
+ if (VppPort!= VPP_PORT_MAX) {
+ IioGlobalData->SetupData.VppEnabled[Port]= TRUE;
+ IioGlobalData->SetupData.VppPort[Port]= VppPort;
+ IioGlobalData->SetupData.VppAddress[Port] = VppAddress;
+ } else {
+ DEBUG((EFI_D_ERROR, "PCIE HOT Plug. Missing VPP values on slot table\n"));
+ }
+}
+
+/**
+ Auto determine which PCIe Root port to be hidden if its
+ lanes are assigned to its preceding root port...use the
+ Setup option variable of ConfigIOU to determine which ports
+ are to be hidden on each IOU for corresponding IIO
+
+ @param IOUx - IOUx Index
+ @param IioIndex - Index to Iio
+ @param IioGlobalData Pointer to Iio Globals.
+**/
+VOID
+CalculatePEXPHideFromIouBif_SKX (
+ IN UINT8 Iou,
+ IN UINT8 IioIndex,
+ IN OUT IIO_GLOBALS *IioGlobalData
+ )
+{
+ UINT8 *PXPHide, *HidePEXPMenu;
+ UINT8 CurrentIOUConfigValue;
+ UINT8 PXPOffset;
+ UINT8 MaxPortNumberPerSocket;
+
+ if (IioIndex >= MaxIIO || Iou >= NELEMENTS (IioGlobalData->SetupData.ConfigIOU[IioIndex])) {
+
+ DEBUG ((DEBUG_ERROR, "[IIO] ERROR: %a: IIO instance %d or IOU %d out of range", __FUNCTION__, IioIndex, Iou));
+ ASSERT (FALSE);
+ return;
+ }
+ PXPHide = IioGlobalData->SetupData.PEXPHIDE;
+ HidePEXPMenu = IioGlobalData->SetupData.HidePEXPMenu;
+ MaxPortNumberPerSocket = IioGlobalData->IioVar.IioOutData.MaxPciePortNumberPerSocket[IioIndex];
+
+ PXPOffset = IioIndex * MaxPortNumberPerSocket;
+
+ CurrentIOUConfigValue = IioGlobalData->SetupData.ConfigIOU[IioIndex][Iou];
+ switch (Iou) {
+ case Iio_Iou0:
+ PXPOffset += PORT_1A_INDEX;
+ break;
+ case Iio_Iou1:
+ PXPOffset += PORT_2A_INDEX;
+ break;
+ case Iio_Iou2:
+ PXPOffset += PORT_3A_INDEX;
+ break;
+ case Iio_Iou3:
+ PXPOffset += PORT_4A_INDEX;
+ break;
+ case Iio_Iou4:
+ PXPOffset += PORT_5A_INDEX;
+ break;
+ default:
+ break;
+ }
+ switch (CurrentIOUConfigValue) {
+ case IIO_BIFURCATE_xxxxxxxx:
+ PXPHide[PXPOffset + Iio_PortA] = HIDE; // hide A
+ PXPHide[PXPOffset + Iio_PortB] = HIDE; // hide B
+ PXPHide[PXPOffset + Iio_PortC] = HIDE; // hide C
+ PXPHide[PXPOffset + Iio_PortD] = HIDE; // hide D
+ HidePEXPMenu[PXPOffset + Iio_PortA] = HIDE; // hide the Setup menu for A
+ HidePEXPMenu[PXPOffset + Iio_PortB] = HIDE; // hide the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortC] = HIDE; // hide the Setup menu for C
+ HidePEXPMenu[PXPOffset + Iio_PortD] = HIDE; // hide the Setup menu for D
+ break;
+ case IIO_BIFURCATE_x4x4xxx8:
+ PXPHide[PXPOffset + Iio_PortA] = NOT_HIDE; // show A
+ PXPHide[PXPOffset + Iio_PortB] = HIDE; // hide B
+ PXPHide[PXPOffset + Iio_PortC] = NOT_HIDE; // show C
+ PXPHide[PXPOffset + Iio_PortD] = NOT_HIDE; // show D
+ HidePEXPMenu[PXPOffset + Iio_PortA] = NOT_HIDE; // show the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortB] = HIDE; // hide the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortC] = NOT_HIDE; // show the Setup menu for D
+ HidePEXPMenu[PXPOffset + Iio_PortD] = NOT_HIDE; // show the Setup menu for B
+ break;
+ case IIO_BIFURCATE_xxx8x4x4:
+ PXPHide[PXPOffset + Iio_PortA] = NOT_HIDE; // show A
+ PXPHide[PXPOffset + Iio_PortB] = NOT_HIDE; // show B
+ PXPHide[PXPOffset + Iio_PortC] = NOT_HIDE; // show C
+ PXPHide[PXPOffset + Iio_PortD] = HIDE; // hide port D
+ HidePEXPMenu[PXPOffset + Iio_PortA] = NOT_HIDE; // show the Setup menu for A
+ HidePEXPMenu[PXPOffset + Iio_PortB] = NOT_HIDE; // show the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortC] = NOT_HIDE; // show the Setup menu for C
+ HidePEXPMenu[PXPOffset + Iio_PortD] = HIDE; // hide the Setup menu for D
+ break;
+ case IIO_BIFURCATE_xxx8xxx8:
+ PXPHide[PXPOffset + Iio_PortA] = NOT_HIDE; // show A
+ PXPHide[PXPOffset + Iio_PortB] = HIDE; // hide B
+ PXPHide[PXPOffset + Iio_PortC] = NOT_HIDE; // show C
+ PXPHide[PXPOffset + Iio_PortD] = HIDE; // hide D
+ HidePEXPMenu[PXPOffset + Iio_PortA] = NOT_HIDE; // show the Setup menu for A
+ HidePEXPMenu[PXPOffset + Iio_PortB] = HIDE; // hide the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortC] = NOT_HIDE; // show the Setup menu for C
+ HidePEXPMenu[PXPOffset + Iio_PortD] = HIDE; // hide the Setup menu for D
+ break;
+ case IIO_BIFURCATE_xxxxxx16:
+ PXPHide[PXPOffset + Iio_PortA] = NOT_HIDE; // show A
+ PXPHide[PXPOffset + Iio_PortB] = HIDE; // hide B
+ PXPHide[PXPOffset + Iio_PortC] = HIDE; // hide C
+ PXPHide[PXPOffset + Iio_PortD] = HIDE; // hide D
+ HidePEXPMenu[PXPOffset + Iio_PortA] = NOT_HIDE; // show the Setup menu for A
+ HidePEXPMenu[PXPOffset + Iio_PortB] = HIDE; // hide the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortC] = HIDE; // hide the Setup menu for C
+ HidePEXPMenu[PXPOffset + Iio_PortD] = HIDE; // hide the Setup menu for D
+ break;
+ default:
+ PXPHide[PXPOffset + Iio_PortA] = NOT_HIDE; // show A
+ PXPHide[PXPOffset + Iio_PortB] = NOT_HIDE; // show B
+ PXPHide[PXPOffset + Iio_PortC] = NOT_HIDE; // show C
+ PXPHide[PXPOffset + Iio_PortD] = NOT_HIDE; // show port D
+ HidePEXPMenu[PXPOffset + Iio_PortA] = NOT_HIDE; // show the Setup menu for A
+ HidePEXPMenu[PXPOffset + Iio_PortB] = NOT_HIDE; // show the Setup menu for B
+ HidePEXPMenu[PXPOffset + Iio_PortC] = NOT_HIDE; // show the Setup menu for C
+ HidePEXPMenu[PXPOffset + Iio_PortD] = NOT_HIDE; // show the Setup menu for D
+ break;
+ }
+ //
+ // Change PEXPHIDE setting to hide all PCIe port of a IOU if IIO_BIFURCATE_xxxxxxxx is set.
+ // And set ConfigIOU/ConfigMCPx to default bifucation control value
+ // Bifurcation_Control[2:0] in IOU Bifurcation Control (PCIE_IOU_BIF_CTRL) register should be 000b ~ 100b.
+ //
+ if (CurrentIOUConfigValue == IIO_BIFURCATE_xxxxxxxx) {
+
+ IioGlobalData->SetupData.ConfigIOU[IioIndex][Iou] = IIO_BIFURCATE_x4x4x4x4;
+ }
+}
+
+VOID
+DumpPort_SKX(
+ IIO_GLOBALS *IioGlobalData,
+ UINT8 Port,
+ UINT8 NumberOfPorts
+)
+{
+ UINT8 Index;
+ DEBUG((EFI_D_INFO, "IDX, Port Hide, Slot Impl, Slot Number, HotPlug, PcieSSD, VppPort, VppAddress, Interlock\n"));
+ for (Index = Port; Index < (Port + NumberOfPorts); Index++ ) {
+ DEBUG((EFI_D_INFO, "%3d| %2d | %2d | %3d | %3d | %3d | 0x%02x | 0x%02x | %2d \n", \
+ Index, \
+ IioGlobalData->SetupData.PEXPHIDE[Index], \
+ IioGlobalData->SetupData.SLOTIMP[Index], \
+ IioGlobalData->SetupData.SLOTPSP[Index], \
+ IioGlobalData->SetupData.SLOTHPCAP[Index], \
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[Index], \
+ IioGlobalData->SetupData.VppPort[Index], \
+ IioGlobalData->SetupData.VppAddress[Index],\
+ IioGlobalData->SetupData.SLOTEIP[Index]));
+ }
+}
+
+
+/// Dump iio configuration. Dump the current IIO configuration to the serial
+/// log.
+VOID
+DumpIioConfiguration_SKX(
+ IN UINT8 iio,
+ IN IIO_GLOBALS *IioGlobalData
+)
+{
+ UINT8 Iou;
+ UINT8 PortIndex;
+ UINT8 MaxPortNumberPerSocket;
+ UINT8 Bifurcation;
+ UINT8 IouPorts;
+
+ MaxPortNumberPerSocket = IioGlobalData->IioVar.IioOutData.MaxPciePortNumberPerSocket[iio];
+ PortIndex = iio * MaxPortNumberPerSocket;
+ /// First dump the socket number;
+ DEBUG((EFI_D_INFO, "Socket number: %d \n", iio));
+
+ /// Dump DMI configuration:
+ if ((iio == 0) && (PortIndex == 0)){
+ DEBUG((EFI_D_INFO, "PORT 0: DMI Port\n"));
+ } else {
+ DEBUG((EFI_D_INFO, "PORT 0: DMI Port working as PCIE\n"));
+ DumpPort_SKX(IioGlobalData, PortIndex, 1);
+ }
+ IouPorts=4;
+ /// Dump IOU bifurcations:
+ for (Iou = Iio_Iou0; Iou< Iio_IouMax; Iou ++) {
+ /// Reset port index.
+ PortIndex = iio * MaxPortNumberPerSocket;
+ // Get the bifurcation
+ switch (Iou) {
+ case Iio_Iou0:
+ Bifurcation = IioGlobalData->SetupData.ConfigIOU[iio][0];
+ PortIndex += PORT_1A_INDEX;
+ DEBUG((EFI_D_INFO, "IUO0: Root Port 1, Bifurcation: %d\n", Bifurcation));
+ break;
+ case Iio_Iou1:
+ Bifurcation = IioGlobalData->SetupData.ConfigIOU[iio][1];
+ PortIndex += PORT_2A_INDEX;
+ DEBUG((EFI_D_INFO, "IUO1: Root Port 2, Bifurcation: %d\n", Bifurcation));
+ break;
+ case Iio_Iou2:
+ Bifurcation = IioGlobalData->SetupData.ConfigIOU[iio][2];
+ PortIndex += PORT_3A_INDEX;
+ DEBUG((EFI_D_INFO, "IUO2: Root Port 3, Bifurcation: %d\n", Bifurcation));
+ break;
+ case Iio_Iou3:
+ Bifurcation = IioGlobalData->SetupData.ConfigIOU[iio][3];
+ PortIndex += PORT_4A_INDEX;
+ DEBUG((EFI_D_INFO, "IOU3, Bifurcation: %d\n", Bifurcation));
+ break;
+ case Iio_Iou4:
+ Bifurcation = IioGlobalData->SetupData.ConfigIOU[iio][4];
+ PortIndex += PORT_5A_INDEX;
+ DEBUG((EFI_D_INFO, "IOU4, Bifurcation: %d\n", Bifurcation));
+ break;
+ default:
+ DEBUG((EFI_D_INFO, "Iou no detected = %d",Iou));
+ break;
+ }
+ DumpPort_SKX(IioGlobalData, PortIndex, IouPorts);
+ }
+}
+
+
+VOID
+SystemHideIioPortsCommon_SKX(
+ IIO_GLOBALS *IioGlobalData,
+ UINT8 IioIndex
+ )
+{
+ CalculatePEXPHideFromIouBif_SKX(Iio_Iou0, IioIndex, IioGlobalData);
+ CalculatePEXPHideFromIouBif_SKX(Iio_Iou1, IioIndex, IioGlobalData);
+ CalculatePEXPHideFromIouBif_SKX(Iio_Iou2, IioIndex, IioGlobalData);
+ CalculatePEXPHideFromIouBif_SKX(Iio_Iou3, IioIndex, IioGlobalData);
+ CalculatePEXPHideFromIouBif_SKX(Iio_Iou4, IioIndex, IioGlobalData);
+ DumpIioConfiguration_SKX(IioIndex, IioGlobalData);
+}
+
+/**
+ Verify if and Slot should be implemented based on IOUX bifurcation settings.
+
+ @param IioGlobalData Pointer to Iio Globals.
+ @param Port - Port Index
+
+ @retval TRUE/FALSE to determine if an slot should be implemented or not
+ based on the IOUX bifurcation settings in case user want to do an
+ override and VMD is enabled.
+
+**/
+BOOLEAN
+SlotImplemented_SKX (
+ IN OUT IIO_GLOBALS *IioGlobalData,
+ IN UINT8 Port
+ )
+{
+ UINT8 IioIndex;
+ UINT8 MaxPortNumberPerSocket;
+ UINT8 PortIndex;
+ UINT8 Stack;
+ BOOLEAN SlotImp = FALSE;
+
+ MaxPortNumberPerSocket = IioGlobalData->IioVar.IioOutData.MaxPciePortNumberPerSocket[0];
+ IioIndex = Port/MaxPortNumberPerSocket;
+ PortIndex = (Port - (MaxPortNumberPerSocket * IioIndex));
+ Stack = IioGlobalData->IioVar.IioVData.StackPerPort[IioIndex][PortIndex];
+ DEBUG ((DEBUG_INFO, "SlotImplemented_SKX:IioIndex = %x, Stack = %x, Port = %x, PortIndex =%x\n", IioIndex, Stack, Port, PortIndex));
+
+ switch (Stack) {
+ case IIO_PSTACK0:
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][0] == IIO_BIFURCATE_x4x4x4x4) {
+ SlotImp = TRUE;
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][0] == IIO_BIFURCATE_x4x4xxx8){
+ if ((PortIndex == PORT_1D_INDEX) || (PortIndex == PORT_1C_INDEX) || (PortIndex == PORT_1A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][0] == IIO_BIFURCATE_xxx8x4x4) {
+ if ((PortIndex == PORT_1C_INDEX) || (PortIndex == PORT_1B_INDEX) || (PortIndex == PORT_1A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][0] == IIO_BIFURCATE_xxx8xxx8) {
+ if ((PortIndex == PORT_1C_INDEX) || (PortIndex == PORT_1A_INDEX)){
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][0] == IIO_BIFURCATE_xxxxxx16) {
+ if (PortIndex == PORT_1A_INDEX) {
+ SlotImp = TRUE;
+ }
+ }
+ break;
+ case IIO_PSTACK1:
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][1] == IIO_BIFURCATE_x4x4x4x4) {
+ SlotImp = TRUE;
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][1] == IIO_BIFURCATE_x4x4xxx8) {
+ if ((PortIndex == PORT_2D_INDEX) || (PortIndex == PORT_2C_INDEX) || (PortIndex == PORT_2A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][1] == IIO_BIFURCATE_xxx8x4x4){
+ if ((PortIndex == PORT_2C_INDEX) || (PortIndex == PORT_2B_INDEX) || (PortIndex == PORT_2A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][1] == IIO_BIFURCATE_xxx8xxx8) {
+ if ((PortIndex == PORT_2C_INDEX) || (PortIndex == PORT_2A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][1] == IIO_BIFURCATE_xxxxxx16) {
+ if (PortIndex == PORT_2A_INDEX) {
+ SlotImp = TRUE;
+ }
+ }
+ break;
+ case IIO_PSTACK2:
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][2] == IIO_BIFURCATE_x4x4x4x4){
+ SlotImp = TRUE;
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][2] == IIO_BIFURCATE_x4x4xxx8) {
+ if ((PortIndex == PORT_3D_INDEX) || (PortIndex == PORT_3C_INDEX) || (PortIndex == PORT_3A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][2] == IIO_BIFURCATE_xxx8x4x4) {
+ if ((PortIndex == PORT_3C_INDEX) || (PortIndex == PORT_3B_INDEX) || (PortIndex == PORT_3A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][2] == IIO_BIFURCATE_xxx8xxx8) {
+ if ((PortIndex == PORT_3C_INDEX) || (PortIndex == PORT_3A_INDEX)){
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][2] == IIO_BIFURCATE_xxxxxx16) {
+ if (PortIndex == PORT_3A_INDEX) {
+ SlotImp = TRUE;
+ }
+ }
+ break;
+ case IIO_PSTACK3:
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][3] == IIO_BIFURCATE_x4x4x4x4){
+ SlotImp = TRUE;
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][3] == IIO_BIFURCATE_x4x4xxx8) {
+ if ((PortIndex == PORT_4D_INDEX) || (PortIndex == PORT_4C_INDEX) || (PortIndex == PORT_4A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][3] == IIO_BIFURCATE_xxx8x4x4) {
+ if ((PortIndex == PORT_4C_INDEX) || (PortIndex == PORT_4B_INDEX) || (PortIndex == PORT_4A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][3] == IIO_BIFURCATE_xxx8xxx8) {
+ if ((PortIndex == PORT_4C_INDEX) || (PortIndex == PORT_4A_INDEX)){
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][3] == IIO_BIFURCATE_xxxxxx16) {
+ if (PortIndex == PORT_4A_INDEX) {
+ SlotImp = TRUE;
+ }
+ }
+ break;
+ case IIO_PSTACK4:
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][4] == IIO_BIFURCATE_x4x4x4x4){
+ SlotImp = TRUE;
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][4] == IIO_BIFURCATE_x4x4xxx8) {
+ if ((PortIndex == PORT_5D_INDEX) || (PortIndex == PORT_5C_INDEX) || (PortIndex == PORT_5A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][4] == IIO_BIFURCATE_xxx8x4x4) {
+ if ((PortIndex == PORT_5C_INDEX) || (PortIndex == PORT_5B_INDEX) || (PortIndex == PORT_5A_INDEX)) {
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][4] == IIO_BIFURCATE_xxx8xxx8) {
+ if ((PortIndex == PORT_5C_INDEX) || (PortIndex == PORT_5A_INDEX)){
+ SlotImp = TRUE;
+ }
+ } else if (IioGlobalData->SetupData.ConfigIOU[IioIndex][4] == IIO_BIFURCATE_xxxxxx16) {
+ if (PortIndex == PORT_5A_INDEX) {
+ SlotImp = TRUE;
+ }
+ }
+ break;
+ default:
+ DEBUG ((EFI_D_INFO, "default case.\n")); //Auto added. Please review.
+ break;
+ }
+ DEBUG ((DEBUG_INFO, "SlotImplemented_SKX: = %x\n", SlotImp));
+ return SlotImp;
+}
+
+
+VOID
+ConfigSlots_SKX (
+ IN OUT IIO_GLOBALS *IioGlobalData,
+ IN IIO_SLOT_CONFIG_DATA_ENTRY *Slot,
+ IN UINT8 SlotEntries
+ )
+{
+ UINT8 Index;
+ UINT8 Port;
+
+ for (Index =0; Index < SlotEntries; Index ++) {
+ Port=Slot[Index].PortIndex;
+ if (Slot[Index].Hidden != NOT_HIDE) {
+ IioGlobalData->SetupData.HidePEXPMenu[Port] = HIDE;
+ IioGlobalData->SetupData.PEXPHIDE[Port]= HIDE;
+ }
+ /// Check if slot is assigned.
+ if (Slot[Index].SlotNumber!= NO_SLT_IMP){
+ IioGlobalData->SetupData.SLOTIMP[Port]= SLT_IMP;
+ IioGlobalData->SetupData.SLOTPSP[Port]=Slot[Index].SlotNumber;
+ IioGlobalData->SetupData.SLOTEIP[Port]=Slot[Index].InterLockPresent;
+ if (Slot[Index].SlotPowerLimitScale!= PWR_SCL_MAX) {
+ IioGlobalData->SetupData.SLOTSPLS[Port] = Slot[Index].SlotPowerLimitScale;
+ IioGlobalData->SetupData.SLOTSPLV[Port] = Slot[Index].SlotPowerLimitValue;
+ }
+ if (Slot[Index].HotPlugCapable != DISABLE) {
+ EnableHotPlug_SKX(IioGlobalData, Port, Slot[Index].VppPort, Slot[Index].VppAddress, REGULAR_PCIE_OWNERSHIP);
+ }
+ }
+ }
+}
+
+
+EFI_STATUS
+PlatformUpdateIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi = NULL;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE IioConfigTable;
+ UINTN TableSize;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ TableSize = sizeof(IioConfigTable);
+ Status = UbaConfigPpi->GetData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &IioConfigTable,
+ &TableSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (IioConfigTable.Signature == PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE);
+ ASSERT (IioConfigTable.Version == PLATFORM_IIO_CONFIG_UPDATE_VERSION);
+
+ Status = IioConfigTable.CallUpdate (IioGlobalData);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
+
+VOID
+OverrideDefaultBifSlots_SKX (
+ IN IIO_GLOBALS *IioGlobalData,
+ IN UINT8 BoardId,
+ IN BOOLEAN *AutoBifEnable
+)
+{
+ EFI_STATUS Status;
+ UINT32 QATGpio;
+ PCIE_RISER_ID RightRiser;
+ PCIE_RISER_ID LeftRiser;
+ UINT32 RiserBit;
+ UINT8 Index;
+ BW5_BIFURCATION_DATA_STRUCT Bw5id[4]= {{{0,0,0,0,0}}, {{0,0,0,0,0,}}, {{0,0,0,0,0}}, {{0,0,0,0,0}}}; // Default, no BW card.
+ IIO_BROADWAY_ADDRESS_ENTRY *BroadwayTable;
+ IIO_BROADWAY_ADDRESS_DATA_ENTRY *BroadwayTableTemp;
+ UINT8 IOU0Setting;
+ UINT8 IOU2Setting;
+ UINT8 FlagValue = 0;
+ UINT8 SkuPersonality = 0;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ BroadwayTable = NULL;
+ IOU0Setting = IioGlobalData->SetupData.ConfigIOU[Iio_Socket0][0];
+ IOU2Setting = IioGlobalData->SetupData.ConfigIOU[Iio_Socket0][2];
+
+ //
+ // Specific platform overrides.
+ //
+ // Changes because GPIO (QAT, Riser Cards, etc).
+ // Read QAT and riser card GPIOs.
+ //
+ // Purley platforms need to read the QAT bit
+ //
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_B3, &QATGpio);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_B3 Failed\n"));
+ return;
+ }
+ DEBUG ((EFI_D_INFO, "QAT GPIO: %d\n", QATGpio));
+
+ if ((IioGlobalData->IioVar.IioVData.SkuPersonality[0] == TYPE_FPGA) &&\
+ (IioGlobalData->IioVar.IioVData.SkuPersonality[1] == TYPE_FPGA)) {
+ SkuPersonality = 1;
+ } else if ((IioGlobalData->IioVar.IioVData.SkuPersonality[0] == TYPE_FPGA) &&\
+ (IioGlobalData->IioVar.IioVData.SkuPersonality[1] != TYPE_FPGA)) {
+ SkuPersonality = 2;
+ } else if ((IioGlobalData->IioVar.IioVData.SkuPersonality[0] != TYPE_FPGA) &&\
+ (IioGlobalData->IioVar.IioVData.SkuPersonality[1] == TYPE_FPGA)) {
+ SkuPersonality = 3;
+ } else {
+ SkuPersonality = 0;
+ }
+ DEBUG((DEBUG_INFO, "SKU Personality Type: %d\n", SkuPersonality));
+
+ BroadwayTableTemp = (IIO_BROADWAY_ADDRESS_DATA_ENTRY *) BroadwayTable;
+ InternalPlatformGetSlotTableData2 (&BroadwayTableTemp, &IOU0Setting, &FlagValue, &IOU2Setting, SkuPersonality);
+ BroadwayTable = (IIO_BROADWAY_ADDRESS_ENTRY *)BroadwayTableTemp; // if no platform definition, BroadwayTable will be NULL
+
+ if (AutoBifEnable[(Iio_Socket0 * Iio_IouMax) + Iio_Iou2] == TRUE) {
+ IioGlobalData->SetupData.ConfigIOU[Iio_Socket0][2] = IOU2Setting;
+ }
+
+ if (FlagValue == 1) {
+ //
+ // Right riser
+ //
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_B4, &RiserBit); // PresentSignal
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_B4 Failed\n"));
+ return;
+ }
+ RightRiser.Bits.PresentSignal = (UINT8) RiserBit;
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_C15, &RiserBit); // HotPlugConf
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_C15 Failed\n"));
+ return;
+ }
+ RightRiser.Bits.HPConf = (UINT8) RiserBit;
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_C16, &RiserBit); // WingConf
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_C16 Failed\n"));
+ return;
+ }
+ RightRiser.Bits.WingConf = (UINT8) RiserBit;
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_C17, &RiserBit); // Slot9En
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_C17 Failed\n"));
+ return;
+ }
+ RightRiser.Bits.Slot9En = (UINT8) RiserBit;
+
+ DEBUG ((EFI_D_INFO, "GPIO Right riser information: PresentSignal=%x, HotPlugConf=%x, WingConf=%x, Slot9En=%x\n",
+ RightRiser.Bits.PresentSignal, RightRiser.Bits.HPConf, RightRiser.Bits.WingConf, RightRiser.Bits.Slot9En));
+
+ //
+ // Left riser
+ //
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_B5, &RiserBit); // PresentSignal
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_B5 Failed\n"));
+ return;
+ }
+ LeftRiser.Bits.PresentSignal = (UINT8) RiserBit;
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_C18, &RiserBit); // HotPlugConf
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_C18 Failed\n"));
+ return;
+ }
+ LeftRiser.Bits.HPConf = (UINT8) RiserBit;
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_C19, &RiserBit); // WingConf
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_C19 Failed\n"));
+ return;
+ }
+ LeftRiser.Bits.WingConf = (UINT8) RiserBit;
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_B21, &RiserBit); // Slot9En
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_INFO, "Get GPIO_SKL_H_GPP_B21 Failed\n"));
+ return;
+ }
+ LeftRiser.Bits.Slot9En = (UINT8) RiserBit;
+
+ DEBUG ((EFI_D_INFO, "GPIO Left riser information: PresentSignal=%x, HotPlugConf=%x, WingConf=%x, Slot9En=%x\n",
+ LeftRiser.Bits.PresentSignal, LeftRiser.Bits.HPConf, LeftRiser.Bits.WingConf, LeftRiser.Bits.Slot9En));
+ }
+
+ if (QATGpio == QAT_ENABLED) {
+ // So Configuration of IUO0 is:
+ // 1A-1B - QAT xxx8
+ // 1C - SSD x4
+ // 1D - SSD x4
+ if (AutoBifEnable[(Iio_Socket0 * Iio_IouMax) + Iio_Iou0] == TRUE) {
+ IioGlobalData->SetupData.ConfigIOU[Iio_Socket0][0] = IOU0Setting;
+ }
+ }
+
+ if (FlagValue == 1) {
+ if (QATGpio != QAT_ENABLED) {
+ if ((RightRiser.Bits.Slot9En == RISER_SLOT9_DISABLE) &&
+ (LeftRiser.Bits.Slot9En == RISER_SLOT9_DISABLE)) {
+ //
+ // SLOT 9 is disabled. SSDs are present.
+ // Change configuration to x4x4x4x4.
+ //
+ if (AutoBifEnable[(Iio_Socket0 * Iio_IouMax) + Iio_Iou0] == TRUE) {
+ IioGlobalData->SetupData.ConfigIOU[Iio_Socket0][0] = IIO_BIFURCATE_x4x4x4x4;
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[SOCKET_0_INDEX + PORT_1A_INDEX] = PCIEAIC_OCL_OWNERSHIP;
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[SOCKET_0_INDEX + PORT_1B_INDEX] = PCIEAIC_OCL_OWNERSHIP;
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[SOCKET_0_INDEX + PORT_1C_INDEX] = PCIEAIC_OCL_OWNERSHIP;
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[SOCKET_0_INDEX + PORT_1D_INDEX] = PCIEAIC_OCL_OWNERSHIP;
+ }
+ } else if (RightRiser.Bits.PresentSignal == RISER_PRESENT) {
+ //
+ // Slot 9 is enabled. Keep the xxxxxx16 configuration (default) and
+ // enable slot 9. Slot 9 supports HP.
+ //
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_0_INDEX + PORT_1A_INDEX] = 1;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_0_INDEX + PORT_1A_INDEX] = 9;
+ } // End of RISER_PRESENT
+ } // End of QAT_ENABLED
+
+ if (RightRiser.Bits.PresentSignal == RISER_PRESENT) {
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_0_INDEX + PORT_3A_INDEX] = 1;
+#if MAX_SOCKET > 2
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_3_INDEX + PORT_2A_INDEX] = 1;
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_3_INDEX + PORT_3A_INDEX] = 1;
+#endif // MAX_SOCKET > 2
+ if (RightRiser.Bits.WingConf == RISER_WINGED_IN) {
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_0_INDEX + PORT_3A_INDEX] = 1;
+#if MAX_SOCKET > 2
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_3_INDEX + PORT_2A_INDEX] = 4;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_3_INDEX + PORT_3A_INDEX] = 2;
+#endif // MAX_SOCKET > 2
+ } else { // RISER_WINGED_OUT
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_0_INDEX + PORT_3A_INDEX] = 2;
+#if MAX_SOCKET > 2
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_3_INDEX + PORT_2A_INDEX] = 3;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_3_INDEX + PORT_3A_INDEX] = 1;
+#endif // MAX_SOCKET > 2
+ if (RightRiser.Bits.HPConf == RISER_HP_EN) {
+ //
+ // PCIe Hot Plug is supported on Winged-out riser only
+ //
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_0_INDEX + PORT_3A_INDEX, VPP_PORT_0, 0x40, REGULAR_PCIE_OWNERSHIP);
+#if MAX_SOCKET > 2
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_3_INDEX + PORT_2A_INDEX, VPP_PORT_1, 0x40, REGULAR_PCIE_OWNERSHIP);
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_3_INDEX + PORT_3A_INDEX, VPP_PORT_0, 0x40, REGULAR_PCIE_OWNERSHIP);
+#endif // MAX_SOCKET > 2
+ } // End of RISER_HP_EN
+ } // End of RISER_WINGED_IN
+ } // End of RISER_PRESENT
+
+ if (LeftRiser.Bits.PresentSignal == RISER_PRESENT) {
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_1_INDEX + PORT_1A_INDEX] = 1;
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_1_INDEX + PORT_2A_INDEX] = 1;
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_2_INDEX + PORT_1A_INDEX] = 1;
+ IioGlobalData->SetupData.SLOTIMP[SOCKET_2_INDEX + PORT_3A_INDEX] = 1;
+ if (LeftRiser.Bits.WingConf == RISER_WINGED_IN) {
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_1_INDEX + PORT_1A_INDEX] = 7;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_1_INDEX + PORT_2A_INDEX] = 5;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_2_INDEX + PORT_1A_INDEX] = 6;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_2_INDEX + PORT_3A_INDEX] = 8;
+ } else { // RISER_WINGED_OUT
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_1_INDEX + PORT_1A_INDEX] = 5;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_1_INDEX + PORT_2A_INDEX] = 7;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_2_INDEX + PORT_1A_INDEX] = 8;
+ IioGlobalData->SetupData.SLOTPSP[SOCKET_2_INDEX + PORT_3A_INDEX] = 6;
+ if (LeftRiser.Bits.HPConf == RISER_HP_EN) {
+ //
+ // PCIe Hot Plug is supported on Winged-out riser only
+ //
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_1_INDEX + PORT_1A_INDEX, VPP_PORT_0, 0x42, REGULAR_PCIE_OWNERSHIP);
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_1_INDEX + PORT_2A_INDEX, VPP_PORT_1, 0x42, REGULAR_PCIE_OWNERSHIP);
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_2_INDEX + PORT_1A_INDEX, VPP_PORT_1, 0x42, REGULAR_PCIE_OWNERSHIP);
+ EnableHotPlug_SKX(IioGlobalData, SOCKET_2_INDEX + PORT_3A_INDEX, VPP_PORT_0, 0x42, REGULAR_PCIE_OWNERSHIP);
+ } // End of RISER_HP_EN
+ } // End of RISER_WINGED_IN
+ } // End of RISER_PRESENT
+ } // End of FlagValue == 1
+
+ /// Broadway overrides.
+ if (BroadwayTable != NULL) {
+ GetBw5Id (IioGlobalData, Bw5id);
+ DEBUG ((EFI_D_INFO,"Broadway Config: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", Bw5id[Bw5_Addr_0].Data, Bw5id[Bw5_Addr_1].Data, Bw5id[Bw5_Addr_2].Data, Bw5id[Bw5_Addr_3].Data));
+ for (Index = 0; Index < 3; Index ++) {
+ //
+ // Check if BW5 is present before override IOUx Bifurcation
+ //
+ if (BroadwayTable->BroadwayAddress == Bw5_Addr_Max) {
+ break;
+ }
+ if (Bw5id[BroadwayTable->BroadwayAddress].Bits.BifBits != BW5_CARD_NOT_PRESENT){
+ if (AutoBifEnable[(BroadwayTable->Socket * Iio_IouMax) + BroadwayTable->IouNumber] == TRUE) {
+ switch (BroadwayTable->IouNumber) {
+ case Iio_Iou0:
+ IioGlobalData->SetupData.ConfigIOU[BroadwayTable->Socket][0] = Bw5id[BroadwayTable->BroadwayAddress].Bits.BifBits;
+ DEBUG ((DEBUG_ERROR,"IioGlobalData->SetupData.ConfigIOU[%x][0] = %x\n",BroadwayTable->Socket, IioGlobalData->SetupData.ConfigIOU[BroadwayTable->Socket][0]));
+ break;
+ case Iio_Iou1:
+ IioGlobalData->SetupData.ConfigIOU[BroadwayTable->Socket][1] = Bw5id[BroadwayTable->BroadwayAddress].Bits.BifBits;
+ DEBUG ((DEBUG_ERROR,"IioGlobalData->SetupData.ConfigIOU[%x][1] = %x\n",BroadwayTable->Socket, IioGlobalData->SetupData.ConfigIOU[BroadwayTable->Socket][1]));
+ break;
+ case Iio_Iou2:
+ IioGlobalData->SetupData.ConfigIOU[BroadwayTable->Socket][2] = Bw5id[BroadwayTable->BroadwayAddress].Bits.BifBits;
+ DEBUG ((DEBUG_ERROR,"IioGlobalData->SetupData.ConfigIOU[%x][2] = %x\n",BroadwayTable->Socket,IioGlobalData->SetupData.ConfigIOU[BroadwayTable->Socket][2]));
+ break;
+ default:
+ break;
+ } // BroadwayTable->IouNumber
+ } // AutoBifEnable == TRUE
+ } // No BW5 present
+ BroadwayTable ++;
+ } // for Index
+ } // BroadwayTable != NULL
+
+ if (DynamicSiLibraryPpi->IsCpuAndRevision (CPU_SKX, REV_ALL) ||
+ DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CLX, REV_ALL) ||
+ DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CPX, REV_ALL)
+ ) {
+ PlatformUpdateIioConfig (IioGlobalData);
+ }
+}
+
+
+/**
+ Verify if VMD is enabled and override Slot configuration
+ based on the VMD settings
+
+ @param IioGlobalData Pointer to Iio Globals.
+ @param Slot - Slot configuration settings
+ @param SlotEntries - Number of slot entries
+
+ @retval None
+
+**/
+VOID
+OverrideConfigSlots_SKX (
+ IN OUT IIO_GLOBALS *IioGlobalData,
+ IN IIO_SLOT_CONFIG_DATA_ENTRY *Slot,
+ IN UINT8 SlotEntries
+ )
+{
+ UINT8 Index;
+ UINT8 Port;
+ UINT8 MaxPortNumberPerSocket;
+ UINT8 IioIndex;
+ UINT8 Stack;
+ UINT8 PortIndex;
+
+ MaxPortNumberPerSocket = IioGlobalData->IioVar.IioOutData.MaxPciePortNumberPerSocket[0];
+ for (Index =0; Index < SlotEntries; Index ++) {
+ Port = Slot[Index].PortIndex;
+ //
+ // Check if Slot is capable of PcieSSD Solution and override the SLOT Config values
+ //
+ if (Slot[Index].PcieSSDCapable) {
+ IioIndex = Port/MaxPortNumberPerSocket;
+ PortIndex = (Port - (MaxPortNumberPerSocket * IioIndex));
+ Stack = IioGlobalData->IioVar.IioVData.StackPerPort[IioIndex][PortIndex];
+ DEBUG ((DEBUG_INFO, "Stack = %x, Port = %x, PortIndex = %x\n", Stack, Port, PortIndex));
+
+ //
+ // check if VMD will own Pcie Root Port
+ //
+ if (IioGlobalData->SetupData.VMDEnabled[IioIndex][Stack]) {
+ if (IioGlobalData->SetupData.VMDPortEnable[IioIndex][PortIndex]) {
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port] = VMD_OWNERSHIP;
+ }
+ } else {
+
+ DEBUG ((DEBUG_INFO, "IioGlobalData->SetupData.PcieAICEnabled[%x] = %x\n", Stack, IioGlobalData->SetupData.PcieAICEnabled[(IioIndex * MAX_STACKS_PER_SOCKET) + Stack]));
+ //
+ // Check if Pcie AIC Card will be present on Pcie Root Port
+ //
+ if (IioGlobalData->SetupData.PcieAICEnabled[(IioIndex * MAX_STACKS_PER_SOCKET) + Stack]) {
+ //
+ // Force to have this port enabled by default for hot-plug.
+ //
+ IioGlobalData->SetupData.IioPcieConfig.PciePortEnable[(IioIndex * MaxPortNumberPerSocket) + Port] = ENABLE;
+ IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port] = PCIEAIC_OCL_OWNERSHIP;
+ DEBUG ((DEBUG_ERROR, "Port = %x, PciePortEnable = %x\n", Port, IioGlobalData->SetupData.IioPcieConfig.PciePortEnable[(IioIndex * MaxPortNumberPerSocket) + Port]));
+ }
+ } // No _VMD Ownership
+
+ DEBUG ((DEBUG_INFO, "PciePortOwnerShip[%x] = %x\n",Port, IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port]));
+
+ // if PcieSSDSupport required do slot override settings accordingly
+ if ((IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port] != REGULAR_PCIE_OWNERSHIP) &&
+ (SlotImplemented_SKX(IioGlobalData, Port) == TRUE)) {
+ IioGlobalData->SetupData.SLOTIMP[Port] = SLT_IMP;
+ IioGlobalData->SetupData.SLOTPSP[Port] = 0x50 + Port; // Just program a value for PCIEACI_OCL/VMD
+ IioGlobalData->SetupData.SLOTEIP[Port] = DISABLE;
+
+ if (Slot[Index].SlotPowerLimitScale != PWR_SCL_MAX) {
+ IioGlobalData->SetupData.SLOTSPLS[Port] = Slot[Index].SlotPowerLimitScale;
+ IioGlobalData->SetupData.SLOTSPLV[Port] = Slot[Index].SlotPowerLimitValue;
+ }
+ DEBUG ((DEBUG_INFO,"Slot[Index].PcieSSDVppPort = %x\n", Slot[Index].PcieSSDVppPort));
+ // Enable hot-plug if slot/port supports it
+ if (Slot[Index].PcieSSDVppPort != VPP_PORT_MAX) {
+ DEBUG ((DEBUG_INFO, "IioGlobalData->SetupData.VMDHotPlugEnable[%d][%x] = %x\n", IioIndex, Stack, IioGlobalData->SetupData.VMDHotPlugEnable[IioIndex][Stack]));
+ DEBUG ((DEBUG_INFO, "IioGlobalData->SetupData.PcieAICHotPlugEnable[%x] = %x\n",Stack,IioGlobalData->SetupData.PcieAICHotPlugEnable[(IioIndex * MAX_STACKS_PER_SOCKET) + Stack]));
+ // Check if hot-plug is enabled for VMD or PCIeAIC case.
+ if (((IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port] == VMD_OWNERSHIP) &&
+ (IioGlobalData->SetupData.VMDHotPlugEnable[IioIndex][Stack])) ||
+ ((IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port] == PCIEAIC_OCL_OWNERSHIP) &&
+ (IioGlobalData->SetupData.PcieAICHotPlugEnable[(IioIndex * MAX_STACKS_PER_SOCKET) + Stack]))) {
+ EnableHotPlug_SKX(IioGlobalData, Port, Slot[Index].PcieSSDVppPort, Slot[Index].PcieSSDVppAddress, IioGlobalData->IioVar.IioOutData.PciePortOwnership[Port]);
+ DEBUG((DEBUG_INFO,"Enable HotPlug Done\n"));
+ }
+ }
+ //
+ // Unhide the port in order to get configured and it will be hide later for VMDLateSetup if MD own the Pcie Root Port
+ //
+ IioGlobalData->SetupData.PEXPHIDE[Port] = NOT_HIDE;
+ }// PcieSSDSupport
+ }// PcieSSDCapable
+ }// Per Slot
+}
+
+VOID
+SetBifurcations_SKX(
+ IN OUT IIO_GLOBALS *IioGlobalData,
+ IN IIO_BIFURCATION_DATA_ENTRY *BifurcationTable,
+ IN UINT8 BifurcationEntries,
+ IN BOOLEAN *AutoBifEnable
+)
+{
+ UINT8 Socket;
+ UINT8 Iou;
+ UINT8 Index;
+
+ for (Index = 0; Index < BifurcationEntries ; Index++) {
+ Socket = BifurcationTable[Index].Socket;
+ Iou = BifurcationTable[Index].IouNumber;
+
+ if (AutoBifEnable[(Socket * Iio_IouMax) + Iou] == TRUE) {
+ switch (Iou) {
+ case Iio_Iou0:
+ IioGlobalData->SetupData.ConfigIOU[Socket][0] = BifurcationTable[Index].Bifurcation;
+ break;
+ case Iio_Iou1:
+ IioGlobalData->SetupData.ConfigIOU[Socket][1] = BifurcationTable[Index].Bifurcation;
+ break;
+ case Iio_Iou2:
+ IioGlobalData->SetupData.ConfigIOU[Socket][2] = BifurcationTable[Index].Bifurcation;
+ break;
+ case Iio_Iou3:
+ IioGlobalData->SetupData.ConfigIOU[Socket][3] = BifurcationTable[Index].Bifurcation;
+ break;
+ case Iio_Iou4:
+ IioGlobalData->SetupData.ConfigIOU[Socket][4] = BifurcationTable[Index].Bifurcation;
+ break;
+ default:
+ DEBUG ((EFI_D_ERROR, "Invalid bifurcation table: Bad Iou (%d)", Iou));
+ ASSERT(Iou);
+ break;
+ }
+ }
+ }
+}
+
+
+/**
+
+ SystemIioPortBifurcationInit - Program the UDS data structure with OEM IIO init values
+ for SLOTs and Bifurcation.
+
+ @param mSB - pointer to this protocol
+ @param IioUds - Pointer to the IIO UDS datastructure.
+
+ @retval EFI_SUCCESS
+
+**/
+VOID
+SystemIioPortBifurcationInitCommon_SKX (
+ UINT8 BoardId,
+ IIO_GLOBALS *IioGlobalData,
+ IIO_BIFURCATION_DATA_ENTRY **BifurcationTable,
+ UINT8 *BifurcationEntries,
+ IIO_SLOT_CONFIG_DATA_ENTRY **SlotTable,
+ UINT8 *SlotEntries
+)
+{
+
+ UINT8 PortIndex;//, iio;
+ IIO_BIFURCATION_DATA_ENTRY **BifurcationTableTemp;
+ IIO_SLOT_CONFIG_DATA_ENTRY **SlotTableTemp;
+ UINT8 SkuPersonalityType = 0;
+ UINT8 MaxPortNumberPerSocket;
+
+ /// This function outline:
+ //// 1 Based on platform apply the default bifurcation and slot configuration.
+ //// 2 Apply dynamic overrides based on GPIO and other configurations.
+ //// 3 Hide unused ports due bifurcation.
+
+ MaxPortNumberPerSocket = IioGlobalData->IioVar.IioOutData.MaxPciePortNumberPerSocket[0];
+ for (PortIndex = 0; PortIndex < MAX_SOCKET*MaxPortNumberPerSocket; PortIndex++) {
+ IioGlobalData->SetupData.PEXPHIDE[PortIndex] = 0;
+ IioGlobalData->SetupData.HidePEXPMenu[PortIndex] = 0;
+ }
+
+ *BifurcationEntries = 0;
+ *SlotEntries = 0;
+
+ BifurcationTableTemp = (IIO_BIFURCATION_DATA_ENTRY **) BifurcationTable;
+ SlotTableTemp = (IIO_SLOT_CONFIG_DATA_ENTRY **) SlotTable;
+
+ if ((IioGlobalData->IioVar.IioVData.SkuPersonality[0] == TYPE_FPGA) &&\
+ (IioGlobalData->IioVar.IioVData.SkuPersonality[1] == TYPE_FPGA)) {
+ SkuPersonalityType = 1;
+ } else if ((IioGlobalData->IioVar.IioVData.SkuPersonality[0] == TYPE_FPGA) &&\
+ (IioGlobalData->IioVar.IioVData.SkuPersonality[1] != TYPE_FPGA)) {
+ SkuPersonalityType = 2;
+ } else if ((IioGlobalData->IioVar.IioVData.SkuPersonality[0] != TYPE_FPGA) &&\
+ (IioGlobalData->IioVar.IioVData.SkuPersonality[1] == TYPE_FPGA)) {
+ SkuPersonalityType = 3;
+ } else {
+ SkuPersonalityType = 0;
+ }
+
+ InternalPlatformIioConfigInit2 (SkuPersonalityType, BifurcationTableTemp, BifurcationEntries, SlotTableTemp, SlotEntries);
+
+ BifurcationTable = (IIO_BIFURCATION_DATA_ENTRY **) BifurcationTableTemp;
+ SlotTable = (IIO_SLOT_CONFIG_DATA_ENTRY **) SlotTableTemp;
+
+}
+
+
+/**
+ This function prepare the data for silicon initialization based on
+ bifuraction and slots table
+
+ This function is for tables in version PLATFORM_IIO_CONFIG_UPDATE_VERSION = 1
+ */
+VOID
+IioPortBifurcationInitVer1 (
+ IN IIO_GLOBALS *IioGlobalData
+ )
+{
+ UINT8 IioIndex;
+ IIO_BIFURCATION_DATA_ENTRY *BifurcationTable = NULL;
+ UINT8 BifurcationEntries;
+ IIO_SLOT_CONFIG_DATA_ENTRY *SlotTable = NULL;
+ UINT8 SlotEntries;
+ BOOLEAN AutoBifEnable[MaxIIO * Iio_IouMax];
+ UINT8 BoardId;
+
+ BoardId = SystemBoardIdValue();
+
+ SetMem ((VOID *)AutoBifEnable, MaxIIO * Iio_IouMax, FALSE);
+
+ for (IioIndex = Iio_Socket0; IioIndex < MaxIIO; IioIndex++) {
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][0] == IIO_BIFURCATE_AUTO) {
+ AutoBifEnable[(IioIndex * Iio_IouMax) + Iio_Iou0] = TRUE;
+ }
+
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][1] == IIO_BIFURCATE_AUTO) {
+ AutoBifEnable[(IioIndex * Iio_IouMax) + Iio_Iou1] = TRUE;
+ }
+
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][2] == IIO_BIFURCATE_AUTO) {
+ AutoBifEnable[(IioIndex * Iio_IouMax) + Iio_Iou2] = TRUE;
+ }
+
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][3] == IIO_BIFURCATE_AUTO) {
+ AutoBifEnable[(IioIndex * Iio_IouMax) + Iio_Iou3] = TRUE;
+ }
+
+ if (IioGlobalData->SetupData.ConfigIOU[IioIndex][4] == IIO_BIFURCATE_AUTO) {
+ AutoBifEnable[(IioIndex * Iio_IouMax) + Iio_Iou4] = TRUE;
+ }
+ }
+
+ // This function outline:
+ // 1. Based on platform apply the default bifurcation and slot configuration.
+ // 2. Apply dynamic overrides based on GPIO and other configurations.
+ // 3. Hide unused ports due bifurcation.
+
+ // Set the default bifurcations for this platform.
+ SystemIioPortBifurcationInitCommon_SKX (BoardId, IioGlobalData, &BifurcationTable, &BifurcationEntries, &SlotTable, &SlotEntries);
+ SetBifurcations_SKX (IioGlobalData, BifurcationTable, BifurcationEntries, AutoBifEnable);
+ ConfigSlots_SKX (IioGlobalData, SlotTable, SlotEntries);
+ if (BoardId <= TypePlatformMax) {
+ OverrideDefaultBifSlots_SKX (IioGlobalData, BoardId, AutoBifEnable);
+ }
+ OverrideConfigSlots_SKX (IioGlobalData, SlotTable, SlotEntries);
+
+
+ // All overrides have been applied now.
+ // Hide root ports whose lanes are assigned preceding ports.
+ for (IioIndex = Iio_Socket0; IioIndex < MaxIIO; IioIndex++) {
+ if (IioGlobalData->IioVar.IioVData.SocketPresent[IioIndex]) {
+ SystemHideIioPortsCommon_SKX (IioGlobalData, IioIndex);
+ }
+ }
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h
new file mode 100644
index 0000000000..2c5d3da968
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h
@@ -0,0 +1,51 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_HSIO_PTSSTABLES_H_
+#define _PCH_HSIO_PTSSTABLES_H_
+
+#include <Platform.h>
+#include <Ppi/PchHsioPtssTable.h>
+#include <PchAccess.h>
+
+///
+/// SATA PTSS Topology Types
+///
+typedef enum {
+ PchSataTopoUnknown = 0x00,
+ PchSataTopoIsata,
+ PchSataTopoDirectConnect,
+ PchSataTopoFlex,
+ PchSataTopoM2
+} PCH_SATA_TOPOLOGY;
+
+///
+/// PCIe PTSS Topology Types
+///
+typedef enum {
+ PchPcieTopoUnknown = 0x00,
+ PchPcieTopox1,
+ PchPcieTopox4,
+ PchPcieTopoSataE,
+ PchPcieTopoM2
+} PCH_PCIE_TOPOLOGY;
+
+///
+/// DMI PTSS Topology Types
+///
+typedef enum {
+ PchDmiTopoUnknown = 0x00,
+} PCH_DMI_TOPOLOGY;
+
+typedef struct {
+ PCH_SBI_PTSS_HSIO_TABLE PtssTable;
+ UINT16 Topology;
+ UINT16 BoardId;
+} HSIO_PTSS_TABLES;
+
+#endif // _PCH_HSIO_PTSSTABLES_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c
new file mode 100644
index 0000000000..173ca7276e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c
@@ -0,0 +1,44 @@
+/** @file
+ LbgPchH Bx HSIO PTSS C File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PchLbgHsioPtssTablesBx.h"
+#include <PlatformInfoTypes.h>
+
+HSIO_PTSS_TABLES PchLbgHsioPtss_Bx[] = {
+ {{0xA9, 12, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 13, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 18, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 19, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 20, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 21, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xEB, 0, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 0, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 1, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 1, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 2, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 2, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 3, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 3, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 14, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x04000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+};
+
+UINT32 PchLbgHsioPtss_Bx_Size = sizeof (PchLbgHsioPtss_Bx) / sizeof (PchLbgHsioPtss_Bx[0]);
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h
new file mode 100644
index 0000000000..b63b198d36
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h
@@ -0,0 +1,18 @@
+/** @file
+ LbgPchH Bx HSIO PTSS Header File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_LBG_HSIO_PTSSTABLES_BX_H_
+#define _PCH_LBG_HSIO_PTSSTABLES_BX_H_
+
+#include "PchHsioPtssTables.h"
+
+extern HSIO_PTSS_TABLES PchLbgHsioPtss_Bx[69];
+extern UINT32 PchLbgHsioPtss_Bx_Size;
+
+#endif // _PCH_LBG_HSIO_PTSSTABLES_BX_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c
new file mode 100644
index 0000000000..65c777a4b7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c
@@ -0,0 +1,44 @@
+/** @file
+ LbgPchH Bx HSIO PTSS C File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PchLbgHsioPtssTablesBx_Ext.h"
+#include <PlatformInfoTypes.h>
+
+HSIO_PTSS_TABLES PchLbgHsioPtss_Bx_Ext[] = {
+ {{0xA9, 12, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 13, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 18, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 19, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 20, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 21, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xEB, 0, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 0, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 1, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 1, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 2, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 2, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 3, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 3, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 14, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x04000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+};
+
+UINT32 PchLbgHsioPtss_Bx_Size_Ext = sizeof (PchLbgHsioPtss_Bx_Ext) / sizeof (PchLbgHsioPtss_Bx_Ext[0]);
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h
new file mode 100644
index 0000000000..dea47126a2
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h
@@ -0,0 +1,20 @@
+/** @file
+ LbgPchH Bx HSIO PTSS Header File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_LBG_HSIO_PTSSTABLES_BX_H_EXT_
+#define _PCH_LBG_HSIO_PTSSTABLES_BX_H_EXT_
+
+
+
+#include "PchHsioPtssTables.h"
+
+extern HSIO_PTSS_TABLES PchLbgHsioPtss_Bx_Ext[69];
+extern UINT32 PchLbgHsioPtss_Bx_Size_Ext;
+
+#endif // _PCH_LBG_HSIO_PTSSTABLES_BX_H_EXT_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c
new file mode 100644
index 0000000000..e44807d640
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c
@@ -0,0 +1,27 @@
+/** @file
+ LbgPchH Sx HSIO PTSS C File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PchLbgHsioPtssTablesSx.h"
+#include <PlatformInfoTypes.h>
+
+HSIO_PTSS_TABLES PchLbgHsioPtss_Sx[] = {
+ {{0xA9, 12, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 13, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 18, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 19, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 20, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 21, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+};
+
+UINT32 PchLbgHsioPtss_Sx_Size = sizeof (PchLbgHsioPtss_Sx) / sizeof (PchLbgHsioPtss_Sx[0]);
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h
new file mode 100644
index 0000000000..52e6a1f7ac
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h
@@ -0,0 +1,21 @@
+/** @file
+ LbgPchH Sx HSIO PTSS Header File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_LBG_HSIO_PTSSTABLES_SX_H_
+#define _PCH_LBG_HSIO_PTSSTABLES_SX_H_
+
+
+
+#include "PchHsioPtssTables.h"
+
+
+extern HSIO_PTSS_TABLES PchLbgHsioPtss_Sx[69];
+extern UINT32 PchLbgHsioPtss_Sx_Size;
+
+#endif // _PCH_LBG_HSIO_PTSSTABLES_SX_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c
new file mode 100644
index 0000000000..4f4dd4496e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c
@@ -0,0 +1,44 @@
+/** @file
+ LbgPchH Sx HSIO PTSS C File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PchLbgHsioPtssTablesSx_Ext.h"
+#include <PlatformInfoTypes.h>
+
+HSIO_PTSS_TABLES PchLbgHsioPtss_Sx_Ext[] = {
+ {{0xA9, 12, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 13, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 18, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 19, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 20, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 21, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x02000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPRP},
+ {{0xEB, 0, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 0, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 1, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 1, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 2, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 2, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 3, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x48000000, (UINT32) ~0xF8000000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xEB, 3, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00080000, (UINT32) ~0x1F0000}, PchDmiTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 14, V_PCH_PCR_FIA_LANE_OWN_SATA, 0x150, 0x04000000, (UINT32) ~0x3F000000}, PchSataTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 22, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 23, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 24, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x11c, 0x28000000, (UINT32) ~0xF8000000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+ {{0xA9, 25, V_PCH_PCR_FIA_LANE_OWN_PCIEDMI, 0x164, 0x00060000, (UINT32) ~0x1F0000}, PchPcieTopoUnknown, TypeNeonCityEPECB},
+};
+
+UINT32 PchLbgHsioPtss_Sx_Size_Ext = sizeof (PchLbgHsioPtss_Sx_Ext) / sizeof (PchLbgHsioPtss_Sx_Ext[0]);
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h
new file mode 100644
index 0000000000..a80d530b27
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h
@@ -0,0 +1,21 @@
+/** @file
+ LbgPchH Sx HSIO PTSS Header File
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PCH_LBG_HSIO_PTSSTABLES_SX_H_EXT_
+#define _PCH_LBG_HSIO_PTSSTABLES_SX_H_EXT_
+
+
+
+#include "PchHsioPtssTables.h"
+
+
+extern HSIO_PTSS_TABLES PchLbgHsioPtss_Sx_Ext[69];
+extern UINT32 PchLbgHsioPtss_Sx_Size_Ext;
+
+#endif // _PCH_LBG_HSIO_PTSSTABLES_SX_H_EXT_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c
new file mode 100644
index 0000000000..d65bc28b1d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c
@@ -0,0 +1,75 @@
+/** @file
+ Common Board Init Lib.
+
+ @copyright
+ Copyright 2017 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+
+/**
+ The constructor function for Board Init Libray.
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @retval EFI_SUCCESS Table initialization successfully.
+ @retval EFI_OUT_OF_RESOURCES No enough memory to initialize table.
+**/
+
+#include "PeiCommonBoardInitLib.h"
+
+EFI_STATUS
+EFIAPI
+CommonPeiBoardInitLibConstructor (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi;
+
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = InstallClockgenData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = InstallGpioPlatformData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = InstallBoardInfoData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = InstallPlatformClocksConfigData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = InstallPlatformHsioPtssTableData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = InstallIioPortBifurcationInitData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h
new file mode 100644
index 0000000000..91e68d52f6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h
@@ -0,0 +1,55 @@
+/** @file
+ Common Board Init.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PEI_COMMON_BOARD_PEI_H_
+#define _PEI_COMMON_BOARD_PEI_H_
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <CpuAndRevisionDefines.h>
+#include <Library/IoLib.h>
+
+#define CLOCK_GENERATOR_SETTINGS_CK505 {0x00, 0xF3, 0x0F, 0xFE, 0x98, 0x02, 0x08, 0x26, 0x7C, 0xE7, 0x0F, 0xFE, 0x08}
+
+EFI_STATUS
+InstallClockgenData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+InstallGpioPlatformData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+InstallBoardInfoData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+InstallPlatformClocksConfigData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+InstallPlatformHsioPtssTableData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+InstallIioPortBifurcationInitData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+#endif // _PEI_COMMON_BOARD_PEI_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
new file mode 100644
index 0000000000..a0e2f6056c
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
@@ -0,0 +1,76 @@
+## @file
+# Board Init for multi-boards support in PEI phase.
+#
+# @copyright
+# Copyright 2015 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = CommonPeiBoardInitLib
+ FILE_GUID = 46BF553E-2C76-41C6-A0E8-E242F46BBD5F
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = NULL|PEIM
+ CONSTRUCTOR = CommonPeiBoardInitLibConstructor
+
+
+[Sources]
+ PeiCommonBoardInitLib.c
+ Clockgen.c
+ GpioPlatformConfig.c
+ BoardInfo.c
+ ClocksConfig.c
+ HsioPtssTableConfig.c
+ IioPortBifurcation.c
+ IioPortBifurcationVer1.c
+ PchLbgHsioPtssTablesBx.c
+ PchLbgHsioPtssTablesBx_Ext.c
+ PchLbgHsioPtssTablesSx.c
+ PchLbgHsioPtssTablesSx_Ext.c
+ IioBifurcationSlotTable.h
+ PchHsioPtssTables.h
+ PchLbgHsioPtssTablesBx.h
+ PchLbgHsioPtssTablesBx_Ext.h
+ PchLbgHsioPtssTablesSx.h
+ PchLbgHsioPtssTablesSx_Ext.h
+ PeiCommonBoardInitLib.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ PlatformClocksLib
+ HobLib
+ PciLib
+ IoLib
+ PeiServicesTablePointerLib
+
+[Guids]
+ gPlatformKtiEparamUpdateDataGuid
+ gEfiPlatformInfoGuid
+
+[Ppis]
+ gPchPlatformPolicyPpiGuid
+ gUbaConfigDatabasePpiGuid
+ gEfiPeiSmbus2PpiGuid
+ gEfiPeiStallPpiGuid
+ gPchHsioPtssTablePpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Pcd]
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGeneratorAddress
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
new file mode 100644
index 0000000000..5d8862ea6e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
@@ -0,0 +1,107 @@
+/** @file
+ IIO Config Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "IioCfgUpdateDxe.h"
+
+EFI_STATUS
+UpdateCooperCityRPIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+ )
+{
+ return EFI_SUCCESS;
+}
+
+PLATFORM_IIO_CONFIG_UPDATE_TABLE TypeCooperCityRPIioConfigTable =
+{
+ PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE,
+ PLATFORM_IIO_CONFIG_UPDATE_VERSION,
+
+ IioBifurcationTable,
+ sizeof(IioBifurcationTable),
+ UpdateCooperCityRPIioConfig,
+ IioSlotTable,
+ sizeof(IioSlotTable)
+
+};
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+IioCfgUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((DEBUG_INFO, "UBA:IioCfgUpdate-TypeCooperCityRP\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid_1,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid_2,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid_3,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
new file mode 100644
index 0000000000..9e6a7c9b3a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
@@ -0,0 +1,161 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIOCFG_UPDATE_DXE_H_
+#define _IIOCFG_UPDATE_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Protocol/UbaCfgDb.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PciLib.h>
+#include <Library/UbaIioConfigLib.h>
+#include <IioPlatformData.h>
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Mcp0,
+ Iio_Mcp1,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ VPP_PORT_0 = 0,
+ VPP_PORT_1,
+ VPP_PORT_2,
+ VPP_PORT_3
+} VPP_PORT;
+
+#define ENABLE 1
+#define DISABLE 0
+#define NO_SLT_IMP 0xFF
+#define SLT_IMP 1
+#define HIDE 1
+#define NOT_HIDE 0
+#define VPP_PORT_0 0
+#define VPP_PORT_1 1
+#define VPP_PORT_MAX 0xFF
+#define VPP_ADDR_MAX 0xFF
+#define PWR_VAL_MAX 0xFF
+#define PWR_SCL_MAX 0xFF
+
+static IIO_BIFURCATION_DATA_ENTRY IioBifurcationTable[] =
+{
+ { Iio_Socket0, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket2, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket2, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket2, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket2, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket2, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket3, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket3, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket3, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket3, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket3, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+#if MAX_SOCKET > 4
+ { Iio_Socket4, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket4, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket4, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket4, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket4, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket5, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket5, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket5, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket5, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket5, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket6, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket6, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket6, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket6, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket6, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket7, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket7, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket7, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket7, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket7, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+#endif
+};
+
+static IIO_SLOT_CONFIG_DATA_ENTRY IioSlotTable[] = {
+ // Port | Slot | Inter | Power Limit | Power Limit | Hot | Vpp | Vpp | PcieSSD | PcieSSD | PcieSSD | Hidden
+ // Index | | lock | Scale | Value | Plug | Port | Addr | Cap | VppPort | VppAddr |
+ /// Socket 0: Iuo2 Connected to SLOT 9 or SSDs: read values of QAT and riser.
+ /// Iuo0 Uplink
+ /// Iuo3 Connected to SLOT 1 or 2, and might be HP. Read values of QAT and riser.
+ { PORT_1A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x4C , HIDE }, //Oculink
+ { PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x4C , HIDE }, //Oculink
+ { PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x4E , HIDE }, //Oculink
+ { PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x4E , HIDE }, //Oculink
+ { PORT_2A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE }, // Uplink
+ { PORT_3A_INDEX, 1 , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x40 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ /// Socket 1: DMI no connected on all boards.
+ /// Iuo2 Slot 7 or 5 based on riser information. Might be HP.
+ /// Iuo0 Slot 5 or 7 based on riser information. Might be HP.
+ /// Iuo1, Not connected for RP.
+ { SOCKET_1_INDEX +
+ PORT_0_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_1A_INDEX, 5 , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_1_INDEX +
+ PORT_2A_INDEX, 7 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_1_INDEX +
+ PORT_3A_INDEX, 10 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , HIDE },
+ /// Socket 2: DMI Port, not connected on RP
+ /// Iuo2 Slot 6 or 8 based on riser information. Might be HP.
+ /// Iuo1 Slot 6 or 8 based on riser information. Might be HP.
+ /// Iuo0, Not connected for RP.
+ { SOCKET_2_INDEX +
+ PORT_0_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , HIDE },
+ { SOCKET_2_INDEX +
+ PORT_1A_INDEX, 6 , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_2_INDEX +
+ PORT_3A_INDEX, 8 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_2_INDEX +
+ PORT_2A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , HIDE },
+ /// Socket 3: DMI not connected.
+ /// Iuo2 Not Connected for RP.
+ /// Iuo0 Slot 4 or 3 based on riser information. Might be HP.
+ /// Iuo1 Slot 4 or 3 based on riser information. Might be HP.
+ { SOCKET_3_INDEX +
+ PORT_0_INDEX , NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , HIDE },
+ { SOCKET_3_INDEX +
+ PORT_2A_INDEX, 3 , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_3_INDEX +
+ PORT_3A_INDEX, 4 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_3_INDEX +
+ PORT_1A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , HIDE },
+};
+
+#endif //_IIOCFG_UPDATE_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
new file mode 100644
index 0000000000..3f7268b527
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
@@ -0,0 +1,48 @@
+## @file
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = IioCfgUpdateDxeCooperCityRP
+ FILE_GUID = 073018E2-4A0A-3D61-8EA7-B08321C9364B
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = IioCfgUpdateEntry
+
+[Sources]
+ IioCfgUpdateDxe.h
+ IioCfgUpdateDxe.c
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ UefiLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Guids]
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gEfiPlatformTypeCooperCityRPProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
new file mode 100644
index 0000000000..bbc90ede3e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
@@ -0,0 +1,108 @@
+/** @file
+ Slot Data Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "SlotDataUpdateDxe.h"
+
+UINT8
+GetTypeCooperCityRPIOU0Setting (
+ UINT8 IOU0Data
+)
+{
+ //
+ // Change bifurcation of Port1A-1B as x4x4 when QATGpio enabled.
+ //
+ IOU0Data = IIO_BIFURCATE_xxx8x4x4;
+ return IOU0Data;
+}
+
+UINT8
+GetTypeCooperCityRPIOU2Setting (
+ UINT8 SkuPersonalityType,
+ UINT8 IOU2Data
+)
+{
+ return IOU2Data;
+}
+
+PLATFORM_SLOT_UPDATE_TABLE TypeCooperCityRPSlotTable =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ NULL,
+ GetTypeCooperCityRPIOU0Setting,
+ 1
+};
+
+PLATFORM_SLOT_UPDATE_TABLE2 TypeCooperCityRPSlotTable2 =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ NULL,
+ GetTypeCooperCityRPIOU0Setting,
+ 1,
+ GetTypeCooperCityRPIOU2Setting
+};
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+SlotDataUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((DEBUG_INFO, "UBA:SlotDataUpdate-TypeCooperCityRP\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformSlotDataDxeGuid,
+ &TypeCooperCityRPSlotTable,
+ sizeof(TypeCooperCityRPSlotTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformSlotDataGuid2,
+ &TypeCooperCityRPSlotTable2,
+ sizeof(TypeCooperCityRPSlotTable2)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
new file mode 100644
index 0000000000..9be882b09e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
@@ -0,0 +1,57 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SLOT_DATA_UPDATE_DXE_H_
+#define _SLOT_DATA_UPDATE_DXE_H_
+
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Protocol/UbaCfgDb.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PciLib.h>
+
+#include <Library/UbaSlotUpdateLib.h>
+#include <IioPlatformData.h>
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Mcp0,
+ Iio_Mcp1,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ Bw5_Addr_0 = 0,
+ Bw5_Addr_1,
+ Bw5_Addr_2,
+ Bw5_Addr_3,
+ Bw5_Addr_Max
+} BW5_ADDRESS;
+
+#endif //_SLOT_DATA_UPDATE_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
new file mode 100644
index 0000000000..77ba1697eb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
@@ -0,0 +1,48 @@
+## @file
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SlotDataUpdateDxeCooperCityRP
+ FILE_GUID = 3C26C91F-4CEB-E798-59EC-05B15E9C5919
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = SlotDataUpdateEntry
+
+[Sources]
+ SlotDataUpdateDxe.h
+ SlotDataUpdateDxe.c
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ UefiLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Guids]
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gEfiPlatformTypeCooperCityRPProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
new file mode 100644
index 0000000000..fa5c21e4f4
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
@@ -0,0 +1,124 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "UsbOcUpdateDxe.h"
+
+#include <Library/UbaUsbOcUpdateLib.h>
+#include <PchLimits.h>
+#include <ConfigBlock/UsbConfig.h>
+#include <ConfigBlock/Usb2PhyConfig.h>
+
+USB_OVERCURRENT_PIN TypeCooperCityRPUsb20OverCurrentMappings[PCH_MAX_USB2_PORTS] = {
+ UsbOverCurrentPinSkip, //Port00: BMC
+ UsbOverCurrentPinSkip, //Port01: BMC
+ UsbOverCurrentPin0, //Port02: Rear Panel
+ UsbOverCurrentPin1, //Port03: Rear Panel
+ UsbOverCurrentPin1, //Port04: Rear Panel
+ UsbOverCurrentPinSkip, //Port05: NC
+ UsbOverCurrentPinSkip, //Port06: NC
+ UsbOverCurrentPin4, //Port07: Type A internal
+ UsbOverCurrentPinSkip, //Port08: NC
+ UsbOverCurrentPinSkip, //Port09: NC
+ UsbOverCurrentPin6, //Port10: Front Panel
+ UsbOverCurrentPinSkip, //Port11: NC
+ UsbOverCurrentPin6, //Port12: Front Panel
+ UsbOverCurrentPin4 //Port13: NC
+ };
+
+USB_OVERCURRENT_PIN TypeCooperCityRPUsb30OverCurrentMappings[PCH_MAX_USB3_PORTS] = {
+ UsbOverCurrentPin6, //Port01: Front Panel
+ UsbOverCurrentPin6, //Port02: Front Panel
+ UsbOverCurrentPin0, //Port03: Rear Panel
+ UsbOverCurrentPin1, //Port04: Rear Panel
+ UsbOverCurrentPin1, //Port05: Rear Panel
+ UsbOverCurrentPinSkip, //Port06: NC
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip
+ };
+
+USB2_PHY_PARAMETERS TypeCooperCityRPUsb20AfeParams[PCH_H_XHCI_MAX_USB2_PHYSICAL_PORTS] = {
+ {7, 0, 2, 1}, // PP0
+ {7, 0, 2, 1}, // PP1
+ {7, 0, 2, 1}, // PP2
+ {7, 0, 2, 1}, // PP3
+ {7, 0, 2, 1}, // PP4
+ {7, 0, 2, 1}, // PP5
+ {7, 0, 2, 1}, // PP6
+ {7, 0, 2, 1}, // PP7
+ {7, 0, 2, 1}, // PP8
+ {7, 0, 2, 1}, // PP9
+ {7, 0, 2, 1}, // PP10
+ {7, 0, 2, 1}, // PP11
+ {7, 0, 2, 1}, // PP12
+ {7, 0, 2, 1}, // PP13
+ };
+
+EFI_STATUS
+TypeCooperCityRPPlatformUsbOcUpdateCallback (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+)
+{
+ *Usb20OverCurrentMappings = &TypeCooperCityRPUsb20OverCurrentMappings[0];
+ *Usb30OverCurrentMappings = &TypeCooperCityRPUsb30OverCurrentMappings[0];
+ *Usb20AfeParams = TypeCooperCityRPUsb20AfeParams;
+ return EFI_SUCCESS;
+}
+
+PLATFORM_USBOC_UPDATE_TABLE TypeCooperCityRPUsbOcUpdate =
+{
+ PLATFORM_USBOC_UPDATE_SIGNATURE,
+ PLATFORM_USBOC_UPDATE_VERSION,
+ TypeCooperCityRPPlatformUsbOcUpdateCallback
+};
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+UsbOcUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((DEBUG_INFO, "UBA:UsbOcUpdate-TypeCooperCityRP\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gDxePlatformUbaOcConfigDataGuid,
+ &TypeCooperCityRPUsbOcUpdate,
+ sizeof(TypeCooperCityRPUsbOcUpdate)
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
new file mode 100644
index 0000000000..4f9341b2ba
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
@@ -0,0 +1,27 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _USBOC_UPDATE_DXE_H_
+#define _USBOC_UPDATE_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Protocol/UbaCfgDb.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+
+
+#endif //_USBOC_UPDATE_DXE_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
new file mode 100644
index 0000000000..87d5c3d711
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
@@ -0,0 +1,44 @@
+## @file
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UsbOcUpdateDxeCooperCityRP
+ FILE_GUID = 001EE0B2-4F5B-59A9-6CDB-F893FBC4D029
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = UsbOcUpdateEntry
+
+[sources]
+ UsbOcUpdateDxe.c
+ UsbOcUpdateDxe.h
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ UefiLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Guids]
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gEfiPlatformTypeCooperCityRPProtocolGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c
new file mode 100644
index 0000000000..98ed9275e5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c
@@ -0,0 +1,51 @@
+/** @file
+ ACPI table pcds update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/PcdLib.h>
+#include <Library/HobLib.h>
+#include <Guid/PlatformInfo.h>
+#include <UncoreCommonIncludes.h>
+#include <Cpu/CpuIds.h>
+
+EFI_STATUS
+TypeCooperCityRPPlatformUpdateAcpiTablePcds (
+ VOID
+ )
+{
+ CHAR8 AcpiNameCpx[] = "CPXXEPRP"; // Identifies DSDT on CPX builds
+ CHAR8 OemTableIdXhci[] = "xh_nccrb";
+
+ UINTN Size;
+ EFI_STATUS Status;
+
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+ //#
+ //#ACPI items
+ //#
+ Size = AsciiStrSize (AcpiNameCpx);
+ Status = PcdSetPtrS (PcdOemSkuAcpiName , &Size, AcpiNameCpx);
+ DEBUG ((DEBUG_INFO, "PlatformUpdateAcpiTablePcds TypeCooperCityRP CPX\n"));
+ ASSERT_EFI_ERROR (Status);
+
+ Size = AsciiStrSize (OemTableIdXhci);
+ Status = PcdSetPtrS (PcdOemTableIdXhci , &Size, OemTableIdXhci);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c
new file mode 100644
index 0000000000..906c2efe28
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c
@@ -0,0 +1,297 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaGpioUpdateLib.h>
+
+#include <Library/GpioLib.h>
+#include <Library/UbaGpioInitLib.h>
+#include <GpioPinsSklH.h>
+#include <Library/PcdLib.h>
+
+static GPIO_INIT_CONFIG mGpioTableCooperCityRP[] =
+ {
+ {GPIO_SKL_H_GPP_A0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_0_LPC_RCIN_N_ESPI_ALERT1_N
+ {GPIO_SKL_H_GPP_A1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_1_LPC_LAD0_ESPI_IO0
+ {GPIO_SKL_H_GPP_A2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_2_LPC_LAD1_ESPI_IO1
+ {GPIO_SKL_H_GPP_A3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_3_LPC_LAD2_ESPI_IO2
+ {GPIO_SKL_H_GPP_A4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_4_LPC_LAD3_ESPI_IO3
+ {GPIO_SKL_H_GPP_A5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_5_LPC_LFRAME_N_ESPI_CS0_N
+ {GPIO_SKL_H_GPP_A6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_6_IRQ_LPC_SERIRQ_ESPI_CS1_N
+ {GPIO_SKL_H_GPP_A7, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_7_IRQ_LPC_PIRQA_N_ESPI_ALERT0_N
+ {GPIO_SKL_H_GPP_A8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_8_FM_LPC_CLKRUN_N
+ {GPIO_SKL_H_GPP_A9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_9_CLK_24M_66M_LPC0_ESPI
+ {GPIO_SKL_H_GPP_A10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_10_TP_PCH_GPP_A_10
+ {GPIO_SKL_H_GPP_A11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_11_FM_LPC_PME_N
+ {GPIO_SKL_H_GPP_A12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_12_IRQ_PCH_SCI_WHEA_N
+ {GPIO_SKL_H_GPP_A13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_13_FM_EUP_LOT6_N
+ {GPIO_SKL_H_GPP_A14, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_14_RST_ESPI_RESET_N
+ {GPIO_SKL_H_GPP_A15, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_15_FM_SUSACK_N
+ {GPIO_SKL_H_GPP_A16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_16_TP_PCH_GPP_A_16
+ {GPIO_SKL_H_GPP_A17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_17_TP_PCH_GPP_A_16
+ {GPIO_SKL_H_GPP_A18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_18_FM_BIOS_ADV_FUNCTIONS
+// GPIO_SKL_H_GPP_A19 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_A20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_20_TP_PCH_GPP_A_20
+ {GPIO_SKL_H_GPP_A21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_21_TP_PCH_GPP_A_21
+ {GPIO_SKL_H_GPP_A22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_22_TP_PCH_GPP_A_22
+ {GPIO_SKL_H_GPP_A23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_23_TP_PCH_GPP_A_23
+ {GPIO_SKL_H_GPP_B0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_0_FM_PCH_CORE_VID_0
+ {GPIO_SKL_H_GPP_B1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_1_FM_PCH_CORE_VID_1
+ {GPIO_SKL_H_GPP_B2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_2_PU_PCH_VRALERT_N
+// GPIO_SKL_H_GPP_B3 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_B4 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_B5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_5_FM_PCH_INTERPOSER_SEL1
+ {GPIO_SKL_H_GPP_B6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_6_FM_PCH_INTERPOSER_SEL2
+ {GPIO_SKL_H_GPP_B7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_7_TP_PCH_GPP_B_7
+ {GPIO_SKL_H_GPP_B8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_8_TP_PCH_GPP_B_8
+ {GPIO_SKL_H_GPP_B9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_9_FM_BOARD_REV_ID2
+ {GPIO_SKL_H_GPP_B10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_10_FM_TPM_MOD_PRES_N
+// GPIO_SKL_H_GPP_B11 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_B12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_12_TP_SLP_S0_N
+ {GPIO_SKL_H_GPP_B13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_13_RST_PLTRST_N
+ {GPIO_SKL_H_GPP_B14, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_14_FM_PCH_BIOS_RCVR_SPKR
+ {GPIO_SKL_H_GPP_B15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_15_FM_CPU_ERR0_PCH_N
+ {GPIO_SKL_H_GPP_B16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_16_FM_CPU_ERR1_PCH_N
+ {GPIO_SKL_H_GPP_B17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_17_FM_CPU_ERR2_PCH_N
+ {GPIO_SKL_H_GPP_B18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_18_FM_NO_REBOOT
+ {GPIO_SKL_H_GPP_B19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_19_FM_BOARD_SKU_ID5
+ {GPIO_SKL_H_GPP_B20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone, GpioPadConfigLock}},//GPP_B_20_FM_BIOS_POST_CMPLT_N
+ {GPIO_SKL_H_GPP_B21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_21_TP_PCH_GPP_B_21
+ {GPIO_SKL_H_GPP_B22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_22_FM_PCH_BOOT_BIOS_DEVICE
+ {GPIO_SKL_H_GPP_B23, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_23_FM_PCH_BMC_THERMTRIP_EXI_STRAP_N
+// GPIO_SKL_H_GPP_C0 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_C1 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_C2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_2_PU_PCH_TLS_ENABLE_STRAP
+// GPIO_SKL_H_GPP_C3 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_C4 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_C5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_5_IRQ_SML0_ALERT_N
+// GPIO_SKL_H_GPP_C6 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_C7 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_C8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_8_FM_PASSWORD_CLEAR_N
+ {GPIO_SKL_H_GPP_C9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_9_FM_MFG_MODE
+ {GPIO_SKL_H_GPP_C10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone}},//GPP_C_10_FM_PCH_SATA_RAID_KEY
+ {GPIO_SKL_H_GPP_C11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_11_TP_FP_AUD_DETECT_N
+ {GPIO_SKL_H_GPP_C12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_12_FM_BOARD_REV_ID0
+ {GPIO_SKL_H_GPP_C13, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_13_FM_BOARD_REV_ID1
+ {GPIO_SKL_H_GPP_C14, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_14_FM_BMC_PCH_SCI_LPC_N
+ {GPIO_SKL_H_GPP_C15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_15_FM_RISER1_ID_0
+ {GPIO_SKL_H_GPP_C16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_16_FM_RISER1_ID_1
+ {GPIO_SKL_H_GPP_C17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_17_FM_RISER2_ID_0
+ {GPIO_SKL_H_GPP_C18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_18_FM_RISER2_ID_1
+ {GPIO_SKL_H_GPP_C19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_19_RST_SMB_HOST_PCH_MUX_N
+// GPIO_SKL_H_GPP_C20 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_C21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_21_RST_PCH_MIC_MUX_N
+ {GPIO_SKL_H_GPP_C22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_22_IRQ_BMC_PCH_SMI_LPC_N
+ {GPIO_SKL_H_GPP_C23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_23_FM_CPU_CATERR_DLY_LVT3_N
+ {GPIO_SKL_H_GPP_D0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_0_IRQ_BMC_PCH_NMI
+ {GPIO_SKL_H_GPP_D1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_1_FP_PWR_LED_N
+ {GPIO_SKL_H_GPP_D2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_2_FM_TBT_FORCE_PWR
+ {GPIO_SKL_H_GPP_D3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_3_FM_TBT_SCI_EVENT
+ {GPIO_SKL_H_GPP_D4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_4_FM_PLD_PCH_DATA
+ {GPIO_SKL_H_GPP_D5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_5_TP_PCH_GPP_D_5
+ {GPIO_SKL_H_GPP_D6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_6_TP_PCH_GPP_D_6
+ {GPIO_SKL_H_GPP_D7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_7_TP_PCH_GPP_D_7
+ {GPIO_SKL_H_GPP_D8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_8_FM_UPLINK_SEL
+ {GPIO_SKL_H_GPP_D9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_9_TP_PCH_GPP_D_9
+ {GPIO_SKL_H_GPP_D10, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_10_FM_M2_2_SSD_DEVSLP
+ {GPIO_SKL_H_GPP_D11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_11_TP_PCH_GPP_D_11
+ {GPIO_SKL_H_GPP_D12, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_12_SGPIO_SSATA_DATA1
+ {GPIO_SKL_H_GPP_D13, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_13_SMB_SMLINK5_STBY_LVC3_R_SCL
+ {GPIO_SKL_H_GPP_D14, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_14_SMB_SMLINK5_STBY_LVC3_R_SDA
+ {GPIO_SKL_H_GPP_D15, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_15_SGPIO_SSATA_DATA0
+ {GPIO_SKL_H_GPP_D16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_16_FM_ME_PFR_1
+ {GPIO_SKL_H_GPP_D17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_17_FM_ME_PFR_2
+ {GPIO_SKL_H_GPP_D18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_18_MCP_RESET_CTRL_N
+ {GPIO_SKL_H_GPP_D19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_19_FM_PS_PWROK_DLY_SEL_R
+ {GPIO_SKL_H_GPP_D20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_20_TP_PCH_GPP_D_20
+ {GPIO_SKL_H_GPP_D21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_21_TP_PCH_GPP_D_21
+ {GPIO_SKL_H_GPP_D22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_22_TP_PCH_GPP_D_22
+ {GPIO_SKL_H_GPP_D23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_23_TP_PCH_GPP_D_23
+ {GPIO_SKL_H_GPP_E0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_0_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_E1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_1_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_E2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_2_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_E3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_3_FM_ADR_TRIGGER_N
+ {GPIO_SKL_H_GPP_E4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_4_TP_PCH_GPP_E_4
+ {GPIO_SKL_H_GPP_E5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_5_TP_PCH_GPP_E_5
+ {GPIO_SKL_H_GPP_E6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//FM_CPU_ONOFF_INT_N - Used for the CPU online/offline feature.
+ {GPIO_SKL_H_GPP_E7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_7_FM_ADR_SMI_GPIO_R_N
+ {GPIO_SKL_H_GPP_E8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_8_LED_PCH_SATA_HDD_N
+ {GPIO_SKL_H_GPP_E9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_9_FM_OC0_USB_N
+ {GPIO_SKL_H_GPP_E10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_10_FM_OC1_USB_N
+ {GPIO_SKL_H_GPP_E11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_11_PU_OC2_USB_N
+ {GPIO_SKL_H_GPP_E12, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_12_PU_OC3_USB_N
+ {GPIO_SKL_H_GPP_F0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_0_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_1_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_2_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_3_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_4_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_5_IRQ_TPM_SPI_N
+ {GPIO_SKL_H_GPP_F6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_6_JTAG_PCH_PLD_TCK
+ {GPIO_SKL_H_GPP_F7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_7_JTAG_PCH_PLD_TDI
+ {GPIO_SKL_H_GPP_F8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_8_JTAG_PCH_PLD_TMS
+ {GPIO_SKL_H_GPP_F9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_9_JTAG_PCH_PLD_TDO
+ {GPIO_SKL_H_GPP_F10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_10_SGPIO_SATA_CLOCK
+ {GPIO_SKL_H_GPP_F11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_11_SGPIO_SATA_LOAD
+ {GPIO_SKL_H_GPP_F12, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_12_SGPIO_SATA_DATA1
+ {GPIO_SKL_H_GPP_F13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_13_SGPIO_SATA_DATA0
+ {GPIO_SKL_H_GPP_F14, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_14_LED_PCH_SSATA_HDD_N
+ {GPIO_SKL_H_GPP_F15, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_15_FM_OC4_USB_N
+ {GPIO_SKL_H_GPP_F16, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_16_PU_OC5_USB_N
+ {GPIO_SKL_H_GPP_F17, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_17_FM_OC6_USB_N
+ {GPIO_SKL_H_GPP_F18, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_18_PU_OC7_USB_N
+ {GPIO_SKL_H_GPP_F19, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_19_SMB_GBE_STBY_LVC3_SCL
+ {GPIO_SKL_H_GPP_F20, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_20_SMB_GBE_STBY_LVC3_SDA
+ {GPIO_SKL_H_GPP_F21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_21_TP_PCH_GPP_F_21
+ {GPIO_SKL_H_GPP_F22, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_22_SGPIO_SSATA_CLOCK
+ {GPIO_SKL_H_GPP_F23, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_23_SGPIO_SSATA_LOAD
+ {GPIO_SKL_H_GPP_G0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_0_TP_FAN_PCH_TACH0
+ {GPIO_SKL_H_GPP_G1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_1_TP_FAN_PCH_TACH1
+ {GPIO_SKL_H_GPP_G2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_2_TP_FAN_PCH_TACH2
+ {GPIO_SKL_H_GPP_G3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_3_TP_FAN_PCH_TACH3
+ {GPIO_SKL_H_GPP_G4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_4_TP_FAN_PCH_TACH4
+ {GPIO_SKL_H_GPP_G5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_5_TP_FAN_PCH_TACH5
+ {GPIO_SKL_H_GPP_G6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_6_TP_FAN_PCH_TACH6
+ {GPIO_SKL_H_GPP_G7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_7_TP_FAN_PCH_TACH7
+ {GPIO_SKL_H_GPP_G8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_8_TP_FAN_PCH_PWM0
+ {GPIO_SKL_H_GPP_G9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_9_TP_FAN_PCH_PWM1
+ {GPIO_SKL_H_GPP_G10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_10_TP_FAN_PCH_PWM2
+ {GPIO_SKL_H_GPP_G11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_11_TP_FAN_PCH_PWM3
+ {GPIO_SKL_H_GPP_G12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_12_FM_BOARD_SKU_ID0
+ {GPIO_SKL_H_GPP_G13, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_13_FM_BOARD_SKU_ID1
+ {GPIO_SKL_H_GPP_G14, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_14_FM_BOARD_SKU_ID2
+ {GPIO_SKL_H_GPP_G15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_15_FM_BOARD_SKU_ID3
+ {GPIO_SKL_H_GPP_G16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_16_FM_BOARD_SKU_ID4
+ {GPIO_SKL_H_GPP_G17, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_17_FM_ADR_COMPLETE
+ {GPIO_SKL_H_GPP_G18, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_18_IRQ_NMI_EVENT_N
+ {GPIO_SKL_H_GPP_G19, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_19_IRQ_SMI_ACTIVE_N
+// GPIO_SKL_H_GPP_G20 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_G21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_21_FM_BIOS_IMAGE_SWAP_N
+ {GPIO_SKL_H_GPP_G22, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_22_FM_M2_2_SSD_DEVSLP
+ {GPIO_SKL_H_GPP_G23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_23_TP_PCH_GPP_G_23
+ {GPIO_SKL_H_GPP_H0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_0_FM_PCH_MGPIO_TEST2
+ {GPIO_SKL_H_GPP_H1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_1_FM_SWAP_OVERRIDE_N
+ {GPIO_SKL_H_GPP_H2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_2_FM_PCH_MGPIO_TEST0
+ {GPIO_SKL_H_GPP_H3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_3_FM_PCH_MGPIO_TEST1
+ {GPIO_SKL_H_GPP_H4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_4_FM_PCH_MGPIO_TEST4
+// GPIO_SKL_H_GPP_H5 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_H6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_6_FM_CLKREQ_M2_2_N
+ {GPIO_SKL_H_GPP_H7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_7_FM_PCH_MGPIO_TEST3
+ {GPIO_SKL_H_GPP_H8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_8_FM_CLKREQ_NIC1_N
+ {GPIO_SKL_H_GPP_H9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_9_FM_PCH_MGPIO_TEST5
+// GPIO_SKL_H_GPP_H10 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_H11 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_H12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_12_FM_ESPI_FLASH_MODE
+// GPIO_SKL_H_GPP_H13 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_H14 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_H15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_15_PU_ADR_TIMER_HOLD_OFF_N
+// GPIO_SKL_H_GPP_H16 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_H17 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_H18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_18_FM_LT_KEY_DOWNGRADE_N
+ {GPIO_SKL_H_GPP_H19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_19_FM_PCH_10GBE_PCI_DISABLE_N
+ {GPIO_SKL_H_GPP_H20, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_20_FM_SSATA_PCIE_M2_1_SEL
+ {GPIO_SKL_H_GPP_H21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_21_FM_PCH_10GBE_LAN_DISABLE_N
+ {GPIO_SKL_H_GPP_H22, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_22_FM_SSATA_PCIE_M2_2_SEL
+ {GPIO_SKL_H_GPP_H23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_23_TP_PCH_GPP_H_23
+ {GPIO_SKL_H_GPP_I0, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_0_TP_PCH_GPP_I_0
+ {GPIO_SKL_H_GPP_I1, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_1_TP_PCH_GPP_I_1
+ {GPIO_SKL_H_GPP_I2, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_2_TP_PCH_GPP_I_2
+ {GPIO_SKL_H_GPP_I3, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_3_TP_PCH_GPP_I_3
+ {GPIO_SKL_H_GPP_I4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//RST_DO_RST_IN_NODE
+ {GPIO_SKL_H_GPP_I5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//RST_DO_RST_OUT_NODE
+ {GPIO_SKL_H_GPP_I6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//RST_RESET_DONE_NODE
+ {GPIO_SKL_H_GPP_I7, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_7_TP_PCH_GPP_I_7
+ {GPIO_SKL_H_GPP_I8, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_8_FM_PCH_10GBE_PCI_DISABLE_N
+ {GPIO_SKL_H_GPP_I9, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_9_FM_PCH_10GBE_LAN_DISABLE_N
+ {GPIO_SKL_H_GPP_I10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_10_TP_PCH_GPP_I_10
+// GPIO_SKL_H_GPP_I11 - Not Owned by BIOS
+// GPIO_SKL_H_GPD0 - Not Owned by BIOS
+ {GPIO_SKL_H_GPD1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_1_PU_ACPRESENT
+ {GPIO_SKL_H_GPD2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_2_FM_LAN_WAKE_N
+ {GPIO_SKL_H_GPD3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_3_FM_PCH_PWRBTN_N
+ {GPIO_SKL_H_GPD4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_4_FM_SLPS3_N
+ {GPIO_SKL_H_GPD5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_5_FM_SLPS4_N
+ {GPIO_SKL_H_GPD6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_6_FM_SLPA_N
+ {GPIO_SKL_H_GPD7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_7_TP_GPD_7
+ {GPIO_SKL_H_GPD8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_8_TP_GPD_8_SUSCLK
+ {GPIO_SKL_H_GPD9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_9_TP_GPD_9_SLP
+ {GPIO_SKL_H_GPD10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_10_FM_SLPS5_N
+ {GPIO_SKL_H_GPD11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_11_FM_PHY_DISABLE_N
+ {GPIO_SKL_H_GPP_J0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_0_TP_PCH_GPP_J_0
+ {GPIO_SKL_H_GPP_J1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_1_TP_PCH_GPP_J_1
+ {GPIO_SKL_H_GPP_J2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_2_TP_PCH_GPP_J_2
+ {GPIO_SKL_H_GPP_J3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_3_TP_PCH_GPP_J_3
+ {GPIO_SKL_H_GPP_J4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_4_TP_PCH_GPP_J_4
+ {GPIO_SKL_H_GPP_J5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_5_TP_PCH_GPP_J_5
+ {GPIO_SKL_H_GPP_J6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_6_TP_PCH_GPP_J_6
+ {GPIO_SKL_H_GPP_J7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_7_TP_PCH_GPP_J_7
+ {GPIO_SKL_H_GPP_J8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_8_TP_PCH_GPP_J_8
+ {GPIO_SKL_H_GPP_J9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_9_TP_PCH_GPP_J_9
+ {GPIO_SKL_H_GPP_J10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_10_TP_PCH_GPP_J_10
+ {GPIO_SKL_H_GPP_J11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_11_TP_PCH_GPP_J_11
+ {GPIO_SKL_H_GPP_J12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_12_TP_PCH_GPP_J_12
+ {GPIO_SKL_H_GPP_J13, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_13_TP_PCH_GPP_J_13
+ {GPIO_SKL_H_GPP_J14, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_14_TP_PCH_GPP_J_14
+ {GPIO_SKL_H_GPP_J15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_15_TP_PCH_GPP_J_15
+ {GPIO_SKL_H_GPP_J16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_16_TP_PCH_GPP_J_16
+ {GPIO_SKL_H_GPP_J17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_17_TP_PCH_GPP_J_17
+ {GPIO_SKL_H_GPP_J18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_18_TP_PCH_GPP_J_18
+ {GPIO_SKL_H_GPP_J19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_19_TP_PCH_GPP_J_19
+ {GPIO_SKL_H_GPP_J20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_20_TP_PCH_GPP_J_20
+ {GPIO_SKL_H_GPP_J21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_21_TP_PCH_GPP_J_21
+ {GPIO_SKL_H_GPP_J22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_22_TP_PCH_GPP_J_22
+ {GPIO_SKL_H_GPP_J23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_23_TP_PCH_GPP_J_23
+ {GPIO_SKL_H_GPP_K0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_0_CLK_50M_CKMNG_PCH
+ {GPIO_SKL_H_GPP_K1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_1_RMII_BMC_PCH_TXD0
+ {GPIO_SKL_H_GPP_K2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_2_RMII_BMC_PCH_TXD1
+ {GPIO_SKL_H_GPP_K3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_3_RMII_BMC_PCH_TX_EN
+ {GPIO_SKL_H_GPP_K4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_4_RMII_PCH_BMC_CRS_DV
+ {GPIO_SKL_H_GPP_K5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_5_RMII_PCH_BMC_RXD0
+ {GPIO_SKL_H_GPP_K6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_6_RMII_PCH_BMC_RXD1
+ {GPIO_SKL_H_GPP_K7, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_7_RMII_PCH_BMC_RX_ER
+ {GPIO_SKL_H_GPP_K8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_8_RMII_PCH_CONN_ARB_IN
+ {GPIO_SKL_H_GPP_K9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_9_RMII_PCH_CONN_ARB_OUT
+ {GPIO_SKL_H_GPP_K10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_10_RST_PCIE_PCH_PERST_N
+// GPIO_SKL_H_GPP_K11 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_L2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_2_TRC_2CH0_D0
+ {GPIO_SKL_H_GPP_L3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_3_TRC_2CH0_D1
+ {GPIO_SKL_H_GPP_L4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_4_TRC_2CH0_D2
+ {GPIO_SKL_H_GPP_L5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_5_TRC_2CH0_D3
+ {GPIO_SKL_H_GPP_L6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_6_TRC_2CH0_D4
+ {GPIO_SKL_H_GPP_L7, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_7_TRC_2CH0_D5
+ {GPIO_SKL_H_GPP_L8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_8_TRC_2CH0_D6
+ {GPIO_SKL_H_GPP_L9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_9_TRC_2CH0_D7
+ {GPIO_SKL_H_GPP_L10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_10_TRC_2CH0_CLK
+ {GPIO_SKL_H_GPP_L11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_11_TRC_2CH1_D0
+ {GPIO_SKL_H_GPP_L12, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_12_TRC_2CH1_D1
+ {GPIO_SKL_H_GPP_L13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_13_TRC_2CH1_D2
+ {GPIO_SKL_H_GPP_L14, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_14_TRC_2CH1_D3
+ {GPIO_SKL_H_GPP_L15, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_15_TRC_2CH1_D4
+ {GPIO_SKL_H_GPP_L16, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_16_TRC_2CH1_D5
+ {GPIO_SKL_H_GPP_L17, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_17_TRC_2CH1_D6
+ {GPIO_SKL_H_GPP_L18, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_18_TRC_2CH1_D7
+ {GPIO_SKL_H_GPP_L19, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_19_TRC_2CH1_CLK
+ };
+
+
+EFI_STATUS
+TypeCooperCityRPInstallGpioData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformGpioInitDataGuid,
+ &mGpioTableCooperCityRP,
+ sizeof(mGpioTableCooperCityRP)
+ );
+ Status = PcdSet32S(PcdOemSku_GPIO_TABLE_SIZE,sizeof(mGpioTableCooperCityRP));
+ ASSERT_EFI_ERROR(Status);
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c
new file mode 100644
index 0000000000..06245aebbe
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c
@@ -0,0 +1,393 @@
+/** @file
+ IIO Config Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaIioConfigLib.h>
+#include <IioPlatformData.h>
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Mcp0,
+ Iio_Mcp1,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ VPP_PORT_0 = 0,
+ VPP_PORT_1,
+ VPP_PORT_2,
+ VPP_PORT_3
+} VPP_PORT;
+
+#define ENABLE 1
+#define DISABLE 0
+#define NO_SLT_IMP 0xFF
+#define SLT_IMP 1
+#define HIDE 1
+#define NOT_HIDE 0
+#define VPP_PORT_0 0
+#define VPP_PORT_1 1
+#define VPP_PORT_MAX 0xFF
+#define VPP_ADDR_MAX 0xFF
+#define PWR_VAL_MAX 0xFF
+#define PWR_SCL_MAX 0xFF
+
+
+
+//
+// config file : Cooper_City_PCIe_Slot_Config.xlsx
+// config sheet : Whitley_SKX_PrePO_IntA
+//
+static IIO_BIFURCATION_DATA_ENTRY_EX IioBifurcationTable[] =
+{
+
+ { Iio_Socket0, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, 0 , 0x76 , 0xE2 , 4 },
+
+ { Iio_Socket1, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, 0 , 0x7C , 0xE2 , 4 },
+ { Iio_Socket1, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, 0 , 0x70 , 0xE2 , 4 },
+ { Iio_Socket1, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+ { Iio_Socket2, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket2, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket2, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket2, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, 0 , 0x76 , 0xE2 , 4 },
+
+ { Iio_Socket3, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, 0 , 0x7C , 0xE2 , 4 },
+ { Iio_Socket3, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, 0 , 0x70 , 0xE2 , 4 },
+ { Iio_Socket3, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket3, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+#if MAX_SOCKET > 4
+ { Iio_Socket4, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket4, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket4, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket4, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, 0 , 0x76 , 0xE2 , 4 },
+
+ { Iio_Socket5, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, 0 , 0x7C , 0xE2 , 4 },
+ { Iio_Socket5, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, 0 , 0x70 , 0xE2 , 4 },
+ { Iio_Socket5, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket5, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+ { Iio_Socket6, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket6, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket6, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket6, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, 0 , 0x76 , 0xE2 , 4 },
+
+ { Iio_Socket7, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, 0 , 0x7C , 0xE2 , 4 },
+ { Iio_Socket7, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, 0 , 0x70 , 0xE2 , 4 },
+ { Iio_Socket7, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket7, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+#endif // MAX_SOCKET > 4
+};
+
+
+static IIO_SLOT_CONFIG_DATA_ENTRY_EX IioSlotTable[] = {
+ // Port Index | Slot |Interlock |power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard |ExtnCard |ExtnCard |ExtnCard |ExtnCard Retimer|ExtnCard Retimer|ExtnCard |ExtnCard Hotplug|ExtnCard Hotplug|Max Retimer|
+ // | | |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address |Width |Hotplug |Vpp Port |Vpp Address | |
+
+ {SOCKET_0_INDEX +
+ PORT_1A_INDEX, 2 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2A_INDEX, 6 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_4A_INDEX, 7 , DISABLE , 0 , 200 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+
+ {SOCKET_1_INDEX +
+ PORT_1A_INDEX, 8 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x44 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x44 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x46 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x46 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_2A_INDEX, 4 , DISABLE , 0 , 200 , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4A_INDEX, 9 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+
+ {SOCKET_2_INDEX +
+ PORT_1A_INDEX, 2 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_2A_INDEX, 6 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_4A_INDEX, 7 , DISABLE , 0 , 200 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_2_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+
+ {SOCKET_3_INDEX +
+ PORT_1A_INDEX, 8 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x44 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x44 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x46 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x46 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_2A_INDEX, 4 , DISABLE , 0 , 200 , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_4A_INDEX, 9 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_3_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+
+
+#if MAX_SOCKET > 4
+ {SOCKET_4_INDEX +
+ PORT_1A_INDEX, 2 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_2A_INDEX, 6 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_4A_INDEX, 7 , DISABLE , 0 , 200 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_4_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+
+ {SOCKET_5_INDEX +
+ PORT_1A_INDEX, 8 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x44 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x44 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x46 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x46 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_2A_INDEX, 4 , DISABLE , 0 , 200 , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_4A_INDEX, 9 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_5_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+
+ {SOCKET_6_INDEX +
+ PORT_1A_INDEX, 2 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_2A_INDEX, 6 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_4A_INDEX, 7 , DISABLE , 0 , 200 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_6_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+
+ {SOCKET_7_INDEX +
+ PORT_1A_INDEX, 8 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x44 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x44 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x46 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x46 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_2A_INDEX, 4 , DISABLE , 0 , 200 , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , DISABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_4A_INDEX, 9 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_7_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+#endif // MAX_SOCKET > 4
+};
+
+
+EFI_STATUS
+UpdateCooperCityRPIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+ )
+{
+ return EFI_SUCCESS;
+}
+
+PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX TypeCooperCityRPIioConfigTable =
+{
+ PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE,
+ PLATFORM_IIO_CONFIG_UPDATE_VERSION_2,
+
+ IioBifurcationTable,
+ sizeof(IioBifurcationTable),
+ UpdateCooperCityRPIioConfig,
+ IioSlotTable,
+ sizeof(IioSlotTable)
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+TypeCooperCityRPIioPortBifurcationInit (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_1,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_2,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_3,
+ &TypeCooperCityRPIioConfigTable,
+ sizeof(TypeCooperCityRPIioConfigTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c
new file mode 100644
index 0000000000..19f9720a3b
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c
@@ -0,0 +1,241 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <KtiSetupDefinitions.h>
+#include <UbaKti.h>
+
+extern EFI_GUID gPlatformKtiEparamUpdateDataGuid;
+
+ALL_LANES_EPARAM_LINK_INFO CooperCityRP2SAllLanesEparamTable[] = {
+ //
+ //SocketID, Freq, Link, TXEQ, CTLEPEAK
+ //
+
+ //
+ // Socket 0
+ //
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2C33383F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D37353F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2D37353F, ADAPTIVE_CTLE}, // temporary data
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2D37353F, ADAPTIVE_CTLE}, // temporary data
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2C35363F, ADAPTIVE_CTLE}, // temporary data
+
+ //
+ // Socket 1
+ //
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2C33383F, ADAPTIVE_CTLE}, // temporary data
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2B35353F, ADAPTIVE_CTLE}, // temporary data
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D35373F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2D35373F, ADAPTIVE_CTLE}, // temporary data
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A2F3A3F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2C35363F, ADAPTIVE_CTLE}
+};
+
+ALL_LANES_EPARAM_LINK_INFO CooperCityRP4SAllLanesEparamTable[] = {
+ //
+ //SocketID, Freq, Link, TXEQ, CTLEPEAK
+ //
+
+ //
+ // Socket 0
+ //
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2A30393F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D37353F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2A34353F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2B33373F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 1
+ //
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2D35373F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2C34373F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2C32393F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 2
+ //
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2B31393F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D36363F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B34363F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 3
+ //
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2A31383F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2C36353F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A2F3A3F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE}
+};
+
+ALL_LANES_EPARAM_LINK_INFO CooperCityRP8SAllLanesEparamTable[] = {
+ //
+ //SocketID, Freq, Link, TXEQ, CTLEPEAK
+ //
+
+ //
+ // Socket 0
+ //
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2A30393F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D37353F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2A34353F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2B33373F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 1
+ //
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2D35373F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2C34373F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2C32393F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 2
+ //
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2B31393F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D36363F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B34363F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 3
+ //
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2A31383F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2C36353F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A2F3A3F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 4
+ //
+ {0x4, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2A30393F, ADAPTIVE_CTLE},
+ {0x4, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x4, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D37353F, ADAPTIVE_CTLE},
+ {0x4, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2A34353F, ADAPTIVE_CTLE},
+ {0x4, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2B33373F, ADAPTIVE_CTLE},
+ {0x4, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 5
+ //
+ {0x5, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2D35373F, ADAPTIVE_CTLE},
+ {0x5, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x5, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2C34373F, ADAPTIVE_CTLE},
+ {0x5, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x5, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2C32393F, ADAPTIVE_CTLE},
+ {0x5, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 6
+ //
+ {0x6, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2B31393F, ADAPTIVE_CTLE},
+ {0x6, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x6, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2D36363F, ADAPTIVE_CTLE},
+ {0x6, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B34363F, ADAPTIVE_CTLE},
+ {0x6, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x6, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 7
+ //
+ {0x7, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK0), 0x2A31383F, ADAPTIVE_CTLE},
+ {0x7, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK1), 0x2C36353F, ADAPTIVE_CTLE},
+ {0x7, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK2), 0x2A32373F, ADAPTIVE_CTLE},
+ {0x7, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK3), 0x2B35353F, ADAPTIVE_CTLE},
+ {0x7, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK4), 0x2A2F3A3F, ADAPTIVE_CTLE},
+ {0x7, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT), (1 << KTI_LINK5), 0x2A33363F, ADAPTIVE_CTLE}
+};
+
+//PER_LANE_EPARAM_LINK_INFO KtiCooperCityRPPerLaneEparamTable[] = { 0 };
+PLATFORM_KTI_EPARAM_UPDATE_TABLE TypeCooperCityRP2SKtiEparamUpdate =
+{
+ PLATFORM_KTIEP_UPDATE_SIGNATURE,
+ PLATFORM_KTIEP_UPDATE_VERSION,
+ CooperCityRP2SAllLanesEparamTable,
+ sizeof (CooperCityRP2SAllLanesEparamTable),
+ NULL,
+ 0
+};
+
+PLATFORM_KTI_EPARAM_UPDATE_TABLE TypeCooperCityRP4SKtiEparamUpdate =
+{
+ PLATFORM_KTIEP_UPDATE_SIGNATURE,
+ PLATFORM_KTIEP_UPDATE_VERSION,
+ CooperCityRP4SAllLanesEparamTable,
+ sizeof (CooperCityRP4SAllLanesEparamTable),
+ NULL,
+ 0
+};
+
+PLATFORM_KTI_EPARAM_UPDATE_TABLE TypeCooperCityRP8SKtiEparamUpdate =
+{
+ PLATFORM_KTIEP_UPDATE_SIGNATURE,
+ PLATFORM_KTIEP_UPDATE_VERSION,
+ CooperCityRP8SAllLanesEparamTable,
+ sizeof (CooperCityRP8SAllLanesEparamTable),
+ NULL,
+ 0
+};
+
+
+EFI_STATUS
+TypeCooperCityRPInstallKtiEparamData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi,
+ IN UINT8 PlatformCapabilities
+ )
+{
+ EFI_STATUS Status;
+ PLATFORM_KTI_EPARAM_UPDATE_TABLE *KtiEparamTable;
+ UINTN KtiEparamTableSize;
+
+ switch (PlatformCapabilities) {
+ case PLATFORM_CAPABILITY_2_SOCKET:
+ KtiEparamTable = &TypeCooperCityRP2SKtiEparamUpdate;
+ KtiEparamTableSize = sizeof (TypeCooperCityRP2SKtiEparamUpdate);
+ break;
+
+ case PLATFORM_CAPABILITY_4_SOCKET:
+ KtiEparamTable = &TypeCooperCityRP4SKtiEparamUpdate;
+ KtiEparamTableSize = sizeof (TypeCooperCityRP4SKtiEparamUpdate);
+ break;
+
+ case PLATFORM_CAPABILITY_8_SOCKET:
+ default:
+ KtiEparamTable = &TypeCooperCityRP8SKtiEparamUpdate;
+ KtiEparamTableSize = sizeof (TypeCooperCityRP8SKtiEparamUpdate);
+ break;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformKtiEparamUpdateDataGuid,
+ KtiEparamTable,
+ KtiEparamTableSize
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c
new file mode 100644
index 0000000000..27c5a36944
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c
@@ -0,0 +1,259 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/MemVrSvidMapLib.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/UbaPcdUpdateLib.h>
+#include <Library/PcdLib.h>
+#include <UncoreCommonIncludes.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <CpuAndRevisionDefines.h>
+
+#define GPIO_SKL_H_GPP_B20 0x01010014
+
+VOID TypeCooperCityRPPlatformUpdateVrIdAddress (VOID);
+
+/**
+ Update CooperCity VR ID SVID Information
+
+ retval N/A
+**/
+VOID
+TypeCooperCityRPPlatformUpdateVrIdAddress (
+ VOID
+ )
+{
+ MEM_SVID_MAP *MemSvidMap = NULL;
+ UINTN Size = 0;
+
+ Size = sizeof (MEM_SVID_MAP);
+ MemSvidMap = (MEM_SVID_MAP *) PcdGetPtr (PcdMemSrvidMap);
+ if (MemSvidMap == NULL) {
+ DEBUG ((EFI_D_ERROR, "UpdateVrIdAddress() - PcdMemSrvidMap == NULL\n"));
+ return;
+ }
+ /*
+ Map VR ID Address to Memory controller
+ The mailbox command can support up to 4 DDR VR ID's, 0x10, 0x12, 0x14, and 0x16.
+ Whitley PHAS indicates that Whitley (like Purley) only connects 2 VRs (VR ID's 0x10 and 0x12).
+ */
+
+ MemSvidMap->Socket[0].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[0].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[1].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[1].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[2].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[2].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[3].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[3].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[4].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[4].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[5].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[5].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[6].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[6].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[7].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[7].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+
+ PcdSetPtrS (PcdMemSrvidMap, &Size, (VOID *) MemSvidMap);
+}
+
+EFI_STATUS
+TypeCooperCityRPPlatformPcdUpdateCallback (
+ VOID
+ )
+{
+ CHAR8 FamilyName[] = "WildcatPass";
+
+ CHAR8 BoardName[] = "S2600WT ";
+
+ UINTN Size;
+ UINT32 Data32;
+ CHAR16 PlatformName[] = L"TypeCooperCityRP";
+ UINTN PlatformNameSize = 0;
+ UINTN PlatformFeatureFlag = 0;
+ UINT8 SKUType = 0;
+ UINT8 SKUTypeSockets = 0;
+
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+
+ EFI_STATUS Status;
+
+ //#Integer for BoardID, must match the SKU number and be unique.
+ Status = PcdSet16S (PcdOemSkuBoardID , TypeCooperCityRP);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSet16S (PcdOemSkuBoardFamily , 0x30);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ GetPlatformCapabilitiesInfo(&SKUType, DynamicSiLibraryPpi);
+ DEBUG ((DEBUG_INFO, " PcdOemSkuBoardSocketCount sku type %d\n", SKUType));
+ if (SKUType == PLATFORM_CAPABILITY_2_SOCKET) {
+ SKUTypeSockets = 2;
+ } else {
+ SKUTypeSockets = (SKUType == PLATFORM_CAPABILITY_4_SOCKET) ? 4: 8;
+ }
+ //# Number of Sockets on Board.
+ Status = PcdSet32S (PcdOemSkuBoardSocketCount , SKUTypeSockets);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ // Max channel and max DIMM
+ Status = PcdSet32S (PcdOemSkuMaxChannel , 6);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSet32S (PcdOemSkuMaxDimmPerChannel , 2);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSetBoolS (PcdOemSkuDimmLayout, TRUE);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //Update Onboard Video Controller PCI Ven_id, Dev_id
+ Status = PcdSet16S (PcdOnboardVideoPciVendorId, 0x1A03);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PcdSet16S (PcdOnboardVideoPciDeviceId, 0x2000);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //#
+ //# Misc.
+ //#
+ //# V_PCIE_PORT_PXPSLOTCTRL_ATNLED_OFF
+ Status = PcdSet16S (PcdOemSkuMrlAttnLed , 0xc0);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //SDP Active Flag
+ Status = PcdSet8S (PcdOemSkuSdpActiveFlag , 0x0);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# Zero terminated string to ID family
+ Size = AsciiStrSize (FamilyName);
+ Status = PcdSetPtrS (PcdOemSkuFamilyName , &Size, FamilyName);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# Zero terminated string to Board Name
+ Size = AsciiStrSize (BoardName);
+ Status = PcdSetPtrS (PcdOemSkuBoardName , &Size, BoardName);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ PlatformNameSize = sizeof (PlatformName);
+ Status = PcdSet32S (PcdOemSkuPlatformNameSize , (UINT32)PlatformNameSize);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSetPtrS (PcdOemSkuPlatformName , &PlatformNameSize, PlatformName);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# FeaturesBasedOnPlatform
+ Status = PcdSet32S (PcdOemSkuPlatformFeatureFlag , (UINT32)PlatformFeatureFlag);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# Assert GPIO
+ Data32 = 0;
+ Status = PcdSet32S (PcdOemSkuAssertPostGPIOValue, Data32);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSet32S (PcdOemSkuAssertPostGPIO, GPIO_SKL_H_GPP_B20);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# UplinkPortIndex
+ Status = PcdSet8S (PcdOemSkuUplinkPortIndex, 5);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ DEBUG ((EFI_D_INFO, "Uba Callback: PlatformPcdUpdateCallback is called!\n"));
+ Status = TypeCooperCityRPPlatformUpdateAcpiTablePcds ();
+
+ //# Board Type Bit Mask
+ PcdSet32S (PcdBoardTypeBitmask, 0);
+ ASSERT_EFI_ERROR(Status);
+
+ if (DynamicSiLibraryPpi->IsCpuAndRevision (CPU_CPX, REV_ALL)) {
+ // Update VR ID Address
+ TypeCooperCityRPPlatformUpdateVrIdAddress ();
+ }
+
+ return Status;
+}
+
+PLATFORM_PCD_UPDATE_TABLE TypeCooperCityRPPcdUpdateTable =
+{
+ PLATFORM_PCD_UPDATE_SIGNATURE,
+ PLATFORM_PCD_UPDATE_VERSION,
+ TypeCooperCityRPPlatformPcdUpdateCallback
+};
+
+EFI_STATUS
+TypeCooperCityRPInstallPcdData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPcdConfigDataGuid,
+ &TypeCooperCityRPPcdUpdateTable,
+ sizeof(TypeCooperCityRPPcdUpdateTable)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c
new file mode 100644
index 0000000000..ca57086394
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c
@@ -0,0 +1,81 @@
+/** @file
+ Pch Early update.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+
+#include <Library/UbaPchEarlyUpdateLib.h>
+
+#include <PchAccess.h>
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+EFI_STATUS
+TypeCooperCityRPPchLanConfig (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+)
+{
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+ EFI_STATUS Status;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ DynamicSiLibraryPpi->PchDisableGbe ();
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+TypeCooperCityRPOemInitLateHook (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+)
+{
+ return EFI_SUCCESS;
+}
+
+
+PLATFORM_PCH_EARLY_UPDATE_TABLE TypeCooperCityRPPchEarlyUpdateTable =
+{
+ PLATFORM_PCH_EARLY_UPDATE_SIGNATURE,
+ PLATFORM_PCH_EARLY_UPDATE_VERSION,
+ TypeCooperCityRPPchLanConfig,
+ TypeCooperCityRPOemInitLateHook
+};
+
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+EFIAPI
+TypeCooperCityRPPchEarlyUpdate(
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+ )
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPchEarlyConfigDataGuid,
+ &TypeCooperCityRPPchEarlyUpdateTable,
+ sizeof(TypeCooperCityRPPchEarlyUpdateTable)
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h
new file mode 100644
index 0000000000..8cdc0cfb53
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h
@@ -0,0 +1,96 @@
+/** @file
+ PeiBoardInit.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PEI_BOARD_INIT_PEIM_H_
+#define _PEI_BOARD_INIT_PEIM_H_
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/HobLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/GpioLib.h>
+#include <GpioPinsSklH.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+#define PLATFORM_CAPABILITY_UNDEFINED 0
+#define PLATFORM_CAPABILITY_2_SOCKET 1
+#define PLATFORM_CAPABILITY_4_SOCKET 2
+#define PLATFORM_CAPABILITY_8_SOCKET 3
+
+STATIC CHAR8 *PlatformCapabilitiesStr[] = {
+ "Unknown", // PLATFORM_CAPABILITY_UNDEFINED
+ "2-Socket", // PLATFORM_CAPABILITY_2_SOCKET
+ "4-Socket", // PLATFORM_CAPABILITY_4_SOCKET
+ "8-Socket" // PLATFORM_CAPABILITY_8_SOCKET
+};
+
+//TypeCooperCityRP
+EFI_STATUS
+GetPlatformCapabilitiesInfo (
+ IN OUT UINT8 *PlatformCapabilities,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi
+ );
+
+EFI_STATUS
+TypeCooperCityRPPlatformUpdateUsbOcMappings (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeCooperCityRPPlatformUpdateAcpiTablePcds (
+ VOID
+);
+
+EFI_STATUS
+TypeCooperCityRPInstallGpioData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+) ;
+
+EFI_STATUS
+TypeCooperCityRPInstallClockgenData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeCooperCityRPInstallPcdData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeCooperCityRPInstallSoftStrapData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeCooperCityRPIioPortBifurcationInit (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeCooperCityRPInstallSlotTableData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+EFI_STATUS
+TypeCooperCityRPInstallKtiEparamData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi,
+ IN UINT8 PlatformCapabilities
+);
+
+EFI_STATUS
+EFIAPI
+TypeCooperCityRPPchEarlyUpdate(
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+#endif // _PEI_BOARD_INIT_PEIM_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c
new file mode 100644
index 0000000000..d76e2f29a3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c
@@ -0,0 +1,224 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+
+/**
+ The constructor function for Board Init Libray.
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @retval EFI_SUCCESS Table initialization successfully.
+ @retval EFI_OUT_OF_RESOURCES No enough memory to initialize table.
+**/
+
+#include "PeiBoardInit.h"
+#include <UncoreCommonIncludes.h>
+#include <Library/PchMultiPchBase.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+
+/**
+
+ Identifies platform capabilites if the platform is a 2-socket standalone
+ modular board, or a 4-socket modular boards, or 8-socket modular boards.
+
+ @param[in,out] PlatformCapabilities Holds the information about platform being
+ a standalone 2S, or 4S/8S modular boards.
+
+ @retval EFI_SUCCESS Platform Capabilities is updated.
+
+**/
+EFI_STATUS
+GetPlatformCapabilitiesInfo (
+ IN OUT UINT8 *PlatformCapabilities,
+ IN DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi
+ )
+{
+ GPIO_CONFIG PadConfig;
+ UINT32 GpioState;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ *PlatformCapabilities = PLATFORM_CAPABILITY_UNDEFINED;
+
+ PadConfig.PadMode = GpioPadModeGpio;
+ PadConfig.HostSoftPadOwn = GpioHostOwnGpio;
+ PadConfig.Direction = GpioDirIn;
+ PadConfig.OutputState = GpioOutDefault;
+ PadConfig.InterruptConfig = GpioIntDefault;
+ PadConfig.PowerConfig = GpioResetDefault;
+ PadConfig.ElectricalConfig = GpioTermDefault;
+ PadConfig.LockConfig = GpioLockDefault;
+ PadConfig.OtherSettings = GpioRxRaw1Default;
+
+ //
+ // GPP_D6 is standalone signal. GPP_D7 is 4S/8S signal.
+ // GPP_D7 | GPP_D6
+ // =======================
+ // Don't care | 0 (2-socket)
+ // 1 | 1 (4-socket)
+ // 0 | 1 (8-socket)
+ //
+
+ if (DynamicSiLibraryPpi->IsSimicsEnvironment ()) {
+ //
+ // Workaround until GPIO pins new definition are implemented in Simics
+ //
+ *PlatformCapabilities = PLATFORM_CAPABILITY_8_SOCKET;
+ return EFI_SUCCESS;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioSetPadConfigByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_D6, &PadConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_D6, &GpioState);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ DEBUG ((DEBUG_INFO, "GPP_D6:%d\n", GpioState));
+
+ if (GpioState == 0) {
+ *PlatformCapabilities = PLATFORM_CAPABILITY_2_SOCKET;
+ return Status;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioSetPadConfigByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_D7, &PadConfig);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = DynamicSiLibraryPpi->GpioGetInputValueByPchId (PCH_LEGACY_ID, GPIO_SKL_H_GPP_D7, &GpioState);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ DEBUG ((DEBUG_INFO, "GPP_D7:%d\n", GpioState));
+
+ *PlatformCapabilities = (GpioState == 1) ? PLATFORM_CAPABILITY_4_SOCKET : PLATFORM_CAPABILITY_8_SOCKET;
+
+ return Status;
+}
+
+
+EFI_STATUS
+EFIAPI
+TypeCooperCityRPPeiBoardInitLibConstructor (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi;
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ UINT8 SocketIndex;
+ CONST CHAR8 *Str;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+
+ if (PlatformInfo->BoardId == TypeCooperCityRP) {
+
+ DEBUG ((DEBUG_INFO, "PEI UBA init BoardId 0x%X: CooperCityRP\n", PlatformInfo->BoardId));
+
+ PlatformInfo->MaxNumOfPchs = 4;
+ ASSERT (PlatformInfo->MaxNumOfPchs <= PCH_MAX);
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = UbaConfigPpi->InitSku (
+ UbaConfigPpi,
+ PlatformInfo->BoardId,
+ NULL,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = TypeCooperCityRPInstallGpioData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeCooperCityRPInstallPcdData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeCooperCityRPInstallSoftStrapData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeCooperCityRPPchEarlyUpdate (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeCooperCityRPPlatformUpdateUsbOcMappings (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeCooperCityRPIioPortBifurcationInit (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeCooperCityRPInstallSlotTableData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //
+ // Set default memory type connector to DimmConnectorSmt
+ //
+ (*PeiServices)->SetMem (&PlatformInfo->MemoryConnectorType, sizeof (PlatformInfo->MemoryConnectorType), DimmConnectorSmt);
+
+ //
+ // Initialize InterposerType to InterposerUnknown
+ //
+ for (SocketIndex = 0; SocketIndex < MAX_SOCKET; ++SocketIndex) {
+ PlatformInfo->InterposerType[SocketIndex] = InterposerUnknown;
+ }
+
+ GetPlatformCapabilitiesInfo (&PlatformInfo->PlatformCapabilities, DynamicSiLibraryPpi);
+
+ Str = (PlatformInfo->PlatformCapabilities <= PLATFORM_CAPABILITY_8_SOCKET) ? \
+ PlatformCapabilitiesStr[PlatformInfo->PlatformCapabilities] : PlatformCapabilitiesStr[PLATFORM_CAPABILITY_UNDEFINED];
+ DEBUG ((DEBUG_INFO, "PlatformCapabilities = %a\n", Str));
+
+ Status = TypeCooperCityRPInstallKtiEparamData (UbaConfigPpi, PlatformInfo->PlatformCapabilities);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
new file mode 100644
index 0000000000..1d85e045c6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
@@ -0,0 +1,163 @@
+## @file
+# Component information file for BoardInitLib in PEI post memory phase.
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+# @par Specification Reference:
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = TypeCooperCityRPPeiBoardInitLib
+ FILE_GUID = 25C91D0F-42ED-7D06-B96D-89A13AA3D02E
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = NULL|PEIM
+ CONSTRUCTOR = TypeCooperCityRPPeiBoardInitLibConstructor
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ PeiServicesLib
+ HobLib
+ PeiServicesTablePointerLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[Sources]
+ PeiBoardInit.h
+ PeiBoardInitLib.c
+ GpioTable.c
+ PcdData.c
+ UsbOC.c
+ AcpiTablePcds.c
+ IioBifurInit.c
+ SlotTable.c
+ KtiEparam.c
+ PchEarlyUpdate.c
+ SoftStrapFixup.c
+
+[FixedPcd]
+
+[Pcd]
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardID
+ gOemSkuTokenSpaceGuid.PcdOemSkuSubBoardID
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardFamily
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuFamilyName
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardName
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardSocketCount
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxChannel
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxDimmPerChannel
+ gOemSkuTokenSpaceGuid.PcdOemSkuDimmLayout
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort00
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort01
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort02
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort03
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort04
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort05
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort06
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort07
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort08
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort09
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort10
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort11
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort12
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort13
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort00
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort01
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort02
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort03
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort04
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort05
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort06
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort07
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort08
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort09
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort10
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort11
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort12
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort13
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort00
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort01
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort02
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort03
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort04
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort05
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuAcpiName
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuMrlAttnLed
+ gOemSkuTokenSpaceGuid.PcdOemSkuSdpActiveFlag
+
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL2_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL3_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL2_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL3_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL2_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL3_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_INV_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_BLINK_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_TABLE_SIZE
+
+ gOemSkuTokenSpaceGuid.PcdOemSku_Reg78Data32
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator00
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator01
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator02
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator03
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator04
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator05
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator06
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator07
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator08
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator09
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator10
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator11
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformName
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformNameSize
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformFeatureFlag
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIO
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIOValue
+ gOemSkuTokenSpaceGuid.PcdOemSkuBmcPciePortNumber
+ gOemSkuTokenSpaceGuid.PcdOemTableIdXhci
+ gOemSkuTokenSpaceGuid.PcdOemSkuUplinkPortIndex
+ gPlatformTokenSpaceGuid.PcdBoardTypeBitmask
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemSrvidMap
+
+ gPlatformTokenSpaceGuid.PcdMemInterposerMap
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciVendorId
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciDeviceId
+
+[Ppis]
+ gUbaConfigDatabasePpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Guids]
+ gPlatformGpioInitDataGuid
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c
new file mode 100644
index 0000000000..63a8fcdb15
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c
@@ -0,0 +1,164 @@
+/** @file
+ Slot Table Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaSlotUpdateLib.h>
+#include <IioPlatformData.h>
+
+#define PCI_DEVICE_ON_BOARD_TRUE 0
+#define PCI_DEVICE_ON_BOARD_FALSE 1
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Mcp0,
+ Iio_Mcp1,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ Bw5_Addr_0 = 0,
+ Bw5_Addr_1,
+ Bw5_Addr_2,
+ Bw5_Addr_3,
+ Bw5_Addr_Max
+} BW5_ADDRESS;
+
+static UINT8 TypeCooperCityRPPchPciSlotImpementedTableData[] = {
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 0
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 1
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 2
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 3
+ PCI_DEVICE_ON_BOARD_TRUE, // Root Port 4
+ PCI_DEVICE_ON_BOARD_TRUE, // Root Port 5
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 6
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 7
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 8
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 9
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 10
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 11
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 12
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 13
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 14
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 15
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 16
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 17
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 18
+ PCI_DEVICE_ON_BOARD_FALSE // Root Port 19
+};
+
+UINT8
+GetTypeCooperCityRPIOU0Setting (
+ UINT8 IOU0Data
+)
+{
+ //
+ // Change bifurcation of Port1C-1D as x4x4 when QATGpio enabled.
+ //
+ IOU0Data = IIO_BIFURCATE_x4x4xxx8;
+ return IOU0Data;
+}
+
+UINT8
+GetTypeCooperCityRPIOU2Setting (
+ UINT8 SkuPersonalityType,
+ UINT8 IOU2Data
+)
+{
+ return IOU2Data;
+}
+
+PLATFORM_SLOT_UPDATE_TABLE TypeCooperCityRPSlotTable =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ NULL,
+ GetTypeCooperCityRPIOU0Setting,
+ 1
+};
+
+PLATFORM_SLOT_UPDATE_TABLE2 TypeCooperCityRPSlotTable2 =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ NULL,
+ GetTypeCooperCityRPIOU0Setting,
+ 1,
+ GetTypeCooperCityRPIOU2Setting
+};
+
+PLATFORM_PCH_PCI_SLOT_IMPLEMENTED_UPDATE_TABLE TypeCooperCityRPPchPciSlotImplementedTable = {
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ TypeCooperCityRPPchPciSlotImpementedTableData
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+TypeCooperCityRPInstallSlotTableData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid,
+ &TypeCooperCityRPSlotTable,
+ sizeof(TypeCooperCityRPSlotTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid2,
+ &TypeCooperCityRPSlotTable2,
+ sizeof(TypeCooperCityRPSlotTable2)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPciSlotImplementedGuid,
+ &TypeCooperCityRPPchPciSlotImplementedTable,
+ sizeof(TypeCooperCityRPPchPciSlotImplementedTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c
new file mode 100644
index 0000000000..a972309937
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c
@@ -0,0 +1,110 @@
+/** @file
+ Soft Strap update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaSoftStrapUpdateLib.h>
+
+PLATFORM_PCH_SOFTSTRAP_FIXUP_ENTRY TypeCooperCityRPSoftStrapTable[] =
+{
+// SoftStrapNumber, LowBit, BitLength, Value
+
+///
+/// Lignhtning Ridge 4S RP platform (Board ID=0x10 - TypeCooperCityRP)
+///
+// SoftStrapNumber, LowBit, BitLength, Value
+ {3, 1, 1, 0x1 }, // Intel QuickAssist Endpoint 2 (EP[2]) Primary Mux Select
+ {4, 24, 1, 0x0 }, // 10 GbE MAC Power Gate Control
+ {15, 4, 2, 0x3 }, // sSATA / PCIe Select for Port 2 (SATA_PCIE_SP2)
+ {15, 6, 2, 0x1 }, // sSATA / PCIe Select for Port 3 (SATA_PCIE_SP3)
+ {15, 18, 1, 0x1 }, // Polarity of GPP_H20 (GPIO polarity of Select between sSATA Port 2 and PCIe Port 8)
+ {16, 4, 2, 0x3 }, // sSATA / PCIe GP Select for Port 2 (SATA_PCIE_GP2)
+ {16, 6, 2, 0x1 }, // sSATA / PCIe GP Select for Port 3 (SATA_PCIE_GP3)
+ {17, 6, 1, 0x0 }, // Intel (R) GbE Legacy PHY over PCIe Enabled
+ {17, 12, 2, 0x3 }, // sSATA / PCIe Combo Port 2
+ {18, 0, 2, 0x1 }, // sSATA / PCIe Combo Port 3
+ {18, 6, 2, 0x3 }, // SATA / PCIe Combo Port 0
+ {18, 8, 2, 0x3 }, // SATA / PCIe Combo Port 1
+ {18, 10, 2, 0x3 }, // SATA / PCIe Combo Port 2
+ {18, 12, 2, 0x3 }, // SATA / PCIe Combo Port 3
+ {18, 14, 2, 0x3 }, // SATA / PCIe Combo Port 4
+ {19, 2, 1, 0x1 }, // Polarity Select sSATA / PCIe Combo Port 2
+ {19, 16, 2, 0x3 }, // SATA / PCIe Combo Port 5
+ {19, 18, 2, 0x3 }, // SATA / PCIe Combo Port 6
+ {19, 20, 2, 0x3 }, // SATA / PCIe Combo Port 7
+ {33, 24, 7, 0x17}, // IE SMLink1 I2C Target Address
+ {64, 24, 7, 0x17}, // ME SMLink1 I2C Target Address
+ {84, 24, 1, 0x0 }, // SMS1 Gbe Legacy MAC SMBus Address Enable
+ {85, 8, 3, 0x0 }, // SMS1 PMC SMBus Connect
+ {88, 8, 2, 0x3 }, // Root Port Configuration 0
+ {93, 0, 2, 0x3 }, // Flex IO Port 18 AUXILLARY Mux Select between SATA Port 0 and PCIe Port 12
+ {93, 2, 2, 0x3 }, // Flex IO Port 19 AUXILLARY Mux Select between SATA Port 1 and PCIe Port 13
+ {93, 4, 2, 0x3 }, // Flex IO Port 20 AUXILLARY Mux Select between SATA Port 2 and PCIe Port 14
+ {94, 0, 2, 0x3 }, // Flex IO Port 21 AUXILLARY Mux Select between SATA Port 3 and PCIe Port 15
+ {94, 2, 2, 0x3 }, // Flex IO Port 22 AUXILLARY Mux Select between SATA Port 4 and PCIe Port 16
+ {94, 4, 2, 0x3 }, // Flex IO Port 23 AUXILLARY Mux Select between SATA Port 5 and PCIe Port 17
+ {94, 6, 2, 0x3 }, // Flex IO Port 24 AUXILLARY Mux Select between SATA Port 6 and PCIe Port 18
+ {94, 8, 2, 0x3 }, // Flex IO Port 25 AUXILLARY Mux Select between SATA Port 7 and PCIe Port 19
+ {102, 0, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 0 and PCIe Port 12
+ {102, 2, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 1 and PCIe Port 13
+ {102, 4, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 2 and PCIe Port 14
+ {102, 6, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 3 and PCIe Port 15
+ {102, 8, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 4 and PCIe Port 16
+ {102, 10, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 5 and PCIe Port 17
+ {102, 12, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 6 and PCIe Port 18
+ {102, 14, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 7 and PCIe Port 19
+ {103, 16, 3, 0x0 }, // GbE Legacy PHY Smbus Connection
+ {103, 26, 1, 0x0 }, // GbE Legacy LCD SMBus PHY Address Enabled
+ {103, 27, 1, 0x0 }, // GbE Legacy LC SMBus Address Enabled
+ {133, 1, 1, 0x1 }, // Dual I/O Read Enabled
+ {133, 2, 1, 0x1 }, // Quad Output Read Enabled
+ {133, 3, 1, 0x1 }, // Quad I/O Read Enabled
+ {136, 10, 2, 0x3 }, // eSPI / EC Maximum I/O Mode
+ {136, 12, 1, 0x1 }, // Slave 1 (2nd eSPI device) Enable
+ {136, 16, 3, 0x4 }, // eSPI / EC Slave 1 Device Bus Frequency
+ {136, 19, 2, 0x3 }, // eSPI / EC Slave Device Maximum I/O Mode
+
+//
+// END OF LIST
+//
+ {0, 0, 0, 0}
+};
+
+VOID
+TypeCooperCityRPPlatformSpecificUpdate (
+ IN OUT UINT8 *FlashDescriptorCopy
+ )
+{
+
+}
+
+PLATFORM_PCH_SOFTSTRAP_UPDATE TypeCooperCityRPSoftStrapUpdate =
+{
+ PLATFORM_SOFT_STRAP_UPDATE_SIGNATURE,
+ PLATFORM_SOFT_STRAP_UPDATE_VERSION,
+ TypeCooperCityRPSoftStrapTable,
+ TypeCooperCityRPPlatformSpecificUpdate
+};
+
+EFI_STATUS
+TypeCooperCityRPInstallSoftStrapData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPchSoftStrapConfigDataGuid,
+ &TypeCooperCityRPSoftStrapUpdate,
+ sizeof(TypeCooperCityRPSoftStrapUpdate)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c
new file mode 100644
index 0000000000..018d725164
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c
@@ -0,0 +1,123 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+
+
+#include <Library/PcdLib.h>
+#include <Library/UbaUsbOcUpdateLib.h>
+#include <PchLimits.h>
+#include <ConfigBlock/UsbConfig.h>
+#include <ConfigBlock/Usb2PhyConfig.h>
+
+USB_OVERCURRENT_PIN TypeCooperCityRPUsb20OverCurrentMappings[PCH_MAX_USB2_PORTS] = {
+ UsbOverCurrentPin0, //Port00: Zepher ,OC0#
+ UsbOverCurrentPin1, //Port01: Read Connector,OC1#
+ UsbOverCurrentPinSkip, //Port02: User bay ,OC0#
+ UsbOverCurrentPinSkip, //Port03: iBMC USB 1.1 ,no OCn#
+ UsbOverCurrentPinSkip, //Port04: NONE ,no OCn#
+ UsbOverCurrentPin2, //Port05: Read Connector,OC2#
+ UsbOverCurrentPin1, //Port06: Read Connector,OC1#
+ UsbOverCurrentPin2, //Port07: Read Connector,OC2#
+ UsbOverCurrentPinSkip, //Port08: NONE ,no OCn#
+ UsbOverCurrentPinSkip, //Port09: NONE ,no OCn#
+ UsbOverCurrentPinSkip, //Port10: iBMC USB 2.0 ,no OCn#
+ UsbOverCurrentPin4, //Port11: Front Panel ,OC4#
+ UsbOverCurrentPinSkip, //Port12: NONE ,no OCn#
+ UsbOverCurrentPin4 //Port13: Front Panel ,OC4#
+ };
+
+USB_OVERCURRENT_PIN TypeCooperCityRPUsb30OverCurrentMappings[PCH_MAX_USB3_PORTS] = {
+ UsbOverCurrentPin0,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin2,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip
+ };
+
+USB2_PHY_PARAMETERS TypeCooperCityRPUsb20AfeParams[PCH_H_XHCI_MAX_USB2_PHYSICAL_PORTS] = {
+ {7, 0, 2, 1}, // PP0
+ {7, 0, 2, 1}, // PP1
+ {7, 0, 2, 1}, // PP2
+ {7, 0, 2, 1}, // PP3
+ {7, 0, 2, 1}, // PP4
+ {7, 0, 2, 1}, // PP5
+ {7, 0, 2, 1}, // PP6
+ {7, 0, 2, 1}, // PP7
+ {7, 0, 2, 1}, // PP8
+ {7, 0, 2, 1}, // PP9
+ {7, 0, 2, 1}, // PP10
+ {7, 0, 2, 1}, // PP11
+ {7, 0, 2, 1}, // PP12
+ {7, 0, 2, 1}, // PP13
+ };
+
+EFI_STATUS
+TypeCooperCityRPPlatformUsbOcUpdateCallback (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+)
+{
+ *Usb20OverCurrentMappings = &TypeCooperCityRPUsb20OverCurrentMappings[0];
+ *Usb30OverCurrentMappings = &TypeCooperCityRPUsb30OverCurrentMappings[0];
+ *Usb20AfeParams = TypeCooperCityRPUsb20AfeParams;
+ return EFI_SUCCESS;
+}
+
+PLATFORM_USBOC_UPDATE_TABLE TypeCooperCityRPUsbOcUpdate =
+{
+ PLATFORM_USBOC_UPDATE_SIGNATURE,
+ PLATFORM_USBOC_UPDATE_VERSION,
+ TypeCooperCityRPPlatformUsbOcUpdateCallback
+};
+
+EFI_STATUS
+TypeCooperCityRPPlatformUpdateUsbOcMappings (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ //#
+ //# USB, see PG 104 in GZP SCH
+ //#
+
+// USB2 USB3 Port OC
+//
+//Port00: PORT5 Back Panel ,OC0#
+//Port01: PORT2 Back Panel ,OC0#
+//Port02: PORT3 Back Panel ,OC1#
+//Port03: PORT0 NOT USED ,NA
+//Port04: BMC1.0 ,NA
+//Port05: INTERNAL_2X5_A ,OC2#
+//Port06: INTERNAL_2X5_A ,OC2#
+//Port07: NOT USED ,NA
+//Port08: EUSB (AKA SSD) ,NA
+//Port09: INTERNAL_TYPEA ,OC6#
+//Port10: PORT1 Front Panel ,OC5#
+//Port11: NOT USED ,NA
+//Port12: BMC2.0 ,NA
+//Port13: PORT4 Front Panel ,OC5#
+
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPeiPlatformUbaOcConfigDataGuid,
+ &TypeCooperCityRPUsbOcUpdate,
+ sizeof(TypeCooperCityRPUsbOcUpdate)
+ );
+
+ return Status;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
new file mode 100644
index 0000000000..72c55bc1c9
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
@@ -0,0 +1,99 @@
+/** @file
+ IIO Config Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "IioCfgUpdateDxe.h"
+
+EFI_STATUS
+UpdateWilsonCityRPIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+ )
+{
+ return EFI_SUCCESS;
+}
+
+PLATFORM_IIO_CONFIG_UPDATE_TABLE TypeWilsonCityRPIioConfigTable =
+{
+ PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE,
+ PLATFORM_IIO_CONFIG_UPDATE_VERSION,
+
+ IioBifurcationTable,
+ sizeof(IioBifurcationTable),
+ UpdateWilsonCityRPIioConfig,
+ IioSlotTable,
+ sizeof(IioSlotTable)
+
+};
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+IioCfgUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((DEBUG_INFO, "UBA:IioCfgUpdate-TypeWilsonCityRP\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid,
+ &TypeWilsonCityRPIioConfigTable,
+ sizeof(TypeWilsonCityRPIioConfigTable)
+ );
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid_1,
+ &TypeWilsonCityRPIioConfigTable,
+ sizeof(TypeWilsonCityRPIioConfigTable)
+ );
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid_2,
+ &TypeWilsonCityRPIioConfigTable,
+ sizeof(TypeWilsonCityRPIioConfigTable)
+ );
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformIioConfigDataDxeGuid_3,
+ &TypeWilsonCityRPIioConfigTable,
+ sizeof(TypeWilsonCityRPIioConfigTable)
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
new file mode 100644
index 0000000000..662fa2c650
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
@@ -0,0 +1,118 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _IIOCFG_UPDATE_DXE_H_
+#define _IIOCFG_UPDATE_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+#include <Protocol/UbaCfgDb.h>
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PciLib.h>
+#include <Library/UbaIioConfigLib.h>
+#include <IioPlatformData.h>
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Mcp0,
+ Iio_Mcp1,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ VPP_PORT_0 = 0,
+ VPP_PORT_1,
+ VPP_PORT_2,
+ VPP_PORT_3
+} VPP_PORT;
+
+#define ENABLE 1
+#define DISABLE 0
+#define NO_SLT_IMP 0xFF
+#define SLT_IMP 1
+#define HIDE 1
+#define NOT_HIDE 0
+#define VPP_PORT_0 0
+#define VPP_PORT_1 1
+#define VPP_PORT_MAX 0xFF
+#define VPP_ADDR_MAX 0xFF
+#define PWR_VAL_MAX 0xFF
+#define PWR_SCL_MAX 0xFF
+
+static IIO_BIFURCATION_DATA_ENTRY IioBifurcationTable[] =
+{
+ // Neon City IIO bifurcation table (Based on Neon City Block Diagram rev 0.6)
+ { Iio_Socket0, Iio_Iou0, IIO_BIFURCATE_xxx8x4x4 },
+ { Iio_Socket0, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Iou2, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket0, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Iou0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Iou1, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Iou2, IIO_BIFURCATE_xxx8xxx8 },
+ { Iio_Socket1, Iio_Mcp0, IIO_BIFURCATE_xxxxxx16 },
+ { Iio_Socket1, Iio_Mcp1, IIO_BIFURCATE_xxxxxx16 },
+};
+
+static IIO_SLOT_CONFIG_DATA_ENTRY IioSlotTable[] = {
+ // Port | Slot | Inter | Power Limit | Power Limit | Hot | Vpp | Vpp | PcieSSD | PcieSSD | PcieSSD | Hidden
+ // Index | | lock | Scale | Value | Plug | Port | Addr | Cap | VppPort | VppAddr |
+ { PORT_1A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x4C , HIDE },//Oculink
+ { PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x4C , HIDE },//Oculink
+ { PORT_1C_INDEX, 1 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { PORT_2A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ // Slot 2 supports HP: PCA9555 (CPU0) Addres 0x40, SCH (Rev 0.604) P 118 (MRL in J65)
+ { PORT_3A_INDEX, 2 , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x40 , ENABLE , VPP_PORT_0 , 0x40 , NOT_HIDE },
+ { PORT_3B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x40 , HIDE },
+ { PORT_3C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x42 , HIDE },
+ { PORT_3D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x42 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_0_INDEX , 6 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ // Slot 4 supports HP: PCA9554 (CPU1) Address 0x40, SCH (Rev 0.604) P 121 (MRL in J287)
+ { SOCKET_1_INDEX +
+ PORT_1A_INDEX, 4 , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_1 , 0x40 , ENABLE , VPP_PORT_0 , 0x40 , NOT_HIDE },
+ { SOCKET_1_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x40 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x42 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x42 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_2A_INDEX, 8 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_1 , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x44 , NOT_HIDE },
+ { SOCKET_1_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x44 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_0 , 0x46 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , ENABLE , VPP_PORT_1 , 0x46 , HIDE },
+ { SOCKET_1_INDEX +
+ PORT_3A_INDEX, 5 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ { SOCKET_1_INDEX +
+ PORT_3C_INDEX, 7 , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE },
+ // Note: On Neon City, Slot 3 is assigned to PCH's PCIE port
+};
+
+#endif //_IIOCFG_UPDATE_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
new file mode 100644
index 0000000000..82840c9a24
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
@@ -0,0 +1,47 @@
+## @file
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = IioCfgUpdateDxeWilsonCityRP
+ FILE_GUID = 4983CB47-56FD-4341-88EC-F0C95B36DF12
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = IioCfgUpdateEntry
+
+[sources]
+ IioCfgUpdateDxe.c
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ UefiLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Guids]
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gEfiPlatformTypeWilsonCityRPProtocolGuid
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
new file mode 100644
index 0000000000..31676bdeb6
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
@@ -0,0 +1,115 @@
+/** @file
+ Slot Data Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "SlotDataUpdateDxe.h"
+
+UINT8
+GetTypeWilsonCityRPIOU0Setting (
+ UINT8 IOU0Data
+)
+{
+ //
+ // Change bifurcation of Port1A-1B as xxx8 when QATGpio enabled.
+ //
+ IOU0Data = IIO_BIFURCATE_xxx8xxx8;
+ return IOU0Data;
+}
+
+UINT8
+GetTypeWilsonCityRPIOU2Setting (
+ UINT8 SkuPersonalityType,
+ UINT8 IOU2Data
+)
+{
+ return IOU2Data;
+}
+
+static IIO_BROADWAY_ADDRESS_DATA_ENTRY SlotTypeWilsonCityRPBroadwayTable[] = {
+ {Iio_Socket0, Iio_Iou2, Bw5_Addr_0 },
+ {Iio_Socket1, Iio_Iou1, Bw5_Addr_2},
+ {Iio_Socket1, Iio_Iou0, Bw5_Addr_1 },
+};
+
+
+PLATFORM_SLOT_UPDATE_TABLE TypeWilsonCityRPSlotTable =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ SlotTypeWilsonCityRPBroadwayTable,
+ GetTypeWilsonCityRPIOU0Setting,
+ 0
+};
+
+PLATFORM_SLOT_UPDATE_TABLE2 TypeWilsonCityRPSlotTable2 =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ SlotTypeWilsonCityRPBroadwayTable,
+ GetTypeWilsonCityRPIOU0Setting,
+ 0,
+ GetTypeWilsonCityRPIOU2Setting
+};
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+SlotDataUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((DEBUG_INFO, "UBA:SlotDataUpdate-TypeWilsonCityRP\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformSlotDataDxeGuid,
+ &TypeWilsonCityRPSlotTable,
+ sizeof(TypeWilsonCityRPSlotTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gPlatformSlotDataDxeGuid,
+ &TypeWilsonCityRPSlotTable2,
+ sizeof(TypeWilsonCityRPSlotTable2)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
new file mode 100644
index 0000000000..9be882b09e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
@@ -0,0 +1,57 @@
+/** @file
+
+ @copyright
+ Copyright 2016 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _SLOT_DATA_UPDATE_DXE_H_
+#define _SLOT_DATA_UPDATE_DXE_H_
+
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Protocol/UbaCfgDb.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PciLib.h>
+
+#include <Library/UbaSlotUpdateLib.h>
+#include <IioPlatformData.h>
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Mcp0,
+ Iio_Mcp1,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ Bw5_Addr_0 = 0,
+ Bw5_Addr_1,
+ Bw5_Addr_2,
+ Bw5_Addr_3,
+ Bw5_Addr_Max
+} BW5_ADDRESS;
+
+#endif //_SLOT_DATA_UPDATE_DXE_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
new file mode 100644
index 0000000000..a0e61e210f
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
@@ -0,0 +1,47 @@
+## @file
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = SlotDataUpdateDxeWilsonCityRP
+ FILE_GUID = A29C22DA-2EE0-4a36-A4E5-CCBCEAD1DB8F
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = SlotDataUpdateEntry
+
+[sources]
+ SlotDataUpdateDxe.c
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ UefiLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Guids]
+
+[FixedPcd]
+ gEfiCpRcPkgTokenSpaceGuid.PcdMaxCpuSocketCount
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gEfiPlatformTypeWilsonCityRPProtocolGuid
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
new file mode 100644
index 0000000000..0ec35ad330
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
@@ -0,0 +1,127 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "UsbOcUpdateDxe.h"
+
+#include <Library/UbaUsbOcUpdateLib.h>
+#include <PchLimits.h>
+#include <ConfigBlock/UsbConfig.h>
+#include <ConfigBlock/Usb2PhyConfig.h>
+
+USB_OVERCURRENT_PIN TypeWilsonCityRPUsb20OverCurrentMappings[PCH_MAX_USB2_PORTS] = {
+ UsbOverCurrentPinSkip, //Port00: BMC
+ UsbOverCurrentPinSkip, //Port01: BMC
+ UsbOverCurrentPin0, //Port02: Rear Panel
+ UsbOverCurrentPin1, //Port03: Rear Panel
+ UsbOverCurrentPin1, //Port04: Rear Panel
+ UsbOverCurrentPinSkip, //Port05: NC
+ UsbOverCurrentPinSkip, //Port06: NC
+ UsbOverCurrentPin4, //Port07: Type A internal
+ UsbOverCurrentPinSkip, //Port08: NC
+ UsbOverCurrentPinSkip, //Port09: NC
+ UsbOverCurrentPin6, //Port10: Front Panel
+ UsbOverCurrentPinSkip, //Port11: NC
+ UsbOverCurrentPin6, //Port12: Front Panel
+ UsbOverCurrentPinSkip, //Port13: NC
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip
+ };
+
+USB_OVERCURRENT_PIN TypeWilsonCityRPUsb30OverCurrentMappings[PCH_MAX_USB3_PORTS] = {
+ UsbOverCurrentPin6, //Port01: Front Panel
+ UsbOverCurrentPin6, //Port02: Front Panel
+ UsbOverCurrentPin0, //Port03: Rear Panel
+ UsbOverCurrentPin1, //Port04: Rear Panel
+ UsbOverCurrentPin1, //Port05: Rear Panel
+ UsbOverCurrentPinSkip, //Port06: NC
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip
+ };
+
+USB2_PHY_PARAMETERS TypeWilsonCityRPUsb20AfeParams[PCH_H_XHCI_MAX_USB2_PHYSICAL_PORTS] = {
+ {3, 0, 3, 1}, // PP0
+ {5, 0, 3, 1}, // PP1
+ {3, 0, 3, 1}, // PP2
+ {0, 5, 1, 1}, // PP3
+ {3, 0, 3, 1}, // PP4
+ {3, 0, 3, 1}, // PP5
+ {3, 0, 3, 1}, // PP6
+ {3, 0, 3, 1}, // PP7
+ {2, 2, 1, 0}, // PP8
+ {6, 0, 2, 1}, // PP9
+ {2, 2, 1, 0}, // PP10
+ {6, 0, 2, 1}, // PP11
+ {0, 5, 1, 1}, // PP12
+ {7, 0, 2, 1}, // PP13
+ };
+
+EFI_STATUS
+TypeWilsonCityRPPlatformUsbOcUpdateCallback (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+)
+{
+ *Usb20OverCurrentMappings = &TypeWilsonCityRPUsb20OverCurrentMappings[0];
+ *Usb30OverCurrentMappings = &TypeWilsonCityRPUsb30OverCurrentMappings[0];
+
+ *Usb20AfeParams = TypeWilsonCityRPUsb20AfeParams;
+ return EFI_SUCCESS;
+}
+
+PLATFORM_USBOC_UPDATE_TABLE TypeWilsonCityRPUsbOcUpdate =
+{
+ PLATFORM_USBOC_UPDATE_SIGNATURE,
+ PLATFORM_USBOC_UPDATE_VERSION,
+ TypeWilsonCityRPPlatformUsbOcUpdateCallback
+};
+
+/**
+ The Driver Entry Point.
+
+ The function is the driver Entry point.
+
+ @param ImageHandle A handle for the image that is initializing this driver
+ @param SystemTable A pointer to the EFI system table
+
+ @retval EFI_SUCCESS: Driver initialized successfully
+ @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
+
+**/
+EFI_STATUS
+EFIAPI
+UsbOcUpdateEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
+
+ DEBUG((EFI_D_INFO, "UBA:UsbOcUpdate-TypeWilsonCityRP\n"));
+ Status = gBS->LocateProtocol (
+ &gUbaConfigDatabaseProtocolGuid,
+ NULL,
+ &UbaConfigProtocol
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigProtocol->AddData (
+ UbaConfigProtocol,
+ &gDxePlatformUbaOcConfigDataGuid,
+ &TypeWilsonCityRPUsbOcUpdate,
+ sizeof(TypeWilsonCityRPUsbOcUpdate)
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
new file mode 100644
index 0000000000..3813eadae9
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
@@ -0,0 +1,27 @@
+/** @file
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _USBOC_UPDATE_DXE_H_
+#define _USBOC_UPDATE_DXE_H_
+
+#include <Base.h>
+#include <Uefi.h>
+
+#include <Protocol/UbaCfgDb.h>
+
+#include <Library/UefiDriverEntryPoint.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+
+
+#endif //_USBOC_UPDATE_DXE_H_
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
new file mode 100644
index 0000000000..03b966cdfc
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
@@ -0,0 +1,44 @@
+## @file
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UsbOcUpdateDxeWilsonCityRP
+ FILE_GUID = C92F1DF7-206C-46A7-B7D4-0F9B18E0E70A
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = UsbOcUpdateEntry
+
+[sources]
+ UsbOcUpdateDxe.c
+ UsbOcUpdateDxe.h
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ UefiLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[Guids]
+
+[Protocols]
+ gUbaConfigDatabaseProtocolGuid
+
+[Depex]
+ gEfiPlatformTypeWilsonCityRPProtocolGuid
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c
new file mode 100644
index 0000000000..c1c022a62e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c
@@ -0,0 +1,53 @@
+/** @file
+ ACPI table pcds update.
+
+ @copyright
+ Copyright 2015 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/PcdLib.h>
+#include <Library/HobLib.h>
+#include <Guid/PlatformInfo.h>
+#include <UncoreCommonIncludes.h>
+#include <Cpu/CpuIds.h>
+
+EFI_STATUS
+TypeWilsonCityRPPlatformUpdateAcpiTablePcds (
+ VOID
+ )
+{
+ CHAR8 AcpiName10nm[] = "EPRP10NM"; // USED for identify ACPI table for 10nm in systmeboard dxe driver
+ CHAR8 OemTableIdXhci[] = "xh_nccrb";
+
+ UINTN Size;
+ EFI_STATUS Status;
+
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ DEBUG ((EFI_D_INFO, "Uba Callback: PlatformUpdateAcpiTablePcds entered\n"));
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+ //#
+ //#ACPI items
+ //#
+ Size = AsciiStrSize (AcpiName10nm);
+ Status = PcdSetPtrS (PcdOemSkuAcpiName , &Size, AcpiName10nm);
+ DEBUG ((DEBUG_INFO, "%a TypeWilsonCityRP ICX\n", __FUNCTION__));
+ ASSERT_EFI_ERROR (Status);
+
+ Size = AsciiStrSize (OemTableIdXhci);
+ Status = PcdSetPtrS (PcdOemTableIdXhci , &Size, OemTableIdXhci);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c
new file mode 100644
index 0000000000..59dc256041
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c
@@ -0,0 +1,287 @@
+/** @file
+
+ @copyright
+ Copyright 2020 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaGpioUpdateLib.h>
+
+#include <Library/GpioLib.h>
+#include <Library/UbaGpioInitLib.h>
+#include <GpioPinsSklH.h>
+#include <Library/PcdLib.h>
+
+//
+// Board : Wilson City RP
+//
+static GPIO_INIT_CONFIG mGpioTableWilsonCityRP [] =
+ {
+ {GPIO_SKL_H_GPP_A0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_0_LPC_RCIN_N_ESPI_ALERT1_N
+ {GPIO_SKL_H_GPP_A1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_1_LPC_LAD0_ESPI_IO0
+ {GPIO_SKL_H_GPP_A2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_2_LPC_LAD1_ESPI_IO1
+ {GPIO_SKL_H_GPP_A3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_3_LPC_LAD2_ESPI_IO2
+ {GPIO_SKL_H_GPP_A4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_4_LPC_LAD3_ESPI_IO3
+ {GPIO_SKL_H_GPP_A5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_5_LPC_LFRAME_N_ESPI_CS0_N
+ {GPIO_SKL_H_GPP_A6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_6_IRQ_LPC_SERIRQ_ESPI_CS1_N
+ {GPIO_SKL_H_GPP_A7, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_7_IRQ_LPC_PIRQA_N_ESPI_ALERT0_N
+ {GPIO_SKL_H_GPP_A8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_8_FM_LPC_CLKRUN_N
+ {GPIO_SKL_H_GPP_A9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_9_CLK_24M_66M_LPC0_ESPI
+ {GPIO_SKL_H_GPP_A10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_10_TP_PCH_GPP_A_10
+ {GPIO_SKL_H_GPP_A11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_11_FM_LPC_PME_N
+ {GPIO_SKL_H_GPP_A12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_12_IRQ_PCH_SCI_WHEA_N
+ {GPIO_SKL_H_GPP_A13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_13_FM_EUP_LOT6_N
+ {GPIO_SKL_H_GPP_A14, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_14_RST_ESPI_RESET_N
+ {GPIO_SKL_H_GPP_A15, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_15_FM_SUSACK_N
+ {GPIO_SKL_H_GPP_A16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_16_TP_PCH_GPP_A_16
+ {GPIO_SKL_H_GPP_A17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_17_TP_PCH_GPP_A_16
+ {GPIO_SKL_H_GPP_A18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_18_FM_BIOS_ADV_FUNCTIONS
+ {GPIO_SKL_H_GPP_A20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_20_TP_PCH_GPP_A_20
+ {GPIO_SKL_H_GPP_A21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_21_TP_PCH_GPP_A_21
+ {GPIO_SKL_H_GPP_A22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_22_TP_PCH_GPP_A_22
+ {GPIO_SKL_H_GPP_A23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_A_23_TP_PCH_GPP_A_23
+ {GPIO_SKL_H_GPP_B0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_0_FM_PCH_CORE_VID_0
+ {GPIO_SKL_H_GPP_B1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_1_FM_PCH_CORE_VID_1
+ {GPIO_SKL_H_GPP_B2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_2_PU_PCH_VRALERT_N
+// GPIO_SKL_H_GPP_B3 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_B4 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_B5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_5_FM_PCH_INTERPOSER_SEL1
+ {GPIO_SKL_H_GPP_B6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_6_FM_PCH_INTERPOSER_SEL2
+ {GPIO_SKL_H_GPP_B7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_7_TP_PCH_GPP_B_7
+ {GPIO_SKL_H_GPP_B8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_8_TP_PCH_GPP_B_8
+ {GPIO_SKL_H_GPP_B9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_9_FM_BOARD_REV_ID2
+ {GPIO_SKL_H_GPP_B10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_10_FM_TPM_MOD_PRES_N
+// GPIO_SKL_H_GPP_B11 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_B12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_12_TP_SLP_S0_N
+ {GPIO_SKL_H_GPP_B13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_13_RST_PLTRST_N
+ {GPIO_SKL_H_GPP_B14, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_14_FM_PCH_BIOS_RCVR_SPKR
+ {GPIO_SKL_H_GPP_B15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_15_FM_CPU_ERR0_PCH_N
+ {GPIO_SKL_H_GPP_B16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_16_FM_CPU_ERR1_PCH_N
+ {GPIO_SKL_H_GPP_B17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_17_FM_CPU_ERR2_PCH_N
+ {GPIO_SKL_H_GPP_B18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_18_FM_NO_REBOOT
+ {GPIO_SKL_H_GPP_B19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_19_FM_BOARD_SKU_ID5
+ {GPIO_SKL_H_GPP_B20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone, GpioPadConfigLock}},//GPP_B_20_FM_BIOS_POST_CMPLT_N
+ {GPIO_SKL_H_GPP_B21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_21_TP_PCH_GPP_B_21
+ {GPIO_SKL_H_GPP_B22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_22_FM_PCH_BOOT_BIOS_DEVICE
+ {GPIO_SKL_H_GPP_B23, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_B_23_FM_PCH_BMC_THERMTRIP_EXI_STRAP_N
+ {GPIO_SKL_H_GPP_C2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_2_PU_PCH_TLS_ENABLE_STRAP
+ {GPIO_SKL_H_GPP_C5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_5_IRQ_SML0_ALERT_N
+ {GPIO_SKL_H_GPP_C8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_8_FM_PASSWORD_CLEAR_N
+ {GPIO_SKL_H_GPP_C9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_9_FM_MFG_MODE
+ {GPIO_SKL_H_GPP_C10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone}},//GPP_C_10_FM_PCH_SATA_RAID_KEY
+ {GPIO_SKL_H_GPP_C11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_11_TP_FP_AUD_DETECT_N
+ {GPIO_SKL_H_GPP_C12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_12_FM_BOARD_REV_ID0
+ {GPIO_SKL_H_GPP_C13, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_13_FM_BOARD_REV_ID1
+ {GPIO_SKL_H_GPP_C14, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_14_FM_BMC_PCH_SCI_LPC_N
+ {GPIO_SKL_H_GPP_C15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_15_FM_RISER1_ID_0
+ {GPIO_SKL_H_GPP_C16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_16_FM_RISER1_ID_1
+ {GPIO_SKL_H_GPP_C17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_17_FM_RISER2_ID_0
+ {GPIO_SKL_H_GPP_C18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_18_FM_RISER2_ID_1
+ {GPIO_SKL_H_GPP_C19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_19_RST_SMB_HOST_PCH_MUX_N
+// GPIO_SKL_H_GPP_C20 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_C21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_21_RST_PCH_MIC_MUX_N
+ {GPIO_SKL_H_GPP_C22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_22_IRQ_BMC_PCH_SMI_LPC_N
+ {GPIO_SKL_H_GPP_C23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_C_23_FM_CPU_CATERR_DLY_LVT3_N
+ {GPIO_SKL_H_GPP_D0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_0_IRQ_BMC_PCH_NMI
+ {GPIO_SKL_H_GPP_D1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_1_FP_PWR_LED_N
+ {GPIO_SKL_H_GPP_D2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_2_FM_TBT_FORCE_PWR
+ {GPIO_SKL_H_GPP_D3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_3_FM_TBT_SCI_EVENT
+ {GPIO_SKL_H_GPP_D4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_4_FM_PLD_PCH_DATA
+ {GPIO_SKL_H_GPP_D5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_5_TP_PCH_GPP_D_5
+ {GPIO_SKL_H_GPP_D6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_6_TP_PCH_GPP_D_6
+ {GPIO_SKL_H_GPP_D7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_7_TP_PCH_GPP_D_7
+ {GPIO_SKL_H_GPP_D8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_8_FM_UPLINK_SEL
+ {GPIO_SKL_H_GPP_D9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_9_TP_PCH_GPP_D_9
+ {GPIO_SKL_H_GPP_D10, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_10_FM_M2_2_SSD_DEVSLP
+ {GPIO_SKL_H_GPP_D11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_11_TP_PCH_GPP_D_11
+ {GPIO_SKL_H_GPP_D12, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_12_SGPIO_SSATA_DATA1
+ {GPIO_SKL_H_GPP_D13, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_13_SMB_SMLINK5_STBY_LVC3_R_SCL
+ {GPIO_SKL_H_GPP_D14, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_14_SMB_SMLINK5_STBY_LVC3_R_SDA
+ {GPIO_SKL_H_GPP_D15, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_15_SGPIO_SSATA_DATA0
+ {GPIO_SKL_H_GPP_D16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_16_FM_ME_PFR_1
+ {GPIO_SKL_H_GPP_D17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_17_FM_ME_PFR_2
+ {GPIO_SKL_H_GPP_D18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_18_MCP_RESET_CTRL_N
+ {GPIO_SKL_H_GPP_D19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_19_FM_PS_PWROK_DLY_SEL_R
+ {GPIO_SKL_H_GPP_D20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_20_TP_PCH_GPP_D_20
+ {GPIO_SKL_H_GPP_D21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_21_TP_PCH_GPP_D_21
+ {GPIO_SKL_H_GPP_D22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_22_TP_PCH_GPP_D_22
+ {GPIO_SKL_H_GPP_D23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_D_23_TP_PCH_GPP_D_23
+ {GPIO_SKL_H_GPP_E0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_0_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_E1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_1_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_E2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_2_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_E3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_3_FM_ADR_TRIGGER_N
+ {GPIO_SKL_H_GPP_E4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_4_TP_PCH_GPP_E_4
+ {GPIO_SKL_H_GPP_E5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_5_TP_PCH_GPP_E_5
+ {GPIO_SKL_H_GPP_E6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_6_TP_PCH_GPP_E_6
+ {GPIO_SKL_H_GPP_E7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_7_FM_ADR_SMI_GPIO_R_N
+ {GPIO_SKL_H_GPP_E8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_8_LED_PCH_SATA_HDD_N
+ {GPIO_SKL_H_GPP_E9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_9_FM_OC0_USB_N
+ {GPIO_SKL_H_GPP_E10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_10_FM_OC1_USB_N
+ {GPIO_SKL_H_GPP_E11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_11_PU_OC2_USB_N
+ {GPIO_SKL_H_GPP_E12, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_E_12_PU_OC3_USB_N
+ {GPIO_SKL_H_GPP_F0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_0_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_1_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_2_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_3_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_4_FM_QAT_ENABLE_N
+ {GPIO_SKL_H_GPP_F5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_5_IRQ_TPM_SPI_N
+ {GPIO_SKL_H_GPP_F6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_6_JTAG_PCH_PLD_TCK
+ {GPIO_SKL_H_GPP_F7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_7_JTAG_PCH_PLD_TDI
+ {GPIO_SKL_H_GPP_F8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_8_JTAG_PCH_PLD_TMS
+ {GPIO_SKL_H_GPP_F9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_9_JTAG_PCH_PLD_TDO
+ {GPIO_SKL_H_GPP_F10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_10_SGPIO_SATA_CLOCK
+ {GPIO_SKL_H_GPP_F11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_11_SGPIO_SATA_LOAD
+ {GPIO_SKL_H_GPP_F12, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_12_SGPIO_SATA_DATA1
+ {GPIO_SKL_H_GPP_F13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_13_SGPIO_SATA_DATA0
+ {GPIO_SKL_H_GPP_F14, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_14_LED_PCH_SSATA_HDD_N
+ {GPIO_SKL_H_GPP_F15, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_15_FM_OC4_USB_N
+ {GPIO_SKL_H_GPP_F16, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_16_PU_OC5_USB_N
+ {GPIO_SKL_H_GPP_F17, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_17_FM_OC6_USB_N
+ {GPIO_SKL_H_GPP_F18, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_18_PU_OC7_USB_N
+ {GPIO_SKL_H_GPP_F19, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_19_SMB_GBE_STBY_LVC3_SCL
+ {GPIO_SKL_H_GPP_F20, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_20_SMB_GBE_STBY_LVC3_SDA
+ {GPIO_SKL_H_GPP_F21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_21_TP_PCH_GPP_F_21
+ {GPIO_SKL_H_GPP_F22, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_22_SGPIO_SSATA_CLOCK
+ {GPIO_SKL_H_GPP_F23, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_F_23_SGPIO_SSATA_LOAD
+ {GPIO_SKL_H_GPP_G0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_0_TP_FAN_PCH_TACH0
+ {GPIO_SKL_H_GPP_G1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_1_TP_FAN_PCH_TACH1
+ {GPIO_SKL_H_GPP_G2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_2_TP_FAN_PCH_TACH2
+ {GPIO_SKL_H_GPP_G3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_3_TP_FAN_PCH_TACH3
+ {GPIO_SKL_H_GPP_G4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_4_TP_FAN_PCH_TACH4
+ {GPIO_SKL_H_GPP_G5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_5_TP_FAN_PCH_TACH5
+ {GPIO_SKL_H_GPP_G6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_6_TP_FAN_PCH_TACH6
+ {GPIO_SKL_H_GPP_G7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_7_TP_FAN_PCH_TACH7
+ {GPIO_SKL_H_GPP_G8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_8_TP_FAN_PCH_PWM0
+ {GPIO_SKL_H_GPP_G9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_9_TP_FAN_PCH_PWM1
+ {GPIO_SKL_H_GPP_G10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_10_TP_FAN_PCH_PWM2
+ {GPIO_SKL_H_GPP_G11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_11_TP_FAN_PCH_PWM3
+ {GPIO_SKL_H_GPP_G12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_12_FM_BOARD_SKU_ID0
+ {GPIO_SKL_H_GPP_G13, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_13_FM_BOARD_SKU_ID1
+ {GPIO_SKL_H_GPP_G14, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_14_FM_BOARD_SKU_ID2
+ {GPIO_SKL_H_GPP_G15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_15_FM_BOARD_SKU_ID3
+ {GPIO_SKL_H_GPP_G16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_16_FM_BOARD_SKU_ID4
+ {GPIO_SKL_H_GPP_G17, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_17_FM_ADR_COMPLETE
+ {GPIO_SKL_H_GPP_G18, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_18_IRQ_NMI_EVENT_N
+ {GPIO_SKL_H_GPP_G19, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_19_IRQ_SMI_ACTIVE_N
+// GPIO_SKL_H_GPP_G20 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_G21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_21_FM_BIOS_IMAGE_SWAP_N
+ {GPIO_SKL_H_GPP_G22, { GpioPadModeNative3, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_22_FM_M2_2_SSD_DEVSLP
+ {GPIO_SKL_H_GPP_G23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_G_23_TP_PCH_GPP_G_23
+ {GPIO_SKL_H_GPP_H0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_0_FM_PCH_MGPIO_TEST2
+ {GPIO_SKL_H_GPP_H1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_1_FM_SWAP_OVERRIDE_N
+ {GPIO_SKL_H_GPP_H2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_2_FM_PCH_MGPIO_TEST0
+ {GPIO_SKL_H_GPP_H3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_3_FM_PCH_MGPIO_TEST1
+ {GPIO_SKL_H_GPP_H4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_4_FM_PCH_MGPIO_TEST4
+ {GPIO_SKL_H_GPP_H6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_6_FM_CLKREQ_M2_2_N
+ {GPIO_SKL_H_GPP_H7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_7_FM_PCH_MGPIO_TEST3
+ {GPIO_SKL_H_GPP_H8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_8_FM_CLKREQ_NIC1_N
+ {GPIO_SKL_H_GPP_H9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_9_FM_PCH_MGPIO_TEST5
+// GPIO_SKL_H_GPP_H10 - Not Owned by BIOS
+// GPIO_SKL_H_GPP_H11 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_H12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_12_FM_ESPI_FLASH_MODE
+ {GPIO_SKL_H_GPP_H15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_15_PU_ADR_TIMER_HOLD_OFF_N
+ {GPIO_SKL_H_GPP_H18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_18_FM_LT_KEY_DOWNGRADE_N
+ {GPIO_SKL_H_GPP_H19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_19_FM_PCH_10GBE_PCI_DISABLE_N
+ {GPIO_SKL_H_GPP_H20, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_20_FM_SSATA_PCIE_M2_1_SEL
+ {GPIO_SKL_H_GPP_H21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_21_FM_PCH_10GBE_LAN_DISABLE_N
+ {GPIO_SKL_H_GPP_H22, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_22_FM_SSATA_PCIE_M2_2_SEL
+ {GPIO_SKL_H_GPP_H23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_H_23_TP_PCH_GPP_H_23
+ {GPIO_SKL_H_GPP_I0, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_0_TP_PCH_GPP_I_0
+ {GPIO_SKL_H_GPP_I1, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_1_TP_PCH_GPP_I_1
+ {GPIO_SKL_H_GPP_I2, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_2_TP_PCH_GPP_I_2
+ {GPIO_SKL_H_GPP_I3, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_3_TP_PCH_GPP_I_3
+ {GPIO_SKL_H_GPP_I4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_4_TP_PCH_GPP_I_4
+ {GPIO_SKL_H_GPP_I5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_5_TP_PCH_GPP_I_5
+ {GPIO_SKL_H_GPP_I6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_6_TP_PCH_GPP_I_6
+ {GPIO_SKL_H_GPP_I7, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_7_TP_PCH_GPP_I_7
+ {GPIO_SKL_H_GPP_I8, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_8_FM_PCH_10GBE_PCI_DISABLE_N
+ {GPIO_SKL_H_GPP_I9, { GpioPadModeNative2, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_9_FM_PCH_10GBE_LAN_DISABLE_N
+ {GPIO_SKL_H_GPP_I10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_I_10_TP_PCH_GPP_I_10
+// GPIO_SKL_H_GPP_I11 - Not Owned by BIOS
+// GPIO_SKL_H_GPD0 - Not Owned by BIOS
+ {GPIO_SKL_H_GPD1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_1_PU_ACPRESENT
+ {GPIO_SKL_H_GPD2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_2_FM_LAN_WAKE_N
+ {GPIO_SKL_H_GPD3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_3_FM_PCH_PWRBTN_N
+ {GPIO_SKL_H_GPD4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_4_FM_SLPS3_N
+ {GPIO_SKL_H_GPD5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_5_FM_SLPS4_N
+ {GPIO_SKL_H_GPD6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_6_FM_SLPA_N
+ {GPIO_SKL_H_GPD7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_7_TP_GPD_7
+ {GPIO_SKL_H_GPD8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_8_TP_GPD_8_SUSCLK
+ {GPIO_SKL_H_GPD9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_9_TP_GPD_9_SLP
+ {GPIO_SKL_H_GPD10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_10_FM_SLPS5_N
+ {GPIO_SKL_H_GPD11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPD_11_FM_PHY_DISABLE_N
+ {GPIO_SKL_H_GPP_J0, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_0_TP_PCH_GPP_J_0
+ {GPIO_SKL_H_GPP_J1, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_1_TP_PCH_GPP_J_1
+ {GPIO_SKL_H_GPP_J2, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_2_TP_PCH_GPP_J_2
+ {GPIO_SKL_H_GPP_J3, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_3_TP_PCH_GPP_J_3
+ {GPIO_SKL_H_GPP_J4, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_4_TP_PCH_GPP_J_4
+ {GPIO_SKL_H_GPP_J5, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_5_TP_PCH_GPP_J_5
+ {GPIO_SKL_H_GPP_J6, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_6_TP_PCH_GPP_J_6
+ {GPIO_SKL_H_GPP_J7, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_7_TP_PCH_GPP_J_7
+ {GPIO_SKL_H_GPP_J8, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_8_TP_PCH_GPP_J_8
+ {GPIO_SKL_H_GPP_J9, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_9_TP_PCH_GPP_J_9
+ {GPIO_SKL_H_GPP_J10, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_10_TP_PCH_GPP_J_10
+ {GPIO_SKL_H_GPP_J11, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_11_TP_PCH_GPP_J_11
+ {GPIO_SKL_H_GPP_J12, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_12_TP_PCH_GPP_J_12
+ {GPIO_SKL_H_GPP_J13, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_13_TP_PCH_GPP_J_13
+ {GPIO_SKL_H_GPP_J14, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_14_TP_PCH_GPP_J_14
+ {GPIO_SKL_H_GPP_J15, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_15_TP_PCH_GPP_J_15
+ {GPIO_SKL_H_GPP_J16, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_16_TP_PCH_GPP_J_16
+ {GPIO_SKL_H_GPP_J17, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_17_TP_PCH_GPP_J_17
+ {GPIO_SKL_H_GPP_J18, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_18_TP_PCH_GPP_J_18
+ {GPIO_SKL_H_GPP_J19, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_19_TP_PCH_GPP_J_19
+ {GPIO_SKL_H_GPP_J20, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_20_TP_PCH_GPP_J_20
+ {GPIO_SKL_H_GPP_J21, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_21_TP_PCH_GPP_J_21
+ {GPIO_SKL_H_GPP_J22, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_22_TP_PCH_GPP_J_22
+ {GPIO_SKL_H_GPP_J23, { GpioPadModeGpio, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_J_23_TP_PCH_GPP_J_23
+ {GPIO_SKL_H_GPP_K0, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_0_CLK_50M_CKMNG_PCH
+ {GPIO_SKL_H_GPP_K1, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_1_RMII_BMC_PCH_TXD0
+ {GPIO_SKL_H_GPP_K2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_2_RMII_BMC_PCH_TXD1
+ {GPIO_SKL_H_GPP_K3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_3_RMII_BMC_PCH_TX_EN
+ {GPIO_SKL_H_GPP_K4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_4_RMII_PCH_BMC_CRS_DV
+ {GPIO_SKL_H_GPP_K5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_5_RMII_PCH_BMC_RXD0
+ {GPIO_SKL_H_GPP_K6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_6_RMII_PCH_BMC_RXD1
+ {GPIO_SKL_H_GPP_K7, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirInOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_7_RMII_PCH_BMC_RX_ER
+ {GPIO_SKL_H_GPP_K8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_8_RMII_PCH_CONN_ARB_IN
+ {GPIO_SKL_H_GPP_K9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_9_RMII_PCH_CONN_ARB_OUT
+ {GPIO_SKL_H_GPP_K10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirIn, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_K_10_RST_PCIE_PCH_PERST_N
+// GPIO_SKL_H_GPP_K11 - Not Owned by BIOS
+ {GPIO_SKL_H_GPP_L2, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_2_TRC_2CH0_D0
+ {GPIO_SKL_H_GPP_L3, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_3_TRC_2CH0_D1
+ {GPIO_SKL_H_GPP_L4, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_4_TRC_2CH0_D2
+ {GPIO_SKL_H_GPP_L5, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_5_TRC_2CH0_D3
+ {GPIO_SKL_H_GPP_L6, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_6_TRC_2CH0_D4
+ {GPIO_SKL_H_GPP_L7, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_7_TRC_2CH0_D5
+ {GPIO_SKL_H_GPP_L8, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_8_TRC_2CH0_D6
+ {GPIO_SKL_H_GPP_L9, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_9_TRC_2CH0_D7
+ {GPIO_SKL_H_GPP_L10, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_10_TRC_2CH0_CLK
+ {GPIO_SKL_H_GPP_L11, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_11_TRC_2CH1_D0
+ {GPIO_SKL_H_GPP_L12, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_12_TRC_2CH1_D1
+ {GPIO_SKL_H_GPP_L13, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_13_TRC_2CH1_D2
+ {GPIO_SKL_H_GPP_L14, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_14_TRC_2CH1_D3
+ {GPIO_SKL_H_GPP_L15, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_15_TRC_2CH1_D4
+ {GPIO_SKL_H_GPP_L16, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_16_TRC_2CH1_D5
+ {GPIO_SKL_H_GPP_L17, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_17_TRC_2CH1_D6
+ {GPIO_SKL_H_GPP_L18, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_18_TRC_2CH1_D7
+ {GPIO_SKL_H_GPP_L19, { GpioPadModeNative1, GpioHostOwnDefault, GpioDirOut, GpioOutLow, GpioIntDis, GpioResetPwrGood, GpioTermNone, GpioPadConfigLock}},//GPP_L_19_TRC_2CH1_CLK
+};
+
+EFI_STATUS
+TypeWilsonCityRPInstallGpioData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformGpioInitDataGuid,
+ &mGpioTableWilsonCityRP,
+ sizeof(mGpioTableWilsonCityRP)
+ );
+ Status = PcdSet32S (PcdOemSku_GPIO_TABLE_SIZE, sizeof (mGpioTableWilsonCityRP));
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c
new file mode 100644
index 0000000000..c9e1be13ec
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c
@@ -0,0 +1,387 @@
+/** @file
+ IIO Config Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaIioConfigLib.h>
+#include <IioPlatformData.h>
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 = 0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Iou3,
+ Iio_Iou4,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ VPP_PORT_0 = 0,
+ VPP_PORT_1,
+ VPP_PORT_2,
+ VPP_PORT_3
+} VPP_PORT;
+
+#define ENABLE 1
+#define DISABLE 0
+
+
+//
+// config file : Wilson_City_PCIe_Slot_Config_1p70.xlsx
+// config sheet : WilsonCity_ICX
+//
+static IIO_BIFURCATION_DATA_ENTRY_EX IioBifurcationTable[] =
+{
+
+ { Iio_Socket0, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou3, IIO_BIFURCATE_xxxxxx16, 0 , 0x76 , 0xE2 , 4 },
+ { Iio_Socket0, Iio_Iou4, IIO_BIFURCATE_x4x4x4x4, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+ { Iio_Socket1, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, 0 , 0x70 , 0xE2 , 4 },
+ { Iio_Socket1, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, 0 , 0x7C , 0xE2 , 4 },
+ { Iio_Socket1, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Iou3, IIO_BIFURCATE_xxxxxx16, VPP_PORT_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Iou4, IIO_BIFURCATE_x4x4x4x4, 0 , 0x74 , 0xE2 , 4 }
+};
+
+static IIO_SLOT_CONFIG_DATA_ENTRY_EX IioSlotTable[] = {
+ // Port Index | Slot |Interlock |power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard |ExtnCard |ExtnCard |ExtnCard |ExtnCard Retimer|ExtnCard Retimer|ExtnCard |ExtnCard Hotplug|ExtnCard Hotplug|Max Retimer|
+ // | | |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address |Width |Hotplug |Vpp Port |Vpp Address | |
+ {SOCKET_0_INDEX +
+ PORT_1A_INDEX, 6 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2A_INDEX, 7 , DISABLE , 0 , 75 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_3A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_3B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_3C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_3D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_0_INDEX +
+ PORT_4A_INDEX, 2 , DISABLE , 0 , 200 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_5A_INDEX, 10 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_0 , 0x4C , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_5B_INDEX, 11 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_1 , 0x4C , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_5C_INDEX, 12 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_0 , 0x4E , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x1 },
+ {SOCKET_0_INDEX +
+ PORT_5D_INDEX, 13 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_1 , 0x4E , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x1 },
+
+ {SOCKET_1_INDEX +
+ PORT_1A_INDEX, 4 , ENABLE , 0 , 25 , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_1B_INDEX, NO_SLT_IMP , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_1C_INDEX, NO_SLT_IMP , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_1D_INDEX, NO_SLT_IMP , ENABLE , PWR_SCL_MAX , PWR_VAL_MAX , ENABLE , VPP_PORT_0 , 0x4A , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_2A_INDEX, 9 , DISABLE , 0 , 25 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x44 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_2B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x44 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_2C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x46 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_2D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x46 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_3A_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_3B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_3C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_3D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4A_INDEX, 8 , DISABLE , 0 , 25 , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4B_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4C_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_4D_INDEX, NO_SLT_IMP , DISABLE , PWR_SCL_MAX , PWR_VAL_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , DISABLE , SMB_ADDR_MAX , SMB_DATA_MAX , NOT_EXIST , SMB_ADDR_MAX , SMB_DATA_MAX , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , DISABLE , SMB_ADDR_MAX , NOT_EXIST , DISABLE , VPP_PORT_MAX , SMB_ADDR_MAX , 0x0 },
+ {SOCKET_1_INDEX +
+ PORT_5A_INDEX, 14 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_0 , 0x4C , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_5B_INDEX, 15 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_1 , 0x4C , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_5C_INDEX, 16 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_0 , 0x4E , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x1 },
+ {SOCKET_1_INDEX +
+ PORT_5D_INDEX, 17 , DISABLE , 0 , 25 , ENABLE , VPP_PORT_1 , 0x4E , DISABLE , VPP_PORT_MAX , VPP_ADDR_MAX , NOT_HIDE , ENABLE , DISABLE , DISABLE , ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX , NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x1 }
+};
+
+
+//
+// Tables below are generated by script. Please do not change it directly.
+//
+// config file: Wilson_City_PCIe_Slot_Config_1p71.xlsx
+// config sheet: WilsonCity_CPX
+// sheet notes: WilsonCity for CPX4 Rev0.5, 11/07/2019
+//
+static IIO_BIFURCATION_DATA_ENTRY_EX IioBifurcationTable_CPX[] =
+{
+ { Iio_Socket0, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket0, Iio_Iou3, IIO_BIFURCATE_xxxxxx16, 0 , 0x76, 0xE2 , 4 },
+ { Iio_Socket0, Iio_Iou4, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+ { Iio_Socket1, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Iou3, IIO_BIFURCATE_x4x4x4x4, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket1, Iio_Iou4, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+ { Iio_Socket2, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, 0 , 0x7C, 0xE2 , 4 },
+ { Iio_Socket2, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket2, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket2, Iio_Iou3, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket2, Iio_Iou4, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+
+ { Iio_Socket3, Iio_Iou0, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket3, Iio_Iou1, IIO_BIFURCATE_xxxxxx16, 0 , 0x70, 0xE2 , 4 },
+ { Iio_Socket3, Iio_Iou2, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX },
+ { Iio_Socket3, Iio_Iou3, IIO_BIFURCATE_x4x4x4x4, 0 , 0x74, 0xE2 , 4 },
+ { Iio_Socket3, Iio_Iou4, IIO_BIFURCATE_xxxxxx16, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_ADDR_MAX, SMB_DATA_MAX }
+};
+
+static IIO_SLOT_CONFIG_DATA_ENTRY_EX IioSlotTable_CPX[] = {
+ // Port Index | Slot |Inter |Power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard|ExtnCard |ExtnCard |ExtnCard|Ex.C. Retimer|Ex.C. Ret- |ExtnCard|Ex.C. Hotplug|Ex.C. Hotplug|Max |
+ // | |lock |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address|-imer Width |Hotplug |Vpp Port |Vpp Address |Retimer|
+ { SOCKET_0_INDEX + PORT_1A_INDEX, 7 , DISABLE, 0 , 75 , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_1B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_1C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_1D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_2A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_2B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_2C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_2D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_3A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_3B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_3C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_3D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_4A_INDEX, 2 , DISABLE, 0 , 200 , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x1 },
+ { SOCKET_0_INDEX + PORT_4B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x1 },
+ { SOCKET_0_INDEX + PORT_4C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x1 },
+ { SOCKET_0_INDEX + PORT_4D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x76 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x1 },
+ { SOCKET_0_INDEX + PORT_5A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_5B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_5C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_0_INDEX + PORT_5D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ // Port Index | Slot |Inter |Power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard|ExtnCard |ExtnCard |ExtnCard|Ex.C. Retimer|Ex.C. Ret- |ExtnCard|Ex.C. Hotplug|Ex.C. Hotplug|Max |
+ // | |lock |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address|-imer Width |Hotplug |Vpp Port |Vpp Address |Retimer|
+ { SOCKET_1_INDEX + PORT_1A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_1B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_1C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_1D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_2A_INDEX, 6 , DISABLE, 0 , 75 , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_2B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_2C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_2D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_3A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_3B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_3C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_3D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_4A_INDEX, 10 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_0 , 0x4C , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x1 },
+ { SOCKET_1_INDEX + PORT_4B_INDEX, 11 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_1 , 0x4C , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x1 },
+ { SOCKET_1_INDEX + PORT_4C_INDEX, 12 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_0 , 0x4E , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x1 },
+ { SOCKET_1_INDEX + PORT_4D_INDEX, 13 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_1 , 0x4E , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x26 , 2 , 16 , 0xe2 , SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x1 },
+ { SOCKET_1_INDEX + PORT_5A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_5B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_5C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_1_INDEX + PORT_5D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ // Port Index | Slot |Inter |Power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard|ExtnCard |ExtnCard |ExtnCard|Ex.C. Retimer|Ex.C. Ret- |ExtnCard|Ex.C. Hotplug|Ex.C. Hotplug|Max |
+ // | |lock |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address|-imer Width |Hotplug |Vpp Port |Vpp Address |Retimer|
+ { SOCKET_2_INDEX + PORT_1A_INDEX, 9 , DISABLE, 0 , 25 , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x44 , 0x1 },
+ { SOCKET_2_INDEX + PORT_1B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x44 , 0x1 },
+ { SOCKET_2_INDEX + PORT_1C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x46 , 0x1 },
+ { SOCKET_2_INDEX + PORT_1D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x7C , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x46 , 0x1 },
+ { SOCKET_2_INDEX + PORT_2A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_2B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_2C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_2D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_3A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_3B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_3C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_3D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_4A_INDEX, 8 , DISABLE, 0 , 25 , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_4B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_4C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_4D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_5A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_5B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_5C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_2_INDEX + PORT_5D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ // Port Index | Slot |Inter |Power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard|ExtnCard |ExtnCard |ExtnCard|Ex.C. Retimer|Ex.C. Ret- |ExtnCard|Ex.C. Hotplug|Ex.C. Hotplug|Max |
+ // | |lock |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address|-imer Width |Hotplug |Vpp Port |Vpp Address |Retimer|
+ { SOCKET_3_INDEX + PORT_1A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_1B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_1C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_1D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_2A_INDEX, 4 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_0 , 0x4A , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x1 },
+ { SOCKET_3_INDEX + PORT_2B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, ENABLE , VPP_PORT_0 , 0x4A , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x1 },
+ { SOCKET_3_INDEX + PORT_2C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, ENABLE , VPP_PORT_0 , 0x4A , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x1 },
+ { SOCKET_3_INDEX + PORT_2D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, ENABLE , VPP_PORT_0 , 0x4A , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x70 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x1 },
+ { SOCKET_3_INDEX + PORT_3A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_3B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_3C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_3D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_4A_INDEX, 14 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_0 , 0x4C , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x40 , 0x1 },
+ { SOCKET_3_INDEX + PORT_4B_INDEX, 15 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_1 , 0x4C , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x40 , 0x1 },
+ { SOCKET_3_INDEX + PORT_4C_INDEX, 16 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_0 , 0x4E , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_0 , 0x42 , 0x1 },
+ { SOCKET_3_INDEX + PORT_4D_INDEX, 17 , DISABLE, 0 , 25 , ENABLE , VPP_PORT_1 , 0x4E , DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, ENABLE , 0x20 , 2 , 16 , 0xe2 , 4 , ENABLE , VPP_PORT_0 , 0x74 , ENABLE , SMB_ADDR_MAX, NOT_EXIST , ENABLE , VPP_PORT_1 , 0x42 , 0x1 },
+ { SOCKET_3_INDEX + PORT_5A_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_5B_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_5C_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 },
+ { SOCKET_3_INDEX + PORT_5D_INDEX, NO_SLT_IMP, DISABLE, PWR_SCL_MAX, PWR_VAL_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, DISABLE, VPP_PORT_MAX, VPP_ADDR_MAX, NOT_HIDE, ENABLE , DISABLE, DISABLE, DISABLE, SMB_ADDR_MAX, SMB_DATA_MAX, NOT_EXIST, SMB_ADDR_MAX, SMB_DATA_MAX, DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, DISABLE, SMB_ADDR_MAX, NOT_EXIST , DISABLE, VPP_PORT_MAX, SMB_ADDR_MAX, 0x0 }
+ // Port Index | Slot |Inter |Power |Power |Hotplug |Vpp Port |Vpp Addr |PCIeSSD |PCIeSSD |PCIeSSD |Hidden |Common | SRIS |Uplink |Retimer |Retimer |Retimer |Retimer |Mux |Mux |ExtnCard|ExtnCard |ExtnCard |ExtnCard|Ex.C. Retimer|Ex.C. Ret- |ExtnCard|Ex.C. Hotplug|Ex.C. Hotplug|Max |
+ // | |lock |Limit Scale |Limit Value |Cap | | |Cap |Port |Address | |Clock | |Port | |Address |Channel |Width |Address |Channel |Support |SMBus Port |SMBus Addr |Retimer |SMBus Address|-imer Width |Hotplug |Vpp Port |Vpp Address |Retimer|
+};
+
+
+EFI_STATUS
+UpdateWilsonCityRPIioConfig (
+ IN IIO_GLOBALS *IioGlobalData
+ )
+{
+ return EFI_SUCCESS;
+}
+
+PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX TypeWilsonCityRPIioConfigTable =
+{
+ PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE,
+ PLATFORM_IIO_CONFIG_UPDATE_VERSION_2,
+
+ IioBifurcationTable,
+ sizeof(IioBifurcationTable),
+ UpdateWilsonCityRPIioConfig,
+ IioSlotTable,
+ sizeof(IioSlotTable)
+};
+
+PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX TypeWilsonCityRPIioConfigTable_CPX =
+{
+ PLATFORM_IIO_CONFIG_UPDATE_SIGNATURE,
+ PLATFORM_IIO_CONFIG_UPDATE_VERSION_2,
+
+ IioBifurcationTable_CPX,
+ sizeof(IioBifurcationTable_CPX),
+ UpdateWilsonCityRPIioConfig,
+ IioSlotTable_CPX,
+ sizeof(IioSlotTable_CPX)
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+TypeWilsonCityRPIioPortBifurcationInit (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ PLATFORM_IIO_CONFIG_UPDATE_TABLE_EX *PlatformIioInfoPtr;
+ UINTN PlatformIioInfoSize;
+
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+ //
+ // This is config for ICX
+ //
+ PlatformIioInfoPtr = &TypeWilsonCityRPIioConfigTable;
+ PlatformIioInfoSize = sizeof(TypeWilsonCityRPIioConfigTable);
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid,
+ PlatformIioInfoPtr,
+ PlatformIioInfoSize
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_1,
+ PlatformIioInfoPtr,
+ PlatformIioInfoSize
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_2,
+ PlatformIioInfoPtr,
+ PlatformIioInfoSize
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformIioConfigDataGuid_3,
+ PlatformIioInfoPtr,
+ PlatformIioInfoSize
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c
new file mode 100644
index 0000000000..dd67a65a54
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c
@@ -0,0 +1,107 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <KtiSetupDefinitions.h>
+#include <UbaKti.h>
+
+extern EFI_GUID gPlatformKtiEparamUpdateDataGuid;
+
+ALL_LANES_EPARAM_LINK_INFO KtiWilsonCityRPIcxAllLanesEparamTable[] = {
+ //
+ // SocketID, Freq, Link, TXEQL, CTLEPEAK
+ // Please propagate changes to WilsonCitySMT and WilsonCityModular UBA KtiEparam tables
+ //
+ //
+ // Socket 0
+ //
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK0), 0x2B33373F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK1), 0x2A33363F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK2), 0x2B34363F, ADAPTIVE_CTLE},
+ //
+ // Socket 1
+ //
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK0), 0x2A31383F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK1), 0x2A30393F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK2), 0x2C34373F, ADAPTIVE_CTLE}
+};
+
+PLATFORM_KTI_EPARAM_UPDATE_TABLE TypeWilsonCityRPIcxKtiEparamUpdate = {
+ PLATFORM_KTIEP_UPDATE_SIGNATURE,
+ PLATFORM_KTIEP_UPDATE_VERSION,
+ KtiWilsonCityRPIcxAllLanesEparamTable,
+ sizeof (KtiWilsonCityRPIcxAllLanesEparamTable),
+ NULL,
+ 0
+};
+
+
+ALL_LANES_EPARAM_LINK_INFO KtiWilsonCityRPCpxAllLanesEparamTable[] = {
+ //
+ // SocketID, Freq, Link, TXEQL, CTLEPEAK
+ //
+ //
+ // Socket 0
+ //
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK0), 0x2E39343F, ADAPTIVE_CTLE},
+ {0x0, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK5), 0x2F39353F, ADAPTIVE_CTLE},
+ //
+ // Socket 1
+ //
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK0), 0x2D37353F, ADAPTIVE_CTLE},
+ {0x1, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK5), 0x2F3A343F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 2
+ //
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK0), 0x2E39343F, ADAPTIVE_CTLE},
+ {0x2, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK5), 0x2F39353F, ADAPTIVE_CTLE},
+
+ //
+ // Socket 3
+ //
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK0), 0x2D37353F, ADAPTIVE_CTLE},
+ {0x3, (1 << SPEED_REC_96GT) | (1 << SPEED_REC_104GT) | (1 << SPEED_REC_112GT), (1 << KTI_LINK5), 0x2F3A343F, ADAPTIVE_CTLE}
+};
+
+PLATFORM_KTI_EPARAM_UPDATE_TABLE TypeWilsonCityRPCpxKtiEparamUpdate =
+{
+ PLATFORM_KTIEP_UPDATE_SIGNATURE,
+ PLATFORM_KTIEP_UPDATE_VERSION,
+ KtiWilsonCityRPCpxAllLanesEparamTable,
+ sizeof (KtiWilsonCityRPCpxAllLanesEparamTable),
+ NULL,
+ 0
+};
+
+
+EFI_STATUS
+TypeWilsonCityRPInstallKtiEparamData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA (GuidHob);
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformKtiEparamUpdateDataGuid,
+ &TypeWilsonCityRPIcxKtiEparamUpdate,
+ sizeof(TypeWilsonCityRPIcxKtiEparamUpdate)
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c
new file mode 100644
index 0000000000..8565b3c761
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c
@@ -0,0 +1,274 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <ImonVrSvid.h>
+#include <Library/MemVrSvidMapLib.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/UbaPcdUpdateLib.h>
+#include <Library/PcdLib.h>
+#include <UncoreCommonIncludes.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+#include <CpuAndRevisionDefines.h>
+
+#define GPIO_SKL_H_GPP_B20 0x01010014
+
+VOID TypeWilsonCityRPPlatformUpdateVrIdAddress (VOID);
+
+/**
+ Update WilsonCity IMON SVID Information
+
+ retval N/A
+**/
+VOID
+TypeWilsonCityRPPlatformUpdateImonAddress (
+ VOID
+ )
+{
+ VCC_IMON *VccImon = NULL;
+ UINTN Size = 0;
+
+ Size = sizeof (VCC_IMON);
+ VccImon = (VCC_IMON *) PcdGetPtr (PcdImonAddr);
+ if (VccImon == NULL) {
+ DEBUG ((EFI_D_ERROR, "UpdateImonAddress() - PcdImonAddr == NULL\n"));
+ return;
+ }
+
+ VccImon->VrSvid[0] = PcdGet8 (PcdWilsonCitySvidVrP1V8);
+ VccImon->VrSvid[1] = PcdGet8 (PcdWilsonCitySvidVrVccAna);
+ VccImon->VrSvid[2] = IMON_ADDR_LIST_END; // End array with 0xFF
+
+ PcdSetPtrS (PcdImonAddr, &Size, (VOID *) VccImon);
+}
+
+/**
+ Update WilsonCity VR ID SVID Information
+
+ retval N/A
+**/
+VOID
+TypeWilsonCityRPPlatformUpdateVrIdAddress (
+ VOID
+ )
+{
+ MEM_SVID_MAP *MemSvidMap = NULL;
+ UINTN Size = 0;
+
+ Size = sizeof (MEM_SVID_MAP);
+ MemSvidMap = (MEM_SVID_MAP *) PcdGetPtr (PcdMemSrvidMap);
+ if (MemSvidMap == NULL) {
+ DEBUG ((EFI_D_ERROR, "UpdateVrIdAddress() - PcdMemSrvidMap == NULL\n"));
+ return;
+ }
+ /*
+ Map VR ID Address to Memory controller
+ The mailbox command can support up to 4 DDR VR ID's, 0x10, 0x12, 0x14, and 0x16.
+ Whitley PHAS indicates that Whitley (like Purley) only connects 2 VRs (VR ID's 0x10 and 0x12).
+ Those are typically shared such that MC0/MC2 share the same DDR VR (as they are on the same side of the CPU)
+ and MC1/MC3 share the other. Depending on motherboard layout and other design constraints, this could change
+ BIT 4 => 0 or 1, SVID BUS\Interface 0 or 1 respectively
+ BIT 0:3 => SVID ADDRESS
+ */
+
+ MemSvidMap->Socket[0].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[0].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[1].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[1].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[2].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[2].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[3].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[3].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[4].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[4].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[5].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[5].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[6].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[6].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+ MemSvidMap->Socket[7].Mc[0] = 0x10; //SVID BUS 1, ADDR 0
+ MemSvidMap->Socket[7].Mc[1] = 0x12; //SVID BUS 1, ADDR 2
+
+ PcdSetPtrS (PcdMemSrvidMap, &Size, (VOID *) MemSvidMap);
+}
+
+EFI_STATUS
+TypeWilsonCityRPPlatformPcdUpdateCallback (
+ VOID
+)
+{
+ CHAR8 FamilyName[] = "Whitley";
+
+ CHAR8 BoardName[] = "EPRP";
+ UINT32 Data32;
+ UINTN Size;
+ UINTN PlatformFeatureFlag = 0;
+
+ CHAR16 PlatformName[] = L"TypeWilsonCityRP";
+ UINTN PlatformNameSize = 0;
+ EFI_STATUS Status;
+
+ //#Integer for BoardID, must match the SKU number and be unique.
+ Status = PcdSet16S (PcdOemSkuBoardID , TypeWilsonCityRP);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSet16S (PcdOemSkuBoardFamily , 0x30);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ // Number of Sockets on Board.
+ Status = PcdSet32S (PcdOemSkuBoardSocketCount, 2);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ // Max channel and max DIMM
+ Status = PcdSet32S (PcdOemSkuMaxChannel , 8);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSet32S (PcdOemSkuMaxDimmPerChannel , 2);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSetBoolS (PcdOemSkuDimmLayout, TRUE);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //Update Onboard Video Controller PCI Ven_id, Dev_id
+ Status = PcdSet16S (PcdOnboardVideoPciVendorId, 0x1A03);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PcdSet16S (PcdOnboardVideoPciDeviceId, 0x2000);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //#
+ //# Misc.
+ //#
+ //# V_PCIE_PORT_PXPSLOTCTRL_ATNLED_OFF
+ Status = PcdSet16S (PcdOemSkuMrlAttnLed , 0xc0);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //SDP Active Flag
+ Status = PcdSet8S (PcdOemSkuSdpActiveFlag , 0x0);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# Zero terminated string to ID family
+ Size = AsciiStrSize (FamilyName);
+ Status = PcdSetPtrS (PcdOemSkuFamilyName , &Size, FamilyName);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# Zero terminated string to Board Name
+ Size = AsciiStrSize (BoardName);
+ Status = PcdSetPtrS (PcdOemSkuBoardName , &Size, BoardName);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ PlatformNameSize = sizeof (PlatformName);
+ Status = PcdSet32S (PcdOemSkuPlatformNameSize , (UINT32)PlatformNameSize);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSetPtrS (PcdOemSkuPlatformName , &PlatformNameSize, PlatformName);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# FeaturesBasedOnPlatform
+ Status = PcdSet32S (PcdOemSkuPlatformFeatureFlag , (UINT32)PlatformFeatureFlag);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# Assert GPIO
+ Data32 = 0;
+ Status = PcdSet32S (PcdOemSkuAssertPostGPIOValue, Data32);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ Status = PcdSet32S (PcdOemSkuAssertPostGPIO, GPIO_SKL_H_GPP_B20);
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //# UplinkPortIndex
+ Status = PcdSet8S (PcdOemSkuUplinkPortIndex, 5);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ DEBUG ((EFI_D_INFO, "Uba Callback: PlatformPcdUpdateCallback is called!\n"));
+ Status = TypeWilsonCityRPPlatformUpdateAcpiTablePcds ();
+ //# BMC Pcie Port Number
+ PcdSet8S (PcdOemSkuBmcPciePortNumber, 5);
+ ASSERT_EFI_ERROR(Status);
+
+ //# Board Type Bit Mask
+ PcdSet32S (PcdBoardTypeBitmask, CPU_TYPE_F_MASK | (CPU_TYPE_F_MASK << 4));
+ ASSERT_EFI_ERROR(Status);
+
+ //Update IMON Address
+ TypeWilsonCityRPPlatformUpdateImonAddress ();
+
+ return Status;
+}
+
+PLATFORM_PCD_UPDATE_TABLE TypeWilsonCityRPPcdUpdateTable =
+{
+ PLATFORM_PCD_UPDATE_SIGNATURE,
+ PLATFORM_PCD_UPDATE_VERSION,
+ TypeWilsonCityRPPlatformPcdUpdateCallback
+};
+
+EFI_STATUS
+TypeWilsonCityRPInstallPcdData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPcdConfigDataGuid,
+ &TypeWilsonCityRPPcdUpdateTable,
+ sizeof(TypeWilsonCityRPPcdUpdateTable)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c
new file mode 100644
index 0000000000..a2ee2322c3
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c
@@ -0,0 +1,92 @@
+/** @file
+ Pch Early update.
+
+ @copyright
+ Copyright 2019 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+
+#include <Library/UbaPchEarlyUpdateLib.h>
+
+#include <PchAccess.h>
+#include <GpioPinsSklH.h>
+#include <Library/GpioLib.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+EFI_STATUS
+TypeWilsonCityRPPchLanConfig (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+)
+{
+ DYNAMIC_SI_LIBARY_PPI *DynamicSiLibraryPpi = NULL;
+ EFI_STATUS Status;
+
+ Status = PeiServicesLocatePpi (&gDynamicSiLibraryPpiGuid, 0, NULL, &DynamicSiLibraryPpi);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ DynamicSiLibraryPpi->GpioSetOutputValue (GPIO_SKL_H_GPP_I9, (UINT32)SystemConfig->LomDisableByGpio);
+ DynamicSiLibraryPpi->PchDisableGbe ();
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+TypeWilsonCityRPOemInitLateHook (
+ IN SYSTEM_CONFIGURATION *SystemConfig
+)
+{
+ return EFI_SUCCESS;
+}
+
+
+PLATFORM_PCH_EARLY_UPDATE_TABLE TypeWilsonCityRPPchEarlyUpdateTable =
+{
+ PLATFORM_PCH_EARLY_UPDATE_SIGNATURE,
+ PLATFORM_PCH_EARLY_UPDATE_VERSION,
+ TypeWilsonCityRPPchLanConfig,
+ TypeWilsonCityRPOemInitLateHook
+};
+
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+EFIAPI
+TypeWilsonCityRPPchEarlyUpdate(
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+ )
+{
+ EFI_STATUS Status;
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPchEarlyConfigDataGuid,
+ &TypeWilsonCityRPPchEarlyUpdateTable,
+ sizeof(TypeWilsonCityRPPchEarlyUpdateTable)
+ );
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h
new file mode 100644
index 0000000000..56338b458e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h
@@ -0,0 +1,77 @@
+/** @file
+ PeiBoardInit.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _PEI_BOARD_INIT_PEIM_H_
+#define _PEI_BOARD_INIT_PEIM_H_
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Ppi/UbaCfgDb.h>
+#include <Guid/PlatformInfo.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/HobLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/GpioLib.h>
+#include <GpioPinsSklH.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+// TypeWilsonCityRP
+EFI_STATUS
+TypeWilsonCityRPPlatformUpdateUsbOcMappings (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeWilsonCityRPPlatformUpdateAcpiTablePcds (
+ VOID
+);
+
+EFI_STATUS
+TypeWilsonCityRPInstallClockgenData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeWilsonCityRPInstallPcdData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeWilsonCityRPPchEarlyUpdate (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeWilsonCityRPIioPortBifurcationInit (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeWilsonCityRPInstallSlotTableData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+EFI_STATUS
+TypeWilsonCityRPInstallKtiEparamData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+
+// TypeWilsonCityRP
+EFI_STATUS
+TypeWilsonCityRPInstallGpioData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+) ;
+
+EFI_STATUS
+TypeWilsonCityRPInstallSoftStrapData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+);
+#endif // _PEI_BOARD_INIT_PEIM_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c
new file mode 100644
index 0000000000..44279bb1bd
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c
@@ -0,0 +1,156 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation.
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+
+/**
+ The constructor function for Board Init Libray.
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @retval EFI_SUCCESS Table initialization successfully.
+ @retval EFI_OUT_OF_RESOURCES No enough memory to initialize table.
+**/
+
+#include "PeiBoardInit.h"
+#include <UncoreCommonIncludes.h>
+#include <Library/PchMultiPchBase.h>
+#include <Ppi/DynamicSiLibraryPpi.h>
+
+EFI_STATUS
+EFIAPI
+TypeWilsonCityRPPeiBoardInitLibConstructor (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ UBA_CONFIG_DATABASE_PPI *UbaConfigPpi;
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+ UINT8 SocketIndex;
+ UINT8 ChannelIndex;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT (GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return EFI_NOT_FOUND;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+
+ if (PlatformInfo->BoardId == TypeWilsonCityRP) {
+
+ DEBUG ((EFI_D_INFO, "PEI UBA init BoardId 0x%X: WilsonCityRP\n", PlatformInfo->BoardId));
+
+ // Socket 0 has SMT DIMM connector, Socket 1 has PTH DIMM connector
+ for (SocketIndex = 0; SocketIndex < MAX_SOCKET; SocketIndex++) {
+ for (ChannelIndex = 0; ChannelIndex < MAX_CH; ChannelIndex++) {
+ switch (SocketIndex) {
+ case 0:
+ PlatformInfo->MemoryConnectorType[SocketIndex][ChannelIndex] = DimmConnectorSmt;
+ break;
+ case 1:
+ // Fall through since socket 1 is PTH type
+ default:
+ // Use the more restrictive type as the default case
+ PlatformInfo->MemoryConnectorType[SocketIndex][ChannelIndex] = DimmConnectorPth;
+ break;
+ }
+ }
+ }
+
+ BuildGuidDataHob (
+ &gEfiPlatformInfoGuid,
+ &(PlatformInfo),
+ sizeof (EFI_PLATFORM_INFO)
+ );
+
+ Status = PeiServicesLocatePpi (
+ &gUbaConfigDatabasePpiGuid,
+ 0,
+ NULL,
+ &UbaConfigPpi
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->InitSku (
+ UbaConfigPpi,
+ PlatformInfo->BoardId,
+ NULL,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = TypeWilsonCityRPInstallGpioData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeWilsonCityRPInstallPcdData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeWilsonCityRPInstallSoftStrapData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeWilsonCityRPPchEarlyUpdate (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeWilsonCityRPPlatformUpdateUsbOcMappings (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeWilsonCityRPInstallSlotTableData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = TypeWilsonCityRPInstallKtiEparamData (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ for (SocketIndex = 0; SocketIndex < MAX_SOCKET; SocketIndex++) {
+
+ //
+ // Set default memory type connector.
+ // Socket 0: DimmConnectorSmt
+ // Socket 1: DimmConnectorPth
+ //
+ if (SocketIndex % 2 == 0) {
+ (*PeiServices)->SetMem (&PlatformInfo->MemoryConnectorType[SocketIndex], sizeof (PlatformInfo->MemoryConnectorType[SocketIndex]), DimmConnectorSmt);
+ } else {
+ (*PeiServices)->SetMem (&PlatformInfo->MemoryConnectorType[SocketIndex], sizeof (PlatformInfo->MemoryConnectorType[SocketIndex]), DimmConnectorPth);
+ }
+ }
+
+ //
+ // Initialize InterposerType to InterposerUnknown
+ //
+ for (SocketIndex = 0; SocketIndex < MAX_SOCKET; ++SocketIndex) {
+ PlatformInfo->InterposerType[SocketIndex] = InterposerUnknown;
+ }
+
+ //
+ // TypeWilsonCityRPIioPortBifurcationInit will use PlatformInfo->InterposerType for PPO.
+ //
+ Status = TypeWilsonCityRPIioPortBifurcationInit (UbaConfigPpi);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+ }
+ return Status;
+}
\ No newline at end of file
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
new file mode 100644
index 0000000000..974831de89
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
@@ -0,0 +1,166 @@
+## @file
+# Component information file for BoardInitLib in PEI post memory phase.
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+# @par Specification Reference:
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = TypeWilsonCityRPPeiBoardInitLib
+ FILE_GUID = 14074de7-ed3e-4f58-a19c-b461656af3e0
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = NULL|PEIM
+ CONSTRUCTOR = TypeWilsonCityRPPeiBoardInitLibConstructor
+
+[LibraryClasses]
+ BaseLib
+ DebugLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ PeiServicesLib
+ HobLib
+ PeiServicesTablePointerLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+
+[Sources]
+ PeiBoardInitLib.c
+ GpioTable.c
+ PcdData.c
+ UsbOC.c
+ AcpiTablePcds.c
+ IioBifurInit.c
+ SlotTable.c
+ KtiEparam.c
+ PchEarlyUpdate.c
+ SoftStrapFixup.c
+ PeiBoardInit.h
+
+[FixedPcd]
+
+[Pcd]
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardID
+ gOemSkuTokenSpaceGuid.PcdOemSkuSubBoardID
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardFamily
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuFamilyName
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardName
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardSocketCount
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxChannel
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxDimmPerChannel
+ gOemSkuTokenSpaceGuid.PcdOemSkuDimmLayout
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort00
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort01
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort02
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort03
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort04
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort05
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort06
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort07
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort08
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort09
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort10
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort11
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort12
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort13
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort00
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort01
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort02
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort03
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort04
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort05
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort06
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort07
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort08
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort09
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort10
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort11
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort12
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort13
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort00
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort01
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort02
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort03
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort04
+ gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort05
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuAcpiName
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuMrlAttnLed
+ gOemSkuTokenSpaceGuid.PcdOemSkuSdpActiveFlag
+
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL2_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL3_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL2_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL3_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL2_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL3_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_INV_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_BLINK_VAL
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_TABLE_SIZE
+
+ gOemSkuTokenSpaceGuid.PcdOemSku_Reg78Data32
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator00
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator01
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator02
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator03
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator04
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator05
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator06
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator07
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator08
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator09
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator10
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator11
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformName
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformNameSize
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformFeatureFlag
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIO
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIOValue
+ gOemSkuTokenSpaceGuid.PcdOemSkuBmcPciePortNumber
+ gOemSkuTokenSpaceGuid.PcdOemTableIdXhci
+ gOemSkuTokenSpaceGuid.PcdOemSkuUplinkPortIndex
+ gPlatformTokenSpaceGuid.PcdBoardTypeBitmask
+ gPlatformTokenSpaceGuid.PcdWilsonCitySvidVrP1V8
+ gPlatformTokenSpaceGuid.PcdWilsonCitySvidVrVccAna
+ gEfiCpRcPkgTokenSpaceGuid.PcdImonAddr
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemSrvidMap
+
+ gPlatformTokenSpaceGuid.PcdMemInterposerMap
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciVendorId
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciDeviceId
+
+[Ppis]
+ gUbaConfigDatabasePpiGuid
+ gDynamicSiLibraryPpiGuid ## CONSUMES
+
+[Guids]
+ gPlatformGpioInitDataGuid
+
+[Depex]
+ gDynamicSiLibraryPpiGuid
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c
new file mode 100644
index 0000000000..49d83dbb4a
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c
@@ -0,0 +1,171 @@
+/** @file
+ Slot Table Update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaSlotUpdateLib.h>
+#include <IioPlatformData.h>
+
+#define PCI_DEVICE_ON_BOARD_TRUE 0
+#define PCI_DEVICE_ON_BOARD_FALSE 1
+
+typedef enum {
+ Iio_Socket0 = 0,
+ Iio_Socket1,
+ Iio_Socket2,
+ Iio_Socket3,
+ Iio_Socket4,
+ Iio_Socket5,
+ Iio_Socket6,
+ Iio_Socket7
+} IIO_SOCKETS;
+
+typedef enum {
+ Iio_Iou0 =0,
+ Iio_Iou1,
+ Iio_Iou2,
+ Iio_Iou3,
+ Iio_Iou4,
+ Iio_IouMax
+} IIO_IOUS;
+
+typedef enum {
+ Bw5_Addr_0 = 0,
+ Bw5_Addr_1,
+ Bw5_Addr_2,
+ Bw5_Addr_3,
+ Bw5_Addr_Max
+} BW5_ADDRESS;
+
+static UINT8 TypeWilsonCityRPPchPciSlotImpementedTableData[] = {
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 0
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 1
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 2
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 3
+ PCI_DEVICE_ON_BOARD_TRUE, // Root Port 4
+ PCI_DEVICE_ON_BOARD_TRUE, // Root Port 5
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 6
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 7
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 8
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 9
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 10
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 11
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 12
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 13
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 14
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 15
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 16
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 17
+ PCI_DEVICE_ON_BOARD_FALSE, // Root Port 18
+ PCI_DEVICE_ON_BOARD_FALSE // Root Port 19
+};
+
+UINT8
+GetTypeWilsonCityRPIOU0Setting (
+ UINT8 IOU0Data
+)
+{
+ //
+ // Change bifurcation of Port1A-1B as xxx8 when QATGpio enabled.
+ //
+ IOU0Data = IIO_BIFURCATE_xxx8xxx8;
+ return IOU0Data;
+}
+
+UINT8
+GetTypeWilsonCityRPIOU2Setting (
+ UINT8 SkuPersonalityType,
+ UINT8 IOU2Data
+)
+{
+ return IOU2Data;
+}
+
+static IIO_BROADWAY_ADDRESS_DATA_ENTRY SlotTypeWilsonCityRPBroadwayTable[] = {
+ {Iio_Socket0, Iio_Iou2, Bw5_Addr_0 },
+ {Iio_Socket1, Iio_Iou1, Bw5_Addr_2},
+ {Iio_Socket1, Iio_Iou0, Bw5_Addr_1 },
+};
+
+
+PLATFORM_SLOT_UPDATE_TABLE TypeWilsonCityRPSlotTable =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ SlotTypeWilsonCityRPBroadwayTable,
+ GetTypeWilsonCityRPIOU0Setting,
+ 0
+};
+
+PLATFORM_SLOT_UPDATE_TABLE2 TypeWilsonCityRPSlotTable2 =
+{
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ SlotTypeWilsonCityRPBroadwayTable,
+ GetTypeWilsonCityRPIOU0Setting,
+ 0,
+ GetTypeWilsonCityRPIOU2Setting
+};
+
+PLATFORM_PCH_PCI_SLOT_IMPLEMENTED_UPDATE_TABLE TypeWilsonCityRPPchPciSlotImplementedTable = {
+ PLATFORM_SLOT_UPDATE_SIGNATURE,
+ PLATFORM_SLOT_UPDATE_VERSION,
+
+ TypeWilsonCityRPPchPciSlotImpementedTableData
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+TypeWilsonCityRPInstallSlotTableData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid,
+ &TypeWilsonCityRPSlotTable,
+ sizeof(TypeWilsonCityRPSlotTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformSlotDataGuid2,
+ &TypeWilsonCityRPSlotTable2,
+ sizeof(TypeWilsonCityRPSlotTable2)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPciSlotImplementedGuid,
+ &TypeWilsonCityRPPchPciSlotImplementedTable,
+ sizeof(TypeWilsonCityRPPchPciSlotImplementedTable)
+ );
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c
new file mode 100644
index 0000000000..055b2de311
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c
@@ -0,0 +1,120 @@
+/** @file
+ Soft Strap update.
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+#include <Library/UbaSoftStrapUpdateLib.h>
+
+PLATFORM_PCH_SOFTSTRAP_FIXUP_ENTRY TypeWilsonCityRPSoftStrapTable[] =
+{
+// SoftStrapNumber, LowBit, BitLength, Value
+ {3, 1, 1, 0x1 }, // Intel QuickAssist Endpoint 2 (EP[2]) Primary Mux Select
+ {4, 24, 1, 0x0 }, // 10 GbE MAC Power Gate Control
+ {15, 4, 2, 0x3 }, // sSATA / PCIe Select for Port 2 (SATA_PCIE_SP2)
+ {15, 6, 2, 0x1 }, // sSATA / PCIe Select for Port 3 (SATA_PCIE_SP3)
+ {15, 18, 1, 0x1 }, // Polarity of GPP_H20 (GPIO polarity of Select between sSATA Port 2 and PCIe Port 8)
+ {16, 4, 2, 0x3 }, // sSATA / PCIe GP Select for Port 2 (SATA_PCIE_GP2)
+ {16, 6, 2, 0x1 }, // sSATA / PCIe GP Select for Port 3 (SATA_PCIE_GP3)
+ {17, 6, 1, 0x0 }, // Intel (R) GbE Legacy PHY over PCIe Enabled
+ {17, 12, 2, 0x3 }, // sSATA / PCIe Combo Port 2
+ {18, 0, 2, 0x1 }, // sSATA / PCIe Combo Port 3
+ {18, 6, 2, 0x3 }, // SATA / PCIe Combo Port 0
+ {18, 8, 2, 0x3 }, // SATA / PCIe Combo Port 1
+ {18, 10, 2, 0x3 }, // SATA / PCIe Combo Port 2
+ {18, 12, 2, 0x3 }, // SATA / PCIe Combo Port 3
+ {18, 14, 2, 0x3 }, // SATA / PCIe Combo Port 4
+ {19, 2, 1, 0x1 }, // Polarity Select sSATA / PCIe Combo Port 2
+ {19, 16, 2, 0x3 }, // SATA / PCIe Combo Port 5
+ {19, 18, 2, 0x3 }, // SATA / PCIe Combo Port 6
+ {19, 20, 2, 0x3 }, // SATA / PCIe Combo Port 7
+ {19, 26, 1, 0x1 }, // Statically assign PCH PCIe NP8 Uplink to act as Downlink or Uplink(PCIEUDS)
+ {33, 24, 7, 0x17}, // IE SMLink1 I2C Target Address
+ {64, 24, 7, 0x17}, // ME SMLink1 I2C Target Address
+ {84, 24, 1, 0x0 }, // SMS1 Gbe Legacy MAC SMBus Address Enable
+ {85, 8, 3, 0x0 }, // SMS1 PMC SMBus Connect
+ {88, 8, 2, 0x3 }, // Root Port Configuration 0
+ {93, 0, 2, 0x3 }, // Flex IO Port 18 AUXILLARY Mux Select between SATA Port 0 and PCIe Port 12
+ {93, 2, 2, 0x3 }, // Flex IO Port 19 AUXILLARY Mux Select between SATA Port 1 and PCIe Port 13
+ {93, 4, 2, 0x3 }, // Flex IO Port 20 AUXILLARY Mux Select between SATA Port 2 and PCIe Port 14
+ {94, 0, 2, 0x3 }, // Flex IO Port 21 AUXILLARY Mux Select between SATA Port 3 and PCIe Port 15
+ {94, 2, 2, 0x3 }, // Flex IO Port 22 AUXILLARY Mux Select between SATA Port 4 and PCIe Port 16
+ {94, 4, 2, 0x3 }, // Flex IO Port 23 AUXILLARY Mux Select between SATA Port 5 and PCIe Port 17
+ {94, 6, 2, 0x3 }, // Flex IO Port 24 AUXILLARY Mux Select between SATA Port 6 and PCIe Port 18
+ {94, 8, 2, 0x3 }, // Flex IO Port 25 AUXILLARY Mux Select between SATA Port 7 and PCIe Port 19
+ {102, 0, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 0 and PCIe Port 12
+ {102, 2, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 1 and PCIe Port 13
+ {102, 4, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 2 and PCIe Port 14
+ {102, 6, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 3 and PCIe Port 15
+ {102, 8, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 4 and PCIe Port 16
+ {102, 10, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 5 and PCIe Port 17
+ {102, 12, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 6 and PCIe Port 18
+ {102, 14, 2, 0x3 }, // Flex IO Port 18 Mux Select between SATA Port 7 and PCIe Port 19
+ {103, 16, 3, 0x0 }, // GbE Legacy PHY Smbus Connection
+ {103, 26, 1, 0x0 }, // GbE Legacy LCD SMBus PHY Address Enabled
+ {103, 27, 1, 0x0 }, // GbE Legacy LC SMBus Address Enabled
+// {133, 1, 1, 0x1 }, // Dual I/O Read Enabled
+// {133, 2, 1, 0x1 }, // Quad Output Read Enabled
+// {133, 3, 1, 0x1 }, // Quad I/O Read Enabled
+// {136, 10, 2, 0x3 }, // eSPI / EC Maximum I/O Mode
+// {136, 12, 1, 0x1 }, // Slave 1 (2nd eSPI device) Enable
+// {136, 16, 3, 0x4 }, // eSPI / EC Slave 1 Device Bus Frequency
+// {136, 19, 2, 0x3 }, // eSPI / EC Slave Device Maximum I/O Mode
+
+//
+// END OF LIST
+//
+ {0, 0, 0, 0}
+};
+
+UINT32
+TypeWilsonCityRPSystemBoardRevIdValue (VOID)
+{
+ EFI_HOB_GUID_TYPE *GuidHob;
+ EFI_PLATFORM_INFO *PlatformInfo;
+
+ GuidHob = GetFirstGuidHob (&gEfiPlatformInfoGuid);
+ ASSERT(GuidHob != NULL);
+ if (GuidHob == NULL) {
+ return 0xFF;
+ }
+ PlatformInfo = GET_GUID_HOB_DATA(GuidHob);
+ return PlatformInfo->TypeRevisionId;
+}
+
+VOID
+TypeWilsonCityRPPlatformSpecificUpdate (
+ IN OUT UINT8 *FlashDescriptorCopy
+ )
+{
+}
+
+PLATFORM_PCH_SOFTSTRAP_UPDATE TypeWilsonCityRPSoftStrapUpdate =
+{
+ PLATFORM_SOFT_STRAP_UPDATE_SIGNATURE,
+ PLATFORM_SOFT_STRAP_UPDATE_VERSION,
+ TypeWilsonCityRPSoftStrapTable,
+ TypeWilsonCityRPPlatformSpecificUpdate
+};
+
+EFI_STATUS
+TypeWilsonCityRPInstallSoftStrapData (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+ )
+{
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPlatformPchSoftStrapConfigDataGuid,
+ &TypeWilsonCityRPSoftStrapUpdate,
+ sizeof(TypeWilsonCityRPSoftStrapUpdate)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c
new file mode 100644
index 0000000000..e978abbb8e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c
@@ -0,0 +1,126 @@
+/** @file
+
+ @copyright
+ Copyright 2018 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "PeiBoardInit.h"
+
+
+#include <Library/PcdLib.h>
+#include <Library/UbaUsbOcUpdateLib.h>
+#include <PchLimits.h>
+#include <ConfigBlock/UsbConfig.h>
+#include <ConfigBlock/Usb2PhyConfig.h>
+
+USB_OVERCURRENT_PIN TypeWilsonCityRPUsb20OverCurrentMappings[PCH_MAX_USB2_PORTS] = {
+ UsbOverCurrentPin0,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin2,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPin7,
+ UsbOverCurrentPin7,
+ UsbOverCurrentPin6,
+ UsbOverCurrentPin4,
+ UsbOverCurrentPin6,
+ UsbOverCurrentPin4,
+ UsbOverCurrentPin5,
+ UsbOverCurrentPin4,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip
+ };
+
+USB_OVERCURRENT_PIN TypeWilsonCityRPUsb30OverCurrentMappings[PCH_MAX_USB3_PORTS] = {
+ UsbOverCurrentPin0,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin1,
+ UsbOverCurrentPin2,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPin3,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip,
+ UsbOverCurrentPinSkip
+ };
+
+USB2_PHY_PARAMETERS TypeWilsonCityRPUsb20AfeParams[PCH_H_XHCI_MAX_USB2_PHYSICAL_PORTS] = {
+ {3, 0, 3, 1}, // PP0
+ {5, 0, 3, 1}, // PP1
+ {3, 0, 3, 1}, // PP2
+ {0, 5, 1, 1}, // PP3
+ {3, 0, 3, 1}, // PP4
+ {3, 0, 3, 1}, // PP5
+ {3, 0, 3, 1}, // PP6
+ {3, 0, 3, 1}, // PP7
+ {2, 2, 1, 0}, // PP8
+ {6, 0, 2, 1}, // PP9
+ {2, 2, 1, 0}, // PP10
+ {6, 0, 2, 1}, // PP11
+ {0, 5, 1, 1}, // PP12
+ {7, 0, 2, 1}, // PP13
+ };
+
+EFI_STATUS
+TypeWilsonCityRPPlatformUsbOcUpdateCallback (
+ IN OUT USB_OVERCURRENT_PIN **Usb20OverCurrentMappings,
+ IN OUT USB_OVERCURRENT_PIN **Usb30OverCurrentMappings,
+ IN OUT USB2_PHY_PARAMETERS **Usb20AfeParams
+)
+{
+ *Usb20OverCurrentMappings = &TypeWilsonCityRPUsb20OverCurrentMappings[0];
+ *Usb30OverCurrentMappings = &TypeWilsonCityRPUsb30OverCurrentMappings[0];
+
+ *Usb20AfeParams = TypeWilsonCityRPUsb20AfeParams;
+ return EFI_SUCCESS;
+}
+
+PLATFORM_USBOC_UPDATE_TABLE TypeWilsonCityRPUsbOcUpdate =
+{
+ PLATFORM_USBOC_UPDATE_SIGNATURE,
+ PLATFORM_USBOC_UPDATE_VERSION,
+ TypeWilsonCityRPPlatformUsbOcUpdateCallback
+};
+
+EFI_STATUS
+TypeWilsonCityRPPlatformUpdateUsbOcMappings (
+ IN UBA_CONFIG_DATABASE_PPI *UbaConfigPpi
+)
+{
+ //#
+ //# USB, see PG 104 in GZP SCH
+ //#
+
+// USB2 USB3 Port OC
+//
+//Port00: PORT5 Back Panel ,OC0#
+//Port01: PORT2 Back Panel ,OC0#
+//Port02: PORT3 Back Panel ,OC1#
+//Port03: PORT0 NOT USED ,NA
+//Port04: BMC1.0 ,NA
+//Port05: INTERNAL_2X5_A ,OC2#
+//Port06: INTERNAL_2X5_A ,OC2#
+//Port07: NOT USED ,NA
+//Port08: EUSB (AKA SSD) ,NA
+//Port09: INTERNAL_TYPEA ,OC6#
+//Port10: PORT1 Front Panel ,OC5#
+//Port11: NOT USED ,NA
+//Port12: BMC2.0 ,NA
+//Port13: PORT4 Front Panel ,OC5#
+
+ EFI_STATUS Status;
+
+ Status = UbaConfigPpi->AddData (
+ UbaConfigPpi,
+ &gPeiPlatformUbaOcConfigDataGuid,
+ &TypeWilsonCityRPUsbOcUpdate,
+ sizeof(TypeWilsonCityRPUsbOcUpdate)
+ );
+
+ return Status;
+}
+
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf
new file mode 100644
index 0000000000..fb461c55d7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf
@@ -0,0 +1,24 @@
+## @file
+# Uba Pei fdf file
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+INF $(RP_PKG)/Uba/CfgDb/Pei/CfgDbPei.inf
+
+#
+# Board Init Peim
+#
+INF $(RP_PKG)/Uba/BoardInit/Pei/BoardInitPei.inf
+
+#
+# For Dynamic Feature Support
+#
+
+#
+# Update all PCDs for UBA in PEI phase
+#
+INF $(RP_PKG)/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
new file mode 100644
index 0000000000..6f367b58e7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
@@ -0,0 +1,44 @@
+## @file UbaRpBoards.dsc
+# UBA DSC include file for board specific build items
+#
+# @copyright
+# Copyright 2012 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Components.IA32]
+#
+# Board Init Peim
+#
+$(RP_PKG)/Uba/BoardInit/Pei/BoardInitPei.inf {
+ <LibraryClasses>
+ NULL|$(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
+ NULL|$(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
+ #
+ #### NO PLATFORM SPECIFIC LIBRARY CLASSES AFTER THIS LINE!!!!
+ #
+ # Do not place any platform specific PeiBoardInitLib.inf entries after PeiCommonBoardInitLib.inf
+ # The order of this libary class list is translated directly into the autogen.c created
+ # to execute the libary constructors for all the platforms in this list.
+ # PeiCommonBoardInitLib.inf depends on being the last constructor to execute and
+ # assumes that a platform specific constructor has executed and installed its UBA
+ # configuration information.
+ #
+ NULL|$(RP_PKG)/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
+}
+
+[Components.X64]
+#
+# Platform TypeWilsonCityRP
+#
+$(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
+$(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
+$(RP_PKG)/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
+
+#
+# Platform TypeCooperCityRP
+#
+$(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
+$(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
+$(RP_PKG)/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c
new file mode 100644
index 0000000000..0f33613dbb
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c
@@ -0,0 +1,43 @@
+/** @file
+ UBA PCDs update PEIM.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "UpdatePcdsPei.h"
+
+EFI_PEI_PPI_DESCRIPTOR mPpiListUpdatePcds = {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gUpdatePcdGuid,
+ NULL
+};
+
+/**
+ Entry point function for the PEIM
+
+ @param FileHandle Handle of the file being invoked.
+ @param PeiServices Describes the list of possible PEI Services.
+
+ @return EFI_SUCCESS If we installed our PPI
+
+**/
+EFI_STATUS
+EFIAPI
+UpdatePcdPeimEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+)
+{
+ EFI_STATUS Status;
+
+ Status = PlatformUpdatePcds();
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PeiServicesInstallPpi (&mPpiListUpdatePcds);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h
new file mode 100644
index 0000000000..b4eaae28e9
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h
@@ -0,0 +1,20 @@
+/** @file
+ UBA PCDs update PEIM.
+
+ @copyright
+ Copyright 2014 - 2021 Intel Corporation. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef _UPDATE_SKU_TYPE_PEIM_H_
+#define _UPDATE_SKU_TYPE_PEIM_H_
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PeimEntryPoint.h>
+#include <Library/PeiServicesLib.h>
+#include <Library/PeiServicesTablePointerLib.h>
+#include <Library/UbaPcdUpdateLib.h>
+
+#endif // _UPDATE_SKU_TYPE_PEIM_H_
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
new file mode 100644
index 0000000000..1e419c63de
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
@@ -0,0 +1,50 @@
+## @file
+# Uba update pcds in PEI phase.
+#
+# @copyright
+# Copyright 2014 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = UpdatePcdPei
+ FILE_GUID = AB8F1705-7EB6-4d08-A9B3-918BDE24F479
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+
+ ENTRY_POINT = UpdatePcdPeimEntry
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32
+#
+
+[Sources]
+ UpdatePcdsPei.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ PeiServicesLib
+ PeimEntryPoint
+ DebugLib
+ PeiServicesTablePointerLib
+ UbaPlatLib
+
+[Guids]
+
+[Ppis]
+ gUpdatePcdGuid
+
+[Pcd]
+
+[Depex]
+ gBoardInitGuid
+
+
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 14/17] WhitleyOpenBoardPkg: Add build scripts and package metadata
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (12 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 13/17] WhitleyOpenBoardPkg: Add UBA Modules Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 15/17] Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py Nate DeSimone
` (4 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
.../CooperCityRvp/build_board.py | 111 +
.../CooperCityRvp/build_config.cfg | 36 +
.../WhitleyOpenBoardPkg/DynamicExPcd.dsc | 19 +
.../WhitleyOpenBoardPkg/FspFlashOffsets.fdf | 21 +
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.dec | 781 ++
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc | 931 ++
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf | 827 ++
.../WhitleyOpenBoardPkg/PlatformPkgConfig.dsc | 45 +
.../WhitleyOpenBoardPkg/StructurePcd.dsc | 8553 +++++++++++++++++
.../WhitleyOpenBoardPkg/StructurePcdCpx.dsc | 3796 ++++++++
.../WilsonCityRvp/build_board.py | 111 +
.../WilsonCityRvp/build_config.cfg | 36 +
12 files changed, 15267 insertions(+)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py b/Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
new file mode 100644
index 0000000000..87b49b32c8
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
@@ -0,0 +1,111 @@
+# @ build_board.py
+# Extensions for building CooperCityRvp using build_bios.py
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+"""
+This module serves as a sample implementation of the build extension
+scripts
+"""
+
+import os
+import sys
+
+def pre_build_ex(config, functions):
+ """Additional Pre BIOS build function
+
+ :param config: The environment variables to be used in the build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: nothing
+ """
+ print("pre_build_ex")
+ config["BUILD_DIR_PATH"] = os.path.join(config["WORKSPACE"],
+ 'Build',
+ config["PLATFORM_BOARD_PACKAGE"],
+ "{}_{}".format(
+ config["TARGET"],
+ config["TOOL_CHAIN_TAG"]))
+ # set BUILD_DIR path
+ config["BUILD_DIR"] = os.path.join('Build',
+ config["PLATFORM_BOARD_PACKAGE"],
+ "{}_{}".format(
+ config["TARGET"],
+ config["TOOL_CHAIN_TAG"]))
+ config["BUILD_X64"] = os.path.join(config["BUILD_DIR_PATH"], 'X64')
+ config["BUILD_IA32"] = os.path.join(config["BUILD_DIR_PATH"], 'IA32')
+
+ if not os.path.isdir(config["BUILD_DIR_PATH"]):
+ try:
+ os.makedirs(config["BUILD_DIR_PATH"])
+ except OSError:
+ print("Error while creating Build folder")
+ sys.exit(1)
+
+ #@todo: Replace this with PcdFspModeSelection
+ if config.get("API_MODE_FSP_WRAPPER_BUILD", "FALSE") == "TRUE":
+ config["EXT_BUILD_FLAGS"] += " -D FSP_MODE=0"
+ else:
+ config["EXT_BUILD_FLAGS"] += " -D FSP_MODE=1"
+ return None
+
+def _merge_files(files, ofile):
+ with open(ofile, 'wb') as of:
+ for x in files:
+ if not os.path.exists(x):
+ return
+
+ with open(x, 'rb') as f:
+ of.write(f.read())
+
+def build_ex(config, functions):
+ """Additional BIOS build function
+
+ :param config: The environment variables to be used in the build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ print("build_ex")
+ fv_path = os.path.join(config["BUILD_DIR_PATH"], "FV")
+ binary_fd = os.path.join(fv_path, "BINARY.fd")
+ main_fd = os.path.join(fv_path, "MAIN.fd")
+ secpei_fd = os.path.join(fv_path, "SECPEI.fd")
+ board_fd = config["BOARD"].upper()
+ final_fd = os.path.join(fv_path, "{}.fd".format(board_fd))
+ _merge_files((binary_fd, main_fd, secpei_fd), final_fd)
+ return None
+
+
+def post_build_ex(config, functions):
+ """Additional Post BIOS build function
+
+ :param config: The environment variables to be used in the post
+ build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ print("post_build_ex")
+ return None
+
+
+def clean_ex(config, functions):
+ """Additional clean function
+
+ :param config: The environment variables to be used in the build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ print("clean_ex")
+ return None
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg b/Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
new file mode 100644
index 0000000000..6399818e78
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
@@ -0,0 +1,36 @@
+# @ build_config.cfg
+# This is the CooperCityRvp board specific build settings
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+
+[CONFIG]
+WORKSPACE_PLATFORM_BIN =
+EDK_SETUP_OPTION =
+openssl_path =
+PLATFORM_BOARD_PACKAGE = WhitleyOpenBoardPkg
+PROJECT = WhitleyOpenBoardPkg/CooperCityRvp
+BOARD = CooperCityRvp
+FLASH_MAP_FDF = WhitleyOpenBoardPkg/FspFlashOffsets.fdf
+PROJECT_DSC = WhitleyOpenBoardPkg/PlatformPkg.dsc
+BOARD_PKG_PCD_DSC = WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
+ADDITIONAL_SCRIPTS = WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
+PrepRELEASE = DEBUG
+SILENT_MODE = FALSE
+EXT_CONFIG_CLEAR =
+CapsuleBuild = FALSE
+EXT_BUILD_FLAGS = -D CPUTARGET=CPX -D RP_PKG=WhitleyOpenBoardPkg -D SILICON_PKG=WhitleySiliconPkg -D PCD_DYNAMIC_AS_DYNAMICEX -D MAX_CORE=64 -D MAX_THREAD=2 -D PLATFORM_PKG=MinPlatformPkg
+MAX_SOCKET = 8
+CAPSULE_BUILD = 0
+TARGET = DEBUG
+TARGET_SHORT = D
+PERFORMANCE_BUILD = FALSE
+FSP_WRAPPER_BUILD = TRUE
+FSP_BIN_PKG = CedarIslandFspBinPkg
+FSP_PKG_NAME = CedarIslandFspPkg
+FSP_BINARY_BUILD = FALSE
+FSP_TEST_RELEASE = FALSE
+SECURE_BOOT_ENABLE = FALSE
+BIOS_INFO_GUID = 4A4CA1C6-871C-45BB-8801-6910A7AA5807
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc b/Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc
new file mode 100644
index 0000000000..ebeda4e8c7
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc
@@ -0,0 +1,19 @@
+## @file
+# FSP DynamicEx PCDs
+#
+# @copyright
+# Copyright 2018 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+
+[PcdsDynamicExDefault]
+ gOemSkuTokenSpaceGuid.PcdOemSkuBmcPciePortNumber
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformFeatureFlag
+ gOemSkuTokenSpaceGuid.PcdOemSkuSubBoardID
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_TABLE_SIZE
+ gPlatformModuleTokenSpaceGuid.PcdProcessorLtsxEnable
+ gPlatformTokenSpaceGuid.PcdBoardTypeBitmask
+ gPlatformTokenSpaceGuid.PcdImr3Enable
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf b/Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf
new file mode 100644
index 0000000000..a14afd693b
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf
@@ -0,0 +1,21 @@
+## @file
+# FDF file for calculation of FSP rebase addresses for WhitleyOpenBoardPkg
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+# @todo: This file is currently only used to enable RebaseFspBinBaseAddress.py to function.
+# The FDF file for WhitleyOpenBoardPkg should be adapted to leverage FlashMapInclude.fdf
+# format found in other OpenBoardPkgs.
+
+DEFINE FLASH_BASE = 0xFF000000 #
+
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSOffset = 0x00020000 # Flash addr (0xFF020000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize = 0x00040000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMOffset = 0x00060000 # Flash addr (0xFF060000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize = 0x00221000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTOffset = 0x00281000 # Flash addr (0xFF281000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize = 0x00006000 #
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
new file mode 100644
index 0000000000..8e0b674505
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
@@ -0,0 +1,781 @@
+## @file
+# Platform Package
+# Cross Platform Modules for Tiano
+#
+# @copyright
+# Copyright 2008 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ DEC_SPECIFICATION = 0x00010005
+ PACKAGE_NAME = PlatformPkg
+ PACKAGE_GUID = 9A29FD32-8C72-4b25-A7C4-767F7A2838EB
+ PACKAGE_VERSION = 0.91
+
+[Includes]
+ Include
+ Include/Protocol
+
+#TODO: Move these generated temp files into include.
+ Uba/BoardInit/Dxe
+
+[Guids]
+ gBiosInfoGuid = { 0x1b453c67, 0xcb1a, 0x46ec, { 0x86, 0x4b, 0xe2, 0x24, 0xa6, 0xb7, 0xfe, 0xe8 } }
+ gClvBootTimeTestExecution = { 0x3ff7d152, 0xef86, 0x47c3, { 0x97, 0xb0, 0xce, 0xd9, 0xbb, 0x80, 0x9a, 0x67 } }
+ gUbaCurrentConfigHobGuid = { 0xe4b2025b, 0xc7db, 0x4e5d, { 0xa6, 0x5e, 0x2b, 0x25, 0x7e, 0xb1, 0x5, 0x8e } }
+
+ gCommonSystemConfigurationGuid = { 0xec87d643, 0xeba4, 0x4bb5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0xd, 0xa9 } }
+ gEfiSetupVariableGuid = { 0xec87d643, 0xeba4, 0x4bb5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9 } }
+ gEfiSetupVariableDefaultGuid = { 0x8d247131, 0x385e, 0x491f, { 0xba, 0x68, 0x8d, 0xe9, 0x55, 0x30, 0xb3, 0xa6 } }
+ gEfiGlobalVariableControlGuid = { 0x99a96812, 0x4730, 0x4290, { 0x8b, 0xfe, 0x7b, 0x4e, 0x51, 0x4f, 0xf9, 0x3b } }
+ gMainPkgListGuid = { 0x6205c3a4, 0x1149, 0x491a, { 0xa6, 0xd6, 0x1e, 0x72, 0x3b, 0x87, 0x83, 0xb1 } }
+ gAdvancedPkgListGuid = { 0xc09c81cb, 0x31e9, 0x4de6, { 0xa9, 0xf9, 0x17, 0xa1, 0x44, 0x35, 0x42, 0x45 } }
+ gTpmPkgListGuid = { 0x7da45aa9, 0x6dbf, 0x4f1b, { 0xa4, 0x3e, 0x32, 0x87, 0xcb, 0xe5, 0x13, 0x51 } }
+ gSecurityPkgListGuid = { 0x3a885aae, 0x3e30, 0x42b9, { 0xa9, 0x76, 0x2f, 0x1f, 0x13, 0xbd, 0x70, 0x15 } }
+ gBootOptionsPkgListGuid = { 0x62197ef0, 0x7b7e, 0x11e2, { 0xb9, 0x2a, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 } }
+ gEfiOcDataGuid = { 0x4af92599, 0x8e76, 0x4bb4, { 0xbf, 0xd2, 0xf5, 0xa6, 0x6e, 0x30, 0x41, 0xd4 } }
+ gEfiDprRegsProgrammedGuid = { 0x4b844201, 0x6fe9, 0x41d1, { 0xb4, 0x6f, 0xdf, 0xfc, 0x34, 0xe4, 0x92, 0xa2 } }
+ gPlatformModuleTokenSpaceGuid = { 0x69d13bf0, 0xaf91, 0x4d96, { 0xaa, 0x9f, 0x21, 0x84, 0xc5, 0xce, 0x3b, 0xc0 } }
+ gCpPlatFlashTokenSpaceGuid = { 0xc9c39664, 0x96dd, 0x4c5c, { 0xaf, 0xd7, 0xcd, 0x65, 0x76, 0x29, 0xcf, 0xb0 } }
+ gPchSetupVariableGuid = { 0x4570b7f1, 0xade8, 0x4943, { 0x8d, 0xc3, 0x40, 0x64, 0x72, 0x84, 0x23, 0x84 } }
+
+#
+# UBA_START
+#
+ #OEM SKU
+ gOemSkuTokenSpaceGuid = { 0x9e37d253, 0xabf8, 0x4985, { 0x8e, 0x23, 0xba, 0xca, 0x10, 0x39, 0x56, 0x13 } }
+ gPlatformKtiEparamUpdateDataGuid = { 0x7bc065cf, 0xafe8, 0x4396, { 0xae, 0x9f, 0xba, 0x27, 0xdf, 0xbe, 0xcf, 0x3d } }
+ gPlatformGpioInitDataGuid = { 0x9282563e, 0xae17, 0x4e12, { 0xb1, 0xdc, 0x7, 0xf, 0x29, 0xf3, 0x71, 0x20 } }
+#
+# UBA_END
+#
+ gReserveMemFlagVariableGuid = { 0xb87aa73f, 0xdcb3, 0x4533, { 0x83, 0x98, 0x6c, 0x12, 0x84, 0x27, 0x28, 0x40 } }
+ gEfiOpaSocketMapHobGuid = { 0x829d41d2, 0x6ca5, 0x485b, { 0xa1, 0xa2, 0xd1, 0xb7, 0x96, 0x27, 0xab, 0xcd } }
+ gEfiPlatformTxtPolicyDataGuid = { 0xa353290b, 0x867d, 0x4cd3, { 0xa8, 0x1b, 0x4b, 0x7e, 0x5e, 0x10, 0x0e, 0x16 } }
+ gEfiSmmPeiSmramMemoryReserveGuid = { 0x6dadf1d1, 0xd4cc, 0x4910, { 0xbb, 0x6e, 0x82, 0xb1, 0xfd, 0x80, 0xff, 0x3d } }
+ gSystemBoardInfoConfigDataGuid = { 0x68B046F7, 0x15A0, 0x4778, { 0xBE, 0xA3, 0x9B, 0xA2, 0xDB, 0xD1, 0x3B, 0x82 } }
+
+ # Fce multi mode support
+ gPlatformVariableHobGuid = { 0x71e6d4bc, 0x4837, 0x45f1, { 0xa2, 0xd7, 0x3f, 0x93, 0x08, 0xb1, 0x7e, 0xd7 } }
+ gDefaultDataFileGuid = { 0x1ae42876, 0x008f, 0x4161, { 0xb2, 0xb7, 0x1c, 0x0d, 0x15, 0xc5, 0xef, 0x43 } }
+
+ gCpPlatIpmiTokenSpaceGuid = { 0xd1112ebf, 0xd82, 0x4071, { 0x96, 0x7c, 0xe1, 0x69, 0x23, 0x27, 0x40, 0xba } }
+ gEfiIpmiFormatFruGuid = { 0x3531fdc6, 0xeae, 0x4cd2, { 0xb0, 0xa6, 0x5f, 0x48, 0xa0, 0xdf, 0xe3, 0x8 } }
+ gServerCommonIpmiTokenSpaceGuid = { 0xd1112ebf, 0xd82, 0x4071, { 0x96, 0x7c, 0xe1, 0x69, 0x23, 0x27, 0x40, 0xba } }
+
+ gServerMgmtPkgListGuid = { 0x35dcfcd1, 0xc14e, 0x45e9, { 0xbe, 0xd3, 0xbb, 0x1, 0x64, 0xf8, 0x80, 0x7b } }
+
+
+ ## Include/Guid/CpPlatPkgTokenSpace.h
+ gCpPlatTokenSpaceGuid = { 0xc9c39664, 0x96dd, 0x4c5c, { 0xaf, 0xd7, 0xcd, 0x65, 0x76, 0x29, 0xcf, 0xb0 } }
+ gEfiSetupEnterGuid = { 0x71202EEE, 0x5F53, 0x40d9, { 0xAB, 0x3D, 0x9E, 0x0C, 0x26, 0xD9, 0x66, 0x57 } }
+ gEfiSetupExitGuid = { 0xD6E335EC, 0x0336, 0x4CB1, { 0x87, 0xA2, 0xDA, 0x87, 0xD7, 0xE9, 0x99, 0x40 }}
+
+ gPlatformTokenSpaceGuid = { 0x07dfa0d2, 0x2ac5, 0x4cab, { 0xac, 0x14, 0x30, 0x5c, 0x62, 0x48, 0x87, 0xe4 } }
+
+[Ppis]
+#
+# UBA_START
+#
+ gEfiPeiPlatformTypeWolfPassPpiGuid = { 0xd2a92001, 0x22ad, 0x43b9, { 0xbe, 0xbc, 0x1b, 0x15, 0x21, 0x00, 0xd8, 0xcc } }
+ gEfiPeiPlatformTypeNeonCityEPRPPpiGuid = { 0xa2e5609e, 0x8c2d, 0x42e6, { 0xa2, 0xfc, 0x12, 0xbc, 0x74, 0xbd, 0x43, 0x7f } }
+ gEfiPeiPlatformTypeTennesseePassPpiGuid = { 0xf7b87a79, 0xa640, 0x4aa5, { 0x8c, 0x1e, 0x45, 0x3f, 0xb2, 0x6e, 0xf3, 0x76 } }
+ gEfiPeiPlatformTypeNeonCityEPECBPpiGuid = { 0x21877e2f, 0xf86e, 0x4e8a, { 0x9c, 0x9b, 0xd7, 0xb1, 0x52, 0xdd, 0x40, 0xd8 } }
+ gEfiPeiPlatformTypeOpalCitySTHIPpiGuid = { 0xa07b3bdf, 0xb78a, 0x41ee, { 0xa2, 0x76, 0x55, 0xc2, 0x25, 0xa0, 0x7b, 0x0b } }
+ gEfiPeiPlatformTypePurleyLBGEPDVPPpiGuid = { 0x3c234470, 0x69d3, 0x42e1, { 0xb3, 0x23, 0xc8, 0x09, 0x30, 0x0f, 0x39, 0x25 } }
+ gEfiPeiPlatformTypeCrescentCityPpiGuid = { 0x4ad920ef, 0x4d6f, 0x4915, { 0x98, 0x2a, 0xdc, 0x16, 0x67, 0x71, 0x31, 0xd5 } }
+ gEfiPeiPlatformTypeHedtEVPpiGuid = { 0x41781f4f, 0xa3cd, 0x4750, { 0x8a, 0x2c, 0x21, 0x92, 0xb4, 0xdf, 0xe5, 0x2b } }
+ gEfiPeiPlatformTypeHedtCRBPpiGuid = { 0x9bb6e29a, 0x2272, 0x426a, { 0xab, 0x77, 0x9b, 0x7f, 0xe5, 0xef, 0xea, 0x84 } }
+ gEfiPeiPlatformTypeLightningRidgeEXRPPpiGuid = { 0xaf2417f4, 0x7b7e, 0x4c2e, { 0x94, 0xbb, 0x7a, 0x33, 0x89, 0xa1, 0x57, 0xca } }
+ gEfiPeiPlatformTypeLightningRidgeEXECB1PpiGuid = { 0xf70a4116, 0xfdf6, 0x45fb, { 0x93, 0xcd, 0x84, 0xcd, 0xdd, 0x73, 0xdf, 0xd4 } }
+ gEfiPeiPlatformTypeLightningRidgeEXECB2PpiGuid = { 0x0c04b0ff, 0x227d, 0x479a, { 0x93, 0x5a, 0xf6, 0xe5, 0xa8, 0xb5, 0x19, 0x8c } }
+ gEfiPeiPlatformTypeLightningRidgeEXECB3PpiGuid = { 0x94c0203b, 0x54c9, 0x416e, { 0xa6, 0xe0, 0x47, 0xe8, 0xd4, 0x78, 0x69, 0x01 } }
+ gEfiPeiPlatformTypeLightningRidgeEXECB4PpiGuid = { 0x4284a11c, 0x18c1, 0x4c10, { 0xb2, 0xd9, 0x58, 0x6a, 0x01, 0x60, 0xa5, 0x23 } }
+ gEfiPeiPlatformTypeLightningRidgeEX8S1NPpiGuid = { 0x4f51c243, 0x7cee, 0x4144, { 0x8e, 0xed, 0x23, 0x4a, 0xc2, 0xda, 0xbd, 0x53 } }
+ gEfiPeiPlatformTypeLightningRidgeEX8S2NPpiGuid = { 0x5d9516d3, 0xbc49, 0x4337, { 0x9f, 0xc7, 0x29, 0xdf, 0x35, 0x26, 0xec, 0x87 } }
+ gEfiPeiPlatformTypeKyanitePpiGuid = { 0xb23ce2c1, 0x16a0, 0x4f69, { 0x98, 0x0a, 0x95, 0xc7, 0x72, 0x16, 0xf9, 0xa2 } }
+ gEfiPeiPlatformTypeNeonCityFPGAPpiGuid = { 0x48e796bd, 0x4ed3, 0x4755, { 0xa8, 0xca, 0x4c, 0xf4, 0x37, 0x25, 0x82, 0x41 } }
+ gEfiPeiPlatformTypeOpalCityFPGAPpiGuid = { 0xe5434b26, 0xaedf, 0x43de, { 0x89, 0x35, 0xd1, 0xc4, 0x85, 0xa9, 0x12, 0xb9 } }
+ gEfiPeiPlatformTypeWilsonCityRPPpiGuid = { 0x0629aff2, 0x4e23, 0x45c6, { 0x90, 0xc5, 0xb3, 0x21, 0x7b, 0x00, 0x09, 0x23 } }
+ gEfiPeiPlatformTypeWilsonCityModularPpiGuid = { 0x3170ea7b, 0x6784, 0x4366, { 0xb4, 0xc6, 0xfe, 0x69, 0x9f, 0x69, 0x42, 0x21 } }
+ gEfiPlatformTypeIsoscelesPeakPpiGuid = { 0xfc7b089f, 0x5395, 0x40c0, { 0x9e, 0xfb, 0xca, 0x90, 0x59, 0xe2, 0x7f, 0xea } }
+
+ gPeiIpmiTransportPpiGuid = { 0x7bf5fecc, 0xc5b5, 0x4b25, { 0x81, 0x1b, 0xb4, 0xb5, 0xb, 0x28, 0x79, 0xf7 } }
+
+#
+# UBA_END
+#
+
+ gBoardInitGuid = { 0xecc07551, 0xd64c, 0x4c07, { 0xab, 0x95, 0x94, 0x5, 0x66, 0xed, 0x31, 0xf1 } }
+ gUbaConfigDatabasePpiGuid = { 0xc1176733, 0x159f, 0x42d5, { 0xbc, 0xb9, 0x32, 0x6, 0x60, 0xb1, 0x73, 0x10 } }
+
+ gPeiSpiSoftStrapsPpiGuid = { 0x7F19E716, 0x419C, 0x4E79, { 0x8E, 0x37, 0xC2, 0xBD, 0x84, 0xEB, 0x65, 0x28 } }
+ gUpdatePcdGuid = { 0xa08e4c6b, 0xff28, 0x4fff, { 0x93, 0x56, 0x78, 0x36, 0x26, 0xc3, 0xe0, 0x38 } }
+ gPlatformVariableInitPpiGuid = { 0x9b1b911b, 0x4259, 0x4539, { 0xaf, 0x86, 0xe5, 0xf3, 0x61, 0xca, 0x09, 0x02 } }
+ gUpdateBootModePpiGuid = { 0x927186a0, 0xa13e, 0x4b53, { 0xad, 0x41, 0xad, 0xd1, 0x65, 0x6f, 0x62, 0x62 } }
+
+ gEfiPeiExStatusCodeHandlerPpiGuid = { 0x4e942617, 0xbbca, 0x4726, { 0x77, 0xb9, 0x49, 0x68, 0x85, 0xf9, 0xc4, 0xf4 } }
+
+
+[Protocols]
+ gEfiPlatformTypeProtocolGuid = { 0x171e9398, 0x269c, 0x4081, { 0x90, 0x99, 0x38, 0x44, 0xe2, 0x60, 0x46, 0x6c } }
+ gUbaConfigDatabaseProtocolGuid = { 0xe03e0d46, 0x5263, 0x4845, { 0xb0, 0xa4, 0x58, 0xd5, 0x7b, 0x31, 0x77, 0xe2 } }
+#
+# UBA_START
+#
+ gEfiPlatformTypeNeonCityEPRPProtocolGuid = { 0xc0cd2d36, 0xa81b, 0x450d, { 0xa5, 0x02, 0x37, 0x67, 0xdf, 0xa2, 0x98, 0x26 } }
+ gEfiPlatformTypeHedtCRBProtocolGuid = { 0x2c824f87, 0x0f2c, 0x45d7, { 0x81, 0xa6, 0x4f, 0x39, 0xe0, 0x42, 0xbd, 0xdf } }
+ gEfiPlatformTypeLightningRidgeEXRPProtocolGuid = { 0x1b4ae0f8, 0xed1f, 0x4fd1, { 0x9b, 0x18, 0xb0, 0x82, 0x29, 0x0f, 0x86, 0xf5 } }
+ gEfiPlatformTypeLightningRidgeEX8S1NProtocolGuid = { 0x45b59855, 0x500c, 0x443b, { 0xb5, 0x04, 0x9a, 0xb4, 0xca, 0x29, 0xbc, 0x68 } }
+ gEfiPlatformTypeWilsonCityRPProtocolGuid = { 0x8430776f, 0xbd75, 0x4fc8, { 0xa5, 0x4f, 0x7f, 0x6b, 0xf6, 0x18, 0x9c, 0x13 } }
+ gEfiPlatformTypeIsoscelesPeakProtocolGuid = { 0xcff3f211, 0x5d51, 0x4f87, { 0x94, 0xb0, 0x9b, 0x94, 0xf8, 0x4e, 0x8a, 0x48 } }
+ gEfiPlatformTypeWilsonCityModularProtocolGuid = { 0x28e862f4, 0xa4ed, 0x4acb, { 0x9a, 0x35, 0x36, 0xd0, 0x90, 0x2d, 0xf7, 0x82 } }
+
+ gEfiPlatformTypeWilsonCitySMTProtocolGuid = { 0xEE55562D, 0x4001, 0xFC27, { 0xDF, 0x16, 0x7B, 0x90, 0xEB, 0xE1, 0xAB, 0x04 } }
+ gEfiPlatformTypeCooperCityRPProtocolGuid = { 0x45c302e1, 0x4b86, 0x89be, { 0xab, 0x0f, 0x5e, 0xb5, 0x57, 0xdf, 0xe8, 0xd8 } }
+
+#
+# UBA_END
+#
+
+ gEfiPciIovPlatformProtocolGuid = { 0xf3a4b484, 0x9b26, 0x4eea, { 0x90, 0xe5, 0xa2, 0x06, 0x54, 0x0c, 0xa5, 0x25 } }
+ gEfiWindowsInt10Workaround = { 0x387f555, 0x20a8, 0x4fc2, { 0xbb, 0x94, 0xcd, 0x30, 0xda, 0x1b, 0x40, 0x08 } }
+ gEfiVMDDriverProtocolGuid = { 0x5a676ae9, 0xdb23, 0x4a68, { 0xa2, 0x4d, 0xaa, 0x5f, 0xec, 0xd5, 0x74, 0x86 } }
+ gEfiHfiPcieGen3ProtocolGuid = { 0x7b59316e, 0xe9df, 0x435f, { 0x98, 0xcd, 0x57, 0x26, 0x64, 0x5b, 0xe8, 0x63 } }
+ gEfiLegacyBiosProtocolGuid = { 0xdb9a1e3d, 0x45cb, 0x4abb, { 0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d } }
+
+ gEfiIpmiSolStatusProtocolGuid = { 0xe790848e, 0xb6ab, 0x44ab, { 0x84, 0x91, 0xdc, 0xa5, 0xc, 0x39, 0x7, 0xc6 } }
+ gEfiIpmiTransportProtocolGuid = { 0x6bb945e8, 0x3743, 0x433e, { 0xb9, 0xe, 0x29, 0xb3, 0xd, 0x5d, 0xc6, 0x30 } }
+ gSmmIpmiTransportProtocolGuid = { 0x8bb070f1, 0xa8f3, 0x471d, { 0x86, 0x16, 0x77, 0x4b, 0xa3, 0xf4, 0x30, 0xa0 } }
+ gEfiIpmiBootGuid = { 0x5c9b75ec, 0x8ec7, 0x45f2, { 0x8f, 0x8f, 0xc1, 0xd8, 0x8f, 0x3b, 0x93, 0x45 } }
+ gEfiGenericIpmiDriverInstalledGuid = { 0x7cdad61a, 0x3df8, 0x4425, { 0x96, 0x8c, 0x66, 0x28, 0xc8, 0x35, 0xff, 0xce } }
+
+
+[PcdsFixedAtBuild]
+
+#SKX_TODO: add a new GUID, and replace the 'gPlatformTokenSpaceGuid' used here to it, or move these values to the SocketPkg where the GUID is defined
+# Using a GUID defined in another .DEC file is a violation of the UEFI packaging standards.
+
+ gCpPlatFlashTokenSpaceGuid.PcdFlashBase|0x00000000 |UINT32|0x3000000E
+ gCpPlatFlashTokenSpaceGuid.PcdFlashSize|0x00000000 |UINT32|0x3000000F
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFdFpgaBase|0x00000000|UINT32|0x3000001A
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFdFpgaSize|0x00000000|UINT32|0x3000001B
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvFpgaBbsSize|0x00000000|UINT32|0x3000001C
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvFpgaBbsBase|0x00000000|UINT32|0x3000001D
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinarySize|0x00000000|UINT32|0x3000001E
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinaryBase|0x00000000|UINT32|0x3000001F
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize|0x00000000|UINT32|0x30000020
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromBase|0x00000000|UINT32|0x30000021
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromOffset|0x0000000|UINT32|0x30000027
+
+ gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdSize|0x0000000|UINT32|0x30000001
+ gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdOffset|0x0000000|UINT32|0x30000004
+ gPlatformModuleTokenSpaceGuid.PcdFlashFvNvStorageEventLogOffset|0x0000000|UINT32|0x30000006
+ gPlatformModuleTokenSpaceGuid.PcdFlashFreeSpaceOffset|0x0000000|UINT32|0x30000008
+
+ gPlatformTokenSpaceGuid.PcdSupportLegacyStack|TRUE|BOOLEAN|0x30000030
+ gPlatformTokenSpaceGuid.PcdMaxOptionRomNumber|0x4|UINT8|0x30000031
+
+ gPlatformTokenSpaceGuid.PcdCmosDebugPrintLevelReg|0x4C|UINT8|0x30000032
+
+ # Choose the default serial debug message level when CMOS is bad; in the later BIOS phase, the setup default is applied
+ # 0 - Disable; 1 - Minimum; 2 - Normal; 3 - Max
+ gPlatformTokenSpaceGuid.PcdSerialDbgLvlAtBadCmos|0x1|UINT8|0x30000033
+ gPlatformTokenSpaceGuid.PcdWilsonPointSvidVrP1V8|0x05|UINT8|0x30000000 #BIT4 => SVID BUS 0, BIT3-BIT0 => VR ADDRESS
+ gPlatformTokenSpaceGuid.PcdWilsonCitySvidVrP1V8|0x15|UINT8|0x30000002
+ gPlatformTokenSpaceGuid.PcdWilsonCitySvidVrVccAna|0x16|UINT8|0x30000003
+
+ # PCD for failsafe variable ffs in other FV rather than bb1
+ # by default, FCE will insert into SECPEI, and you don't need to set these two PCD if bb1(secpei)is used
+ gPlatformTokenSpaceGuid.PcdFailSafeVarFfsSize|0|UINT32|0x30000034
+ gPlatformTokenSpaceGuid.PcdFailSafeVarFvBase|0|UINT32|0x30000035
+
+ gPlatformTokenSpaceGuid.PcdSetupVariableGuid|{ 0x43,0xd6,0x87,0xec,0xa4, 0xeb, 0xb5,0x4b, 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0xd, 0xa9}|VOID*|0x30000036
+
+ #
+ # These need to move to MinPlatformPkg.dec
+ #
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize|0|UINT32|0xF00000A9
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryBase|0|UINT32|0xF00000AA
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryOffset|0|UINT32|0xF00000AB
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize|0|UINT32|0xF00000AC
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspBase|0|UINT32|0xF00000AD
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspOffset|0|UINT32|0xF00000AE
+
+ #IIO configuration data for socket 3 will be used for sockets 4..7
+ gPlatformTokenSpaceGuid.PcdSocketCopy|FALSE|BOOLEAN|0xF00000AF
+
+ gCpPlatFlashTokenSpaceGuid.PcdFlashCfrRegionSize|0x01000000|UINT32|0xF00000B0
+ gCpPlatFlashTokenSpaceGuid.PcdFlashCfrRegionBase|0xFF900000|UINT32|0xF00000B1
+
+[PcdsFixedAtBuild, PcdsPatchableInModule]
+ gPlatformTokenSpaceGuid.PcdShellFile|{ 0xB7, 0xD6, 0x7A, 0xC5, 0x15, 0x05, 0xA8, 0x40, 0x9D, 0x21, 0x55, 0x16, 0x52, 0x85, 0x4E, 0x37 }|VOID*|0x40000004
+ ## Specify memory size with page number for a pre-allocated reserved memory to be used
+ # by PEI in S3 phase. The default size 32K. When changing the value make sure the memory size
+ # is large enough to meet PEI requirement in the S3 phase.
+ # @Prompt Reserved S3 Boot ACPI Memory Size
+ gPlatformModuleTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x8000|UINT32|0x90010039
+ gPlatformModuleTokenSpaceGuid.PcdAcpiEnableSwSmi|0xF0|UINT8|0x90000012
+ gPlatformModuleTokenSpaceGuid.PcdAcpiDisableSwSmi|0xF1|UINT8|0x90000013
+ gPlatformModuleTokenSpaceGuid.PcdPcIoApicCount|0|UINT8|0x90000015
+ gPlatformModuleTokenSpaceGuid.PcdPcIoApicIdBase|0x09|UINT8|0x90000016
+ gPlatformModuleTokenSpaceGuid.PcdPcIoApicAddressBase|0xFEC01000|UINT32|0x90000017
+ gPlatformModuleTokenSpaceGuid.PcdPcIoApicInterruptBase|24|UINT32|0x90000018
+
+
+ gPlatformModuleTokenSpaceGuid.PcdMaxCpuThreadCount|2|UINT32|0x90000021
+ gPlatformModuleTokenSpaceGuid.PcdMaxCpuCoreCount|8|UINT32|0x90000022
+ gPlatformModuleTokenSpaceGuid.PcdMaxCpuSocketCount|4|UINT32|0x90000023
+ gPlatformModuleTokenSpaceGuid.PcdHpetTimerBlockId|0x8086A201|UINT32|0x90000024
+
+ gPlatformModuleTokenSpaceGuid.PcdFadtPreferredPmProfile|0x02|UINT8|0x90000025
+ gPlatformModuleTokenSpaceGuid.PcdFadtIaPcBootArch|0x0001|UINT16|0x90000026
+ gPlatformModuleTokenSpaceGuid.PcdFadtFlags|0x000086A5|UINT32|0x90000027
+ gPlatformModuleTokenSpaceGuid.PcdLocalApicAddress|0xFEE00000|UINT32|0x9000000B
+ gPlatformModuleTokenSpaceGuid.PcdIoApicAddress|0xFEC00000|UINT32|0x9000000D
+ gPlatformModuleTokenSpaceGuid.PcdIoApicId|0x02|UINT8|0x90000014
+ gPlatformModuleTokenSpaceGuid.PcdWsmtProtectionFlags|0|UINT32|0x10001006
+
+[PcdsDynamicEx]
+
+#
+# PAL
+#
+ gPlatformTokenSpaceGuid.PcdOemSkuPcieSlotOpromBitMap|0xFF|UINT32|0x00000008
+
+#SKX_TODO: gPlatformTokenSpaceGuid are not correct GUIDs to use here, use local GUID...
+ gPlatformTokenSpaceGuid.PcdBootDeviceScratchPad5Changed|FALSE|BOOLEAN|0x00000048
+
+ ## This value is used to save memory address of MRC data structure.
+ gPlatformTokenSpaceGuid.PcdBoardTypeBitmask|0x00000000|UINT32|0x30000041
+
+#
+# IMR0 programming values
+#
+ gPlatformTokenSpaceGuid.PcdImr0Enable|FALSE|BOOLEAN|0xA5000000
+ gPlatformTokenSpaceGuid.PcdImr0Base|0x0|UINT64|0xA5000001
+ gPlatformTokenSpaceGuid.PcdImr0Mask|0x0|UINT64|0xA5000002
+ gPlatformTokenSpaceGuid.PcdImr0Rac|0xFFFFFFFFFFFFFFFF|UINT64|0xA5000003
+ gPlatformTokenSpaceGuid.PcdImr0Wac|0xFFFFFFFFFFFFFFFF|UINT64|0xA5000004
+
+#
+# IMR3 programming values
+#
+ gPlatformTokenSpaceGuid.PcdImr3Enable|FALSE|BOOLEAN|0xA5000022
+
+#
+# Server common Hot Key binding
+#
+ # EFI Scan codes
+ # SCAN_F2 0x000C
+ # SCAN_F6 0x0010
+ # SCAN_F7 0x0011
+ gPlatformTokenSpaceGuid.PcdSetupMenuScanCode|0x00|UINT16|0x00000009
+ gPlatformTokenSpaceGuid.PcdBootDeviceListScanCode|0x00|UINT16|0x0000000A
+
+
+ gPlatformTokenSpaceGuid.PcdBootMenuFile|{ 0xdc, 0x5b, 0xc2, 0xee, 0xf2, 0x67, 0x95, 0x4d, 0xb1, 0xd5, 0xf8, 0x1b, 0x20, 0x39, 0xd1, 0x1d }|VOID*|0x0000000B
+
+#Indicate whether to perform LT Config lock
+# The PCD can be set to false when there is the debug request
+# TRUE - Force the LT config lock
+# FALSE - Allow the LT config unlock for debug
+ gPlatformModuleTokenSpaceGuid.PcdLtConfigLockEnable|TRUE|BOOLEAN|0x3000000e
+
+#Indicate whether LTSX enabled
+# TRUE - Intel (R) TXT feature enabled on the platform
+# FALSE - Disable Intel(R) TXT feature on the platform
+ gPlatformModuleTokenSpaceGuid.PcdProcessorLtsxEnable | TRUE|BOOLEAN|0x3000000f
+
+[PcdsFeatureFlag]
+ gPlatformTokenSpaceGuid.PcdSupportUnsignedCapsuleImage|TRUE|BOOLEAN|0x00000020
+
+ ##
+ ## High Speed UART
+ ##
+ gPlatformModuleTokenSpaceGuid.PcdEnableHighSpeedUart|FALSE|BOOLEAN|0x0000002C
+
+[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamicEx]
+ ## MemoryCheck value for checking memory before boot OS.
+ # To save the boot performance, the default MemoryCheck is set to 0.
+ gPlatformTokenSpaceGuid.PcdPlatformMemoryCheck|0|UINT8|0x40000005
+
+
+ ## following PCDs should remove if CORE accept the fix
+ gPlatformTokenSpaceGuid.PcdPerfPkgPchPmBaseFunctionNumber|0x0|UINT32|4
+
+ ## Vendor ID and Device ID of device producing onboard video
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciVendorId|0|UINT16|0x00000013
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciDeviceId|0|UINT16|0x00000014
+ gPlatformModuleTokenSpaceGuid.PcdPlatformMemoryCheckLevel|0|UINT32|0x30000009
+ ## This PCD is to control which device is the potential trusted console input device.<BR><BR>
+ # For example:<BR>
+ # USB Short Form: UsbHID(0xFFFF,0xFFFF,0x1,0x1)<BR>
+ # //Header VendorId ProductId Class SubClass Protocol<BR>
+ # {0x03, 0x0F, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x01, 0x01,<BR>
+ # //Header<BR>
+ # 0x7F, 0xFF, 0x04, 0x00}<BR>
+ gPlatformModuleTokenSpaceGuid.PcdTrustedConsoleInputDevicePath|{0x03, 0x0F, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x01, 0x01, 0x7F, 0xFF, 0x04, 0x00}|VOID*|0x300000A
+
+ ## This PCD is to control which device is the potential trusted console output device.<BR><BR>
+ # For example:<BR>
+ # Integrated Graphic: PciRoot(0x0)/Pci(0x2,0x0)<BR>
+ # //Header HID UID<BR>
+ # {0x02, 0x01, 0x0C, 0x00, 0xd0, 0x41, 0x03, 0x0A, 0x00, 0x00, 0x00, 0x00,<BR>
+ # //Header Func Dev<BR>
+ # 0x01, 0x01, 0x06, 0x00, 0x00, 0x02,
+ # //Header<BR>
+ # 0x7F, 0xFF, 0x04, 0x00}<BR>
+ gPlatformModuleTokenSpaceGuid.PcdTrustedConsoleOutputDevicePath|{0x02, 0x01, 0x0C, 0x00, 0xd0, 0x41, 0x03, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x7F, 0xFF, 0x04, 0x00}|VOID*|0x300000C
+
+
+ gPlatformModuleTokenSpaceGuid.PcdAcpiPm1AEventBlockAddress|0x1800|UINT16|0x00010035
+ gPlatformModuleTokenSpaceGuid.PcdAcpiPm1BEventBlockAddress|0x0000|UINT16|0x00010036
+ gPlatformModuleTokenSpaceGuid.PcdAcpiPm1AControlBlockAddress|0x1804|UINT16|0x0001037
+ gPlatformModuleTokenSpaceGuid.PcdAcpiPm1BControlBlockAddress|0x0000|UINT16|0x00010038
+ gPlatformModuleTokenSpaceGuid.PcdAcpiPm2ControlBlockAddress|0x1850|UINT16|0x00010039
+ gPlatformModuleTokenSpaceGuid.PcdAcpiPmTimerBlockAddress|0x1808|UINT16|0x0001003A
+ gPlatformModuleTokenSpaceGuid.PcdAcpiGpe0BlockAddress|0x1880|UINT16|0x0001003B
+ gPlatformModuleTokenSpaceGuid.PcdAcpiGpe1BlockAddress|0x0000|UINT16|0x0001003C
+
+#
+# UBA_START
+#
+[PcdsDynamicEx]
+
+#
+#Board Definitions
+#
+#Integer for BoardID, must match the SKU number and be unique.
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardID|0x0|UINT16|0x00000000
+#Integer for BoardFamily, must be unique
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardFamily|0x0|UINT16|0x00000001
+# Zero terminated unicode string to ID family
+ gOemSkuTokenSpaceGuid.PcdOemSkuFamilyName|L"DEFAULT "|VOID*|0x0000002
+# Zero terminated unicode string to Board Name
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardName|L"DEFAULT "|VOID*|0x00000003
+# Number of Sockets on Board.
+ gOemSkuTokenSpaceGuid.PcdOemSkuBoardSocketCount|0x0|UINT32|0x00000004
+
+# Number of DIMM slots per channel for each Socket
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxChannel|0x0|UINT32|0x00000005
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxDimmPerChannel|0x0|UINT32|0x00000006
+ gOemSkuTokenSpaceGuid.PcdOemSkuDimmLayout|FALSE|BOOLEAN|0x00000007
+ gOemSkuTokenSpaceGuid.PcdOemSkuSubBoardID|0x0|UINT16|0x00000008
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuMaxDimmSize|0x100|UINT32|0x00000009
+
+#
+# USB
+#
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort00|0x0|UINT16|0x00000010
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort01|0x0|UINT16|0x00000011
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort02|0x0|UINT16|0x00000012
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort03|0x0|UINT16|0x00000013
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort04|0x0|UINT16|0x00000014
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort05|0x0|UINT16|0x00000015
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort06|0x0|UINT16|0x00000016
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort07|0x0|UINT16|0x00000017
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort08|0x0|UINT16|0x00000018
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort09|0x0|UINT16|0x00000019
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort10|0x0|UINT16|0x0000001A
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort11|0x0|UINT16|0x0000001B
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort12|0x0|UINT16|0x0000001C
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbOverCurrentPort13|0x0|UINT16|0x0000001D
+
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort00|0x0|UINT16|0x00000020
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort01|0x0|UINT16|0x00000021
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort02|0x0|UINT16|0x00000022
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort03|0x0|UINT16|0x00000023
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort04|0x0|UINT16|0x00000024
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort05|0x0|UINT16|0x00000025
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort06|0x0|UINT16|0x00000026
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort07|0x0|UINT16|0x00000027
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort08|0x0|UINT16|0x00000028
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort09|0x0|UINT16|0x00000029
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort10|0x0|UINT16|0x0000002A
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort11|0x0|UINT16|0x0000002B
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort12|0x0|UINT16|0x0000002C
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsbPortLengthPort13|0x0|UINT16|0x0000002D
+
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort00|0x0|UINT16|0x00000100
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort01|0x0|UINT16|0x00000101
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort02|0x0|UINT16|0x00000102
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort03|0x0|UINT16|0x00000103
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort04|0x0|UINT16|0x00000104
+gOemSkuTokenSpaceGuid.PcdOemSkuPchUsb3OverCurrentPort05|0x0|UINT16|0x00000105
+
+#
+# ACPI items
+#
+# Acpi Name, MUST be 8 chars long
+ gOemSkuTokenSpaceGuid.PcdOemSkuAcpiName|"DEFAULT "|VOID*|0x00000030
+ gOemSkuTokenSpaceGuid.PcdOemTableIdXhci|"DEFAULT "|VOID*|0x00000031
+#
+# Misc.
+#
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuSdpActiveFlag|0x0|UINT8|0x00000039
+ gOemSkuTokenSpaceGuid.PcdOemSkuMrlAttnLed|0x0|UINT16|0x00000040
+
+#
+# GPIO
+#
+
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL_VAL|0xFF3DB93D|UINT32|0x00000050
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL2_VAL|0x0382F03F|UINT32|0x00000051
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_USE_SEL3_VAL|0xFFFFF30F|UINT32|0x00000052
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL_VAL|0x91E3EFFF|UINT32|0x00000053
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL2_VAL|0xFFFD0FF3|UINT32|0x00000054
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_IO_SEL3_VAL|0xFFFFFDF0|UINT32|0x00000055
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL_VAL|0x661C1000|UINT32|0x00000056
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL2_VAL|0x0002F004|UINT32|0x00000057
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_LVL3_VAL|0x0000020D|UINT32|0x00000058
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_INV_VAL|0x00000000|UINT32|0x00000059
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_BLINK_VAL|0x00000000|UINT32|0x0000005a
+ gOemSkuTokenSpaceGuid.PcdOemSku_GPIO_TABLE_SIZE|0x00000000|UINT32|0x0000005c
+
+#
+# SATA registers
+#
+
+ gOemSkuTokenSpaceGuid.PcdOemSku_Reg78Data32|0x99990000|UINT32|0x0000005b
+
+#
+# Clock generator settings
+#
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator00|0xFF|UINT8|0x00000060
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator01|0x9E|UINT8|0x00000061
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator02|0x3F|UINT8|0x00000062
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator03|0x00|UINT8|0x00000063
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator04|0x00|UINT8|0x00000064
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator05|0x0F|UINT8|0x00000065
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator06|0x08|UINT8|0x00000066
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator07|0x11|UINT8|0x00000067
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator08|0x0A|UINT8|0x00000068
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator09|0x17|UINT8|0x00000069
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator10|0xFF|UINT8|0x0000006a
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGenerator11|0xFE|UINT8|0x0000006b
+ gOemSkuTokenSpaceGuid.PcdOemSkuClockGeneratorAddress|0xD2|UINT8|0x0000006c
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformName|L"DEFAULT "|VOID*|0x00000201
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformNameSize|0x0|UINT32|0x00000202
+ gOemSkuTokenSpaceGuid.PcdOemSkuPlatformFeatureFlag|0x0|UINT32|0x00000203
+
+#
+# If PcdOemSkuAssertPostGPIO value is 0xFFFFFFFF, current platform don't set related GPIO.
+#
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIO|0x01010014|UINT32|0x00000204
+ gOemSkuTokenSpaceGuid.PcdOemSkuAssertPostGPIOValue|0x0|UINT32|0x00000205
+
+ gOemSkuTokenSpaceGuid.PcdOemSkuBmcPciePortNumber|0xFF|UINT8|0x00000206
+ gOemSkuTokenSpaceGuid.PcdOemSkuUplinkPortIndex|0xFF|UINT8|0x00000207
+#
+# UBA_END
+#
+
+ gCpPlatIpmiTokenSpaceGuid.PcdIpmiIoBaseAddress|0xCA2|UINT16|0x10000022
+ gCpPlatIpmiTokenSpaceGuid.PcdIpmiSmmIoBaseAddress|0xCA4|UINT16|0x10000023
+ gCpPlatIpmiTokenSpaceGuid.PcdSioMailboxBaseAddress|0x600|UINT32|0x10000021
+ gCpPlatIpmiTokenSpaceGuid.PcdFRB2EnabledFlag|TRUE|BOOLEAN|0x10000030
+ gCpPlatIpmiTokenSpaceGuid.PcdIpmiBmcReadyDelayTimer|0|UINT8|0x00000208
+
+
+## This PCD replaces the original one gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState
+ gPlatformModuleTokenSpaceGuid.PcdBootState|TRUE|BOOLEAN|0x300000AC
+ gOemSkuTokenSpaceGuid.PcdAcpiGnvsAddress|0|UINT64|0x00000208
+
+[PcdsDynamicEx]
+ gCpPlatTokenSpaceGuid.PcdUefiOptimizedBoot|FALSE|BOOLEAN|0x10000026
+ gCpPlatTokenSpaceGuid.PcdUefiOptimizedBootEx|FALSE|BOOLEAN|0x10000024
+
+[PcdsFixedAtBuild]
+#
+# Flash map related PCD.
+#
+# Note: most values here are overridden in the .fdf file
+#
+#
+# Note: FlashNv PCD naming conventions are as follows:
+#
+# PcdFlash*Base is an address, usually in the range of 0xf* of FD's, note change in FDF spec
+# PcdFlash*Size is a hex count of the length of the FD or FV
+# All Fv will have the form 'PcdFlashFv', and all Fd will have the form 'PcdFlashFd'
+#
+# Also all values will have a PCD assigned so that they can be used in the system, and
+# the FlashMap edit tool can be used to change the values here, without effecting the code.
+# This requires all code to only use the PCD tokens to recover the values.
+#
+
+
+
+# PCD's that are for the whole SPI part
+
+
+#Block size of SPI
+gCpPlatFlashTokenSpaceGuid.PcdFlashBlockSize |0x00010000 |UINT32|0x50000102
+
+
+#AJW rename this to be more in keeping with the function
+gCpPlatFlashTokenSpaceGuid.PcdFlashAreaBase |0xfff00000 |UINT32|0x50000105
+
+
+
+# for PeiSec FD
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvMrcNormalSize |0x00100000 |UINT32|0x50000221
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvMrcNormalBase |0x00000000 |UINT32|0x50000222
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvSecPeiBase |0x00000000 |UINT32|0x50000260
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvSecPeiSize |0x00040000 |UINT32|0x50000261
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFdSecPeiBase |0x00000000 |UINT32|0x50000211
+gCpPlatFlashTokenSpaceGuid.PcdFlashFdSecPeiSize |0x00100000 |UINT32|0x50000212
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionSize |0x00100000 |UINT32|0x50000233
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionBase |0x00000000 |UINT32|0x50000234
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionOffset |0x00000000 |UINT32|0x50000235
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvPeiPolicySize |0x00100000 |UINT32|0x50000241
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvPeiPolicyBase |0x00000000 |UINT32|0x50000242
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmSize |0x00100000 |UINT32|0x50000251
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmBase |0x00000000 |UINT32|0x50000252
+
+
+# for Main FD
+
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFdMainBase |0xfff00000 |UINT32|0x50000300
+gCpPlatFlashTokenSpaceGuid.PcdFlashFdMainSize |0x00400000 |UINT32|0x50000301
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvMainSize |0x00200000 |UINT32|0x50000311
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvMainBase |0xFF820000 |UINT32|0x50000312
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaSize |0x00200000 |UINT32|0x50000341
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaBase |0xFF820000 |UINT32|0x50000342
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaOffset |0xFF820000 |UINT32|0x50000343
+
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogSize |0x00200000 |UINT32|0x50000351
+gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogBase |0xFF820000 |UINT32|0x50000352
+
+## This PCD specifies the size of the physical device containing the BIOS, SMBIOS will use it.
+
+gCpPlatFlashTokenSpaceGuid.PcdFlashBackupRegionBase |0xFF800000 |UINT32|0x50000001
+gCpPlatFlashTokenSpaceGuid.PcdFlashBackupRegionSize |0x00000000 |UINT32|0x50000002
+
+[PcdsFeatureFlag.common]
+
+##
+## Those PCDs are used to control build process.
+##
+
+ #
+ # SV Tools
+ #
+ gPlatformFeatureTokenSpaceGuid.PcdXmlCliEnable|TRUE|BOOLEAN|0xE0000000
+ gPlatformFeatureTokenSpaceGuid.PcdSvBiosEnable|TRUE|BOOLEAN|0xE000002E
+ #
+ #
+ #
+
+[PcdsDynamicEx]
+ ### Sample implementation...No real data. Use this PCD to override a platform with Interposer ###
+ gPlatformTokenSpaceGuid.PcdMemInterposerMap|{0}|INTERPOSER_MAP|0x80000015 {
+ <HeaderFiles>
+ Guid/PlatformInfo.h
+ <Packages>
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ }
+ # Interposer A MC 0 mapped to original MC1
+ # Enum values for Interposer
+ # Interposer A => 1
+ # Interposer B => 2
+ # Interposer Unknown => 0
+ gPlatformTokenSpaceGuid.PcdMemInterposerMap.Interposer[1].MappedMcId[0] |1
+
+### Sample implementation...No real data. Use this PCD to override a platform with Interposer ###
+
+[Guids]
+ gStructPcdTokenSpaceGuid = {0x3f1406f4, 0x2b, 0x487a, {0x8b, 0x69, 0x74, 0x29, 0x1b, 0x36, 0x16, 0xf4}}
+
+[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamicEx]
+gStructPcdTokenSpaceGuid.PcdEmulationDfxConfig|{0}|EMULATION_DFX_CONFIGURATION|0XFCD0000C{
+ <HeaderFiles>
+ Include/Guid/EmulationDfxVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig|{0}|FPGA_SOCKET_CONFIGURATION|0XFCD00010{
+ <HeaderFiles>
+ Include/Guid/FpgaSocketVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration|{0}|IE_RC_CONFIGURATION|0XFCD00004{
+ <HeaderFiles>
+ Include/Guid/IeRcVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration|{0}|ME_RC_CONFIGURATION|0XFCD0000B{
+ <HeaderFiles>
+ Include/Guid/MeRcVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig|{0}|MEM_BOOT_HEALTH_CONFIG|0XFCD00002{
+ <HeaderFiles>
+ Include/Guid/MemBootHealthGuid.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdPchSetup|{0}|PCH_SETUP|0XFCD00007{
+ <HeaderFiles>
+ Include/PchSetupVariableLbg.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSetup|{0}|SYSTEM_CONFIGURATION|0XFCD0000F{
+ <HeaderFiles>
+ Include/Guid/SetupVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig|{0}|SOCKET_COMMONRC_CONFIGURATION|0XFCD00001{
+ <HeaderFiles>
+ Include/Guid/SocketCommonRcVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig|{0}|SOCKET_IIO_CONFIGURATION|0XFCD00006{
+ <HeaderFiles>
+ Include/Guid/SocketIioVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig|{0}|SOCKET_MEMORY_CONFIGURATION|0XFCD0000D{
+ <HeaderFiles>
+ Include/Guid/SocketMemoryVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig|{0}|SOCKET_MP_LINK_CONFIGURATION|0XFCD00008{
+ <HeaderFiles>
+ Include/Guid/SocketMpLinkVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig|{0}|SOCKET_POWERMANAGEMENT_CONFIGURATION|0XFCD00005{
+ <HeaderFiles>
+ Include/Guid/SocketPowermanagementVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig|{0}|SOCKET_PROCESSORCORE_CONFIGURATION|0XFCD00003{
+ <HeaderFiles>
+ Include/Guid/SocketProcessorCoreVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdSvConfiguration|{0}|SV_CONFIGURATION|0XFCD00009{
+ <HeaderFiles>
+ Include/Guid/SetupVariable.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ WhitleySiliconPkg/SiliconPkg.dec
+ WhitleySiliconPkg/CpRcPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdTCG2_CONFIGURATION|{0}|TCG2_CONFIGURATION|0XFCD0000A{
+ <HeaderFiles>
+ Include/Tcg2ConfigNvData.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ WhitleySiliconPkg/WhitleySiliconPkg.dec
+ SecurityPkg/SecurityPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+}
+gStructPcdTokenSpaceGuid.PcdTCG2_VERSION|{0}|TCG2_VERSION|0XFCD0000E{
+ <HeaderFiles>
+ Include/Tcg2ConfigNvData.h
+ <Packages>
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ SecurityPkg/SecurityPkg.dec
+ WhitleyOpenBoardPkg/PlatformPkg.dec
+}
+[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamicEx]
+ gOemSkuTokenSpaceGuid.PcdTurboPowerLimitLock|0x01|UINT8|0x00000209
+ gOemSkuTokenSpaceGuid.PcdNumberOfCoresToDisable|0x0|UINT16|0x0000020A
+
+[LibraryClasses]
+ ServerManagementTimeStampLib|Include/Library/ServerManagementTimeStampLib.inf
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
new file mode 100644
index 0000000000..41dc55a14d
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
@@ -0,0 +1,931 @@
+## @file
+# X64 Platform with 64-bit DXE.
+#
+# @copyright
+# Copyright 2008 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+ PLATFORM_NAME = $(RP_PKG)
+ PLATFORM_GUID = D7EAF54D-C9B9-4075-89F0-71943DBCFA61
+ PLATFORM_VERSION = 0.1
+ DSC_SPECIFICATION = 0x00010005
+ OUTPUT_DIRECTORY = Build/$(RP_PKG)
+ SUPPORTED_ARCHITECTURES = IA32|X64
+ BUILD_TARGETS = DEBUG|RELEASE
+ SKUID_IDENTIFIER = DEFAULT
+ VPD_TOOL_GUID = 8C3D856A-9BE6-468E-850A-24F7A8D38E08
+ FLASH_DEFINITION = $(RP_PKG)/PlatformPkg.fdf
+ PLATFORM_SI_PACKAGE = ClientOneSiliconPkg
+ DEFINE PLATFORM_SI_BIN_PACKAGE = WhitleySiliconBinPkg
+ PEI_ARCH = IA32
+ DXE_ARCH = X64
+
+!if $(CPUTARGET) == "CPX"
+ DEFINE FSP_BIN_PKG = CedarIslandFspBinPkg
+ DEFINE IIO_INSTANCE = Skx
+!elseif $(CPUTARGET) == "ICX"
+ DEFINE FSP_BIN_PKG = WhitleyFspBinPkg
+ DEFINE IIO_INSTANCE = Icx
+!else
+ DEFINE IIO_INSTANCE = UnknownCpu
+!endif
+
+ #
+ # Platform On/Off features are defined here
+ #
+ !include $(RP_PKG)/PlatformPkgConfig.dsc
+
+ #
+ # MRC common configuration options defined here
+ #
+ !include $(SILICON_PKG)/MrcCommonConfig.dsc
+
+ !include $(FSP_BIN_PKG)/DynamicExPcd.dsc
+ !include $(FSP_BIN_PKG)/DynamicExPcdFvLateSilicon.dsc
+ !include $(RP_PKG)/DynamicExPcd.dsc
+
+ !include $(RP_PKG)/Uba/UbaCommon.dsc
+ !include $(RP_PKG)/Uba/UbaRpBoards.dsc
+
+ !include $(RP_PKG)/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
+
+################################################################################
+#
+# SKU Identification section - list of all SKU IDs supported by this
+# Platform.
+#
+################################################################################
+[SkuIds]
+ 0|DEFAULT # The entry: 0|DEFAULT is reserved and always required.
+
+[DefaultStores]
+ 0|STANDARD
+ 1|MANUFACTURING
+
+
+################################################################################
+#
+# Pcd Section - list of all EDK II PCD Entries defined by this Platform
+#
+################################################################################
+[PcdsFeatureFlag]
+ #
+ # MinPlatform control flags
+ #
+ gMinPlatformPkgTokenSpaceGuid.PcdStopAfterDebugInit |FALSE
+ gMinPlatformPkgTokenSpaceGuid.PcdStopAfterMemInit |FALSE
+ gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly |FALSE
+ gMinPlatformPkgTokenSpaceGuid.PcdUefiSecureBootEnable |FALSE
+ gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable |FALSE
+ gMinPlatformPkgTokenSpaceGuid.PcdSmiHandlerProfileEnable|TRUE
+ gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable |FALSE
+
+ # don't degrade 64bit MMIO space to 32-bit
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPciDegradeResourceForOptionRom|FALSE
+
+ # Server doesn't support capsule update on Reset.
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmEnableBspElection|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuHotPlugSupport|FALSE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPciBusHotplugDeviceSupport|FALSE
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|TRUE
+
+ gEfiCpRcPkgTokenSpaceGuid.Reserved15|TRUE
+
+!if ($(CPUTARGET) == "ICX")
+ gEfiCpRcPkgTokenSpaceGuid.PcdMemBootHealthFeatureSupported|FALSE
+!endif # $(CPUTARGET) == "ICX"
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSkylakeFamilyFlag|TRUE
+ gCpuPkgTokenSpaceGuid.PcdCpuIcelakeFamilyFlag|TRUE
+
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|FALSE
+ gCpuPkgTokenSpaceGuid.PcdCpuSelectLfpAsBspFlag|TRUE
+
+ ## Uncomment for better boot performance
+# gPerfOptTokenSpaceGuid.PcdPreUefiLegacyEnable|FALSE
+# gPerfOptTokenSpaceGuid.PcdLocalVideoEnable|FALSE
+
+ gPlatformTokenSpaceGuid.PcdSupportUnsignedCapsuleImage|TRUE
+
+ ## This PCD specified whether ACPI SDT protocol is installed.
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+
+ ## This PCD specifies whether FPGA routine will be active
+ gSocketPkgFpgaGuid.PcdSktFpgaActive|TRUE
+
+!if $(CPU_SKX_ONLY_SUPPORT) == TRUE
+ gEfiCpRcPkgTokenSpaceGuid.PerBitMargin|FALSE
+ gEfiCpRcPkgTokenSpaceGuid.PcdSeparateCwlAdj|TRUE
+!endif
+
+ ## This PCD specifies whether or not to enable the High Speed UART
+ gPlatformModuleTokenSpaceGuid.PcdEnableHighSpeedUart|FALSE
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdHiiOsRuntimeSupport|FALSE
+
+[PcdsFixedAtBuild]
+ gEfiCpRcPkgTokenSpaceGuid.PcdRankSwitchFixOption|2
+
+ ## MinPlatform Boot Stage Selector
+ # Stage 1 - enable debug (system deadloop after debug init)
+ # Stage 2 - mem init (system deadloop after mem init)
+ # Stage 3 - boot to shell only
+ # Stage 4 - boot to OS
+ # Stage 5 - boot to OS with security boot enabled
+ # Stage 6 - boot with advanced features enabled
+ #
+ gMinPlatformPkgTokenSpaceGuid.PcdBootStage|6
+
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F # Enable asserts, prints, code, clear memory, and deadloops on asserts.
+ gEfiMdePkgTokenSpaceGuid.PcdFixedDebugPrintErrorLevel|0x80200047 # Built in messages: Error, MTRR, info, load, warn, init
+ gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2 # This is set to INT3 (0x2) for Simics source level debugging
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x0
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x10000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdShadowPeimOnS3Boot|TRUE
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x0
+ gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x0
+ gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId|"INTEL "
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId|0x4449204C45544E49 # "INTEL ID"
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxPeiStackSize|0x100000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|0x2100000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0302
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|140
+
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout|10000
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|512
+ gCpuPkgTokenSpaceGuid.PcdPlatformType|2
+ gCpuPkgTokenSpaceGuid.PcdPlatformCpuMaxCoreFrequency|4000
+
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x10000
+
+ #PcdCpuMicrocodePatchRegionSize = PcdFlashNvStorageMicrocodeSize - (EFI_FIRMWARE_VOLUME_HEADER. HeaderLength + sizeof (EFI_FFS_FILE_HEADER))
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x1FFF70
+
+ #
+ # This controls the NEM code region cached during SEC
+ # It usually isn't necessary to match exactly the FV layout in the FDF file.
+ # It is a performance optimization to have it match the flash region exactly
+ # as then no extra reads are done to load unused flash into cache.
+ #
+ gCpuUncoreTokenSpaceGuid.PcdFlashSecCacheRegionBase|0xFFC00000
+ gCpuUncoreTokenSpaceGuid.PcdFlashSecCacheRegionSize|0x00400000
+
+ gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamBase|0x00FE800000
+ gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamSize|0x0000200000
+
+!if ($(FSP_MODE) == 0)
+ gIntelFsp2PkgTokenSpaceGuid.PcdFspTemporaryRamSize|0x00070000
+!endif
+ gUefiCpuPkgTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x20000
+
+ #
+ # These will be initialized during build
+ #
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTOffset|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTBase|0x00000000
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMOffset|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSOffset|0x00000000
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase|0x00000000
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase|0x00000000
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize|0x00000000
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionBase|0x00000000
+
+ ## Specifies delay value in microseconds after sending out an INIT IPI.
+ # @Prompt Configure delay value after send an INIT IPI
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuInitIpiDelayInMicroSeconds|10
+ ## Specifies max supported number of Logical Processors.
+ # @Prompt Configure max supported number of Logical Processorss
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize|0x1000
+
+ gPlatformTokenSpaceGuid.PcdPerfPkgPchPmBaseFunctionNumber|0x2
+
+ gPlatformTokenSpaceGuid.PcdUboDev|0x08
+ gPlatformTokenSpaceGuid.PcdUboFunc|0x02
+ gPlatformTokenSpaceGuid.PcdUboCpuBusNo0|0xCC
+
+ gCpuPkgTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
+ gPlatformTokenSpaceGuid.PcdSupportLegacyStack|FALSE
+
+ ## Defines the ACPI register set base address.
+ # The invalid 0xFFFF is as its default value. It must be configured to the real value.
+ # @Prompt ACPI Timer IO Port Address
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoPortBaseAddress | 0x0500
+
+ ## Defines the PCI Bus Number of the PCI device that contains the BAR and Enable for ACPI hardware registers.
+ # @Prompt ACPI Hardware PCI Bus Number
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoPciBusNumber | 0x00
+
+ ## Defines the PCI Device Number of the PCI device that contains the BAR and Enable for ACPI hardware registers.
+ # The invalid 0xFF is as its default value. It must be configured to the real value.
+ # @Prompt ACPI Hardware PCI Device Number
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoPciDeviceNumber | 0x1F
+
+ ## Defines the PCI Function Number of the PCI device that contains the BAR and Enable for ACPI hardware registers.
+ # The invalid 0xFF is as its default value. It must be configured to the real value.
+ # @Prompt ACPI Hardware PCI Function Number
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoPciFunctionNumber | 0x02
+
+ ## Defines the PCI Register Offset of the PCI device that contains the Enable for ACPI hardware registers.
+ # The invalid 0xFFFF is as its default value. It must be configured to the real value.
+ # @Prompt ACPI Hardware PCI Register Offset
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoPciEnableRegisterOffset |0x0044
+
+ ## Defines the bit mask that must be set to enable the APIC hardware register BAR.
+ # @Prompt ACPI Hardware PCI Bar Enable BitMask
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoBarEnableMask | 0x80
+
+ ## Defines the PCI Register Offset of the PCI device that contains the BAR for ACPI hardware registers.
+ # The invalid 0xFFFF is as its default value. It must be configured to the real value.
+ # @Prompt ACPI Hardware PCI Bar Register Offset
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiIoPciBarRegisterOffset |0x0040
+
+ ## Defines the offset to the 32-bit Timer Value register that resides within the ACPI BAR.
+ # @Prompt Offset to 32-bit Timer register in ACPI BAR
+ gPcAtChipsetPkgTokenSpaceGuid.PcdAcpiPm1TmrOffset |0x0008
+
+!if $(CPUTARGET) == "ICX"
+ #
+ # ACPI PCD custom override
+ #
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId|0x4C544E49
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision|0x01000013
+!endif
+
+ gMinPlatformPkgTokenSpaceGuid.PcdMaxCpuCoreCount|28
+ gMinPlatformPkgTokenSpaceGuid.PcdMaxCpuSocketCount|$(MAX_SOCKET)
+ gMinPlatformPkgTokenSpaceGuid.PcdWsmtProtectionFlags|0x07
+
+ # Enable DDRT scheduler debug features for power on
+ gEfiCpRcPkgTokenSpaceGuid.PcdDdrtSchedulerDebugDefault|TRUE
+
+ # Disable Fast Warm Boot for Whitley Openboard Package
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcFastBootDefault|FALSE
+
+!if $(CPU_SKX_ONLY_SUPPORT) == FALSE
+ gCpuUncoreTokenSpaceGuid.PcdWaSerializationEn|FALSE
+ gEfiCpRcPkgTokenSpaceGuid.PcdMrcCmdVrefCenteringTrainingEnable|FALSE
+!endif
+
+ gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|0x74
+ gPcAtChipsetPkgTokenSpaceGuid.PcdRtcTargetRegister|0x75
+
+ #
+ # PlatformInitPreMem
+ #
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformEfiAcpiReclaimMemorySize|0x100
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformEfiAcpiNvsMemorySize|0xA30
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformEfiReservedMemorySize|0x100
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformEfiRtDataMemorySize|0x100
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformEfiRtCodeMemorySize|0x100
+
+ gEfiCpRcPkgTokenSpaceGuid.PcdReserved15|0
+
+ !include $(SILICON_PKG)/Product/Whitley/SiliconPkg10nmPcds.dsc
+
+[PcdsFixedAtBuild.IA32]
+!if ($(FSP_MODE) == 0)
+ gMinPlatformPkgTokenSpaceGuid.PcdFspWrapperBootMode|TRUE
+ gIntelFsp2WrapperTokenSpaceGuid.PcdPeiMinMemSize|0x4000000
+ gEfiMdePkgTokenSpaceGuid.PcdSpeculationBarrierType|0
+!endif
+
+[PcdsFixedAtBuild.X64]
+ # Change PcdBootManagerMenuFile to UiApp
+ ##
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
+ gPlatformModuleTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0xC00000
+
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmCodeAccessCheckEnable |TRUE
+
+ #
+ # AcpiPlatform
+ #
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiEnableSwSmi|0xA0
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiDisableSwSmi|0xA1
+ gMinPlatformPkgTokenSpaceGuid.PcdPcIoApicCount|32
+ gMinPlatformPkgTokenSpaceGuid.PcdPcIoApicIdBase|0x09
+ gMinPlatformPkgTokenSpaceGuid.PcdPcIoApicAddressBase|0xFEC01000
+ gMinPlatformPkgTokenSpaceGuid.PcdPcIoApicInterruptBase|24
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFadtPreferredPmProfile|0x04
+ gMinPlatformPkgTokenSpaceGuid.PcdFadtIaPcBootArch|0x0000
+ gMinPlatformPkgTokenSpaceGuid.PcdFadtFlags|0x000004A5
+ gMinPlatformPkgTokenSpaceGuid.PcdLocalApicAddress|0xFEE00000
+ gMinPlatformPkgTokenSpaceGuid.PcdIoApicAddress|0xFEC00000
+ gMinPlatformPkgTokenSpaceGuid.PcdIoApicId|0x08
+
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AEventBlockAddress|0x500
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BEventBlockAddress|0
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1AControlBlockAddress|0x504
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm1BControlBlockAddress|0
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPm2ControlBlockAddress|0x550
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiPmTimerBlockAddress|0x508
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe0BlockAddress|0x580
+ gMinPlatformPkgTokenSpaceGuid.PcdAcpiGpe1BlockAddress|0
+
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmRestrictedMemoryAccess|FALSE
+
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleInputDevicePath|{ 0x02, 0x01, 0x0C, 0x00, 0xD0, 0x41, 0x03, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1F, 0x02, 0x01, 0x0C, 0x00, 0xD0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xC1, 0xe0, 0xbe, 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7F, 0x01, 0x04, 0x00, 0x03, 0x0F, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x01, 0x01, 0x7F, 0xFF, 0x04, 0x00}
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleOutputDevicePath|{ 0x02, 0x01, 0x0C, 0x00, 0xD0, 0x41, 0x03, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1F, 0x02, 0x01, 0x0C, 0x00, 0xD0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xC1, 0xe0, 0xbe, 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7F, 0x01, 0x04, 0x00, 0x02, 0x01, 0x0C, 0x00, 0xd0, 0x41, 0x03, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x7F, 0xFF, 0x04, 0x00}
+ gBoardModulePkgTokenSpaceGuid.PcdSuperIoPciIsaBridgeDevice|{0x0, 0x0, 0x1F, 0x0}
+ gBoardModulePkgTokenSpaceGuid.PcdUart1Enable|0x01
+
+[PcdsPatchableInModule]
+ #
+ # These debug options are patcheable so that they can be manipulated during debug (if memory is updateable)
+ #
+
+ gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 # Enable status codes for debug, progress, and errors
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000042 # Displayed messages: Error, Info, warn
+
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x80000000
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuNumberOfReservedVariableMtrrs|0
+
+!if $(PREMEM_PAGE_ALLOC_SUPPORT) == FALSE
+ gEfiCpRcPkgTokenSpaceGuid.PcdPeiTemporaryRamRcHeapSize|0x130000
+!endif
+
+[PcdsDynamicExDefault.IA32]
+!if ($(FSP_MODE) == 0)
+ gIntelFsp2WrapperTokenSpaceGuid.PcdFspmUpdDataAddress|0x00000000
+!endif
+
+
+[PcdsDynamicExHii]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|L"1GPageTable"|gEfiGenericVariableGuid|0x0|TRUE
+ gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|0 # Variable: L"Timeout"
+ gPlatformTokenSpaceGuid.PcdPlatformMemoryCheck|L"MemoryCheck"|gPlatformTokenSpaceGuid|0x0|0
+ gCpPlatTokenSpaceGuid.PcdUefiOptimizedBoot|L"UefiOptimizedBoot"|gCpPlatTokenSpaceGuid|0x0|TRUE
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gEfiGenericVariableGuid|0x0|TRUE
+ gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+ gPlatformTokenSpaceGuid.PcdBootDeviceScratchPad5Changed|L"BootDeviceScratchPad"|gEfiGenericVariableGuid|0x0|FALSE
+
+[PcdsDynamicExDefault]
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuApInitTimeOutInMicroSeconds|200000
+ gEfiSecurityPkgTokenSpaceGuid.PcdTpmPhysicalPresence|TRUE
+ gEfiSecurityPkgTokenSpaceGuid.PcdTpmAutoDetection|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
+ gPlatformModuleTokenSpaceGuid.PcdLtConfigLockEnable|TRUE
+ gPlatformModuleTokenSpaceGuid.PcdProcessorLtsxEnable|FALSE
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmMsrSaveStateEnable|FALSE
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmProtectedModeEnable|FALSE
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmRuntimeCtlHooks|FALSE
+
+ gSiPkgTokenSpaceGuid.PcdWakeOnRTCS5|FALSE
+ gSiPkgTokenSpaceGuid.PcdRtcWakeupTimeHour|0
+ gSiPkgTokenSpaceGuid.PcdRtcWakeupTimeMinute|0
+ gSiPkgTokenSpaceGuid.PcdRtcWakeupTimeSecond|0
+
+ #Platform should change it to by code
+ gSiPkgTokenSpaceGuid.PcdPchSataInitReg78Data|0xAAAA0000
+ gSiPkgTokenSpaceGuid.PcdPchSataInitReg88Data|0xAA33AA22
+
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
+
+ #
+ # CPU features related PCDs.
+ #
+ gCpuPkgTokenSpaceGuid.PcdCpuEnergyPolicy
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuClockModulationDutyCycle
+ gUefiCpuPkgTokenSpaceGuid.PcdIsPowerOnReset
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport|FALSE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSystemPageSize|0x01
+
+ ## Put fTPM guid here: e.g. { 0xf9c6a62f, 0xc60f, 0x4b44, { 0xa6, 0x29, 0xed, 0x3d, 0x40, 0xae, 0xfa, 0x5f } }
+ ## TPM1.2 { 0x8b01e5b6, 0x4f19, 0x46e8, { 0xab, 0x93, 0x1c, 0x53, 0x67, 0x1b, 0x90, 0xcc } }
+ ## TPM2.0Dtpm { 0x286bf25a, 0xc2c3, 0x408c, { 0xb3, 0xb4, 0x25, 0xe6, 0x75, 0x8b, 0x73, 0x17 } }
+
+ #TPM2.0#
+ gEfiSecurityPkgTokenSpaceGuid.PcdTpmInstanceGuid|{0x5a, 0xf2, 0x6b, 0x28, 0xc3, 0xc2, 0x8c, 0x40, 0xb3, 0xb4, 0x25, 0xe6, 0x75, 0x8b, 0x73, 0x17}
+
+ gEfiSecurityPkgTokenSpaceGuid.PcdTpmInitializationPolicy|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdTpm2InitializationPolicy|1
+ gEfiSecurityPkgTokenSpaceGuid.PcdTpm2SelfTestPolicy|0
+
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmUseDelayIndication|FALSE
+ gCpuPkgTokenSpaceGuid.PcdCpuSmmUseBlockIndication|FALSE
+
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciVendorId|0x102b
+ gPlatformTokenSpaceGuid.PcdOnboardVideoPciDeviceId|0x0522
+
+ gPlatformTokenSpaceGuid.PcdSetupMenuScanCode|0x000C
+ gPlatformTokenSpaceGuid.PcdBootDeviceListScanCode|0x0011
+ gPlatformTokenSpaceGuid.PcdBootMenuFile|{ 0xdc, 0x5b, 0xc2, 0xee, 0xf2, 0x67, 0x95, 0x4d, 0xb1, 0xd5, 0xf8, 0x1b, 0x20, 0x39, 0xd1, 0x1d }
+ gMinPlatformPkgTokenSpaceGuid.PcdPcIoApicEnable|0x0
+
+[PcdsDynamicExDefault.X64]
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits|8
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|1
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|1
+ gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|0
+
+ #
+ # Set video to 1024x768 resolution
+ #
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|1024
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|768
+
+[PcdsDynamicExDefault]
+
+!if $(CPUTARGET) == "CPX"
+ !include $(RP_PKG)/StructurePcdCpx.dsc
+!else
+ !include $(RP_PKG)/StructurePcd.dsc
+!endif
+
+################################################################################
+#
+# Library Class section - list of all Library Classes needed by this Platform.
+#
+################################################################################
+
+!include MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
+!include MinPlatformPkg/Include/Dsc/CorePeiLib.dsc
+!include MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc
+
+[LibraryClasses]
+
+ #
+ # Simics source level debugging requires the non-null version of PeCoffExtraActionLib
+ #
+!if $(TARGET) == "DEBUG"
+ PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
+!else
+ PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
+!endif
+
+ #
+ # Basic
+ #
+
+ PciLib|MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf
+ SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+
+ #
+ # Framework
+ #
+ S3BootScriptLib|MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
+ FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
+
+ SiliconPolicyInitLib|WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
+!if ($(FSP_MODE) == 0)
+ SiliconPolicyUpdateLib|$(RP_PKG)/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
+!else
+ SiliconPolicyUpdateLib|$(RP_PKG)/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
+!endif
+
+ SetupLib|WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
+
+ #
+ # ToDo: Can we use BaseAcpiTimerLib from MinPlatform?
+ #
+ TimerLib|PcAtChipsetPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf
+
+ MultiPlatSupportLib|$(RP_PKG)/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
+ ReadFfsLib|$(RP_PKG)/Library/ReadFfsLib/ReadFfsLib.inf
+ PlatformSetupVariableSyncLib|$(RP_PKG)/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
+ PlatformVariableHookLib |$(RP_PKG)/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
+
+ PlatformBootManagerLib|$(PLATFORM_PKG)/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
+ SerialPortLib|$(RP_PKG)/Library/SerialPortLib/SerialPortLib.inf
+ PlatformHooksLib|$(RP_PKG)/Library/PlatformHooksLib/PlatformHooksLib.inf
+
+ CmosAccessLib|BoardModulePkg/Library/CmosAccessLib/CmosAccessLib.inf
+ PlatformCmosAccessLib|$(RP_PKG)/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
+ SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
+ TpmCommLib|SecurityPkg/Library/TpmCommLib/TpmCommLib.inf
+
+ #
+ # MinPlatform uses port 80, we don't want to assume HW
+ #
+ PostCodeLib|MdePkg/Library/BasePostCodeLibDebug/BasePostCodeLibDebug.inf
+
+ TcgPpVendorLib|SecurityPkg/Library/TcgPpVendorLibNull/TcgPpVendorLibNull.inf
+ Tcg2PpVendorLib|SecurityPkg/Library/Tcg2PpVendorLibNull/Tcg2PpVendorLibNull.inf
+ AslUpdateLib|$(PLATFORM_PKG)/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
+ PciSegmentInfoLib|$(PLATFORM_PKG)/Pci/Library/PciSegmentInfoLibSimple/PciSegmentInfoLibSimple.inf
+ PlatformOpromPolicyLib|$(RP_PKG)/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
+ VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
+
+[LibraryClasses.Common.SEC, LibraryClasses.Common.PEI_CORE, LibraryClasses.Common.PEIM]
+!if ($(FSP_MODE) == 0)
+ FspWrapperApiLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLib.inf
+ FspWrapperApiTestLib|IntelFsp2WrapperPkg/Library/PeiFspWrapperApiTestLib/PeiFspWrapperApiTestLib.inf
+ FspWrapperPlatformLib|WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
+ FspWrapperHobProcessLib|WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
+!endif
+ FspSwitchStackLib|IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf
+ FspCommonLib|IntelFsp2Pkg/Library/BaseFspCommonLib/BaseFspCommonLib.inf
+ FspPlatformLib|IntelFsp2Pkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf
+
+[LibraryClasses.Common.SEC]
+ #
+ # SEC phase
+ #
+ TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
+
+[LibraryClasses.Common.PEI_CORE, LibraryClasses.Common.PEIM]
+ #
+ # ToDo: Can we remove
+ #
+ CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuExceptionHandlerLib.inf
+
+ MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
+
+
+ PeiPlatformHookLib|$(RP_PKG)/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
+ PlatformClocksLib|$(RP_PKG)/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
+
+ TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLib/PeiTestPointCheckLib.inf
+ TestPointLib|MinPlatformPkg/Test/Library/TestPointLib/PeiTestPointLib.inf
+
+ ReportFvLib|$(RP_PKG)/Library/PeiReportFvLib/PeiReportFvLib.inf
+
+[LibraryClasses.Common.PEIM]
+ #
+ # Library instance consumed by MinPlatformPkg PlatformInit modules.
+ #
+ ReportCpuHobLib|MinPlatformPkg/PlatformInit/Library/ReportCpuHobLib/ReportCpuHobLib.inf
+ SetCacheMtrrLib|$(RP_PKG)/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
+
+[LibraryClasses.common.DXE_CORE, LibraryClasses.common.DXE_SMM_DRIVER, LibraryClasses.common.SMM_CORE, LibraryClasses.common.DXE_DRIVER, LibraryClasses.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION]
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+
+ Tcg2PhysicalPresenceLib|$(RP_PKG)/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
+ TcgPhysicalPresenceLib|SecurityPkg/Library/DxeTcgPhysicalPresenceLib/DxeTcgPhysicalPresenceLib.inf
+
+ BiosIdLib|BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
+ MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
+
+ TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf
+
+ Tpm12DeviceLib|SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12DeviceLibDTpm.inf
+
+ TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLibNull/TestPointCheckLibNull.inf
+ TestPointLib|MinPlatformPkg/Test/Library/TestPointLib/DxeTestPointLib.inf
+ BoardBdsHookLib|BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.inf
+ BoardBootManagerLib|MinPlatformPkg/Bds/Library/BoardBootManagerLibNull/BoardBootManagerLibNull.inf
+
+ CompressDxeLib|MinPlatformPkg/Library/CompressLib/CompressLib.inf
+
+[LibraryClasses.Common.DXE_SMM_DRIVER]
+ SpiFlashCommonLib|$(RP_PKG)/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
+
+ TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLib/SmmTestPointCheckLib.inf
+ TestPointLib|MinPlatformPkg/Test/Library/TestPointLib/SmmTestPointLib.inf
+ MmServicesTableLib|MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
+
+[LibraryClasses.Common.SMM_CORE]
+ S3BootScriptLib|MdePkg/Library/BaseS3BootScriptLibNull/BaseS3BootScriptLibNull.inf
+
+[LibraryClasses.Common]
+ DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
+
+[Components.IA32]
+ !include MinPlatformPkg/Include/Dsc/CorePeiInclude.dsc
+
+ MdeModulePkg/Universal/PCD/Pei/Pcd.inf {
+ <LibraryClasses>
+ #
+ # Beware of circular dependencies on PCD if you want to use another DebugLib instance.
+ #
+ PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+ NULL|$(FSP_BIN_PKG)/Library/FspPcdListLibNull/FspPcdListLibNull.inf # Include FSP DynamicEx PCD
+ NULL|$(FSP_BIN_PKG)/Library/FspPcdListLibNull/FspPcdListLibNullFvLateSilicon.inf # Include FvLateSilicon DynamicEx PCD
+ }
+ $(RP_PKG)/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
+ $(RP_PKG)/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
+ $(RP_PKG)/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
+
+ $(RP_PKG)/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
+
+ $(RP_PKG)/Platform/Pei/PlatformInfo/PlatformInfo.inf
+ $(PLATFORM_PKG)/PlatformInit/PlatformInitPei/PlatformInitPreMem.inf {
+ <LibraryClasses>
+ TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLibNull/TestPointCheckLibNull.inf
+ BoardInitLib|$(RP_PKG)/Library/BoardInitLib/BoardInitPreMemLib.inf
+ }
+ $(PLATFORM_PKG)/PlatformInit/ReportFv/ReportFvPei.inf
+
+ $(PLATFORM_PKG)/PlatformInit/SiliconPolicyPei/SiliconPolicyPeiPreMem.inf{
+ <LibraryClasses>
+ SiliconWorkaroundLib|WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
+ }
+ $(RP_PKG)/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
+ $(PLATFORM_PKG)/PlatformInit/PlatformInitPei/PlatformInitPostMem.inf {
+ <LibraryClasses>
+ TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLibNull/TestPointCheckLibNull.inf
+ BoardInitLib|$(PLATFORM_PKG)/PlatformInit/Library/BoardInitLibNull/BoardInitLibNull.inf
+ }
+
+!if ($(FSP_MODE) == 0)
+ IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf
+ IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf
+ $(RP_PKG)/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
+!endif
+
+ $(RP_PKG)/BiosInfo/BiosInfo.inf
+
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
+
+ UefiCpuPkg/CpuMpPei/CpuMpPei.inf
+
+ UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf {
+ <LibraryClasses>
+ !if $(PERFORMANCE_ENABLE) == TRUE
+ TimerLib|UefiCpuPkg/Library/SecPeiDxeTimerLibUefiCpu/SecPeiDxeTimerLibUefiCpu.inf
+ !endif
+ }
+
+[Components.X64]
+ !include WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
+
+ $(RP_PKG)/Platform/Dxe/PlatformType/PlatformType.inf
+
+ MinPlatformPkg/Test/TestPointDumpApp/TestPointDumpApp.inf
+
+ MdeModulePkg/Universal/SectionExtractionDxe/SectionExtractionDxe.inf
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
+ MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
+
+ MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
+
+ ShellPkg/Application/Shell/Shell.inf {
+ <LibraryClasses>
+ ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
+ NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
+ NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
+ NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
+ NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
+ NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
+ NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
+ NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
+ HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
+ PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
+ BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
+ IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
+
+ <PcdsFixedAtBuild>
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF
+ gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE
+ gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
+ }
+
+ $(RP_PKG)/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
+ UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+
+ $(RP_PKG)/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
+ $(PLATFORM_PKG)/Flash/SpiFvbService/SpiFvbServiceSmm.inf
+
+ $(RP_PKG)/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
+
+ $(PLATFORM_PKG)/Acpi/AcpiTables/AcpiPlatform.inf {
+ <LibraryClasses>
+ BoardAcpiTableLib|$(RP_PKG)/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
+ }
+
+ $(PLATFORM_PKG)/Acpi/AcpiSmm/AcpiSmm.inf {
+ <LibraryClasses>
+ BoardAcpiEnableLib|$(RP_PKG)/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
+ }
+
+ $(PLATFORM_PKG)/PlatformInit/PlatformInitDxe/PlatformInitDxe.inf {
+ <LibraryClasses>
+ BoardInitLib|$(RP_PKG)/Library/BoardInitLib/BoardInitDxeLib.inf
+ }
+ $(RP_PKG)/Platform/Dxe/S3NvramSave/S3NvramSave.inf {
+!if ($(FSP_MODE) == 0)
+ <BuildOptions>
+ *_*_*_CC_FLAGS = -D FSP_API_MODE
+!endif
+ }
+
+ $(PLATFORM_PKG)/FspWrapper/SaveMemoryConfig/SaveMemoryConfig.inf
+
+ $(PLATFORM_SI_BIN_PACKAGE)/CpxMicrocode/MicrocodeUpdates.inf
+ $(PLATFORM_SI_BIN_PACKAGE)/IcxMicrocode/MicrocodeUpdates.inf
+
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+ MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
+ BoardModulePkg/LegacySioDxe/LegacySioDxe.inf
+ BoardModulePkg/BoardBdsHookDxe/BoardBdsHookDxe.inf
+
+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
+
+ MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatformDriOverrideDxe.inf
+
+ MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
+ MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurementDxe.inf
+ MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
+ MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
+
+ #
+ # SiliconPkg code for Platform Integration are defined here
+ #
+!if $(CPUTARGET) == "CPX"
+ DEFINE CPU_CPX_SUPPORT = TRUE
+!else
+ DEFINE CPU_CPX_SUPPORT = FALSE
+!endif
+[PcdsFixedAtBuild]
+!if ($(CPU_SKX_ONLY_SUPPORT) == TRUE)
+ gSiPkgTokenSpaceGuid.PcdPostedCsrAccessSupported |FALSE
+!endif
+[LibraryClasses.common.DXE_DRIVER, LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION]
+ ResetSystemLib|MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
+[LibraryClasses.common.DXE_RUNTIME_DRIVER]
+ ResetSystemLib|MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib.inf
+
+
+###################################################################################################
+#
+# BuildOptions Section - Define the module specific tool chain flags that should be used as
+# the default flags for a module. These flags are appended to any
+# standard flags that are defined by the build process. They can be
+# applied for any modules or only those modules with the specific
+# module style (EDK or EDKII) specified in [Components] section.
+#
+###################################################################################################
+[BuildOptions.Common.EDKII]
+# Append build options for EDK and EDKII drivers (= is Append, == is Replace)
+!if $(CRB_FLAG_ENABLE) == TRUE
+ DEFINE CRB_EDKII_BUILD_OPTIONS = -D CRB_FLAG
+!else
+ DEFINE CRB_EDKII_BUILD_OPTIONS =
+!endif
+
+!if $(DEBUG_FLAGS_ENABLE) == TRUE
+ DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D DEBUG_CODE_BLOCK=1 -D PLATFORM_VARIABLE_ATTRIBUTES=0x3
+!else
+ DEFINE EDKII_DEBUG_BUILD_OPTIONS = -D SILENT_MODE -D PLATFORM_VARIABLE_ATTRIBUTES=0x3
+!endif
+
+!if $(SPARING_SCRATCHPAD_ENABLE) == TRUE
+ DEFINE SPARING_SCRATCHPAD_OPTION = -D SPARING_SCRATCHPAD_SUPPORT
+!else
+ DEFINE SPARING_SCRATCHPAD_OPTIONS =
+!endif
+
+!if $(SCRATCHPAD_DEBUG) == TRUE
+ DEFINE SCRATCHPAD_DEBUG_OPTION = -D SCRATCHPAD_DEBUG
+!else
+ DEFINE SCRATCHPAD_DEBUG_OPTION =
+!endif
+
+!if $(PCH_SERVER_BIOS_ENABLE) == TRUE
+ DEFINE PCH_BUILD_OPTION = -DPCH_SERVER_BIOS_FLAG=1
+!else
+ DEFINE PCH_BUILD_OPTION =
+!endif
+
+!if $(SERVER_BIOS_ENABLE) == TRUE
+ DEFINE SERVER_BUILD_OPTION = -DSERVER_BIOS_FLAG=1
+!else
+ DEFINE SERVER_BUILD_OPTION =
+!endif
+
+DEFINE SC_PATH = -D SC_PATH="Pch/SouthClusterLbg"
+
+DEFINE ME_PATH = -D ME_PATH="Me/MeSps.4"
+
+DEFINE IE_PATH = -D IE_PATH="Ie/v1"
+
+DEFINE NVDIMM_OPTIONS =
+
+!if $(CPUTARGET) == "ICX"
+ DEFINE CPU_TYPE_OPTIONS = -D ICX_HOST -D A0_HOST -D B0_HOST
+!elseif $(CPUTARGET) == "CPX"
+ DEFINE CPU_TYPE_OPTIONS = -D SKX_HOST -D CLX_HOST -D CPX_HOST -D A0_HOST -D B0_HOST
+!endif
+
+DEFINE MAX_SOCKET_CORE_THREAD_OPTIONS = -D MAX_SOCKET=$(MAX_SOCKET) -D MAX_CORE=$(MAX_CORE) -D MAX_THREAD=$(MAX_THREAD)
+
+DEFINE MRC_OPTIONS = -D LRDIMM_SUPPORT -D DDRT_SUPPORT
+
+!if $(CPU_SKX_ONLY_SUPPORT) == FALSE
+ DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=4 -D MAX_MC_CH=2
+!else
+ DEFINE MAX_IMC_CH_OPTIONS = -D MAX_IMC=2 -D MAX_MC_CH=3
+!endif
+
+DEFINE MAX_SAD_RULE_OPTION = -D MAX_SAD_RULES=24 -D MAX_DRAM_CLUSTERS=1
+
+DEFINE LT_BUILD_OPTIONS = -D LT_FLAG
+
+DEFINE FSP_BUILD_OPTIONS = -D FSP_DISPATCH_MODE_ENABLE=1
+
+#
+# MAX_KTI_PORTS needs to be updated based on the silicon type
+#
+!if $(CPUTARGET) == "CPX"
+ DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=6
+!else
+ DEFINE KTI_OPTIONS = -D MAX_KTI_PORTS=3
+!endif
+
+DEFINE IIO_STACK_OPTIONS = -D MAX_IIO_STACK=6 -D MAX_LOGIC_IIO_STACK=8
+
+DEFINE PCH_BIOS_BUILD_OPTIONS = $(PCH_BUILD_OPTION) $(SC_PATH) $(SERVER_BUILD_OPTION)
+
+DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(CRB_EDKII_BUILD_OPTIONS) $(EDKII_DEBUG_BUILD_OPTIONS) $(PCH_BIOS_BUILD_OPTIONS) $(PCH_PKG_OPTIONS) $(MAX_SOCKET_CORE_THREAD_OPTIONS) $(MAX_IMC_CH_OPTIONS) $(MAX_SAD_RULE_OPTION) $(KTI_OPTIONS) $(IIO_STACK_OPTIONS) $(LT_BUILD_OPTIONS) $(SECURITY_OPTIONS) $(SPARING_SCRATCHPAD_OPTION) $(SCRATCHPAD_DEBUG_OPTION) $(NVDIMM_OPTIONS) -D EFI_PCI_IOV_SUPPORT -D WHEA_SUPPORT $(CPU_TYPE_OPTIONS) -D MMCFG_BASE_ADDRESS=0x80000000 -D DISABLE_NEW_DEPRECATED_INTERFACES $(MRC_OPTIONS) $(FSP_BUILD_OPTIONS)
+
+DEFINE IE_OPTIONS = $(IE_PATH) -DIE_SUPPORT=0
+
+!if $(LINUX_GCC_BUILD) == TRUE
+ DEFINE EDK2_LINUX_BUILD_OPTIONS = -D EDK2_CTE_BUILD
+!else
+ DEFINE EDK2_LINUX_BUILD_OPTIONS =
+!endif
+
+DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(EDK2_LINUX_BUILD_OPTIONS) $(IE_OPTIONS)
+
+DEFINE ME_OPTIONS = -DSPS_VERSION=4 $(ME_PATH)
+
+DEFINE ASPEED_ENABLE_BUILD_OPTIONS = -D ASPEED_ENABLE -D ESPI_ENABLE
+
+DEFINE EDKII_DSC_FEATURE_BUILD_OPTIONS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS) $(ME_OPTIONS) $(ASPEED_ENABLE_BUILD_OPTIONS)
+
+ MSFT:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS) /wd4819
+ GCC:*_*_*_CC_FLAGS= $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+ *_*_*_VFRPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+ *_*_*_APP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+ *_*_*_PP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+ *_*_*_ASLPP_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+ *_*_*_ASLCC_FLAGS = $(EDKII_DSC_FEATURE_BUILD_OPTIONS)
+
+
+#
+# Enable source level debugging for RELEASE build
+#
+!if $(TARGET) == "RELEASE"
+ DEFINE EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS =
+ DEFINE EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS =
+ DEFINE EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS =
+
+ MSFT:*_*_*_ASM_FLAGS = $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS) /Zi
+ MSFT:*_*_*_CC_FLAGS = $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS) /Z7
+ MSFT:*_*_*_DLINK_FLAGS = $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS) /DEBUG
+ GCC:*_*_*_ASM_FLAGS = $(EDKII_RELEASE_SRCDBG_ASM_BUILD_OPTIONS)
+ GCC:*_*_*_CC_FLAGS = $(EDKII_RELEASE_SRCDBG_CC_BUILD_OPTIONS)
+ GCC:*_*_*_DLINK_FLAGS = $(EDKII_RELEASE_SRCDBG_DLINK_BUILD_OPTIONS)
+!endif
+
+#
+# Override ASL Compiler parameters in tools_def.template.
+#
+ MSFT:*_*_*_ASL_PATH == $(WORKSPACE)/../FDBin/Tools/IaslCompiler/6.3/iasl.exe
+ GCC:*_*_*_ASL_PATH == $(WORKSPACE)/../FDBin/Tools/IaslCompiler/6.3/iasl
+ *_*_*_ASL_FLAGS == -vr -we -oi
+#
+# Override the VFR compile flags to speed the build time
+#
+
+*_*_*_VFR_FLAGS == -n
+
+#
+# add to the build options for DXE/SMM drivers to remove the log message:
+# !!!!!!!! InsertImageRecord - Section Alignment(0x20) is not 4K !!!!!!!!
+#
+[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER, BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
+ MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
+
+[BuildOptions]
+ GCC:*_GCC5_*_CC_FLAGS = -Wno-overflow -Wno-discarded-qualifiers -Wno-unused-variable -Wno-unused-but-set-variable -Wno-incompatible-pointer-types -mabi=ms
+ GCC:*_GCC5_IA32_DLINK_FLAGS = -z common-page-size=0x20 -z muldefs
+ GCC:*_GCC5_X64_DLINK_FLAGS = -z common-page-size=0x20 -z muldefs
+ MSFT:*_*_*_CC_FLAGS = /FAsc
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
new file mode 100644
index 0000000000..927db9e210
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
@@ -0,0 +1,827 @@
+## @file
+# FDF file of platform with 64-bit DXE
+# This package provides platform specific modules and flash layout information.
+#
+# @copyright
+# Copyright 2006 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+DEFINE PLATFORM_PKG = MinPlatformPkg
+
+# 0x00000060 = (EFI_FIRMWARE_VOLUME_HEADER. HeaderLength + sizeof (EFI_FFS_FILE_HEADER))
+DEFINE FDF_FIRMWARE_HEADER_SIZE = 0x00000060
+
+DEFINE MICROCODE_HEADER_SIZE = 0x00000090
+
+DEFINE VPD_HEADER_SIZE = 0x00000090
+
+!if $(FSP_MODE) == 0
+ DEFINE FSP_BIN_DIR = Api
+!else
+ DEFINE FSP_BIN_DIR = Dispatch
+!endif
+
+#
+# Note: FlashNv PCD naming conventions are as follows:
+# Note: This should be 100% true of all PCD's in the gCpPlatFlashTokenSpaceGuid space, and for
+# Others should be examined with an effort to work toward this guideline.
+# PcdFlash*Base is an address, usually in the range of 0xf* of FD's, note change in FDF spec
+# PcdFlash*Size is a hex count of the length of the FD or FV
+# All Fv will have the form 'PcdFlashFv', and all Fd will have the form 'PcdFlashFd'
+#
+# Also all values will have a PCD assigned so that they can be used in the system, and
+# the FlashMap edit tool can be used to change the values here, without effecting the code.
+# This requires all code to only use the PCD tokens to recover the values.
+
+
+#
+# 16MiB Total FLASH Image (visible in memory mapped IO)
+#
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress = 0xFF000000
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize = 0x01000000
+
+################################################################################
+#
+# FD SECPEI
+#
+# Contains all the SEC and PEI modules
+#
+# Layout: (Low address to high address)
+#
+# FvBsp for board specific components
+# FvPostMemory for compressed post memory MinPlatform spec required components
+# FvFspS for compressed post memory silicon initialization components
+# FvPostMemorySilicon for silicon components
+# FvFspM for pre memory silicon initialization components
+# FvPreMemorySilicon for silicon components
+# FvFspT for temp RAM silicon initilization components
+# FvBspPreMemory for board specific components required to intialize memory
+# FvAdvancedPreMemory FV for advanced features components
+# FvPreMemory for components required by MinPlatform spec and to initialize memory
+# FvPreMemorySecurity FV for stage 6 required components
+# Contains reset vector
+#
+################################################################################
+
+[FD.SecPei]
+ BaseAddress = 0xFFCA0000 |gCpPlatFlashTokenSpaceGuid.PcdFlashFdSecPeiBase #The base address of the FLASH Device
+ Size = 0x00360000 |gCpPlatFlashTokenSpaceGuid.PcdFlashFdSecPeiSize #The size in bytes of the FLASH Device
+ ErasePolarity = 1
+ BlockSize = 0x1000
+ NumBlocks = 0x360
+
+ #
+ # These must add up to the FD Size.
+ # This makes it easy to adjust the various sizes without having to manually calculate the offsets.
+ # At this time, the FSP FV must be aligned at the same address they were built to, 0xFFD00000
+ # This will be corrected in the future.
+ #
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize = 0x00010000 # BaseAddress + PcdFlashFvBspSize + PcdFlashFvPostMemorySize must = 0xFFD00000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize = 0x00010000 # BaseAddress + PcdFlashFvBspSize + PcdFlashFvPostMemorySize must = 0xFFD00000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize = 0x00040000 # Size must match WhitleyFspPkg.fdf content
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize = 0x00221000 # Size must match WhitleyFspPkg.fdf content
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize = 0x00006000 # Size must match WhitleyFspPkg.fdf content
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize = 0x00001000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize = gCpPlatFlashTokenSpaceGuid.PcdFlashFdSecPeiSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize
+
+ #
+ # Calculate Offsets Once (Do not modify)
+ # This layout is specified by the EDK II Minimum Platform Archicture specification.
+ # Each offset is the prior region's offset plus the prior region's size.
+ #
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspOffset = 0x00000000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize
+
+ #
+ # FV Layout (Do not modify)
+ # This layout is specified by the EDK II Minimum Platform Archicture specification.
+ #
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize
+ FV = FvBsp
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize
+ FV = FvPostMemory
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize
+ FILE = $(FSP_BIN_PKG)/Fsp_Rebased_S.fd
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize
+ FILE = $(FSP_BIN_PKG)/Fsp_Rebased_M.fd
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize
+ FILE = $(FSP_BIN_PKG)/Fsp_Rebased_T.fd
+
+ #
+ # Shared FV layout
+ #
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize
+ FV = FvBspPreMemory
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize
+ FV = FvPreMemory
+
+ #
+ # Calculate base addresses (Do not modify)
+ # This layout is specified by the EDK II Minimum Platform Archicture specification.
+ # Each base is the prior region's base plus the prior region's size.
+ #
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFdSecPeiBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspOffset
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemoryBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvBspPreMemorySize
+
+ #
+ # Set duplicate PCD
+ # These should not need to be changed
+ #
+
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvMrcNormalBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvMrcNormalSize = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMSize
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvSecPeiBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryBase
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvSecPeiSize = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize
+
+ #
+ # For FSP Dispatch Mode, specify the FV containing the PEI core.
+ #
+ !if $(FSP_MODE) == 1
+ #
+ # Tell SEC to use PEI Core from outside FSP for additional debug message control.
+ #
+ SET gSiPkgTokenSpaceGuid.PcdPeiCoreFv = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryBase
+ !endif
+
+ #
+ # For API mode, wrappers have some duplicate PCD as well
+ #
+ !if $(FSP_MODE) == 0
+ SET gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase
+ SET gIntelFsp2WrapperTokenSpaceGuid.PcdFsptBaseAddress = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspTBase
+ SET gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase
+ !endif
+
+################################################################################
+#
+# FD Main
+#
+# All DXE modules and other regions
+#
+# Layout: (Low address to high address)
+#
+# FvAdvanced for advanced feature components
+# Assorted advanced feature FV
+# FvSecurity for MinPlatform spec required components needed to boot securely
+# FvOsBoot for MinPlatform spec required components needed to boot OS
+# FvLateSilicon for silicon specific components
+# FvUefiBoot for MinPlatform spec required components needed to boot to UEFI shell
+#
+################################################################################
+[FD.Main]
+ BaseAddress = 0xFF2E0000 | gCpPlatFlashTokenSpaceGuid.PcdFlashFdMainBase # The base address of the FLASH Device
+ Size = 0x009C0000 | gCpPlatFlashTokenSpaceGuid.PcdFlashFdMainSize # The size in bytes of the FLASH Device
+ ErasePolarity = 1
+ BlockSize = 0x1000
+ NumBlocks = 0x9C0
+
+ #
+ # These must add up to the FD Size.
+ # This makes it easy to adjust the various sizes without having to manually calculate the offsets.
+ # These are out of flash layout order because FvAdvanced gets any remaining space
+ #
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize = 0x00010000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize = 0x00230000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize = 0x0004C000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize = gCpPlatFlashTokenSpaceGuid.PcdFlashFdMainSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
+
+ #
+ # Calculate Offsets Once (Do not modify)
+ # This layout is specified by the EDK II Minimum Platform Archicture specification.
+ # Each offset is the prior region's offset plus the prior region's size.
+ #
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset = 0x00000000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize
+
+ #
+ # FV Layout (Do not modify)
+ # This layout is specified by the EDK II Minimum Platform Archicture specification.
+ #
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize
+ FV = FvAdvanced
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
+ FV = FvSecurity
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize
+ FV = FvOsBoot
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize
+ FV = FvUefiBoot
+
+ #
+ # Calculate base addresses (Do not modify)
+ # This layout is specified by the EDK II Minimum Platform Archicture specification.
+ # Each base is the prior region's base plus the prior region's size.
+ #
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFdMainBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootBase = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize
+
+################################################################################
+#
+# FD BINARY
+#
+# Contains the OPROM and other binary modules
+#
+# Layout: (Low address to high address)
+#
+# FvOpRom containing pre-built components
+# FvAcmRegion containing ACM related content
+# FV Header + Blank Space (1K)
+# Policy block (3K)
+# Blank space to align ACM on 64K boundary (60K)
+# ACM binary
+# FvMicrocode containing microcode update patches
+# Unformatted region for PCI Gen 3 Data
+# FvVpd containing PCD VPD data
+# FvWhea for WHEA data recording
+# FvNvStorageVariable for UEFI Variable storage
+# FvNvStorageEventLog for NV Store management
+# FvNvStorageFtwWorking for Fault Tolerant Write solution
+# FvNvStorageFtwSpare for Fault Tolerant Write solution
+#
+################################################################################
+[FD.Binary]
+ BaseAddress = 0xFF000000 |gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinaryBase
+ Size = 0x002E0000 |gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinarySize
+ ErasePolarity = 1
+ BlockSize = 0x1000
+ NumBlocks = 0x2E0
+
+ #
+ # These must add up to the FD Size.
+ # This makes it easy to adjust the various sizes without having to manually calculate the offsets.
+ #
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize = 0x00100000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionSize = 0x00050000
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize = 0x000D0000
+ SET gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdSize = 0x00010000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaSize = 0x00030000
+ #
+ # These four items are tightly coupled.
+ # The spare area size must be >= the first three areas.
+ #
+ # There isn't really a benefit to a larger spare area unless the FLASH device
+ # block size is larger than the size specified.
+ #
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = 0x0003C000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogSize = 0x00002000
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize = 0x00002000
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize = gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize + gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogSize +gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
+
+ #
+ # Calculate Offsets Once (You should not need to modify this section)
+ # Each offset is the prior region's offset plus the prior region's size.
+ #
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromOffset = 0x00000000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionOffset = gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromOffset + gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeOffset = gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionOffset + gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionSize
+ SET gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaOffset = gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdOffset + gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset = gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaOffset + gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaSize
+ SET gPlatformModuleTokenSpaceGuid.PcdFlashFvNvStorageEventLogOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingOffset = gPlatformModuleTokenSpaceGuid.PcdFlashFvNvStorageEventLogOffset + gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingOffset + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
+
+ #
+ # Set gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress dynamically
+ #
+ SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinaryBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeOffset + $(MICROCODE_HEADER_SIZE)
+
+ #
+ # FV Layout (You should not need to modify this section)
+ #
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromOffset|gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize
+ FV = FvOprom
+
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionOffset|gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionSize
+ FV = FvAcm
+
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize
+ FV = FvMicrocode
+
+ gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdOffset|gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdSize
+ FV = FvVPD
+
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaOffset|gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaSize
+ FV = FvWhea
+
+ #
+ # Do not modify.
+ # See comments in size discussion above. These four areas are tightly coupled and should be modified with utmost care.
+ #
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
+ !include WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
+ gPlatformModuleTokenSpaceGuid.PcdFlashFvNvStorageEventLogOffset|gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogSize
+ DATA = { 0xFF } # Hack to ensure build doesn't treat the next PCD as Base/Size to be written
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingOffset|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
+ gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareOffset|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
+ DATA = { 0xFF } # Hack to ensure build doesn't treat the next PCD as Base/Size to be written
+
+ #
+ # Calculate base addresses (You should not need to modify this section)
+ # Each base is the prior region's base plus the prior region's size.
+ #
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinaryBase + gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromOffset
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromBase + gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize
+ SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionBase + gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionSize
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize + $(VPD_HEADER_SIZE)
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaBase = gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress + gPlatformModuleTokenSpaceGuid.PcdFlashFvVpdSize - $(VPD_HEADER_SIZE)
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaBase + gCpPlatFlashTokenSpaceGuid.PcdFlashFvWheaSize
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogBase = gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogBase + gCpPlatFlashTokenSpaceGuid.PcdFlashFvNvStorageEventLogSize
+ SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase = gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
+
+ #
+ # ACM details
+ #
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvPeiPolicyBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionBase + 0x1000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvPeiPolicySize = 0x3000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionBase + 0x10000
+ SET gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmSize = 0x00040000
+
+ #
+ # Other duplicate PCD
+ #
+ SET gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocodeBase = gCpPlatFlashTokenSpaceGuid.PcdFlashFvBinaryBase + gCpPlatFlashTokenSpaceGuid.PcdFlashFvAcmRegionSize + gCpPlatFlashTokenSpaceGuid.PcdFlashFvOpromSize
+ SET gCpuUncoreTokenSpaceGuid.PcdFlashNvStorageMicrocodeSize = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize
+
+################################################################################
+#
+# FD FPGA
+#
+# Contains the FPGA modules
+#
+################################################################################
+
+[FD.Fpga]
+ BaseAddress = 0xFD000000 |gCpPlatFlashTokenSpaceGuid.PcdFlashFdFpgaBase #The base address of the FPGA Device ( 4G - 48M )
+ Size = 0x02000000 |gCpPlatFlashTokenSpaceGuid.PcdFlashFdFpgaSize #The size in bytes of the FPGA Device ( 32M )
+ ErasePolarity = 1
+ BlockSize = 0x1000
+ NumBlocks = 0x2000
+
+ 0x00000000|0x02000000
+ gCpPlatFlashTokenSpaceGuid.PcdFlashFvFpgaBbsBase | gCpPlatFlashTokenSpaceGuid.PcdFlashFvFpgaBbsSize
+ FV = FvFpga
+
+################################################################################
+#
+# FV Section
+#
+# [FV] section is used to define what components or modules are placed within a flash
+# device file. This section also defines order the components and modules are positioned
+# within the image. The [FV] section consists of define statements, set statements and
+# module statements.
+#
+################################################################################
+
+[FV.FvSecurityPreMemory]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 40ab290f-8494-41cf-b302-31b178b4ce0b
+
+[FV.FvPreMemory]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 6522280D-28F9-4131-ADC4-F40EBFA45864
+
+ FILE SEC = 1BA0062E-C779-4582-8566-336AE8F78F09 {
+ SECTION UI = "SecCore"
+ SECTION VERSION = "1.0"
+ SECTION Align = 16 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/1BA0062E-C779-4582-8566-336AE8F78F09SecCore.efi
+ SECTION Align = 16 RAW = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/ResetVec.bin
+ }
+ INF MdeModulePkg/Core/Pei/PeiMain.inf
+
+ INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
+ INF WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
+ INF WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
+
+ INF UefiCpuPkg/CpuIoPei/CpuIoPei.inf
+
+ INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
+ INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
+
+ INF WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
+
+ FILE PEIM = 0043A734-CB11-4274-B363-E165F958CB5F {
+ SECTION PEI_DEPEX = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/0043A734-CB11-4274-B363-E165F958CB5FMultiPch.depex
+ SECTION Align = 32 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/0043A734-CB11-4274-B363-E165F958CB5FMultiPch.efi
+ SECTION UI = "MultiPch"
+ }
+
+ FILE PEIM = ac4b7f1b-e057-47d3-b2b5-1137493c0f38 {
+ SECTION PEI_DEPEX = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/ac4b7f1b-e057-47d3-b2b5-1137493c0f38DynamicSiLibrary.depex
+ SECTION Align = 32 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/ac4b7f1b-e057-47d3-b2b5-1137493c0f38DynamicSiLibrary.efi
+ SECTION UI = "DynamicSiLibraryPei"
+ }
+
+ INF WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
+
+ INF WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
+
+ INF WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
+
+ #
+ # UBA common and board specific components
+ #
+ !include WhitleyOpenBoardPkg/Uba/UbaPei.fdf
+
+ INF MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformInitPreMem.inf
+
+ INF MinPlatformPkg/PlatformInit/ReportFv/ReportFvPei.inf
+
+ FILE PEIM = ca8efb69-d7dc-4e94-aad6-9fb373649161 {
+ SECTION PEI_DEPEX = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/ca8efb69-d7dc-4e94-aad6-9fb373649161SiliconPolicyInitPreAndPostMem.depex
+ SECTION Align = 32 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/ca8efb69-d7dc-4e94-aad6-9fb373649161SiliconPolicyInitPreAndPostMem.efi
+ SECTION UI = "SiliconPolicyInitPreAndPostMem"
+ }
+
+ INF MinPlatformPkg/PlatformInit/SiliconPolicyPei/SiliconPolicyPeiPreMem.inf
+
+ !include WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
+
+ INF WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
+
+ INF UefiCpuPkg/CpuMpPei/CpuMpPei.inf
+
+ !if $(FSP_MODE) == 0
+ FILE PEIM = 8F7F3D20-9823-42DD-9FF7-53DAC93EF407 {
+ SECTION PEI_DEPEX = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/8F7F3D20-9823-42DD-9FF7-53DAC93EF407CsrPseudoOffsetInitPeim.depex
+ SECTION Align = 32 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/8F7F3D20-9823-42DD-9FF7-53DAC93EF407CsrPseudoOffsetInitPeim.efi
+ SECTION UI = "CsrPseudoOffsetInitPeim"
+ }
+ FILE PEIM = 2C6CACC6-6C3C-4AA7-B2DE-384DAE2B0352 {
+ SECTION PEI_DEPEX = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/2C6CACC6-6C3C-4AA7-B2DE-384DAE2B0352RegAccessPeim.depex
+ SECTION Align = 32 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/2C6CACC6-6C3C-4AA7-B2DE-384DAE2B0352RegAccessPeim.efi
+ SECTION UI = "RegAccessPeim"
+ }
+ FILE PEIM = C7D9BAF4-DC9D-4B22-B4E7-7500EAA7B67F {
+ SECTION PEI_DEPEX = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/C7D9BAF4-DC9D-4B22-B4E7-7500EAA7B67FSiliconDataInitPeim.depex
+ SECTION Align = 32 PE32 = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/C7D9BAF4-DC9D-4B22-B4E7-7500EAA7B67FSiliconDataInitPeim.efi
+ SECTION UI = "SiliconDataInitPeim"
+ }
+ INF IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf
+ INF IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf
+ INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
+ INF WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
+ !endif
+
+ FILE FV_IMAGE = 40ab290f-8494-41cf-b302-31b178b4ce0b {
+ SECTION FV_IMAGE = FvSecurityPreMemory
+ }
+
+[FV.FvAdvancedPreMemory]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 09f25d44-b2ef-4225-8b2e-e0e094b51775
+
+[FV.FvBspPreMemory]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = e6c65995-8c2d-4119-a52d-7dbf1acb45a1
+
+ FILE FV_IMAGE = 09f25d44-b2ef-4225-8b2e-e0e094b51775 {
+ SECTION FV_IMAGE = FvAdvancedPreMemory
+ }
+
+#
+# FvPostMemory includes common hardware, common core variable services, load and invoke DXE etc
+#
+[FV.FvPostMemoryUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = B4705B4B-0BE6-4BDB-A83A-51CAD2345CEA
+
+[FV.FvPostMemory]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 3298afc4-c484-47f1-a65a-5917a54b5e8c
+
+ FILE FV_IMAGE = B4705B4B-0BE6-4BDB-A83A-51CAD2345CEA {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvPostMemoryUncompressed
+ }
+ }
+
+#
+# FvBsp includes board specific components
+#
+[FV.FvBspUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = e4c65347-fd90-4143-8a41-113e1015fe07
+
+[FV.FvBsp]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 9e151cf3-ca90-444f-b33b-a9941cbc772f
+
+ FILE FV_IMAGE = e4c65347-fd90-4143-8a41-113e1015fe07 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvBspUncompressed
+ }
+ }
+
+[FV.FvUefiBootUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = C4D3B0E2-FB26-44f8-A05B-E95895FCB960
+
+ INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
+ INF MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
+ INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+ INF MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
+ INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
+
+ INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
+
+ INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
+ INF MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatformDriOverrideDxe.inf
+
+ INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
+ INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
+ INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
+ INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
+ INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
+
+ INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
+ INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
+ INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
+ INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
+ INF MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurementDxe.inf
+ #ATA for IDE/AHCI/RAID support
+ INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
+ INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
+ INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
+ INF BoardModulePkg/BoardBdsHookDxe/BoardBdsHookDxe.inf
+
+[FV.FvUefiBoot]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = ab9fe87b-1e37-440c-91cc-9aea03ce7bec
+
+ FILE FV_IMAGE = C4D3B0E2-FB26-44f8-A05B-E95895FCB960 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvUefiBootUncompressed
+ }
+ }
+
+[FV.FvOsBootUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = CDBB7B35-6833-4ed6-9AB2-57D2ACDDF6F0
+
+ #
+ # DXE Phase modules
+ #
+ INF MdeModulePkg/Core/Dxe/DxeMain.inf
+ INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
+ INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
+ INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
+
+ FILE FV_IMAGE = B7C9F0CB-15D8-26FC-CA3F-C63947B12831 {
+ SECTION UI = "FvLateSilicon"
+ SECTION FV_IMAGE = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/FvLateSilicon.fv
+ }
+
+ INF MdeModulePkg/Universal/SectionExtractionDxe/SectionExtractionDxe.inf
+
+ !include WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
+
+ #
+ # UBA DXE common and board specific components
+ #
+ !include WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
+ !include WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
+ INF WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
+ INF MinPlatformPkg/PlatformInit/PlatformInitDxe/PlatformInitDxe.inf
+
+ !if ($(FSP_MODE) == 1)
+ INF WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
+ !else
+ INF MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryConfig.inf
+ !endif
+
+ INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
+ INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
+ INF WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
+ INF UefiCpuPkg/CpuDxe/CpuDxe.inf
+ INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+
+ FILE FV_IMAGE = a0277d07-a725-4823-90f9-6cba00782111 {
+ SECTION UI = "FvLateOpenBoard"
+ SECTION FV_IMAGE = $(FSP_BIN_PKG)/UefiDrivers/$(FSP_BIN_DIR)/FvLateOpenBoard.fv
+ }
+
+ INF MdeModulePkg/Universal/Metronome/Metronome.inf
+ INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
+ INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
+ INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
+
+ INF WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
+ INF MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformInitPostMem.inf
+
+ INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
+ INF RuleOverride = UI MdeModulePkg/Application/UiApp/UiApp.inf
+ INF MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf
+ INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+ #TPM when TPM enable, SecurityStubDxe needs to be removed from this FV.
+ INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
+
+ INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
+
+ INF FatPkg/EnhancedFatDxe/Fat.inf
+
+ INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+
+ INF WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
+ INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
+
+ INF ShellPkg/Application/Shell/Shell.inf
+
+ INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+
+ INF MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
+ INF MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
+
+ INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
+ INF MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf
+
+ INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
+
+ INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
+ INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
+
+ INF MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf
+
+ INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
+ INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
+ INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
+
+ INF MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf
+
+ INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
+
+ INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
+
+ # UEFI USB stack
+ INF MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
+
+ INF MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+ INF BoardModulePkg/LegacySioDxe/LegacySioDxe.inf
+ INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
+
+ INF MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf
+
+ INF MinPlatformPkg/Acpi/AcpiSmm/AcpiSmm.inf
+
+[FV.FvOsBoot]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = c7488640-5f51-4969-b63b-89fc369e1725
+
+ FILE FV_IMAGE = CDBB7B35-6833-4ed6-9AB2-57D2ACDDF6F0 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvOsBootUncompressed
+ }
+ }
+
+[FV.FvSecuritySilicon]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = AD262F8D-BDED-4668-A8D4-8BC73516652F
+
+[FV.FvSecurityUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 03E25550-89A5-4ee6-AF60-DB0553D91FD2
+
+ FILE FV_IMAGE = 81F80AEA-91EB-4AD9-A563-7CEBAA167B25 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvSecuritySilicon
+ }
+ }
+
+[FV.FvSecurity]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 68134833-2ff6-4d22-973b-575d0eae8ffd
+
+ FILE FV_IMAGE = 03E25550-89A5-4ee6-AF60-DB0553D91FD2 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvSecurityUncompressed
+ }
+ }
+
+[FV.FvAdvancedUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 70aeaf57-4997-49ce-a4f7-122980745670
+
+[FV.FvAdvanced]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = f21ee7a1-53a9-453d-aee3-b6a5c25bada5
+
+ FILE FV_IMAGE = 70aeaf57-4997-49ce-a4f7-122980745670 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvAdvancedUncompressed
+ }
+ }
+
+#
+# FV for all Microcode Updates.
+#
+[FV.FvMicrocode]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ LOCK_STATUS = FALSE
+ FvNameGuid = D2C29BA7-3809-480F-9C3D-DE389C61425A
+
+!if $(CPUTARGET) == "CPX"
+ INF RuleOverride = MICROCODE $(PLATFORM_SI_BIN_PACKAGE)/CpxMicrocode/MicrocodeUpdates.inf
+!else
+ INF RuleOverride = MICROCODE $(PLATFORM_SI_BIN_PACKAGE)/IcxMicrocode/MicrocodeUpdates.inf
+!endif
+
+
+[FV.FvVPD]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ LOCK_STATUS = FALSE
+ FvNameGuid = FFC29BA7-3809-480F-9C3D-DE389C61425A
+ FILE RAW = FF7DB236-F856-4924-90F8-CDF12FB875F3 {
+ $(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/FV/8C3D856A-9BE6-468E-850A-24F7A8D38E08.bin
+ }
+
+#
+# Various Vendor UEFI Drivers (OROMs).
+#
+[FV.FvOpromUncompressed]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = B6EDE22C-DE30-45fa-BB09-CA202C1654B7
+
+[FV.FvOprom]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 983BCAB5-BF10-42ce-B85D-CB805DCB1EFD
+
+ FILE FV_IMAGE = B6EDE22C-DE30-45fa-BB09-CA202C1654B7 {
+ SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+ SECTION FV_IMAGE = FvOpromUncompressed
+ }
+ }
+
+[FV.FvWhea]
+ BlockSize = 0x1000
+ NumBlocks = 0x30
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = d6a1cd70-4b33-4994-a6ea-375f2ccc5437
+
+#
+# FV For ACM Binary.
+#
+[FV.FvAcm]
+ BlockSize = 0x1000
+ NumBlocks = 0x50
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 11668261-8A8D-47ca-9893-052D24435E59
+
+[FV.FvFpga]
+ !include WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
+ FvNameGuid = 974650E7-6DFE-4998-A124-CEDEC5C9B47D
+
+################################################################################
+#
+# Rules are use with the [FV] section's module INF type to define
+# how an FFS file is created for a given INF file. The following Rule are the default
+# rules for the different module type. User can add the customized rules to define the
+# content of the FFS file.
+#
+################################################################################
+
+!include MinPlatformPkg/Include/Fdf/RuleInclude.fdf
+
+[Rule.Common.USER_DEFINED.ACPITABLE]
+ FILE FREEFORM = $(NAMED_GUID) {
+ RAW ACPI Optional |.acpi
+ RAW ASL Optional |.aml
+ }
+
+[Rule.Common.DXE_RUNTIME_DRIVER.DRIVER_ACPITABLE]
+ FILE DRIVER = $(NAMED_GUID) {
+ DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
+ PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
+ RAW ACPI Optional |.acpi
+ RAW ASL Optional |.aml
+ UI STRING="$(MODULE_NAME)" Optional
+ VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
+ }
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
new file mode 100644
index 0000000000..ecfdb895ba
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
@@ -0,0 +1,45 @@
+## @file
+# platform configuration file for DEBUG build.
+#
+# @copyright
+# Copyright 2011 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+#
+# TRUE is ENABLE. FALSE is DISABLE.
+#
+
+DEFINE CRB_FLAG_ENABLE = TRUE
+DEFINE DEBUG_FLAGS_ENABLE = FALSE
+
+DEFINE PERFORMANCE_ENABLE = TRUE
+
+DEFINE SERVER_BIOS_ENABLE = TRUE
+DEFINE PCH_SERVER_BIOS_ENABLE = TRUE
+
+!if $(CPUTARGET) == "CPX"
+ DEFINE CPU_SKX_ONLY_SUPPORT = TRUE
+!else
+ DEFINE CPU_SKX_ONLY_SUPPORT = FALSE
+!endif
+
+!if $(CPUTARGET) == "CPX"
+ DEFINE CPU_CPX_SUPPORT = TRUE
+!else
+ DEFINE CPU_CPX_SUPPORT = FALSE
+!endif
+
+DEFINE RAS_CPU_ONLINE_OFFLINE_ENABLE = FALSE
+
+DEFINE SPARING_SCRATCHPAD_ENABLE = TRUE
+DEFINE SCRATCHPAD_DEBUG = TRUE
+
+DEFINE TPM2_ENABLE = FALSE
+
+DEFINE ME_PATH_CONFIG = Me/MeSps.4
+
+DEFINE SECURE_BOOT_ENABLE = FALSE
+
+DEFINE PLATFORMX64_ENABLE = TRUE
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc b/Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc
new file mode 100644
index 0000000000..e356c917fe
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc
@@ -0,0 +1,8553 @@
+## @file
+# @copyright
+# Copyright 2019 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ VPD_TOOL_GUID = 8C3D856A-9BE6-468E-850A-24F7A8D38E08
+
+[SkuIds]
+ 0|DEFAULT # The entry: 0|DEFAULT is reserved and always required.
+
+[DefaultStores]
+ 0|STANDARD # UEFI Standard default 0|STANDARD is reserved.
+ 1|MANUFACTURING # UEFI Manufacturing default 1|MANUFACTURING is reserved.
+
+[PcdsDynamicExVpd.common.DEFAULT]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdNvStoreDefaultValueBuffer|*
+
+[PcdsDynamicExHii.common.DEFAULT.STANDARD]
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig|L"FpgaSocketConfig"|gFpgaSocketVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdPchSetup|L"PchSetup"|gPchSetupVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSetup|L"Setup"|gEfiSetupVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig|L"SocketCommonRcConfig"|gEfiSocketCommonRcVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig|L"SocketIioConfig"|gEfiSocketIioVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig|L"SocketMemoryConfig"|gEfiSocketMemoryVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig|L"SocketMpLinkConfig"|gEfiSocketMpLinkVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig|L"SocketPowerManagementConfig"|gEfiSocketPowermanagementVarGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig|L"SocketProcessorCoreConfig"|gEfiSocketProcessorCoreVarGuid|0x00||NV, BS, RT
+
+!if $(TARGET) == "DEBUG"
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvl|0x4
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvlTrainResults|0x8
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DebugPrintLevel|0xF
+!else
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvl|0x0
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvlTrainResults|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DebugPrintLevel|0x0
+!endif
+
+gStructPcdTokenSpaceGuid.PcdEmulationDfxConfig.DfxHybridSystemLevelEmulation|0x0 # Hybrid SLE Mode
+gStructPcdTokenSpaceGuid.PcdEmulationDfxConfig.DfxPmMsrTrace|0x0 # MSR Trace for PM
+gStructPcdTokenSpaceGuid.PcdEmulationDfxConfig.DfxUbiosGeneration|0x0 # uBIOS Generation
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaSetupEnabled|0x3 # Sockets Enable Bitmap(Hex)
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaSocketGuid[0]|0x0 # Socket 0 BitStream
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaSocketGuid[1]|0x0 # Socket 1 BitStream
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH1[0]|0x5a # Socket 0 Threshold 1
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH1[1]|0x5a # Socket 1 Threshold 1
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH2[0]|0x5d # Socket 0 Threshold 2
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH2[1]|0x5d # Socket 1 Threshold 2
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.IeDidEnabled|0x1 # DRAM Init Done Enable
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.IeHeci1Enabled|0x0 # HECI-1 Enable
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.IeHeci2Enabled|0x0 # HECI-2 Enable
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.IeHeci3Enabled|0x0 # HECI-3 Enable
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.IeIderEnabled|0x0 # IDER Enable
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.IeKtEnabled|0x0 # KT Enable
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.SubsystemId|0x7270 # Subsystem ID
+gStructPcdTokenSpaceGuid.PcdIeRcConfiguration.SubsystemVendorId|0x8086 # Subsystem Vendor ID
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.AmtCiraRequest|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.AmtCiraTimeout|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.AmtbxHotKeyPressed|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.AmtbxSelectionScreen|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.Amt|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.Asf|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.BiosPause|0x1 # BIOS Pause Before Booting Capability State
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.BiosReflash|0x1 # BIOS Reflash Capability State
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.BiosSetup|0x1 # BIOS Boot to Setup Capability State
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.BreakRtcEnabled|0x0 # Break RTC Configuration
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.CLINKDisableOverride|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.CoreBiosDoneEnabled|0x1 # Core Bios Done Message
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.CpuTypeEmulation|0xa
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.DelayedAuthenticationModeOverride|0x0 # Delayed Authentication Mode (DAM) Override
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.DelayedAuthenticationMode|0x0 # Delayed Authentication Mode (DAM)
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.DidInitStat|0x0 # DRAM Initialization Status
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.DisableD0I3SettingForHeci|0x0 # D0I3 Setting for HECI Disable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.EndOfPostMessage|0x2 # END_OF_POST Message
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.HeciCommunication2|0x2 # HECI-2 Enable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.HeciCommunication3|0x2 # HECI-3 Enable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.HeciCommunication|0x2 # HECI-1 Enable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.FWProgress|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.Frequency[0]|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.Frequency[1]|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.HideUnConfigureMeConfirm|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.HostResetNotification|0x1 # Host Reset Warning
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.HsioMessagingEnabled|0x0 # Enable HSIO Messaging
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.IccClkOverride|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.IccProfile|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.KtDeviceEnable|0x2 # KT Enable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.LocalFwUpdEnabled|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MdesCapability|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeEnableHeciTraces|0x0 # Enable HECI Dump
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeFirmwareMode|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeFwDowngrade|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeGrLockEnabled|0x1 # Global Reset Lock
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeGrPromotionEnabled|0x0 # CF9 global reset promotion
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeHeci1HideInMe|0x0 # HECI-1 Hide in ME
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeHeci2HideInMe|0x0 # HECI-2 Hide in ME
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeHeci3HideInMe|0x0 # HECI-3 Hide in ME
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeHmrfpoEnableEnabled|0x0 # HMRFPO_ENABLE Message
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeHmrfpoLockEnabled|0x1 # HMRFPO_LOCK Message
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeIderEnabled|0x2 # IDEr Enable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeImageType|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MePttEnabled|0x0 # PTT Support
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MePttSupported|0x0 # ME PTT Supported
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MePttSuppressCommandSend|0x0 # Suppress PTT Commands
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeRegionSelectEnabled|0x0 # REGION_SELECT Message
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeStateControl|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeTimeout|0x2 # ME Initialization Complete Timeout
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeType|0xee # ME Firmware Type
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MeWatchdogControlEnabled|0x1 # WATCHDOG_CONTROL Message
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MebxDebugMsg|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MebxGraphicsMode|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MebxNonUiTextMode|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MebxUiTextMode|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.MngState|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmCores2DisableOverride|0x0 # Cores Disable Override
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmCores2Disable|0x0 # Cores To Disable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmHwChangeOverride|0x0 # Hardware Change Override
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmHwChangeStatus|0x0 # Hardware Changed
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmPowerMsmtOverride|0x0 # Power Measurement Override
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmPowerMsmtSupport|0x0 # Power Measurement
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmPtuLoadOverride|0x0 # PTU Load Override
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmPwrOptBootOverride|0x0 # Boot Mode Override
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.NmPwrOptBoot|0x0 # Boot Mode
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.PreDidMeResetEnabled|0x0 # Pre-DramInitDone ME Reset
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.RegLock|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.RemoteSessionActive|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SecureBootExposureToFw|0x1 # BIOS Secure Boot Capability Exposure to FW State
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.Spread[0]|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.Spread[1]|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SendDidMsg|0x1 # DRAM Init Done Enable
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SpsAltitude|0x8000 # Altitude
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SpsMctpBusOwner|0x0 # MCTP Bus Owner
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SpsPsuAddress[0]|0x58 # PSU #1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SpsPsuAddress[1]|0x59 # PSU #2
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SpsPsuAddress[2]|0x0 # PSU #3
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.SpsPsuAddress[3]|0x0 # PSU #4
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.USBProvision|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.UnConfigureMe|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.VproAllowed|0x1
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.WatchDogOs|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.WatchDogTimerBios|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.WatchDogTimerOs|0x0
+gStructPcdTokenSpaceGuid.PcdMeRcConfiguration.WatchDog|0x0
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalRxDqsDelayLeftEdge|0x2 # RxDqsDelay Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalRxDqsDelayRightEdge|0x2 # RxDqsDelay Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalRxVrefLeftEdge|0x2 # RxVref Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalRxVrefRightEdge|0x2 # RxVref Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalTxDqDelayLeftEdge|0x2 # TxDqDelay Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalTxDqDelayRightEdge|0x2 # TxDqDelay Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalTxVrefLeftEdge|0x2 # TxVref Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.CriticalTxVrefRightEdge|0x2 # TxVref Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.MemBootHealthCheck|0x2 # Memory Boot Health Check
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.ResetOnCriticalError|0x1 # Reboot On Critical Failure
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningRxDqsDelayLeftEdge|0x5 # RxDqsDelay Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningRxDqsDelayRightEdge|0x5 # RxDqsDelay Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningRxVrefLeftEdge|0x5 # RxVref Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningRxVrefRightEdge|0x5 # RxVref Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningTxDqDelayLeftEdge|0x5 # TxDqDelay Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningTxDqDelayRightEdge|0x5 # TxDqDelay Right Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningTxVrefLeftEdge|0x5 # TxVref Left Edge
+gStructPcdTokenSpaceGuid.PcdMemBootHealthConfig.WarningTxVrefRightEdge|0x5 # TxVref Right Edge
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrCpuThermalWdt|0x0 # CPU Thermal WDT ADR Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrGpioSel|0x0 # ADR GPIO
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrHostPartitionReset|0x0 # Host Partition Reset ADR Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrMultiplierVal|0x63 # ADR timer multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrOverClockingWdt|0x0 # Over-Clocking WDT ADR Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrPmcParityError|0x0 # PMC Parity Error ADR Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrSysPwrOk|0x0 # SYS_PWROK Failure ADR Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrTimerEn|0x0 # Enable/Disable ADR Timer
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrTimerVal|0x4 # ADR timer expire time
+gStructPcdTokenSpaceGuid.PcdPchSetup.AetEnableMode|0x0 # AET Enable Mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.Btcg|0x1 # Trunk Clock Gating (BTCG)
+gStructPcdTokenSpaceGuid.PcdPchSetup.DciEn|0x0 # DCI enable (HDCIEN)
+gStructPcdTokenSpaceGuid.PcdPchSetup.DeepSxMode|0x0 # DeepSx Power Policies
+gStructPcdTokenSpaceGuid.PcdPchSetup.DfxHdaVcType|0x0 # Virtual Channel for HD Audio
+gStructPcdTokenSpaceGuid.PcdPchSetup.DmiLinkDownHangBypass|0x0 # DMI Link Down Hang Bypass (DLDHB)
+gStructPcdTokenSpaceGuid.PcdPchSetup.DwrEn_IEWDT|0x0 # IE FW Watchdog Timer
+gStructPcdTokenSpaceGuid.PcdPchSetup.DwrEn_MEWDT|0x0 # ME FW Watchdog Timer
+gStructPcdTokenSpaceGuid.PcdPchSetup.DwrEn_PMCGBL|0x1 # Host Reset Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_BmcRootPort|0x5 # BMC RootPort
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_Enable|0x0 # Dirty Warm Reset
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_IeResetPrepDone|0x1 # IE Reset Prep Done
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_MeResetPrepDone|0x1 # ME Reset Prep Done
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_Stall|0x0 # Dirty Warm Reset Stall
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableClockSpreadSpec|0x1 # External SSC Enable - CK420
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[0]|0x0 # USB 3.0 pin #1
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[1]|0x0 # USB 3.0 pin #2
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[2]|0x0 # USB 3.0 pin #3
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[3]|0x0 # USB 3.0 pin #4
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[4]|0x0 # USB 3.0 pin #5
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[5]|0x0 # USB 3.0 pin #6
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[6]|0x0 # USB 3.0 pin #7
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[7]|0x0 # USB 3.0 pin #8
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[8]|0x0 # USB 3.0 pin #9
+gStructPcdTokenSpaceGuid.PcdPchSetup.EnableUsb3Pin[9]|0x0 # USB 3.0 pin #10
+gStructPcdTokenSpaceGuid.PcdPchSetup.FirmwareConfiguration|0x0 # Firmware Configuration
+gStructPcdTokenSpaceGuid.PcdPchSetup.FlashLockDown|0x0 # Flash Lock-Down
+gStructPcdTokenSpaceGuid.PcdPchSetup.GbeRegionInvalid|0x0 # Gbe Region Valid
+gStructPcdTokenSpaceGuid.PcdPchSetup.Gp27WakeFromDeepSx|0x0 # GP27 Wake From DeepSx
+gStructPcdTokenSpaceGuid.PcdPchSetup.IchPort80Route|0x0 # Port 80h Redirection
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchAdrEn|0x0 # Enable/Disable ADR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchAllUnLock|0x0 # Unlock All PCH registers
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchBiosLock|0x1 # BIOS Lock
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchCrossThrottling|0x1 # PCH Cross Throttling
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchDciAutoDetect|0x0 # DCI Auto Detect Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchEvaLockDown|0x1 # EVA registers LOCK
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchEvaMrom0HookEnable|0x1 # MROM 0 Hook
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchEvaMrom1HookEnable|0x1 # MROM 1 Hook
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchGpioLockDown|0x1 # GPIO Lockdown
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchHdAudio|0x1 # Azalia
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchHdAudioCodecSelect|0x0 # HDA-Link Codec Select
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchHdAudioPme|0x0 # Azalia PME Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchIoApic24119Entries|0x1 # IO-APIC 24-119 RTE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchLanK1Off|0x0 # K1 off
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchP2sbDevReveal|0x0 # Reveal PCH P2SB device
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchP2sbUnlock|0x0 # Unlock PCH P2SB
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[0]|0x0 # Force LTR Override PCIE1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[1]|0x0 # Force LTR Override PCIE2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[2]|0x0 # Force LTR Override PCIE3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[3]|0x0 # Force LTR Override PCIE4
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[4]|0x0 # Force LTR Override PCIE5
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[5]|0x0 # Force LTR Override PCIE6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[6]|0x0 # Force LTR Override PCIE7
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[7]|0x0 # Force LTR Override PCIE8
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[8]|0x0 # Force LTR Override PCIE9
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[9]|0x0 # Force LTR Override PCIE10
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[10]|0x0 # Force LTR Override PCIE11
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[11]|0x0 # Force LTR Override PCIE12
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[12]|0x0 # Force LTR Override PCIE13
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[13]|0x0 # Force LTR Override PCIE14
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[14]|0x0 # Force LTR Override PCIE15
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[15]|0x0 # Force LTR Override PCIE16
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[16]|0x0 # Force LTR Override PCIE17
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[17]|0x0 # Force LTR Override PCIE18
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[18]|0x0 # Force LTR Override PCIE19
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieForceLtrOverride[19]|0x0 # Force LTR Override PCIE20
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieGlobalAspm|0x2 # PCI-E ASPM Support (Global)
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[0]|0x1 # PCH PCIE1 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[1]|0x1 # PCH PCIE2 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[2]|0x1 # PCH PCIE3 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[3]|0x1 # PCH PCIE4 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[4]|0x1 # PCH PCIE5 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[5]|0x1 # PCH PCIE6 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[6]|0x1 # PCH PCIE7 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[7]|0x1 # PCH PCIE8 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[8]|0x1 # PCH PCIE9 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[9]|0x1 # PCH PCIE10 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[10]|0x1 # PCH PCIE11 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[11]|0x1 # PCH PCIE12 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[12]|0x1 # PCH PCIE13 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[13]|0x1 # PCH PCIE14 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[14]|0x1 # PCH PCIE15 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[15]|0x1 # PCH PCIE16 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[16]|0x1 # PCH PCIE17 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[17]|0x1 # PCH PCIE18 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[18]|0x1 # PCH PCIE19 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[19]|0x1 # PCH PCIE20 LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[0]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[1]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[2]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[3]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[4]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[5]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[6]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[7]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[8]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[9]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[10]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[11]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[12]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[13]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[14]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[15]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[16]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[17]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[18]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[19]|0x2 # Non Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[0]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[1]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[2]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[3]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[4]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[5]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[6]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[7]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[8]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[9]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[10]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[11]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[12]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[13]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[14]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[15]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[16]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[17]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[18]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[19]|0x2 # Non Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[0]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[1]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[2]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[3]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[4]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[5]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[6]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[7]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[8]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[9]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[10]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[11]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[12]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[13]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[14]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[15]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[16]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[17]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[18]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[19]|0x3c # Non Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[0]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[1]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[2]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[3]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[4]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[5]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[6]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[7]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[8]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[9]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[10]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[11]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[12]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[13]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[14]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[15]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[16]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[17]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[18]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[19]|0x2 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[0]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[1]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[2]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[3]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[4]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[5]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[6]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[7]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[8]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[9]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[10]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[11]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[12]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[13]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[14]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[15]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[16]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[17]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[18]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[19]|0x2 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[0]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[1]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[2]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[3]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[4]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[5]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[6]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[7]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[8]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[9]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[10]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[11]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[12]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[13]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[14]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[15]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[16]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[17]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[18]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[19]|0x3c # Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieUX16CompletionTimeout|0x0 # CTO for Uplink x16
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieUX16MaxPayloadSize|0x2 # MPL for Uplink x16
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieUX8CompletionTimeout|0x0 # CTO for Uplink x8
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieUX8MaxPayloadSize|0x2 # MPL for Uplink x8
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchRtcLock|0x1 # RTC Lock
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataLtrConfigLock|0x1 # sSATA LTR Lock
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataLtrEnable|0x1 # PCH sSATA LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataLtrOverride|0x0 # sSATA LTR Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataSnoopLatencyOverrideMultiplier|0x2 # sSATA Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataSnoopLatencyOverrideValue|0x28 # sSATA Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSata|0x1 # SATA Controller
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataLtrConfigLock|0x1 # SATA LTR Lock
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataLtrEnable|0x1 # PCH SATA LTR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataLtrOverride|0x0 # SATA LTR Override
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataSnoopLatencyOverrideMultiplier|0x2 # SATA Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataSnoopLatencyOverrideValue|0x28 # SATA Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSirqMode|0x0 # Serial IRQ Mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSlpLanLowDc|0x1 # SLP_LAN# Low on DC Power
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchThermalUnlock|0x0 # Unlock Thermal Registers
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchTraceHubHide|0x1 # Hide Trace Hub
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchTraceHubMemReg0Size|0x0 # MemRegion 0 Buffer Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchTraceHubMemReg1Size|0x0 # MemRegion 1 Buffer Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchTraceHubMode|0x2 # TraceHub Enable Mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbDegradeBar|0x0 # Place XHCI BAR below 4GB
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[0]|0x1 # USB HS Physical Connector #0 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[1]|0x1 # USB HS Physical Connector #1 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[2]|0x1 # USB HS Physical Connector #2 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[3]|0x1 # USB HS Physical Connector #3 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[4]|0x1 # USB HS Physical Connector #4 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[5]|0x1 # USB HS Physical Connector #5 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[6]|0x1 # USB HS Physical Connector #6 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[7]|0x1 # USB HS Physical Connector #7 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[8]|0x1 # USB HS Physical Connector #8 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[9]|0x1 # USB HS Physical Connector #9 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[10]|0x1 # USB HS Physical Connector #10 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[11]|0x1 # USB HS Physical Connector #11 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[12]|0x1 # USB HS Physical Connector #12 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[13]|0x1 # USB HS Physical Connector #13 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbManualMode|0x0 # XHCI Manual Mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbPerPortCtl|0x0 # USB Per-Connector Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[0]|0x1 # USB SS Physical Connector #0 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[1]|0x1 # USB SS Physical Connector #1 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[2]|0x1 # USB SS Physical Connector #2 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[3]|0x1 # USB SS Physical Connector #3 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[4]|0x1 # USB SS Physical Connector #4 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[5]|0x1 # USB SS Physical Connector #5 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[6]|0x1 # USB SS Physical Connector #6 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[7]|0x1 # USB SS Physical Connector #7 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[8]|0x1 # USB SS Physical Connector #8 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[9]|0x1 # USB SS Physical Connector #9 Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchWakeOnLan|0x0 # Wake on LAN
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchsSata|0x1 # sSATA Controller
+gStructPcdTokenSpaceGuid.PcdPchSetup.PciDelayOptimizationEcr|0x0 # PCI Delay Optimization
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieComplianceTestMode|0x0 # Compliance Test Mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieDmiExtSync|0x0 # DMI Link Extended Synch Control
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieDmiStopAndScreamEnable|0x0 # Stop and Scream
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[0]|0x6 # PCIE1 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[1]|0x6 # PCIE2 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[2]|0x6 # PCIE3 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[3]|0x6 # PCIE4 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[4]|0x6 # PCIE5 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[5]|0x6 # PCIE6 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[6]|0x6 # PCIE7 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[7]|0x6 # PCIE8 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[8]|0x6 # PCIE9 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[9]|0x6 # PCIE10 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[10]|0x6 # PCIE11 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[11]|0x6 # PCIE12 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[12]|0x6 # PCIE13 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[13]|0x6 # PCIE14 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[14]|0x6 # PCIE15 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[15]|0x6 # PCIE16 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[16]|0x6 # PCIE17 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[17]|0x6 # PCIE18 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[18]|0x6 # PCIE19 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[19]|0x6 # PCIE20 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[0]|0x6 # PCIE1 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[1]|0x6 # PCIE2 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[2]|0x6 # PCIE3 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[3]|0x6 # PCIE4 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[4]|0x6 # PCIE5 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[5]|0x6 # PCIE6 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[6]|0x6 # PCIE7 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[7]|0x6 # PCIE8 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[8]|0x6 # PCIE9 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[9]|0x6 # PCIE10 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[10]|0x6 # PCIE11 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[11]|0x6 # PCIE12 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[12]|0x6 # PCIE13 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[13]|0x6 # PCIE14 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[14]|0x6 # PCIE15 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[15]|0x6 # PCIE16 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[16]|0x6 # PCIE17 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[17]|0x6 # PCIE18 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[18]|0x6 # PCIE19 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[19]|0x6 # PCIE20 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PciePllSsc|0xfe # Pcie Pll SSC
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[0]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[1]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[2]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[3]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[4]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[5]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[6]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[7]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[8]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[9]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[10]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[11]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[12]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[13]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[14]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[15]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[16]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[17]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[18]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[19]|0x1 # ACS
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[0]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[1]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[2]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[3]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[4]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[5]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[6]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[7]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[8]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[9]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[10]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[11]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[12]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[13]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[14]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[15]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[16]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[17]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[18]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[19]|0x1 # Advanced Error Reporting
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[0]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[1]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[2]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[3]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[4]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[5]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[6]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[7]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[8]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[9]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[10]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[11]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[12]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[13]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[14]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[15]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[16]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[17]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[18]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAspm[19]|0x0 # PCIE ASPM
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[0]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[1]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[2]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[3]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[4]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[5]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[6]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[7]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[8]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[9]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[10]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[11]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[12]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[13]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[14]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[15]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[16]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[17]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[18]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCEE[19]|0x0 # CER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[0]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[1]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[2]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[3]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[4]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[5]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[6]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[7]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[8]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[9]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[10]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[11]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[12]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[13]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[14]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[15]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[16]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[17]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[18]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortCompletionTimeout[19]|0x0 # Compl. Timeout
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[0]|0x1 # PCI Express Root Port 1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[1]|0x1 # PCI Express Root Port 2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[2]|0x1 # PCI Express Root Port 3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[3]|0x1 # PCI Express Root Port 4
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[4]|0x1 # PCI Express Root Port 5
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[5]|0x1 # PCI Express Root Port 6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[6]|0x1 # PCI Express Root Port 7
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[7]|0x1 # PCI Express Root Port 8
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[8]|0x1 # PCI Express Root Port 9
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[9]|0x1 # PCI Express Root Port 10
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[10]|0x1 # PCI Express Root Port 11
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[11]|0x1 # PCI Express Root Port 12
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[12]|0x1 # PCI Express Root Port 13
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[13]|0x1 # PCI Express Root Port 14
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[14]|0x1 # PCI Express Root Port 15
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[15]|0x1 # PCI Express Root Port 16
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[16]|0x1 # PCI Express Root Port 17
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[17]|0x1 # PCI Express Root Port 18
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[18]|0x1 # PCI Express Root Port 19
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[19]|0x1 # PCI Express Root Port 20
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[0]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[1]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[2]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[3]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[4]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[5]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[6]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[7]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[8]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[9]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[10]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[11]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[12]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[13]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[14]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[15]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[16]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[17]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[18]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[19]|0x1 # Gen3 Eq Phase3 Method
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[0]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[1]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[2]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[3]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[4]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[5]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[6]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[7]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[8]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[9]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[10]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[11]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[12]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[13]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[14]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[15]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[16]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[17]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[18]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFEE[19]|0x0 # FER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFunctionSwapping|0x1 # PCIe Root Port Function Swapping
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[0]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[1]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[2]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[3]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[4]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[5]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[6]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[7]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[8]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[9]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[10]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[11]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[12]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[13]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[14]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[15]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[16]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[17]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[18]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortHPE[19]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[0]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[1]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[2]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[3]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[4]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[5]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[6]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[7]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[8]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[9]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[10]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[11]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[12]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[13]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[14]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[15]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[16]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[17]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[18]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[19]|0x3 # L1 Substates
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[0]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[1]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[2]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[3]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[4]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[5]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[6]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[7]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[8]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[9]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[10]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[11]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[12]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[13]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[14]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[15]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[16]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[17]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[18]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxPayLoadSize[19]|0x1 # Max Payload Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxReadRequestSize|0x5 # Max Read Request Size
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[0]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[1]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[2]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[3]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[4]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[5]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[6]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[7]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[8]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[9]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[10]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[11]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[12]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[13]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[14]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[15]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[16]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[17]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[18]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortNFE[19]|0x0 # NFER
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[0]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[1]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[2]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[3]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[4]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[5]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[6]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[7]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[8]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[9]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[10]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[11]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[12]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[13]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[14]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[15]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[16]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[17]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[18]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortPMCE[19]|0x0 # PME SCI
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSBDE|0x0 # Subtractive Decode
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[0]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[1]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[2]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[3]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[4]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[5]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[6]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[7]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[8]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[9]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[10]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[11]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[12]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[13]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[14]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[15]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[16]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[17]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[18]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSCE[19]|0x0 # SECE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[0]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[1]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[2]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[3]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[4]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[5]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[6]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[7]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[8]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[9]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[10]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[11]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[12]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[13]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[14]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[15]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[16]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[17]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[18]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSFE[19]|0x0 # SEFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[0]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[1]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[2]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[3]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[4]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[5]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[6]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[7]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[8]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[9]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[10]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[11]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[12]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[13]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[14]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[15]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[16]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[17]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[18]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSNE[19]|0x0 # SENFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[0]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[1]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[2]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[3]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[4]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[5]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[6]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[7]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[8]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[9]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[10]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[11]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[12]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[13]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[14]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[15]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[16]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[17]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[18]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortSpeed[19]|0x0 # PCIe Speed
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[0]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[1]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[2]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[3]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[4]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[5]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[6]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[7]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[8]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[9]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[10]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[11]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[12]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[13]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[14]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[15]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[16]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[17]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[18]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortURE[19]|0x0 # URR
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSBDEPort|0x0 # Subtractive Decode Port#
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[0]|0x6 # Coeff0 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[1]|0x4 # Coeff1 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[2]|0x8 # Coeff2 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[3]|0x2 # Coeff3 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[4]|0xa # Coeff4 Cm
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[0]|0x2 # Coeff0 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[1]|0x2 # Coeff1 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[2]|0x2 # Coeff2 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[3]|0x2 # Coeff3 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[4]|0x2 # Coeff4 Cp
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqOverride|0x0 # Override SW/HW EQ settings
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[0]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[1]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[2]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[3]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[4]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[5]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[6]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[7]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[8]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[9]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[10]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[11]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[12]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[13]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[14]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[15]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[16]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[17]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[18]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieTopology[19]|0x0 # PCIE Lane Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.PmcReadDisable|0x1 # PMC Read Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.PxDevSlp[2]|0x0 # SATA Port 2 DevSlp
+gStructPcdTokenSpaceGuid.PcdPchSetup.RstPcieStorageRemap[0]|0x0 # NVRAM CYCLE ROUTER 0 ENABLE
+gStructPcdTokenSpaceGuid.PcdPchSetup.RstPcieStorageRemap[1]|0x0 # NVRAM CYCLE ROUTER 1 ENABLE
+gStructPcdTokenSpaceGuid.PcdPchSetup.RstPcieStorageRemap[2]|0x0 # NVRAM CYCLE ROUTER 2 ENABLE
+gStructPcdTokenSpaceGuid.PcdPchSetup.RstPcieStorageRemapPort[0]|0x0 # NVRAM CR0 PCIE Root Port Number
+gStructPcdTokenSpaceGuid.PcdPchSetup.RstPcieStorageRemapPort[1]|0x0 # NVRAM CR1 PCIE Root Port Number
+gStructPcdTokenSpaceGuid.PcdPchSetup.RstPcieStorageRemapPort[2]|0x0 # NVRAM CR2 PCIE Root Port Number
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataAlternateId|0x0 # Alternate Device ID on RAID
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[0]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[1]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[2]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[3]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[4]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[5]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[6]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataExternal[7]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHddlk|0x1 # SATA HDD Unlock
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[0]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[1]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[2]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[3]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[4]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[5]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[6]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHotPlug[7]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataInterfaceMode|0x0 # Configure SATA as
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataLedl|0x1 # SATA Led locate
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[0]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[1]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[2]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[3]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[4]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[5]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[6]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[7]|0x0 # Mechanical Presence Switch
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[0]|0x1 # Port 0
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[1]|0x1 # Port 1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[2]|0x1 # Port 2
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[3]|0x1 # Port 3
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[4]|0x1 # Port 4
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[5]|0x1 # Port 5
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[6]|0x1 # Port 6
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[7]|0x1 # Port 7
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidIooe|0x1 # IRRT Only on ESATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidIrrt|0x1 # Intel Rapid Recovery Technology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidLoadEfiDriver[0]|0x0 # Load EFI Driver for RAID
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidLoadEfiDriver[1]|0x0 # Load EFI Driver for RAID
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidOromDelay|0x0 # RAID OROM prompt delay
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidOub|0x1 # RAID Option ROM UI banner
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR0|0x1 # RAID 0
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR1|0x1 # RAID 1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR10|0x1 # RAID 10
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR5|0x1 # RAID 5
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidSrt|0x1 # Smart Response Technology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSalp|0x1 # Support Aggressive Link Power Management
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[0]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[1]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[2]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[3]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[4]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[5]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[6]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSpinUp[7]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTestMode|0x0 # SATA test mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[0]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[1]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[2]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[3]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[4]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[5]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[6]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataTopology[7]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[0]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[1]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[2]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[3]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[4]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[5]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[6]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataType[7]|0x0 # SATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.ShutdownPolicySelect|0x1 # Shutdown Policy
+gStructPcdTokenSpaceGuid.PcdPchSetup.StateAfterG3|0x0 # PCH state after G3
+gStructPcdTokenSpaceGuid.PcdPchSetup.TestDmiAspmCtrl|0x1 # PCH DMI ASPM Testing
+gStructPcdTokenSpaceGuid.PcdPchSetup.TestMctpBroadcastCycle|0x0 # MCTP Broadcast Cycle
+gStructPcdTokenSpaceGuid.PcdPchSetup.TestSmbusSpdWriteDisable|0x1 # SPD Write Disable
+gStructPcdTokenSpaceGuid.PcdPchSetup.ThermalDeviceEnable|0x3 # PCH Thermal Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.Usb3PinsTermination|0x1 # Enable USB 3.0 pins
+gStructPcdTokenSpaceGuid.PcdPchSetup.UsbPrecondition|0x0 # USB Precondition
+gStructPcdTokenSpaceGuid.PcdPchSetup.XTpmLen|0x1 # Expanded SPI TPM Transaction Length Enable
+gStructPcdTokenSpaceGuid.PcdPchSetup.XhciDisMSICapability|0x0 # USB XHCI MSI Disable WA
+gStructPcdTokenSpaceGuid.PcdPchSetup.XhciIdleL1|0x1 # XHCI Idle L1
+gStructPcdTokenSpaceGuid.PcdPchSetup.XhciOcMapEnabled|0x1 # XHCI Over Current Pins
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataAlternateId|0x0 # Alternate Device ID on RAID
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataExternal[0]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataExternal[1]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataExternal[2]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataExternal[3]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataExternal[4]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataExternal[5]|0x0 # Configure as eSATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHddlk|0x1 # SATA HDD Unlock
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHotPlug[0]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHotPlug[1]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHotPlug[2]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHotPlug[3]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHotPlug[4]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHotPlug[5]|0x0 # Hot Plug
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataInterfaceMode|0x0 # Configure sSATA as
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataLedl|0x1 # SATA Led locate
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[0]|0x1 # Port 0
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[1]|0x1 # Port 1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[2]|0x1 # Port 2
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[3]|0x1 # Port 3
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[4]|0x1 # Port 4
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[5]|0x1 # Port 5
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidIooe|0x1 # IRRT Only on ESATA
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidIrrt|0x1 # Intel Rapid Recovery Technology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidOromDelay|0x0 # RAID OROM prompt delay
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidOub|0x1 # RAID Option ROM UI banner
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR0|0x1 # RAID 0
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR1|0x1 # RAID 1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR10|0x1 # RAID 10
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR5|0x1 # RAID 5
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidSrt|0x1 # Smart Response Technology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSalp|0x1 # Support Aggressive Link Power Management
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSpinUp[0]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSpinUp[1]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSpinUp[2]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSpinUp[3]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSpinUp[4]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSpinUp[5]|0x0 # Spin Up Device
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTestMode|0x0 # SATA test mode
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTopology[0]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTopology[1]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTopology[2]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTopology[3]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTopology[4]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataTopology[5]|0x0 # SATA Topology
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataType[0]|0x0 # sSATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataType[1]|0x0 # sSATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataType[2]|0x0 # sSATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataType[3]|0x0 # sSATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataType[4]|0x0 # sSATA Device Type
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataType[5]|0x0 # sSATA Device Type
+gStructPcdTokenSpaceGuid.PcdSetup.AEPErrorInjEn|0x0 # PMem Error Injection
+gStructPcdTokenSpaceGuid.PcdSetup.ARIEnable|0x1 # ARI Support
+gStructPcdTokenSpaceGuid.PcdSetup.ARIForward|0x0 # ARI Forward
+gStructPcdTokenSpaceGuid.PcdSetup.AntiFlashWearoutSupported|0x0 # Anti Flash Wearout Supported
+gStructPcdTokenSpaceGuid.PcdSetup.ApplicationProfile|0xff # Application Profile Configuration
+gStructPcdTokenSpaceGuid.PcdSetup.BaudRate|0x5
+gStructPcdTokenSpaceGuid.PcdSetup.BiosGuardEnabled|0x0 # BIOS Guard
+gStructPcdTokenSpaceGuid.PcdSetup.BiosGuardPlatformSupported|0x0 # Bios Guard Supported
+gStructPcdTokenSpaceGuid.PcdSetup.BootAllOptions|0x0 # Boot All Options
+gStructPcdTokenSpaceGuid.PcdSetup.BootNetwork|0x0 # Boot to Network
+gStructPcdTokenSpaceGuid.PcdSetup.Ce2LmLoggingEn|0x1 # 2LM Correctable Error Logging in m2mem
+gStructPcdTokenSpaceGuid.PcdSetup.ClearViralStatus|0x0 # Clear Viral Status
+gStructPcdTokenSpaceGuid.PcdSetup.CloakDevHideRegistersOs|0x0 # Cloak Devhide registers from being accessible from OS
+gStructPcdTokenSpaceGuid.PcdSetup.CloakingEn|0x0 # System Cloaking
+gStructPcdTokenSpaceGuid.PcdSetup.ClrExtraTurboVoltage|0x0 # CLR Extra Turbo Voltage
+gStructPcdTokenSpaceGuid.PcdSetup.ClrMaxOcRatio|0x0 # CLR Max OC Ratio
+gStructPcdTokenSpaceGuid.PcdSetup.ClrVoltageMode|0x0 # CLR Voltage Mode
+gStructPcdTokenSpaceGuid.PcdSetup.ClrVoltageOffset|0x0 # CLR Voltage Offset
+gStructPcdTokenSpaceGuid.PcdSetup.ClrVoltageOffsetPrefix|0x0 # Offset Prefix
+gStructPcdTokenSpaceGuid.PcdSetup.ClrVoltageOverride|0x0 # CLR Voltage Override
+gStructPcdTokenSpaceGuid.PcdSetup.ConsoleRedirection|0x1 # Console Redirection
+gStructPcdTokenSpaceGuid.PcdSetup.CoreExtraTurboVoltage|0x0 # Core Extra Turbo Voltage
+gStructPcdTokenSpaceGuid.PcdSetup.CoreMaxOcRatio|0x0 # Core Max OC Ratio
+gStructPcdTokenSpaceGuid.PcdSetup.CoreVoltageMode|0x0 # Core Voltage Mode
+gStructPcdTokenSpaceGuid.PcdSetup.CoreVoltageOffset|0x0 # Core Voltage Offset
+gStructPcdTokenSpaceGuid.PcdSetup.CoreVoltageOffsetPrefix|0x0 # Offset Prefix
+gStructPcdTokenSpaceGuid.PcdSetup.CoreVoltageOverride|0x0 # Core Voltage Override
+gStructPcdTokenSpaceGuid.PcdSetup.CorrMemErrEn|0x1 # Memory Corrected Error
+gStructPcdTokenSpaceGuid.PcdSetup.CpuVccInVoltage|0x167 # CPU VCCin Voltage Level
+gStructPcdTokenSpaceGuid.PcdSetup.CsmiDynamicDisable|0x1 # CSMI Dynamic Disable
+gStructPcdTokenSpaceGuid.PcdSetup.DataBits|0x8 # Data Bits
+gStructPcdTokenSpaceGuid.PcdSetup.DcpmmUncPoison|0x1 # PMem UNC Poison
+gStructPcdTokenSpaceGuid.PcdSetup.DdrtInternalAlertEn|0x1 # PMem Host Alert Policy
+gStructPcdTokenSpaceGuid.PcdSetup.ReservedS2|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.ReservedS1|0x0
+gStructPcdTokenSpaceGuid.PcdSetup.ReservedS3|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.DisableMAerrorLoggingDueToLER|0x1 # LER MA Error Logging
+gStructPcdTokenSpaceGuid.PcdSetup.EdpcEn|0x0 # IIO eDPC Support
+gStructPcdTokenSpaceGuid.PcdSetup.EdpcErrCorMsg|0x1 # IIO eDPC ERR_COR Message
+gStructPcdTokenSpaceGuid.PcdSetup.EdpcInterrupt|0x1 # IIO eDPC Interrupt
+gStructPcdTokenSpaceGuid.PcdSetup.EfiNetworkSupport|0x0 # EFI Network
+gStructPcdTokenSpaceGuid.PcdSetup.ElogCorrErrEn|0x1 # Corrected Error eLog
+gStructPcdTokenSpaceGuid.PcdSetup.ElogMemErrEn|0x1 # Memory Error eLog
+gStructPcdTokenSpaceGuid.PcdSetup.ElogProcErrEn|0x1 # Processor Error eLog
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaCsmiEn|0x2 # EMCA CMCI-SMI Morphing
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaCsmiThreshold|0x0 # EMCA CMCI-SMI Threshold
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaEn|0x1 # EMCA Logging Support
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaIgnOptin|0x0 # Ignore OS EMCA Opt-in
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaMsmiEn|0x2 # EMCA MCE-SMI Enable
+gStructPcdTokenSpaceGuid.PcdSetup.EnableAntiFlashWearout|0x0 # Flash Wear Out Protection
+gStructPcdTokenSpaceGuid.PcdSetup.ExpectedBer|0x7ffffffff # Expected BER
+gStructPcdTokenSpaceGuid.PcdSetup.FanPwmOffset|0x0 # Fan PWM Offset
+gStructPcdTokenSpaceGuid.PcdSetup.FatalErrSpinLoopEn|0x0 # FatalErrDebugHalt
+gStructPcdTokenSpaceGuid.PcdSetup.FilterPll|0x0 # Filter Pll
+gStructPcdTokenSpaceGuid.PcdSetup.FivrEfficiencyEnable|0x1 # FIVR Efficiency Management
+gStructPcdTokenSpaceGuid.PcdSetup.FivrFaultsEnable|0x1 # FIVR Faults
+gStructPcdTokenSpaceGuid.PcdSetup.FlowControl|0x0 # Flow Control
+gStructPcdTokenSpaceGuid.PcdSetup.FnvErrorEn|0x1 # PMem CTLR Errors
+gStructPcdTokenSpaceGuid.PcdSetup.FnvErrorHighPrioritySignal|0x1 # PMem CTLR High Priority Error Signaling
+gStructPcdTokenSpaceGuid.PcdSetup.FnvErrorLowPrioritySignal|0x1 # PMem CTLR Low Priority Error Signaling
+gStructPcdTokenSpaceGuid.PcdSetup.ForceSetup|0x0 # Force Setup
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[0]|0x1 # FPK Port 1
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[1]|0x1 # FPK Port 2
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[2]|0x1 # FPK Port 3
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[3]|0x1 # FPK Port 4
+gStructPcdTokenSpaceGuid.PcdSetup.GbeEnabled|0x0 # PCH Internal LAN
+gStructPcdTokenSpaceGuid.PcdSetup.GbePciePortNum|0x0 # PCIE Port assigned to LAN
+gStructPcdTokenSpaceGuid.PcdSetup.Gen12ErrorThreshold|0x0 # Error Threshold (Gen1/2)
+gStructPcdTokenSpaceGuid.PcdSetup.Gen12TimeWindow|0xffff # Time Window (Gen1/2)
+gStructPcdTokenSpaceGuid.PcdSetup.Gen2LinkDegradation|0x1 # Gen2 Link Degradation
+gStructPcdTokenSpaceGuid.PcdSetup.Gen34ErrorThreshold|0x10 # Error Threshold (Gen3/4)
+gStructPcdTokenSpaceGuid.PcdSetup.Gen34ReEqualization|0x1 # Gen3/4 Re-Equalization
+gStructPcdTokenSpaceGuid.PcdSetup.Gen34TimeWindow|0x2 # Time Window (Gen3/4)
+gStructPcdTokenSpaceGuid.PcdSetup.Gen3LinkDegradation|0x1 # Gen3 Link Degradation
+gStructPcdTokenSpaceGuid.PcdSetup.Gen4LinkDegradation|0x1 # Gen4 Link Degradation
+gStructPcdTokenSpaceGuid.PcdSetup.IioDmaErrorEn|0x1 # IIO Dma Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioDmiErrorEn|0x1 # IIO Dmi Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrRegistersClearEn|0x1 # IIO Error Registers Clear
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrorEn|0x1 # IIO/PCH Global Error Support
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrorPin0En|0x0 # IIO Error Pin0 Enable
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrorPin1En|0x0 # IIO Error Pin1 Enable
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrorPin2En|0x0 # IIO Error Pin2 Enable
+gStructPcdTokenSpaceGuid.PcdSetup.IioIrpErrorEn|0x1 # IIO Coherent Interface Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioMiscErrorEn|0x1 # IIO Misc. Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioOOBMode|0x1 # IIO OOB Mode
+gStructPcdTokenSpaceGuid.PcdSetup.IioPcieAddCorrErrorEn|0x1 # IIO PCIE Additional Corrected Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioPcieAddRcvComWithUr|0x0 # IIO PCIE Additional Received Completion With UR
+gStructPcdTokenSpaceGuid.PcdSetup.IioPcieAddUnCorrEn|0x1 # IIO PCIE Additional Uncorrected Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioPcieAerSpecCompEn|0x0 # IIO PCIE AER Spec Compliant
+gStructPcdTokenSpaceGuid.PcdSetup.IioSev1Pcc|0x0 # Clear PCC for IIO Non-Fatal Error
+gStructPcdTokenSpaceGuid.PcdSetup.IioVtdErrorEn|0x1 # IIO Vtd Error
+gStructPcdTokenSpaceGuid.PcdSetup.IoMcaEn|0x1 # IIO MCA Support
+gStructPcdTokenSpaceGuid.PcdSetup.IoaVoltageOffset|0x0 # IOA Voltage Offset
+gStructPcdTokenSpaceGuid.PcdSetup.IoaVoltageOffsetPrefix|0x0 # Offset Prefix
+gStructPcdTokenSpaceGuid.PcdSetup.IodVoltageOffset|0x0 # IOD Voltage Offset
+gStructPcdTokenSpaceGuid.PcdSetup.IodVoltageOffsetPrefix|0x0 # Offset Prefix
+gStructPcdTokenSpaceGuid.PcdSetup.ItcOtcCaMaEnable|0x0 # ITC/OTC CA/MA Errors
+gStructPcdTokenSpaceGuid.PcdSetup.KTIFailoverSmiEn|0x0
+gStructPcdTokenSpaceGuid.PcdSetup.KcsAccessPolicy|0x3 # KCS Access Control Policy
+gStructPcdTokenSpaceGuid.PcdSetup.KtiFirstCeLatchEn|0x0 # Latch First Corrected Error in KTI
+gStructPcdTokenSpaceGuid.PcdSetup.LegacyOsRedirection|0x1 # Legacy OS Redirection
+gStructPcdTokenSpaceGuid.PcdSetup.LegacyPxeRom|0x0 # Legacy Option ROMs support
+gStructPcdTokenSpaceGuid.PcdSetup.LerEn|0x0 # IIO LER Support
+gStructPcdTokenSpaceGuid.PcdSetup.LmceEn|0x1 # LMCE Support
+gStructPcdTokenSpaceGuid.PcdSetup.LomDisableByGpio|0x1 # LOM
+gStructPcdTokenSpaceGuid.PcdSetup.MRIOVEnable|0x0 # MR-IOV Support
+gStructPcdTokenSpaceGuid.PcdSetup.McBankWarmBootClearError|0x1 # Mca Bank Warm Boot Clear Errors
+gStructPcdTokenSpaceGuid.PcdSetup.McaBankErrInjEn|0x0 # Mca Bank Error Injection Support
+gStructPcdTokenSpaceGuid.PcdSetup.McaSpinLoop|0x0 # MCA Spin Loop
+gStructPcdTokenSpaceGuid.PcdSetup.MeSegErrorInjEn|0x0 # ME Seg Error Injection Support
+gStructPcdTokenSpaceGuid.PcdSetup.MemErrEn|0x1 # Memory Error
+gStructPcdTokenSpaceGuid.PcdSetup.NgnAddressRangeScrub|0x0 # Set PMem Address Range Scrub
+gStructPcdTokenSpaceGuid.PcdSetup.NgnHostAlertDpa|0x0 # Set PMem Host Alert Policy for DPA Error
+gStructPcdTokenSpaceGuid.PcdSetup.NgnHostAlertPatrolScrubUNC|0x1 # Set PMem Host Alert Policy for Patrol Scrub
+gStructPcdTokenSpaceGuid.PcdSetup.Numlock|0x0 # NumLock
+gStructPcdTokenSpaceGuid.PcdSetup.OsNativeAerSupport|0x0 # Os Native AER Support
+gStructPcdTokenSpaceGuid.PcdSetup.OverclockingSupport|0x0 # OverClocking Feature
+gStructPcdTokenSpaceGuid.PcdSetup.Parity|0x1 # Parity
+gStructPcdTokenSpaceGuid.PcdSetup.PatrolScrubErrorReporting|0x1 # Patrol Scrub Error Reporting
+gStructPcdTokenSpaceGuid.PcdSetup.PchStepping|0x0 # PCH Stepping
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerAdNfatErrEn|0x1 # PCIE AER Advisory Nonfatal Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerCorrErrEn|0x1 # PCIE AER Corrected Errors
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerEcrcEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerFatErrEn|0x1 # PCIE AER Fatal Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerNfatErrEn|0x1 # PCIE AER NonFatal Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerSurpriseLinkDownEn|0x0 # PCIE Surprise Link Down Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerUreEn|0x0 # PCIE Unsupported Request Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieClockGatingDisabled|0x0 # PCIE Clock Gating
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorErrCntr|0x0 # PCIE Corrected Error Threshold Counter
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorErrLimit|0x50 # PCIe Corrected Error Limit
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorErrLimitEn|0x0 # PCIe Corrected Error Limit Check
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorErrThres|0x1 # PCIE Corrected Error Threshold
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorrErrEn|0x1 # Corrected Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieDmiAspm|0x0 # PCH DMI ASPM
+gStructPcdTokenSpaceGuid.PcdSetup.PcieErrEn|0x1 # PCIE Error
+gStructPcdTokenSpaceGuid.PcdSetup.PcieErrInjActionTable|0x0 # Whea PCIe Error Injection Action Table
+gStructPcdTokenSpaceGuid.PcdSetup.PcieFatalErrEn|0x1 # Fatal Error Enable
+gStructPcdTokenSpaceGuid.PcdSetup.PcieUncorrErrEn|0x1 # Uncorrected Error
+gStructPcdTokenSpaceGuid.PcdSetup.PfrBmcPfmActiveMajorVersion|0x0 # BMC PFM Active Major Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrBmcPfmActiveMinorVersion|0x0 # BMC PFM Active Minor Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrBmcPfmRecoveryMajorVersion|0x0 # BMC PFM Recovery Major Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrBmcPfmRecoveryMinorVersion|0x0 # BMC PFM Recovery Minor Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrBmcPfrActiveSvn|0x0 # BMC PFR Active SVN
+gStructPcdTokenSpaceGuid.PcdSetup.PfrBmcPfrRecoverySvn|0x0 # BMC PFR Recovery SVN
+gStructPcdTokenSpaceGuid.PcdSetup.PfrCpldRotReleaseVersion|0x0 # CPLD RoT Release Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrCpldRotSvn|0x0 # CPLD RoT SVN
+gStructPcdTokenSpaceGuid.PcdSetup.PfrLock|0x0 # PFR Lock
+gStructPcdTokenSpaceGuid.PcdSetup.PfrLockStatus|0x0 # PFR Status: Locked
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPchPfmActiveMajorVersion|0x0 # PCH PFM Active Major Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPchPfmActiveMinorVersion|0x0 # PCH PFM Active Minor Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPchPfmRecoveryMajorVersion|0x0 # PCH PFM Recovery Major Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPchPfmRecoveryMinorVersion|0x0 # PCH PFM Recovery Minor Version
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPchPfrActiveSvn|0x0 # PCH PFR Active SVN
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPchPfrRecoverySvn|0x0 # PCH PFR Recovery SVN
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPitL1|0x0 # PFR PIT Level-1 Protection
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPitL1Status|0x0 # PFR Status: PIT Level-1 Protection Enabled
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPitL2|0x0 # PFR PIT Level-2 Protection
+gStructPcdTokenSpaceGuid.PcdSetup.PfrPitL2Status|0x0 # PFR Status: PIT Level-2 Protection Enabled
+gStructPcdTokenSpaceGuid.PcdSetup.PfrProvision|0x0 # PFR Provision
+gStructPcdTokenSpaceGuid.PcdSetup.PfrProvisionStatus|0x0 # PFR Status: Provisioned
+gStructPcdTokenSpaceGuid.PcdSetup.PfrSupported|0x0 # PFR Supported
+gStructPcdTokenSpaceGuid.PcdSetup.PfrUnProvision|0x0 # PFR UnProvision
+gStructPcdTokenSpaceGuid.PcdSetup.PlatformOCSupport|0x0 # Platform Over Clocking Support
+gStructPcdTokenSpaceGuid.PcdSetup.PmsbRouterParityErrEn|0x1 # PMSB Router Parity Error
+gStructPcdTokenSpaceGuid.PcdSetup.PoisonEn|0x1 # System Memory Poison
+gStructPcdTokenSpaceGuid.PcdSetup.PropagatePerr|0x1 # Assert NMI on PERR
+gStructPcdTokenSpaceGuid.PcdSetup.PropagateSerr|0x1 # Assert NMI on SERR
+gStructPcdTokenSpaceGuid.PcdSetup.Ps2PortSwap|0x0 # PS2 Port Swap
+gStructPcdTokenSpaceGuid.PcdSetup.PsfUrEnable|0x1 # PSF UR Error
+gStructPcdTokenSpaceGuid.PcdSetup.PublishSetupPgPtr|0x0 # Publish Setup page Pointer
+gStructPcdTokenSpaceGuid.PcdSetup.RTCWakeupTimeHour|0x0 # Wake up hour
+gStructPcdTokenSpaceGuid.PcdSetup.RTCWakeupTimeMinute|0x0 # Wake up minute
+gStructPcdTokenSpaceGuid.PcdSetup.RTCWakeupTimeSecond|0x0 # Wake up second
+gStructPcdTokenSpaceGuid.PcdSetup.RasLogLevel|0x1 # RAS Log Level
+gStructPcdTokenSpaceGuid.PcdSetup.ReportAlertSPA|0x1 # Enable Reporting SPA to OS
+gStructPcdTokenSpaceGuid.PcdSetup.ReserveMem|0x0 # Reserve Memory Range
+gStructPcdTokenSpaceGuid.PcdSetup.ReserveStartAddr|0x100000 # Start Address
+gStructPcdTokenSpaceGuid.PcdSetup.ResetOnMemMapChange|0x0 # Reset Platform on Memory Map Change
+gStructPcdTokenSpaceGuid.PcdSetup.RsaSupport|0x0 # RSA Support
+gStructPcdTokenSpaceGuid.PcdSetup.SRIOVEnable|0x1 # SR-IOV Support
+gStructPcdTokenSpaceGuid.PcdSetup.SerialBaudRate|0x1c200 # BIOS Serial Port Baud Rate
+gStructPcdTokenSpaceGuid.PcdSetup.SetShellFirst|0x0 # Boot Shell First
+gStructPcdTokenSpaceGuid.PcdSetup.SgxErrorInjEn|0x0 # SGX Memory Error Injection Support
+gStructPcdTokenSpaceGuid.PcdSetup.ShellEntryTime|0x5 # System Shell Timeout
+gStructPcdTokenSpaceGuid.PcdSetup.ShutdownSuppression|0x0 # Shutdown Suppression
+gStructPcdTokenSpaceGuid.PcdSetup.SkipXmlComprs|0x0 # Skip XML Compression
+gStructPcdTokenSpaceGuid.PcdSetup.SpareIntSelect|0x1 # Spare Interrupt
+gStructPcdTokenSpaceGuid.PcdSetup.StopBits|0x1 # Stop Bits
+gStructPcdTokenSpaceGuid.PcdSetup.StorageOpROMSuppression|0x0 # Storage OPROM Suppression
+gStructPcdTokenSpaceGuid.PcdSetup.SvidEnable|0x1 # SVID Support
+gStructPcdTokenSpaceGuid.PcdSetup.SvidVoltageOverride|0x0 # SVID Voltage Override
+gStructPcdTokenSpaceGuid.PcdSetup.SystemErrorEn|0x1 # System Errors
+gStructPcdTokenSpaceGuid.PcdSetup.SystemPageSize|0x0 # SR-IOV SystemPageSize
+gStructPcdTokenSpaceGuid.PcdSetup.TagecMem|0x0 # Reserve TAGEC Memory
+gStructPcdTokenSpaceGuid.PcdSetup.TerminalResolution|0x0 # Terminal Resolution
+gStructPcdTokenSpaceGuid.PcdSetup.TerminalType|0x2 # Terminal Type
+gStructPcdTokenSpaceGuid.PcdSetup.UboxErrorMask|0x0 # Ubox Error Mask
+gStructPcdTokenSpaceGuid.PcdSetup.UboxToPcuMcaEn|0x1 # UboxToPcuMca Enabling
+gStructPcdTokenSpaceGuid.PcdSetup.UncoreVoltageOffset|0x0 # Uncore Voltage Offset
+gStructPcdTokenSpaceGuid.PcdSetup.UncoreVoltageOffsetPrefix|0x0 # Offset Prefix
+gStructPcdTokenSpaceGuid.PcdSetup.UsbEmul6064|0x0 # Port 60/64 Emulation
+gStructPcdTokenSpaceGuid.PcdSetup.UsbLegacySupport|0x0 # Legacy USB Support
+gStructPcdTokenSpaceGuid.PcdSetup.UsbMassResetDelay|0x1 # Device Reset timeout
+gStructPcdTokenSpaceGuid.PcdSetup.UsbNonBoot|0x0 # Make USB Devices Non-Bootable
+gStructPcdTokenSpaceGuid.PcdSetup.Use1GPageTable|0x1 # Max Page Table Size Select
+gStructPcdTokenSpaceGuid.PcdSetup.ValidationBreakpointType|0x0 # Breakpoint Type
+gStructPcdTokenSpaceGuid.PcdSetup.VccIoVoltage|0x0 # VccIo Voltage Control
+gStructPcdTokenSpaceGuid.PcdSetup.VideoSelect|0x0 # Active Video
+gStructPcdTokenSpaceGuid.PcdSetup.ViralEn|0x0 # Viral Status
+gStructPcdTokenSpaceGuid.PcdSetup.WakeOnLanS5|0x0 # Wake On Lan from S5
+gStructPcdTokenSpaceGuid.PcdSetup.WakeOnLanSupport|0x0 # Wake On Lan Support
+gStructPcdTokenSpaceGuid.PcdSetup.WakeOnRTCS4S5|0x0 # RTC Wake system from S4/S5
+gStructPcdTokenSpaceGuid.PcdSetup.WheaErrInjEn|0x1 # WHEA Error Injection 5.0 Extension
+gStructPcdTokenSpaceGuid.PcdSetup.WheaErrorInjSupportEn|0x0 # WHEA Error Injection Support
+gStructPcdTokenSpaceGuid.PcdSetup.WheaLogMemoryEn|0x1 # Whea Log Memory Error
+gStructPcdTokenSpaceGuid.PcdSetup.WheaLogPciEn|0x1 # Whea Log PCI Error
+gStructPcdTokenSpaceGuid.PcdSetup.WheaLogProcEn|0x1 # Whea Log Processor Error
+gStructPcdTokenSpaceGuid.PcdSetup.WheaPcieErrInjEn|0x0 # Whea PCIE Error Injection Support
+gStructPcdTokenSpaceGuid.PcdSetup.WheaSupportEn|0x1 # WHEA Support
+gStructPcdTokenSpaceGuid.PcdSetup.XhciWakeOnUsbEnabled|0x1 # XHCI Wake On Usb Enable
+gStructPcdTokenSpaceGuid.PcdSetup.XmlCliSupport|0x1 # Xml Cli Support
+gStructPcdTokenSpaceGuid.PcdSetup.bsdBreakpoint|0x0 # BsdBreakPoint
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_crreccCs0|0x1 # IIO IRP0 wrcache correcccs0 error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_crreccCs1|0x1 # IIO IRP0 wrcache correcccs1 error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_csraccunaligned|0x1 # IIO IRP0 csr acc 32b unaligned
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_parityError|0x1 # IIO IRP0 protocol parity error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_qtOverflow|0x1 # IIO IRP0 protocol qt overflow underflow error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_rcvdpoison|0x1 # IIO IRP0 protocol rcvd poison error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_unceccCs0|0x1 # IIO IRP0 wrcache uncecccs0 error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_unceccCs1|0x1 # IIO IRP0 wrcache uncecccs1 error
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_unexprsp|0x1 # IIO IRP0 protocol rcvd unexprsp
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugTrace|0x0 # Trace Messages
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS8|0x0
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[2]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[5]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[8]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[11]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[14]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[17]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[20]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[23]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[26]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[29]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS6|0xf
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.IsocEn|0x2 # Isoc Mode
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MirrorMode|0x0 # Mirror Mode
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmcfgBase|0x6 # MMCFG Base
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmcfgSize|0x6 # MMCFG Size
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmiohBase|0x2 # MMIO High Base
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmiohSize|0x3 # MMIO High Granularity Size
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.NumaEn|0x1 # Numa
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.SystemRasType|0x0 # System RAS Type
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.UmaBasedClustering|0x2 # UMA-Based Clustering
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.VirtualNumaEnable|0x0 # Virtual Numa
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[1]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[2]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[3]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[4]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[5]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[6]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[7]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[8]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[9]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[10]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[11]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[12]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[13]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[14]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[15]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[16]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[17]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[18]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[19]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[20]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[21]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[22]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[23]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[24]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[25]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[26]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[27]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[28]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[29]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[30]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[31]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[32]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[33]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[34]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[35]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[36]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[37]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[38]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[39]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[40]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[41]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[42]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[43]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[44]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[45]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[46]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[47]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[48]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[49]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[50]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[51]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[52]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[53]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[54]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[55]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[56]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[57]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[58]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[59]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[60]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[61]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[62]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[63]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[64]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[65]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[66]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[67]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[68]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[69]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[70]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[71]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[72]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[73]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[74]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[75]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[76]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[77]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[78]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[79]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[80]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[81]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[82]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIHP[83]|0x0 # HotPlug ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[1]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[2]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[3]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[4]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[5]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[6]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[7]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[8]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[9]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[10]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[11]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[12]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[13]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[14]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[15]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[16]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[17]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[18]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[19]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[20]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[21]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[22]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[23]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[24]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[25]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[26]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[27]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[28]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[29]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[30]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[31]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[32]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[33]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[34]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[35]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[36]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[37]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[38]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[39]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[40]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[41]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[42]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[43]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[44]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[45]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[46]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[47]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[48]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[49]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[50]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[51]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[52]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[53]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[54]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[55]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[56]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[57]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[58]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[59]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[60]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[61]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[62]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[63]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[64]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[65]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[66]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[67]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[68]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[69]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[70]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[71]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[72]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[73]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[74]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[75]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[76]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[77]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[78]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[79]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[80]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[81]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[82]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPM[83]|0x0 # PM ACPI Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[0]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[1]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[2]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[3]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[4]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[5]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[6]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[7]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[8]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[9]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[10]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[11]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[12]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[13]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[14]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[15]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[16]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[17]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[18]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[19]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[20]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[21]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[22]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[23]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[24]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[25]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[26]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[27]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[28]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[29]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[30]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[31]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[32]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[33]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[34]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[35]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[36]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[37]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[38]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[39]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[40]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[41]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[42]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[43]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[44]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[45]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[46]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[47]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[48]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[49]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[50]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[51]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[52]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[53]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[54]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[55]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[56]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[57]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[58]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[59]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[60]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[61]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[62]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[63]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[64]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[65]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[66]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[67]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[68]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[69]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[70]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[71]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[72]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[73]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[74]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[75]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[76]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[77]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[78]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[79]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[80]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[81]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[82]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ACPIPMEn[83]|0x0 # ACPI PME Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ATS|0x1 # ATS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[0]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[1]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[2]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[3]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[4]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[5]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[6]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[7]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[8]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[9]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[10]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[11]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[12]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[13]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[14]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[15]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[16]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[17]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[18]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[19]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[20]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[21]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[22]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[23]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[24]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[25]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[26]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[27]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[28]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[29]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[30]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[31]|0x1 # DMA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[0]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[1]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[2]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[3]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[4]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[5]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[6]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[7]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[8]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[9]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[10]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[11]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[12]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[13]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[14]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[15]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[16]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[17]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[18]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[19]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[20]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[21]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[22]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[23]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[24]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[25]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[26]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[27]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[28]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[29]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[30]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3NoSnoopEn[31]|0x0 # No Snoop
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CbDmaMultiCastEnable|0x1 # CbDma MultiCast Enable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CbRelaxedOrdering|0x0 # Relaxed Ordering
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CoherencySupport|0x1 # Coherency Support (Non-Isoch)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CoherentReadFull|0x0 # PCIE Coherent Read Full
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CoherentReadPart|0x0 # PCIE Coherent Read Partial
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutGlobal|0x1 # PCI-E Completion Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutGlobalValue|0x9 # PCI-E Completion Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[0]|0x9 # PCI-E Completion Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[1]|0x9 # PCI-E Completion Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[2]|0x9 # PCI-E Completion Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[3]|0x9 # PCI-E Completion Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[0]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[1]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[2]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[3]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[4]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[5]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[6]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[7]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[8]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[9]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[10]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[11]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[12]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[13]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[14]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[15]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[16]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[17]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[18]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[19]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[20]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[21]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[22]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[23]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[24]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[25]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[26]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[27]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[28]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[29]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[30]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[31]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[32]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[33]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[34]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[35]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[36]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[37]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[38]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[39]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[40]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[41]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[42]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[43]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[44]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[45]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[46]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[47]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[48]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[49]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[50]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[51]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[52]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[53]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[54]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[55]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[56]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[57]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[58]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[59]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[60]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[61]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[62]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[63]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[64]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[65]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[66]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[67]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[68]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[69]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[70]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[71]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[72]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[73]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[74]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[75]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[76]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[77]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[78]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[79]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[80]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[81]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[82]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ComplianceMode[83]|0x0 # Compliance Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[0]|0xff # IOU0 (IIO PCIe Port 1)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[1]|0xff # IOU0 (IIO PCIe Port 1)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[2]|0xff # IOU0 (IIO PCIe Port 1)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[3]|0xff # IOU0 (IIO PCIe Port 1)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[0]|0xff # IOU1 (IIO PCIe Port 2)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[1]|0xff # IOU1 (IIO PCIe Port 2)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[2]|0xff # IOU1 (IIO PCIe Port 2)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[3]|0xff # IOU1 (IIO PCIe Port 2)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[0]|0xff # IOU2 (IIO PCIe Port 3)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[1]|0xff # IOU2 (IIO PCIe Port 3)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[2]|0xff # IOU2 (IIO PCIe Port 3)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[3]|0xff # IOU2 (IIO PCIe Port 3)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[0]|0xff # IOU3 (IIO PCIe Port 4)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[1]|0xff # IOU3 (IIO PCIe Port 4)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[2]|0xff # IOU3 (IIO PCIe Port 4)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[3]|0xff # IOU3 (IIO PCIe Port 4)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[0]|0xff # IOU4 (IIO PCIe Port 5)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[1]|0xff # IOU4 (IIO PCIe Port 5)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[2]|0xff # IOU4 (IIO PCIe Port 5)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[3]|0xff # IOU4 (IIO PCIe Port 5)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ControlIommu|0x0 # Pre-boot DMA Protection
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS9|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[0]|0x0 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[1]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[2]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[3]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[4]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[5]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[6]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[7]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[8]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[9]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[10]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[11]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[12]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[13]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[14]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[15]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[16]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[17]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[18]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[19]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[20]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[21]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[22]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[23]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[24]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[25]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[26]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[27]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[28]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[29]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[30]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[31]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[32]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[33]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[34]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[35]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[36]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[37]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[38]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[39]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[40]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[41]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[42]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[43]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[44]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[45]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[46]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[47]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[48]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[49]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[50]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[51]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[52]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[53]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[54]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[55]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[56]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[57]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[58]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[59]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[60]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[61]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[62]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[63]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[64]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[65]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[66]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[67]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[68]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[69]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[70]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[71]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[72]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[73]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[74]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[75]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[76]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[77]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[78]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[79]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[80]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[81]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[82]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[83]|0x1 # PCI-E Port DeEmphasis
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DelayBeforePCIeLinkTraining|0x0 # Delay before link training
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[0]|0x0 # IIO IOAPIC Stack 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS19|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS10|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[2]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[5]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[8]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[11]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[14]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[17]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[20]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[23]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[26]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[29]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[32]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[33]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[34]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[35]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[36]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[37]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[38]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[39]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[40]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[41]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[42]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[43]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[44]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[45]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[46]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[47]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[48]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[49]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[50]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[51]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[52]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[53]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[54]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[55]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[56]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[57]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[58]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[59]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[60]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[61]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[62]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[63]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[64]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[65]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[66]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[67]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[68]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[69]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[70]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[71]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[72]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[73]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[74]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[75]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[76]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[77]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[78]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[79]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[80]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[81]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[82]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[83]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[2]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[5]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[8]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[11]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[14]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[17]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[20]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[23]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[26]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[29]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[32]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[33]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[34]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[35]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[36]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[37]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[38]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[39]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[40]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[41]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[42]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[43]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[44]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[45]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[46]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[47]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[48]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[49]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[50]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[51]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[52]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[53]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[54]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[55]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[56]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[57]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[58]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[59]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[60]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[61]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[62]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[63]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[64]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[65]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[66]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[67]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[68]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[69]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[70]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[71]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[72]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[73]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[74]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[75]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[76]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[77]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[78]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[79]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[80]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[81]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[82]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS42[83]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[0]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[1]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[2]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[3]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[4]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[5]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[6]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[7]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[8]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[9]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[10]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[11]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[12]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[13]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[14]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[15]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[16]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[17]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[18]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[19]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[20]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[21]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[22]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[23]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[24]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[25]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[26]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[27]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[28]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[29]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[30]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[31]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[32]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[33]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[34]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[35]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[36]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[37]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[38]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[39]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[40]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[41]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[42]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[43]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[44]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[45]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[46]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[47]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[48]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[49]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[50]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[51]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[52]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[53]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[54]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[55]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[56]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[57]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[58]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[59]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[60]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[61]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[62]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[63]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[64]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[65]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[66]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[67]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[68]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[69]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[70]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[71]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[72]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[73]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[74]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[75]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[76]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[77]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[78]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[79]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[80]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[81]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[82]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[83]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[0]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[21]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[42]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[63]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[0]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[21]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[42]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[63]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[0]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[21]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[42]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[63]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[0]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[1]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[2]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[3]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[4]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[5]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[6]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[7]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[8]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[9]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[10]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[11]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[12]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[13]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[14]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[15]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[16]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[17]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[18]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[19]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[20]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[21]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[22]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[23]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[24]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[25]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[26]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[27]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[28]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[29]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[30]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[31]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[32]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[33]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[34]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[35]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[36]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[37]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[38]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[39]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[40]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[41]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[42]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[43]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[44]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[45]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[46]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[47]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[48]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[49]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[50]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[51]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[52]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[53]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[54]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[55]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[56]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[57]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[58]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[59]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[60]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[61]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[62]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[63]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[64]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[65]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[66]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[67]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[68]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[69]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[70]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[71]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[72]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[73]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[74]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[75]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[76]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[77]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[78]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[79]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[80]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[81]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[82]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[83]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[0]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[1]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[2]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[3]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[4]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[5]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[6]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[7]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[8]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[9]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[10]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[11]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[12]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[13]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[14]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[15]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[16]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[17]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[18]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[19]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[20]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[21]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[22]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[23]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[24]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[25]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[26]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[27]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[28]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[29]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[30]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[31]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[32]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[33]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[34]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[35]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[36]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[37]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[38]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[39]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[40]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[41]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[42]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[43]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[44]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[45]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[46]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[47]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[48]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[49]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[50]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[51]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[52]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[53]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[54]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[55]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[56]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[57]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[58]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[59]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[60]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[61]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[62]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[63]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[64]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[65]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[66]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[67]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[68]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[69]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[70]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[71]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[72]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[73]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[74]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[75]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[76]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[77]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[78]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[79]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[80]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[81]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[82]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[83]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[0]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[21]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[42]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[63]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS23[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[0]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[21]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[42]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[63]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS24[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[1]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[2]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[3]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[4]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[5]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[6]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[7]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[8]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[9]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[10]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[11]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[12]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[13]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[14]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[15]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[16]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[17]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[18]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[19]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[20]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[22]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[23]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[24]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[25]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[26]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[27]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[28]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[29]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[30]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[31]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[32]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[33]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[34]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[35]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[36]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[37]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[38]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[39]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[40]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[41]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[43]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[44]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[45]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[46]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[47]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[48]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[49]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[50]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[51]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[52]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[53]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[54]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[55]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[56]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[57]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[58]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[59]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[60]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[61]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[62]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[64]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[65]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[66]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[67]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[68]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[69]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[70]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[71]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[72]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[73]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[74]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[75]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[76]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[77]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[78]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[79]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[80]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[81]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[82]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS34[83]|0x18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS35[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS33[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[1]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[2]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[3]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[4]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[5]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[6]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[7]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[8]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[9]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[10]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[11]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[12]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[13]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[14]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[15]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[16]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[17]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[18]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[19]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[20]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[22]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[23]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[24]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[25]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[26]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[27]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[28]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[29]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[30]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[31]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[32]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[33]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[34]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[35]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[36]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[37]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[38]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[39]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[40]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[41]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[43]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[44]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[45]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[46]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[47]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[48]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[49]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[50]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[51]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[52]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[53]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[54]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[55]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[56]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[57]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[58]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[59]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[60]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[61]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[62]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[64]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[65]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[66]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[67]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[68]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[69]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[70]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[71]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[72]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[73]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[74]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[75]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[76]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[77]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[78]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[79]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[80]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[81]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[82]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS38[83]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[1]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[2]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[3]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[4]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[5]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[6]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[7]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[8]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[9]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[10]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[11]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[12]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[13]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[14]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[15]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[16]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[17]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[18]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[19]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[20]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[22]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[23]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[24]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[25]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[26]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[27]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[28]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[29]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[30]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[31]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[32]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[33]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[34]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[35]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[36]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[37]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[38]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[39]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[40]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[41]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[43]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[44]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[45]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[46]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[47]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[48]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[49]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[50]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[51]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[52]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[53]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[54]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[55]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[56]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[57]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[58]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[59]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[60]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[61]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[62]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[64]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[65]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[66]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[67]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[68]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[69]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[70]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[71]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[72]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[73]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[74]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[75]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[76]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[77]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[78]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[79]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[80]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[81]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[82]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS36[83]|0xb
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS31[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS32[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS17|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS16|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS15|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[0]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[21]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[42]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[63]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS44[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS11|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS14|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS13|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS12|0x99
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS18|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[2]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[5]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[8]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[11]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[14]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[17]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[20]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[23]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[26]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[29]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[32]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[33]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[34]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[35]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[36]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[37]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[38]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[39]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[40]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[41]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[42]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[43]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[44]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[45]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[46]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[47]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[48]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[49]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[50]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[51]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[52]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[53]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[54]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[55]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[56]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[57]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[58]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[59]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[60]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[61]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[62]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[63]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[64]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[65]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[66]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[67]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[68]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[69]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[70]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[71]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[72]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[73]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[74]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[75]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[76]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[77]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[78]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[79]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[80]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[81]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[82]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[83]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[0]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[21]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[42]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[63]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[84]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[85]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[86]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[87]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[88]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[89]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[90]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[91]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[92]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[93]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[94]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[95]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[96]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[97]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[98]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[99]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[100]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[101]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[102]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[103]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[104]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[105]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[106]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[107]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[108]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[109]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[110]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[111]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[112]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[113]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[114]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[115]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[116]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[117]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[118]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[119]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[120]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[121]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[122]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[123]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[124]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[125]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[126]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[127]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[128]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[129]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[130]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[131]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[132]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[133]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[134]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[135]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[136]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[137]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[138]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[139]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[140]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[141]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[142]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[143]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[144]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[145]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[146]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[147]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[148]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[149]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[150]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[151]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[152]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[153]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[154]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[155]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[156]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[157]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[158]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[159]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[160]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[161]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[162]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[163]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[164]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[165]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[166]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[167]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[168]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[169]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[170]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[171]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[172]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[173]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[174]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[175]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[176]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[177]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[178]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[179]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[180]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[181]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[182]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[183]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[184]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[185]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[186]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[187]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[188]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[189]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[190]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[191]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[192]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[193]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[194]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[195]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[196]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[197]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[198]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[199]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[200]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[201]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[202]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[203]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[204]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[205]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[206]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[207]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[208]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[209]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[210]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[211]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[212]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[213]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[214]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[215]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[216]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[217]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[218]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[219]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[220]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[221]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[222]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[223]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[224]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[225]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[226]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[227]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[228]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[229]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[230]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[231]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[232]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[233]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[234]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[235]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[236]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[237]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[238]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[239]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[240]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[241]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[242]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[243]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[244]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[245]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[246]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[247]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[248]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[249]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[250]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[251]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[252]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[253]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[254]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS21[255]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[2]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[5]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[8]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[11]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[14]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[17]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[20]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[23]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[26]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[29]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[32]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[33]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[34]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[35]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[36]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[37]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[38]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[39]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[40]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[41]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[42]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[43]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[44]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[45]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[46]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[47]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[48]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[49]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[50]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[51]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[52]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[53]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[54]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[55]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[56]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[57]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[58]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[59]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[60]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[61]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[62]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[63]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[64]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[65]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[66]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[67]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[68]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[69]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[70]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[71]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[72]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[73]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[74]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[75]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[76]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[77]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[78]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[79]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[80]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[81]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[82]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[83]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[2]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[5]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[8]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[11]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[14]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[17]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[20]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[23]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[26]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[29]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[32]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[33]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[34]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[35]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[36]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[37]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[38]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[39]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[40]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[41]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[42]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[43]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[44]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[45]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[46]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[47]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[48]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[49]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[50]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[51]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[52]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[53]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[54]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[55]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[56]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[57]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[58]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[59]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[60]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[61]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[62]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[63]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[64]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[65]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[66]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[67]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[68]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[69]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[70]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[71]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[72]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[73]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[74]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[75]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[76]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[77]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[78]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[79]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[80]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[81]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[82]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS43[83]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[0]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[1]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[2]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[3]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[4]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[5]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[6]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[7]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[8]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[9]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[10]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[11]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[12]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[13]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[14]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[15]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[16]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[17]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[18]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[19]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[20]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[21]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[22]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[23]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[24]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[25]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[26]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[27]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[28]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[29]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[30]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[31]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[32]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[33]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[34]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[35]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[36]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[37]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[38]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[39]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[40]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[41]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[42]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[43]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[44]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[45]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[46]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[47]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[48]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[49]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[50]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[51]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[52]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[53]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[54]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[55]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[56]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[57]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[58]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[59]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[60]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[61]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[62]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[63]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[64]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[65]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[66]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[67]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[68]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[69]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[70]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[71]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[72]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[73]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[74]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[75]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[76]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[77]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[78]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[79]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[80]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[81]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[82]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisPMETOAck[83]|0x0 # PME to ACK
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DisableTPH|0x0 # Disable TPH
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DmaCtrlOptIn|0x0 # DMA Control Opt-In Flag
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DmiAllocatingFlow|0x1 # DMI Allocating Write Flows
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DualCvIoFlow|0x1 # Dual CV IO Flow
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EN1K|0x0 # EN1K
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[0]|0x1 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[1]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[2]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[3]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[4]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[5]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[6]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[7]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[8]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[9]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[10]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[11]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[12]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[13]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[14]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[15]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[16]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[17]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[18]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[19]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[20]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[21]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[22]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[23]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[24]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[25]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[26]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[27]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[28]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[29]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[30]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[31]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[32]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[33]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[34]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[35]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[36]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[37]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[38]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[39]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[40]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[41]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[42]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[43]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[44]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[45]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[46]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[47]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[48]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[49]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[50]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[51]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[52]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[53]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[54]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[55]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[56]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[57]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[58]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[59]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[60]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[61]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[62]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[63]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[64]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[65]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[66]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[67]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[68]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[69]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[70]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[71]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[72]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[73]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[74]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[75]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[76]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[77]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[78]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[79]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[80]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[81]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[82]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[83]|0x0 # EOI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[0]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[1]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[2]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[3]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[4]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[5]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[6]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[7]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[8]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[9]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[10]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[11]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[12]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[13]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[14]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[15]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[16]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[17]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[18]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[19]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[20]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[21]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[22]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[23]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[24]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[25]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[26]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[27]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[28]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[29]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[30]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[31]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[32]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[33]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[34]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[35]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[36]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[37]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[38]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[39]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[40]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[41]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[42]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[43]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[44]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[45]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[46]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[47]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[48]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[49]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[50]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[51]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[52]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[53]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[54]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[55]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[56]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[57]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[58]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[59]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[60]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[61]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[62]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[63]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[64]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[65]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[66]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[67]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[68]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[69]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[70]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[71]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[72]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[73]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[74]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[75]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[76]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[77]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[78]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[79]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[80]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[81]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[82]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcChkEn[83]|0x0 # ECRC Check
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[0]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[1]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[2]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[3]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[4]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[5]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[6]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[7]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[8]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[9]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[10]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[11]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[12]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[13]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[14]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[15]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[16]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[17]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[18]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[19]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[20]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[21]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[22]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[23]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[24]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[25]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[26]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[27]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[28]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[29]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[30]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[31]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[32]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[33]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[34]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[35]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[36]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[37]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[38]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[39]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[40]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[41]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[42]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[43]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[44]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[45]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[46]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[47]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[48]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[49]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[50]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[51]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[52]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[53]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[54]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[55]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[56]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[57]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[58]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[59]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[60]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[61]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[62]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[63]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[64]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[65]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[66]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[67]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[68]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[69]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[70]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[71]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[72]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[73]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[74]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[75]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[76]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[77]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[78]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[79]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[80]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[81]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[82]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EcrcGenEn[83]|0x0 # ECRC Generation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[0]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[1]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[2]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[3]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[4]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[5]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[6]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[7]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[8]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[9]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[10]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[11]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[12]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[13]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[14]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[15]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[16]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[17]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[18]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[19]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[20]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[21]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[22]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[23]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[24]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[25]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[26]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[27]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[28]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[29]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[30]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[31]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[32]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[33]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[34]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[35]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[36]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[37]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[38]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[39]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[40]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[41]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[42]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[43]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[44]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[45]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[46]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[47]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[48]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[49]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[50]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[51]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[52]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[53]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[54]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[55]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[56]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[57]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[58]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[59]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[60]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[61]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[62]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[63]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[64]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[65]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[66]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[67]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[68]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[69]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[70]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[71]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[72]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[73]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[74]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[75]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[76]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[77]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[78]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[79]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[80]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[81]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[82]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ExtendedSync[83]|0x0 # PCI-E Extended Sync
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.GlobalPme2AckTOCtrl|0x0 # PME2ACK Timeout
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HaltOnDmiDegraded|0x0 # Skip Halt On DMI Degradation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[0]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[1]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[2]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[3]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[4]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[5]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[6]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[7]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[8]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[9]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[10]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[11]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[12]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[13]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[14]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[15]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[16]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[17]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[18]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[19]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[20]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[21]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[22]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[23]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[24]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[25]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[26]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[27]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[28]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[29]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[30]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[31]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[32]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[33]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[34]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[35]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[36]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[37]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[38]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[39]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[40]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[41]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[42]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[43]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[44]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[45]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[46]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[47]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[48]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[49]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[50]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[51]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[52]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[53]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[54]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[55]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[56]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[57]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[58]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[59]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[60]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[61]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[62]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[63]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[64]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[65]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[66]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[67]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[68]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[69]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[70]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[71]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[72]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[73]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[74]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[75]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[76]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[77]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[78]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[79]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[80]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[81]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[82]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[83]|0x6 # IODC Configuration
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[0]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[21]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[42]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[63]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS45[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.InterruptRemap|0x2 # Interrupt Remapping
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[0]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[1]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[2]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[3]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[4]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[5]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[6]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[7]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[8]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[9]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[10]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[11]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[12]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[13]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[14]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[15]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[16]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[17]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[18]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[19]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[20]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[21]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[22]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[23]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[24]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[25]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[26]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[27]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[28]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[29]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[30]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[31]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[32]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[33]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[34]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[35]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[36]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[37]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[38]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[39]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[40]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[41]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[42]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[43]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[44]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[45]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[46]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[47]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[48]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[49]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[50]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[51]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[52]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[53]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[54]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[55]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[56]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[57]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[58]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[59]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[60]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[61]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[62]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[63]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[64]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[65]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[66]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[67]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[68]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[69]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[70]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[71]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[72]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[73]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[74]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[75]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[76]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[77]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[78]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[79]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[80]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[81]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[82]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSICOREN[83]|0x0 # Corr Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[0]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[1]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[2]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[3]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[4]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[5]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[6]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[7]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[8]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[9]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[10]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[11]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[12]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[13]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[14]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[15]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[16]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[17]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[18]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[19]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[20]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[21]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[22]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[23]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[24]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[25]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[26]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[27]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[28]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[29]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[30]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[31]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[32]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[33]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[34]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[35]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[36]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[37]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[38]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[39]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[40]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[41]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[42]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[43]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[44]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[45]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[46]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[47]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[48]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[49]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[50]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[51]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[52]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[53]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[54]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[55]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[56]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[57]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[58]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[59]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[60]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[61]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[62]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[63]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[64]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[65]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[66]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[67]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[68]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[69]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[70]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[71]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[72]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[73]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[74]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[75]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[76]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[77]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[78]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[79]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[80]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[81]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[82]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSIFATEN[83]|0x0 # Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[0]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[1]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[2]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[3]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[4]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[5]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[6]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[7]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[8]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[9]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[10]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[11]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[12]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[13]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[14]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[15]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[16]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[17]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[18]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[19]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[20]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[21]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[22]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[23]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[24]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[25]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[26]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[27]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[28]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[29]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[30]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[31]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[32]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[33]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[34]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[35]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[36]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[37]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[38]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[39]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[40]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[41]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[42]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[43]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[44]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[45]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[46]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[47]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[48]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[49]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[50]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[51]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[52]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[53]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[54]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[55]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[56]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[57]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[58]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[59]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[60]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[61]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[62]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[63]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[64]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[65]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[66]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[67]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[68]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[69]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[70]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[71]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[72]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[73]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[74]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[75]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[76]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[77]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[78]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[79]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[80]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[81]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[82]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MSINFATEN[83]|0x0 # Non-Fatal Err Over
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MaxReadCompCombSize|0x0 # Max Read Comp Comb Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.McastBaseAddrRegion|0x0 # MC BaseAddress Range
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.McastIndexPosition|0xc # MC Index Position
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.McastNumGroup|0x8 # MC Num Group
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[0]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[1]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[2]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[3]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[4]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[5]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[6]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[7]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[8]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[9]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[10]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[11]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[12]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[13]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[14]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[15]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[16]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[17]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[18]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[19]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[20]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[21]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[22]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[23]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[24]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[25]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[26]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[27]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[28]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[29]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[30]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[31]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[32]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[33]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[34]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[35]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[36]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[37]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[38]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[39]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[40]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[41]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[42]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[43]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[44]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[45]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[46]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[47]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[48]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[49]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[50]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[51]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[52]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[53]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[54]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[55]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[56]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[57]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[58]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[59]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[60]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[61]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[62]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[63]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[64]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[65]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[66]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[67]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[68]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[69]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[70]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[71]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[72]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[73]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[74]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[75]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[76]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[77]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[78]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[79]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[80]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[81]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[82]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[83]|0x1 # MCTP
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[0]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[1]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[2]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[3]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[4]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[5]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[6]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[7]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[8]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[9]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[10]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[11]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[12]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[13]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[14]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[15]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[16]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[17]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[18]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[19]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[20]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[21]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[22]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[23]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[24]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[25]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[26]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[27]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[28]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[29]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[30]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[31]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[32]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[33]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[34]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[35]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[36]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[37]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[38]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[39]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[40]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[41]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[42]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[43]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[44]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[45]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[46]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[47]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[48]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[49]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[50]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[51]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[52]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[53]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[54]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[55]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[56]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[57]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[58]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[59]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[60]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[61]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[62]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[63]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[64]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[65]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[66]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[67]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[68]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[69]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[70]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[71]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[72]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[73]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[74]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[75]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[76]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[77]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[78]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[79]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[80]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[81]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[82]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MsiEn[83]|0x0 # MSI
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MultiCastEnable|0x0 # MultiCast Enable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NoSnoopRdCfg|0x0 # NoSnoop Read Config
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NoSnoopWrCfg|0x1 # NoSnoop Write Config
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg0Size[0]|0x0 # North TH Mem Buffer Size 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg0Size[1]|0x0 # North TH Mem Buffer Size 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg0Size[2]|0x0 # North TH Mem Buffer Size 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg0Size[3]|0x0 # North TH Mem Buffer Size 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg1Size[0]|0x0 # North TH Mem Buffer Size 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg1Size[1]|0x0 # North TH Mem Buffer Size 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg1Size[2]|0x0 # North TH Mem Buffer Size 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMemReg1Size[3]|0x0 # North TH Mem Buffer Size 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMode[0]|0x0 # North Trace Hub Enable Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMode[1]|0x0 # North Trace Hub Enable Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMode[2]|0x0 # North Trace Hub Enable Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NorthTraceHubMode[3]|0x0 # North Trace Hub Enable Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[0]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[1]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[2]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[3]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[4]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[5]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[6]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[7]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[8]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[9]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[10]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[11]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[12]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[13]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[14]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[15]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[16]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[17]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[18]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[19]|0x16 # Embar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[0]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[1]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[2]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[3]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[4]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[5]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[6]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[7]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[8]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[9]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[10]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[11]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[12]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[13]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[14]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[15]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[16]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[17]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[18]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[19]|0x16 # Embar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[0]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[1]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[2]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[3]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[4]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[5]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[6]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[7]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[8]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[9]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[10]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[11]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[12]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[13]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[14]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[15]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[16]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[17]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[18]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[19]|0xc # Embar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[0]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[1]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[2]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[3]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[4]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[5]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[6]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[7]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[8]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[9]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[10]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[11]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[12]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[13]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[14]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[15]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[16]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[17]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[18]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[19]|0xc # Embar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[0]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[1]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[2]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[3]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[4]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[5]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[6]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[7]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[8]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[9]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[10]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[11]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[12]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[13]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[14]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[15]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[16]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[17]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[18]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[19]|0x16 # Imbar1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[0]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[1]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[2]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[3]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[4]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[5]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[6]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[7]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[8]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[9]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[10]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[11]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[12]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[13]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[14]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[15]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[16]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[17]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[18]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[19]|0x16 # Imbar2 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[0]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[1]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[2]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[3]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[4]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[5]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[6]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[7]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[8]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[9]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[10]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[11]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[12]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[13]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[14]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[15]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[16]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[17]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[18]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[19]|0xc # Imbar2_0 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[0]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[1]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[2]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[3]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[4]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[5]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[6]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[7]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[8]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[9]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[10]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[11]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[12]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[13]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[14]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[15]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[16]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[17]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[18]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[19]|0xc # Imbar2_1 Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[0]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[1]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[2]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[3]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[4]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[5]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[6]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[7]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[8]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[9]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[10]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[11]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[12]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[13]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[14]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[15]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[16]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[17]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[18]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeOverride[19]|0x0 # Enable NTB BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbLinkBiosTrainEn|0x2 # NTB Link Train by BIOS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[0]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[1]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[2]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[3]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[4]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[5]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[6]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[7]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[8]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[9]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[10]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[11]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[12]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[13]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[14]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[15]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[16]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[17]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[18]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbPpd[19]|0x0 # Non-Transparent Bridge PCIe Port Definition
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[0]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[1]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[2]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[3]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[4]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[5]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[6]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[7]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[8]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[9]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[10]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[11]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[12]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[13]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[14]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[15]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[16]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[17]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[18]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbSplitBar[19]|0x0 # Enable SPLIT BARs
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[0]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[1]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[2]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[3]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[4]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[5]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[6]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[7]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[8]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[9]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[10]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[11]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[12]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[13]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[14]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[15]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[16]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[17]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[18]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[19]|0x3 # Crosslink control Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[0]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[1]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[2]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[3]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[4]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[5]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[6]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[7]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[8]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[9]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[10]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[11]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[12]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[13]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[14]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[15]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[16]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[17]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[18]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[19]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[20]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[21]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[22]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[23]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[24]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[25]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[26]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[27]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[28]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[29]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[30]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[31]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[32]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[33]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[34]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[35]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[36]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[37]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[38]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[39]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[40]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[41]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[42]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[43]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[44]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[45]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[46]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[47]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[48]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[49]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[50]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[51]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[52]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[53]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[54]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[55]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[56]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[57]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[58]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[59]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[60]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[61]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[62]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[63]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[64]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[65]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[66]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[67]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[68]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[69]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[70]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[71]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[72]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[73]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[74]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[75]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[76]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[77]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[78]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[79]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[80]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[81]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[82]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.P2PRdDis[83]|0x0 # P2P Memory Read
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PCIe_AtomicOpReq|0x1 # PCIe Atomic Operation Request Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PCIe_LTR|0x2 # PCIe Latency Tolerance Reporting
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PCUF6Hide|0x0 # Hide PCU Func 6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[1]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[2]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[3]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[4]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[5]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[6]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[7]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[8]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[9]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[10]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[11]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[12]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[13]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[14]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[15]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[16]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[17]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[18]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[19]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[20]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[21]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[22]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[23]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[24]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[25]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[26]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[27]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[28]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[29]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[30]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[31]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[32]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[33]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[34]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[35]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[36]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[37]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[38]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[39]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[40]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[41]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[42]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[43]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[44]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[45]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[46]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[47]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[48]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[49]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[50]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[51]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[52]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[53]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[54]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[55]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[56]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[57]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[58]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[59]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[60]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[61]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[62]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[63]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[64]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[65]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[66]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[67]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[68]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[69]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[70]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[71]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[72]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[73]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[74]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[75]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[76]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[77]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[78]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[79]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[80]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[81]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[82]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PEXPHIDE[83]|0x0 # Hide Port?
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Pci64BitResourceAllocation|0x1 # PCI 64-Bit Resource Allocation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Pcie10bitTag|0x1 # PCIe 10-bit Tag Enable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[0]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[1]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[2]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[3]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[4]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[5]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[6]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[7]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[8]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[9]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[10]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[11]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[12]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[13]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[14]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[15]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[16]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[17]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[18]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICEnabled[19]|0x0 # Intel� AIC Retimer/AIC SSD HW at Stack5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[0]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[1]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[2]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[3]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[4]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[5]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[6]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[7]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[8]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[9]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[10]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[11]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[12]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[13]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[14]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[15]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[16]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[17]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[18]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICHotPlugEnable[19]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[0]|0x0 # Port 1A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[1]|0x0 # Port 1B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[2]|0x0 # Port 1C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[3]|0x0 # Port 1D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[4]|0x0 # Port 2A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[5]|0x0 # Port 2B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[6]|0x0 # Port 2C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[7]|0x0 # Port 2D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[8]|0x0 # Port 3A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[9]|0x0 # Port 3B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[10]|0x0 # Port 3C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[11]|0x0 # Port 3D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[12]|0x0 # Port 4A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[13]|0x0 # Port 4B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[14]|0x0 # Port 4C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[15]|0x0 # Port 4D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[16]|0x0 # Port 5A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[17]|0x0 # Port 5B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[18]|0x0 # Port 5C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[19]|0x0 # Port 5D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[20]|0x0 # Port 1A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[21]|0x0 # Port 1B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[22]|0x0 # Port 1C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[23]|0x0 # Port 1D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[24]|0x0 # Port 2A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[25]|0x0 # Port 2B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[26]|0x0 # Port 2C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[27]|0x0 # Port 2D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[28]|0x0 # Port 3A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[29]|0x0 # Port 3B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[30]|0x0 # Port 3C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[31]|0x0 # Port 3D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[32]|0x0 # Port 4A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[33]|0x0 # Port 4B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[34]|0x0 # Port 4C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[35]|0x0 # Port 4D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[36]|0x0 # Port 5A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[37]|0x0 # Port 5B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[38]|0x0 # Port 5C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[39]|0x0 # Port 5D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[40]|0x0 # Port 1A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[41]|0x0 # Port 1B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[42]|0x0 # Port 1C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[43]|0x0 # Port 1D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[44]|0x0 # Port 2A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[45]|0x0 # Port 2B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[46]|0x0 # Port 2C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[47]|0x0 # Port 2D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[48]|0x0 # Port 3A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[49]|0x0 # Port 3B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[50]|0x0 # Port 3C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[51]|0x0 # Port 3D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[52]|0x0 # Port 4A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[53]|0x0 # Port 4B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[54]|0x0 # Port 4C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[55]|0x0 # Port 4D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[56]|0x0 # Port 5A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[57]|0x0 # Port 5B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[58]|0x0 # Port 5C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[59]|0x0 # Port 5D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[60]|0x0 # Port 1A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[61]|0x0 # Port 1B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[62]|0x0 # Port 1C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[63]|0x0 # Port 1D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[64]|0x0 # Port 2A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[65]|0x0 # Port 2B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[66]|0x0 # Port 2C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[67]|0x0 # Port 2D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[68]|0x0 # Port 3A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[69]|0x0 # Port 3B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[70]|0x0 # Port 3C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[71]|0x0 # Port 3D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[72]|0x0 # Port 4A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[73]|0x0 # Port 4B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[74]|0x0 # Port 4C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[75]|0x0 # Port 4D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[76]|0x0 # Port 5A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[77]|0x0 # Port 5B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[78]|0x0 # Port 5C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAICPortEnable[79]|0x0 # Port 5D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAcpiHotPlugEnable|0x0 # PCIe ACPI Hot Plug
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAllocatingFlow|0x1 # PCIe Allocating Write Flows
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[0]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[1]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[2]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[3]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[4]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[5]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[6]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[7]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[8]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[9]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[10]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[11]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[12]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[13]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[14]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[15]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[16]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[17]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[18]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[19]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[20]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[21]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[22]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[23]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[24]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[25]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[26]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[27]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[28]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[29]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[30]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[31]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[32]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[33]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[34]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[35]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[36]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[37]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[38]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[39]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[40]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[41]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[42]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[43]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[44]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[45]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[46]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[47]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[48]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[49]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[50]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[51]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[52]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[53]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[54]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[55]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[56]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[57]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[58]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[59]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[60]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[61]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[62]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[63]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[64]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[65]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[66]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[67]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[68]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[69]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[70]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[71]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[72]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[73]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[74]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[75]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[76]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[77]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[78]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[79]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[80]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[81]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[82]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[83]|0x2 # PCI-E ASPM Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieBiosTrainEnable|0x1 # PCIe Train by BIOS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[0]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[1]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[2]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[3]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[4]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[5]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[6]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[7]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[8]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[9]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[10]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[11]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[12]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[13]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[14]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[15]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[16]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[17]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[18]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[19]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[20]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[21]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[22]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[23]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[24]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[25]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[26]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[27]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[28]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[29]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[30]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[31]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[32]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[33]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[34]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[35]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[36]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[37]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[38]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[39]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[40]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[41]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[42]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[43]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[44]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[45]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[46]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[47]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[48]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[49]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[50]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[51]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[52]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[53]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[54]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[55]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[56]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[57]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[58]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[59]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[60]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[61]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[62]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[63]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[64]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[65]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[66]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[67]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[68]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[69]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[70]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[71]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[72]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[73]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[74]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[75]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[76]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[77]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[78]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[79]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[80]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[81]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[82]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[83]|0x1 # PCI-E Port Clocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[0]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[1]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[2]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[3]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[4]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[5]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[6]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[7]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[8]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[9]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[10]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[11]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[12]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[13]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[14]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[15]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[16]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[17]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[18]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[19]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[20]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[21]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[22]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[23]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[24]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[25]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[26]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[27]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[28]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[29]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[30]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[31]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[32]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[33]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[34]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[35]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[36]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[37]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[38]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[39]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[40]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[41]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[42]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[43]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[44]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[45]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[46]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[47]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[48]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[49]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[50]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[51]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[52]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[53]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[54]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[55]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[56]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[57]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[58]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[59]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[60]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[61]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[62]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[63]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[64]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[65]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[66]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[67]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[68]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[69]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[70]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[71]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[72]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[73]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[74]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[75]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[76]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[77]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[78]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[79]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[80]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[81]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[82]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDState[83]|0x0 # PCI-E Port D-state
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[0]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[1]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[2]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[3]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[4]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[5]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[6]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[7]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[8]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[9]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[10]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[11]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[12]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[13]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[14]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[15]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[16]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[17]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[18]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[19]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[20]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[21]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[22]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[23]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[24]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[25]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[26]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[27]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[28]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[29]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[30]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[31]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[32]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[33]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[34]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[35]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[36]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[37]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[38]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[39]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[40]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[41]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[42]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[43]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[44]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[45]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[46]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[47]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[48]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[49]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[50]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[51]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[52]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[53]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[54]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[55]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[56]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[57]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[58]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[59]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[60]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[61]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[62]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[63]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[64]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[65]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[66]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[67]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[68]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[69]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[70]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[71]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[72]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[73]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[74]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[75]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[76]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[77]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[78]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[79]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[80]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[81]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[82]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[83]|0x1 # Data Link Feature Exchange
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieExtendedTagField|0x1 # PCIe Extended Tag Enable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieGlobalAspm|0x1 # PCI-E ASPM Support (Global)
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugEnable|0x0 # PCIe Hot Plug
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[1]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[2]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[3]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[4]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[5]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[6]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[7]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[8]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[9]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[10]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[11]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[12]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[13]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[14]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[15]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[16]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[17]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[18]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[19]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[20]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[21]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[22]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[23]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[24]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[25]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[26]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[27]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[28]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[29]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[30]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[31]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[32]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[33]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[34]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[35]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[36]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[37]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[38]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[39]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[40]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[41]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[42]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[43]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[44]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[45]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[46]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[47]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[48]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[49]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[50]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[51]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[52]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[53]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[54]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[55]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[56]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[57]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[58]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[59]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[60]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[61]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[62]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[63]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[64]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[65]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[66]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[67]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[68]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[69]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[70]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[71]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[72]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[73]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[74]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[75]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[76]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[77]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[78]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[79]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[80]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[81]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[82]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieHotPlugOnPort[83]|0x2 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[0]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[1]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[2]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[3]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[4]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[5]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[6]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[7]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[8]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[9]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[10]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[11]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[12]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[13]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[14]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[15]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[16]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[17]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[18]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[19]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[20]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[21]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[22]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[23]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[24]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[25]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[26]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[27]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[28]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[29]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[30]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[31]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[32]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[33]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[34]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[35]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[36]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[37]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[38]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[39]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[40]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[41]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[42]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[43]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[44]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[45]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[46]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[47]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[48]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[49]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[50]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[51]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[52]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[53]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[54]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[55]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[56]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[57]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[58]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[59]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[60]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[61]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[62]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[63]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[64]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[65]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[66]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[67]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[68]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[69]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[70]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[71]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[72]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[73]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[74]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[75]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[76]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[77]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[78]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[79]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[80]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[81]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[82]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[83]|0x4 # PCI-E Port L1 Exit Latency
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[1]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[2]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[3]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[4]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[5]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[6]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[7]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[8]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[9]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[10]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[11]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[12]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[13]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[14]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[15]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[16]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[17]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[18]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[19]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[20]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[21]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[22]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[23]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[24]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[25]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[26]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[27]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[28]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[29]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[30]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[31]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[32]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[33]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[34]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[35]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[36]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[37]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[38]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[39]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[40]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[41]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[42]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[43]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[44]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[45]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[46]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[47]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[48]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[49]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[50]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[51]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[52]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[53]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[54]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[55]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[56]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[57]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[58]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[59]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[60]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[61]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[62]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[63]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[64]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[65]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[66]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[67]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[68]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[69]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[70]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[71]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[72]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[73]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[74]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[75]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[76]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[77]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[78]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[79]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[80]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[81]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[82]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLinkDis[83]|0x0 # PCI-E Port Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieLowLatencyRetimersEnabled|0x0 # PCIe Low Latency Retimers
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[0]|0x7 # DMI Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[1]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[2]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[3]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[4]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[5]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[6]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[7]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[8]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[9]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[10]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[11]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[12]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[13]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[14]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[15]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[16]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[17]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[18]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[19]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[20]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[21]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[22]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[23]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[24]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[25]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[26]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[27]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[28]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[29]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[30]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[31]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[32]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[33]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[34]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[35]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[36]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[37]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[38]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[39]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[40]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[41]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[42]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[43]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[44]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[45]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[46]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[47]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[48]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[49]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[50]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[51]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[52]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[53]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[54]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[55]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[56]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[57]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[58]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[59]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[60]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[61]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[62]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[63]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[64]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[65]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[66]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[67]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[68]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[69]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[70]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[71]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[72]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[73]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[74]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[75]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[76]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[77]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[78]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[79]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[80]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[81]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[82]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[83]|0x7 # PCI-E Port MPSS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxReadRequestSize|0x5 # PCIe Max Read Request Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePhyTestMode|0x0 # PCIe PHY test mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[0]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[1]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[2]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[3]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[4]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[5]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[6]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[7]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[8]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[9]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[10]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[11]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[12]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[13]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[14]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[15]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[16]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[17]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[18]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[19]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[20]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[21]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[22]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[23]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[24]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[25]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[26]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[27]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[28]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[29]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[30]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[31]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[32]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[33]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[34]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[35]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[36]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[37]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[38]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[39]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[40]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[41]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[42]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[43]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[44]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[45]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[46]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[47]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[48]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[49]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[50]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[51]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[52]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[53]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[54]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[55]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[56]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[57]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[58]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[59]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[60]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[61]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[62]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[63]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[64]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[65]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[66]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[67]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[68]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[69]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[70]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[71]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[72]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[73]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[74]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[75]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[76]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[77]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[78]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[79]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[80]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[81]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[82]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[83]|0x1 # PCI-E Port Clock Gating
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[1]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[2]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[3]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[4]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[5]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[6]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[7]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[8]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[9]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[10]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[11]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[12]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[13]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[14]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[15]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[16]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[17]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[18]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[19]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[20]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[21]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[22]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[23]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[24]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[25]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[26]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[27]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[28]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[29]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[30]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[31]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[32]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[33]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[34]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[35]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[36]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[37]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[38]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[39]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[40]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[41]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[42]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[43]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[44]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[45]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[46]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[47]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[48]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[49]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[50]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[51]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[52]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[53]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[54]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[55]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[56]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[57]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[58]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[59]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[60]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[61]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[62]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[63]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[64]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[65]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[66]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[67]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[68]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[69]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[70]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[71]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[72]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[73]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[74]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[75]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[76]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[77]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[78]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[79]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[80]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[81]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[82]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[83]|0x2 # PCI-E Port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[0]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[1]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[2]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[3]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[4]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[5]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[6]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[7]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[8]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[9]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[10]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[11]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[12]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[13]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[14]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[15]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[16]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[17]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[18]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[19]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[20]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[21]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[22]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[23]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[24]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[25]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[26]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[27]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[28]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[29]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[30]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[31]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[32]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[33]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[34]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[35]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[36]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[37]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[38]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[39]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[40]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[41]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[42]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[43]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[44]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[45]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[46]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[47]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[48]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[49]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[50]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[51]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[52]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[53]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[54]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[55]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[56]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[57]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[58]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[59]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[60]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[61]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[62]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[63]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[64]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[65]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[66]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[67]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[68]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[69]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[70]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[71]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[72]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[73]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[74]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[75]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[76]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[77]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[78]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[79]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[80]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[81]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[82]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkMaxWidth[83]|0x0 # Override Max Link Width
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[0]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[1]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[2]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[3]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[4]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[5]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[6]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[7]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[8]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[9]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[10]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[11]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[12]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[13]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[14]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[15]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[16]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[17]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[18]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[19]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[20]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[21]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[22]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[23]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[24]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[25]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[26]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[27]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[28]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[29]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[30]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[31]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[32]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[33]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[34]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[35]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[36]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[37]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[38]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[39]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[40]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[41]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[42]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[43]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[44]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[45]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[46]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[47]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[48]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[49]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[50]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[51]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[52]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[53]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[54]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[55]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[56]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[57]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[58]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[59]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[60]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[61]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[62]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[63]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[64]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[65]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[66]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[67]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[68]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[69]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[70]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[71]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[72]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[73]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[74]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[75]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[76]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[77]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[78]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[79]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[80]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[81]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[82]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortLinkSpeed[83]|0x0 # Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePtm|0x0 # PCIe PTM Enable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieRelaxedOrdering|0x1 # Pcie Relaxed Ordering
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotItemCtrl|0x0 # PCIe Slot Item Control
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom1|0x1 # PCIe Slot 1 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom2|0x1 # PCIe Slot 2 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom3|0x1 # PCIe Slot 3 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom4|0x1 # PCIe Slot 4 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom5|0x1 # PCIe Slot 5 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom6|0x1 # PCIe Slot 6 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom7|0x1 # PCIe Slot 7 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom8|0x1 # PCIe Slot 8 OpROM
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[1]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[2]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[3]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[4]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[5]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[6]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[7]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[8]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[9]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[10]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[11]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[12]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[13]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[14]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[15]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[16]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[17]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[18]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[19]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[20]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[21]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[22]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[23]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[24]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[25]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[26]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[27]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[28]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[29]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[30]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[31]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[32]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[33]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[34]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[35]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[36]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[37]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[38]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[39]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[40]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[41]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[42]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[43]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[44]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[45]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[46]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[47]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[48]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[49]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[50]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[51]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[52]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[53]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[54]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[55]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[56]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[57]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[58]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[59]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[60]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[61]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[62]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[63]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[64]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[65]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[66]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[67]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[68]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[69]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[70]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[71]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[72]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[73]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[74]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[75]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[76]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[77]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[78]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[79]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[80]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[81]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[82]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieTxRxDetPoll[83]|0x2 # PCI-E Detect Wait Time
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[0]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[1]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[2]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[3]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[4]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[5]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[6]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[7]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[8]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[9]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[10]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[11]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[12]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[13]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[14]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[15]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[16]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[17]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[18]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[19]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[20]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[21]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[22]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[23]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[24]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[25]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[26]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[27]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[28]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[29]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[30]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[31]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[32]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[33]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[34]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[35]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[36]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[37]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[38]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[39]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[40]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[41]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[42]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[43]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[44]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[45]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[46]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[47]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[48]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[49]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[50]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[51]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[52]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[53]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[54]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[55]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[56]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[57]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[58]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[59]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[60]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[61]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[62]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[63]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[64]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[65]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[66]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[67]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[68]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[69]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[70]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[71]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[72]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[73]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[74]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[75]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[76]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[77]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[78]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[79]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[80]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[81]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[82]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieUnsupportedRequests[83]|0x0 # Unsupported Request
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PerformanceTuningMode|0x1 # Performance Tuning Mode
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[0]|0x0 # Enable MMIO read cmpl poison for STACK_0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[1]|0x0 # Enable MMIO read cmpl poison for STACK_1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[2]|0x0 # Enable MMIO read cmpl poison for STACK_2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[3]|0x0 # Enable MMIO read cmpl poison for STACK_3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[4]|0x0 # Enable MMIO read cmpl poison for STACK_4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[5]|0x0 # Enable MMIO read cmpl poison for STACK_5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[6]|0x0 # Enable MMIO read cmpl poison for STACK_0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[7]|0x0 # Enable MMIO read cmpl poison for STACK_1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[8]|0x0 # Enable MMIO read cmpl poison for STACK_2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[9]|0x0 # Enable MMIO read cmpl poison for STACK_3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[10]|0x0 # Enable MMIO read cmpl poison for STACK_4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[11]|0x0 # Enable MMIO read cmpl poison for STACK_5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[12]|0x0 # Enable MMIO read cmpl poison for STACK_0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[13]|0x0 # Enable MMIO read cmpl poison for STACK_1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[14]|0x0 # Enable MMIO read cmpl poison for STACK_2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[15]|0x0 # Enable MMIO read cmpl poison for STACK_3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[16]|0x0 # Enable MMIO read cmpl poison for STACK_4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[17]|0x0 # Enable MMIO read cmpl poison for STACK_5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[18]|0x0 # Enable MMIO read cmpl poison for STACK_0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[19]|0x0 # Enable MMIO read cmpl poison for STACK_1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[20]|0x0 # Enable MMIO read cmpl poison for STACK_2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[21]|0x0 # Enable MMIO read cmpl poison for STACK_3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[22]|0x0 # Enable MMIO read cmpl poison for STACK_4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PoisonMmioReadEn[23]|0x0 # Enable MMIO read cmpl poison for STACK_5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PostedInterrupt|0x1 # Posted Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PrioritizeTPH|0x0 # Prioritize TPH
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ProblematicPort|0x0 # Problematic port
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[2]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[3]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[4]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[5]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[6]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[7]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[8]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[9]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[10]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[11]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[14]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[15]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[16]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[17]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[18]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[19]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[20]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[21]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[22]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerGlParmReg0Override[23]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[2]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[3]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[4]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[5]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[6]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[7]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[8]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[9]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[10]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[11]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[14]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[15]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[16]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[17]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[18]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[19]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[20]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[21]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[22]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort0Reg2Override[23]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[2]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[3]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[4]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[5]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[6]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[7]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[8]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[9]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[10]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[11]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[14]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[15]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[16]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[17]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[18]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[19]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[20]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[21]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[22]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RetimerPseudoPort1Reg2Override[23]|0x0 # - Override
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpCorrectableErrorEsc[0]|0x0 # Sck0 RP Correctable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpCorrectableErrorEsc[1]|0x0 # Sck1 RP Correctable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpCorrectableErrorEsc[2]|0x0 # Sck2 RP Correctable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpCorrectableErrorEsc[3]|0x0 # Sck3 RP Correctable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableFatalErrorEsc[0]|0x0 # Sck0 RP Fatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableFatalErrorEsc[1]|0x0 # Sck1 RP Fatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableFatalErrorEsc[2]|0x0 # Sck2 RP Fatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableFatalErrorEsc[3]|0x0 # Sck3 RP Fatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableNonFatalErrorEsc[0]|0x0 # Sck0 RP NonFatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableNonFatalErrorEsc[1]|0x0 # Sck1 RP NonFatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableNonFatalErrorEsc[2]|0x0 # Sck2 RP NonFatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RpUncorrectableNonFatalErrorEsc[3]|0x0 # Sck3 RP NonFatal Uncorrectable Err
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.RxClockWA|0x0 # Rx Clock WA
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[0]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[1]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[2]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[3]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[4]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[5]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[6]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[7]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[8]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[9]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[10]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[11]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[12]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[13]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[14]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[15]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[16]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[17]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[18]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[19]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[20]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[21]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[22]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[23]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[24]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[25]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[26]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[27]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[28]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[29]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[30]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[31]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[32]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[33]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[34]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[35]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[36]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[37]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[38]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[39]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[40]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[41]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[42]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[43]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[44]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[45]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[46]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[47]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[48]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[49]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[50]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[51]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[52]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[53]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[54]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[55]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[56]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[57]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[58]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[59]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[60]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[61]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[62]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[63]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[64]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[65]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[66]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[67]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[68]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[69]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[70]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[71]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[72]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[73]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[74]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[75]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[76]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[77]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[78]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[79]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[80]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[81]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[82]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SERRE[83]|0x0 # SERRE
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[1]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[2]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[3]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[4]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[5]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[6]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[7]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[8]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[9]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[10]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[11]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[12]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[13]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[14]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[15]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[16]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[17]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[18]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[19]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[20]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[21]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[22]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[23]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[24]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[25]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[26]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[27]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[28]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[29]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[30]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[31]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[32]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[33]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[34]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[35]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[36]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[37]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[38]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[39]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[40]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[41]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[42]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[43]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[44]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[45]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[46]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[47]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[48]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[49]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[50]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[51]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[52]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[53]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[54]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[55]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[56]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[57]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[58]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[59]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[60]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[61]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[62]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[63]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[64]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[65]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[66]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[67]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[68]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[69]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[70]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[71]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[72]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[73]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[74]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[75]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[76]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[77]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[78]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[79]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[80]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[81]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[82]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SLOTHPSUP[83]|0x0 # Surprise Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[0]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[1]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[2]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[3]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[4]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[5]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[6]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[7]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[8]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[9]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[10]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[11]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[12]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[13]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[14]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[15]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[16]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[17]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[18]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[19]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[20]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[21]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[22]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[23]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[24]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[25]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[26]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[27]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[28]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[29]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[30]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[31]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[32]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[33]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[34]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[35]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[36]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[37]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[38]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[39]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[40]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[41]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[42]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[43]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[44]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[45]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[46]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[47]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[48]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[49]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[50]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[51]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[52]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[53]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[54]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[55]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[56]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[57]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[58]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[59]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[60]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[61]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[62]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[63]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[64]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[65]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[66]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[67]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[68]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[69]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[70]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[71]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[72]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[73]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[74]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[75]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[76]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[77]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[78]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[79]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[80]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[81]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[82]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SRIS[83]|0x0 # SRIS
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SierraPeakMemBufferSize[0]|0x0 # Sierra Peak Memory Region Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SierraPeakMemBufferSize[1]|0x0 # Sierra Peak Memory Region Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SierraPeakMemBufferSize[2]|0x0 # Sierra Peak Memory Region Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SierraPeakMemBufferSize[3]|0x0 # Sierra Peak Memory Region Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS46|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SkipRetimersDetection|0x0 # Skip PCIe retimers detection
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SnoopResponseHoldOff|0x9 # Snoop Response Hold Off
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.StopAndScream|0x0 # PCIE Stop & Scream Support
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[0]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[1]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[2]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[3]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[4]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[5]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[6]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[7]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[8]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[9]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[10]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[11]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[12]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[13]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[14]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[15]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[16]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[17]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[18]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[19]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[20]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[21]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[22]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[23]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[24]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[25]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[26]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[27]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[28]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[29]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[30]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[31]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[32]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[33]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[34]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[35]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[36]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[37]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[38]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[39]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[40]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[41]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[42]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[43]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[44]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[45]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[46]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[47]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[48]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[49]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[50]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[51]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[52]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[53]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[54]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[55]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[56]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[57]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[58]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[59]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[60]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[61]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[62]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[63]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[64]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[65]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[66]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[67]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[68]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[69]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[70]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[71]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[72]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[73]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[74]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[75]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[76]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[77]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[78]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[79]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[80]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[81]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[82]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.TXEQ[83]|0x0 # Alternate TxEq
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[0]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[1]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[2]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[3]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[4]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[5]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[6]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[7]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[8]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[9]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[10]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[11]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[12]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[13]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[14]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[15]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[16]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[17]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[18]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[19]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[20]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[21]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[22]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[23]|0x2 # CfgBar attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[0]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[1]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[2]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[3]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[4]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[5]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[6]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[7]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[8]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[9]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[10]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[11]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[12]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[13]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[14]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[15]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[16]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[17]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[18]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[19]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[20]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[21]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[22]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[23]|0x19 # CfgBar size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[0]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[1]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[2]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[3]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[4]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[5]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[6]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[7]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[8]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[9]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[10]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[11]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[12]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[13]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[14]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[15]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[16]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[17]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[18]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[19]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[20]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[21]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[22]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDDirectAssign[23]|0x0 # VMD for Direct Assign
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[0]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[1]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[2]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[3]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[4]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[5]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[6]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[7]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[8]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[9]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[10]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[11]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[12]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[13]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[14]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[15]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[16]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[17]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[18]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[19]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[20]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[21]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[22]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDEnabled[23]|0x0 # Enable/Disable VMD
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[0]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[1]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[2]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[3]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[4]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[5]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[6]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[7]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[8]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[9]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[10]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[11]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[12]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[13]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[14]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[15]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[16]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[17]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[18]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[19]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[20]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[21]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[22]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDHotPlugEnable[23]|0x0 # Hot Plug Capable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[0]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[1]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[2]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[3]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[4]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[5]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[6]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[7]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[8]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[9]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[10]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[11]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[12]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[13]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[14]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[15]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[16]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[17]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[18]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[19]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[20]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[21]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[22]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar1Attr[23]|0x0 # MemBar1 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[0]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[1]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[2]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[3]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[4]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[5]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[6]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[7]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[8]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[9]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[10]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[11]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[12]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[13]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[14]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[15]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[16]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[17]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[18]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[19]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[20]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[21]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[22]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[23]|0x1 # MemBar2 attribute
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[0]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[1]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[2]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[3]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[4]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[5]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[6]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[7]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[8]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[9]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[10]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[11]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[12]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[13]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[14]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[15]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[16]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[17]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[18]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[19]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[20]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[21]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[22]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[23]|0x19 # MemBar1 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[0]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[1]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[2]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[3]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[4]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[5]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[6]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[7]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[8]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[9]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[10]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[11]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[12]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[13]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[14]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[15]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[16]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[17]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[18]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[19]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[20]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[21]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[22]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[23]|0x14 # MemBar2 size
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[0]|0x0 # PCH Root Port 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[1]|0x0 # PCH Root Port 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[2]|0x0 # PCH Root Port 2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[3]|0x0 # PCH Root Port 3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[4]|0x0 # PCH Root Port 4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[5]|0x0 # PCH Root Port 5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[6]|0x0 # PCH Root Port 6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[7]|0x0 # PCH Root Port 7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[8]|0x0 # PCH Root Port 8
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[9]|0x0 # PCH Root Port 9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[10]|0x0 # PCH Root Port 10
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[11]|0x0 # PCH Root Port 11
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[12]|0x0 # PCH Root Port 12
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[13]|0x0 # PCH Root Port 13
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[14]|0x0 # PCH Root Port 14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[15]|0x0 # PCH Root Port 15
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[16]|0x0 # PCH Root Port 16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[17]|0x0 # PCH Root Port 17
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[18]|0x0 # PCH Root Port 18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[19]|0x0 # PCH Root Port 19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[20]|0x0 # PCH Root Port 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[21]|0x0 # PCH Root Port 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[22]|0x0 # PCH Root Port 2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[23]|0x0 # PCH Root Port 3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[24]|0x0 # PCH Root Port 4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[25]|0x0 # PCH Root Port 5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[26]|0x0 # PCH Root Port 6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[27]|0x0 # PCH Root Port 7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[28]|0x0 # PCH Root Port 8
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[29]|0x0 # PCH Root Port 9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[30]|0x0 # PCH Root Port 10
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[31]|0x0 # PCH Root Port 11
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[32]|0x0 # PCH Root Port 12
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[33]|0x0 # PCH Root Port 13
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[34]|0x0 # PCH Root Port 14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[35]|0x0 # PCH Root Port 15
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[36]|0x0 # PCH Root Port 16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[37]|0x0 # PCH Root Port 17
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[38]|0x0 # PCH Root Port 18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[39]|0x0 # PCH Root Port 19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[40]|0x0 # PCH Root Port 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[41]|0x0 # PCH Root Port 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[42]|0x0 # PCH Root Port 2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[43]|0x0 # PCH Root Port 3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[44]|0x0 # PCH Root Port 4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[45]|0x0 # PCH Root Port 5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[46]|0x0 # PCH Root Port 6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[47]|0x0 # PCH Root Port 7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[48]|0x0 # PCH Root Port 8
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[49]|0x0 # PCH Root Port 9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[50]|0x0 # PCH Root Port 10
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[51]|0x0 # PCH Root Port 11
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[52]|0x0 # PCH Root Port 12
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[53]|0x0 # PCH Root Port 13
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[54]|0x0 # PCH Root Port 14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[55]|0x0 # PCH Root Port 15
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[56]|0x0 # PCH Root Port 16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[57]|0x0 # PCH Root Port 17
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[58]|0x0 # PCH Root Port 18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[59]|0x0 # PCH Root Port 19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[60]|0x0 # PCH Root Port 0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[61]|0x0 # PCH Root Port 1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[62]|0x0 # PCH Root Port 2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[63]|0x0 # PCH Root Port 3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[64]|0x0 # PCH Root Port 4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[65]|0x0 # PCH Root Port 5
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[66]|0x0 # PCH Root Port 6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[67]|0x0 # PCH Root Port 7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[68]|0x0 # PCH Root Port 8
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[69]|0x0 # PCH Root Port 9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[70]|0x0 # PCH Root Port 10
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[71]|0x0 # PCH Root Port 11
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[72]|0x0 # PCH Root Port 12
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[73]|0x0 # PCH Root Port 13
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[74]|0x0 # PCH Root Port 14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[75]|0x0 # PCH Root Port 15
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[76]|0x0 # PCH Root Port 16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[77]|0x0 # PCH Root Port 17
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[78]|0x0 # PCH Root Port 18
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPchPortEnable[79]|0x0 # PCH Root Port 19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[4]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[5]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[6]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[7]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[8]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[9]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[10]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[11]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[12]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[13]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[14]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[15]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[16]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[17]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[18]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[19]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[20]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[21]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[22]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[23]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[28]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[29]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[30]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[31]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[32]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[33]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[34]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[35]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[36]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[37]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[38]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[39]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[40]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[41]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[42]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[43]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[44]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[45]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[46]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[47]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[52]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[53]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[54]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[55]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[56]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[57]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[58]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[59]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[60]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[61]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[62]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[63]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[64]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[65]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[66]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[67]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[68]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[69]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[70]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[71]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[76]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[77]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[78]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[79]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[80]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[81]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[82]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[83]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[84]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[85]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[86]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[87]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[88]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[89]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[90]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[91]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[92]|0x0 # VMD port A
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[93]|0x0 # VMD port B
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[94]|0x0 # VMD port C
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDPortEnable[95]|0x0 # VMD port D
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VTdSupport|0x1 # Intel� VT for Directed I/O
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdDisabledBitmask[0]|0x0 # Intel� VT-d Disable Mask
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdDisabledBitmask[1]|0x0 # Intel� VT-d Disable Mask
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdDisabledBitmask[2]|0x0 # Intel� VT-d Disable Mask
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdDisabledBitmask[3]|0x0 # Intel� VT-d Disable Mask
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdPciAcsCtlBit0|0x0 # Source Validation
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdPciAcsCtlBit1|0x0 # Translation Blocking
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdPciAcsCtlBit2|0x1 # P2P Request Redirect
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdPciAcsCtlBit3|0x1 # P2P Completion Redirect
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdPciAcsCtlBit4|0x1 # Upstream Forwarding Enable
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdPciAcsCtlWaEn|0x0 # PCIe ACSCTL
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.X2ApicOptOut|0x0 # X2APIC Opt Out
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Xppdef|0x0 # Retimer workaround
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ADDDCEn|0x0 # ADDDC Sparing
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ADRDataSaveMode|0x2 # ADR Data Save Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ADREn|0x1 # Enable ADR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdddcErrInjEn|0x1 # Enable ADDDC Error Injection
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondPause|0x186a0 # Adv MemTest Pause
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondTrefi|0x3cf0 # Adv MemTest tREFI
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondTwr|0xa # Adv MemTest tWR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondVdd|0x4c4 # Adv MemTest VDD Level
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondition|0x1 # Adv MemTest Conditions
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestOptions|0x0 # Adv MemTest Options
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestPpr|0x1 # Adv MemTest PPR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[0]|0xffffffff # Rank location entry 0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[1]|0xffffffff # Rank location entry 1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[2]|0xffffffff # Rank location entry 2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[3]|0xffffffff # Rank location entry 3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[4]|0xffffffff # Rank location entry 4
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[5]|0xffffffff # Rank location entry 5
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[6]|0xffffffff # Rank location entry 6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankList[7]|0xffffffff # Rank location entry 7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRankListNumEntries|0x0 # Number of Ranks to Test
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestResetList|0x0 # Adv MemTest Reset Failure Tracking List
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestRetryAfterRepair|0x1 # Adv MemTest Retry After Repair
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AepNotSupportedException|0x0 # 100 series PMem Not Supported Exception
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ApdEn|0x0 # APD
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AppDirectMemoryHole|0x0 # App Direct Memory Hole
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AttemptFastBoot|0x1 # Attempt Fast Boot
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AttemptFastBootCold|0x1 # Attempt Fast Cold Boot
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS92|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS99|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS100|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS101|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS104|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS89|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS93|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS102|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS103|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS91|0x10
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS88|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS90|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS95|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS96|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS94|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS97|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS98|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Blockgnt2cmd1cyc|0x1 # BLOCK GNT2CMD1CYC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.BwLimitTfOvrd|0x0 # Override BW_LIMIT_TF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CacheMemType|0x0 # 2LM Memory Type
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CkMode|0x2 # CK in SR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CkeIdleTimer|0x14 # CKE Idle Timer
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CkeProgramming|0x0 # CKE Throttling
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmdNormalization|0x1 # Command Normalization
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmdTxEqCalibration|0x0 # CMD Tx Eq Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmdVrefEnable|0x1 # Command Vref Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmiInitOption|0x0 # CMI Init Option
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmsEnableDramPm|0x1 # CMS ENABLE DRAM PM
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ColumnCorrectionDisable|0x0 # Column Correction Disable
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CustomRefreshRate|0x14 # Custom Refresh Rate
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CustomRefreshRateEn|0x0 # Custom Refresh Enable
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DataDllOff|0x1 # Data DLL Off EN
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmAveragePowerLimit|0x3a98 # 200 Series PMem Average Power Limit (in mW)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmAveragePowerTimeConstant|0x6 # 200 Series PMem Turbo Average Power Time Constant (in mSec)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmEccModeSwitch|0x1 # ECC Mode Switch
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmMbbAveragePowerTimeConstant|0x3a98 # 200 Series PMem Memory Bandwidth Boost(MBB) Average Power Time Constant (in mSec)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmMbbFeature|0x1 # 200 Series PMem Turbo/Memory Bandwidth Boost(MBB) Feature
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmMbbMaxPowerLimit|0x4650 # 200 Series PMem Turbo/Memory Bandwidth Boost Feature(MBB) Power Limit (in mW)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdjcTraining|0x1 # DDJC Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrCacheSize|0xff # DDR Cache Size
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrFreqLimit|0x0 # Memory Frequency
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrMemoryType|0x2 # Memory Type
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrtCkeEn|0x1 # PMem CKE
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrtSrefEn|0x0 # PMem SELF REFRESH
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DfeGainBias|0x0 # DfeGainBias
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS48|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS127|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS122|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS121|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS135|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS129|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS120|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS136|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS139|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS132|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS63|0x7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS62|0xf
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS67|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS65|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS66|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS73|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS109|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS78|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS124|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS112|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS110|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS111|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS140|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS141|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS142|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS146|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS147|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS148|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS131|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS57|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS56|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS61|0x1ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS51|0x1f
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS52|0x7f
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS50|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS60|0x3f
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS58|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS59|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS55|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS53|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS54|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS70|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS79|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS117|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS119|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS118|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS137|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS128|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS123|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS80|0x8
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS149|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS125|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS64|0x7ff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS113|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS126|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS134|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS130|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS145|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS49|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS69|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS133|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DieSparing|0x1 # Set PMem Die Sparing
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DisableDirForAppDirect|0x0 # Snoopy mode for AD
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Disddrtopprd|0x1 # Disable DDRT DIMM OPPRD
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRaplEnable|0x1 # DRAM RAPL
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRaplExtendedRange|0x1 # DRAM RAPL Extended Range
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRaplPwrLimitLockCsr|0x1 # DRAM RAPL Power Limit Lock CSR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRonEn|0x0 # DRAM RON Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DutyCycleTraining|0x1 # Duty Cycle Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EadrCacheFlushMode|0x1 # CPU Cache Flush Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EadrSupport|0x0 # eADR Support
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EccEnable|0x1 # ECC Enable
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EccSupport|0x1 # ECC Check
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EliminateDirectoryInFarMemory|0x1 # Snoopy mode for 2LM
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS84|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS85|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS87|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnableNgnBcomMargining|0x0 # DDRT DIMM BCOM Margining Support
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnableTapSweep|0x0 # Enable Tap Sweep
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnableTwoWayNmCache|0x0 # Enable biased 2-way near memory cache
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnforcePOR|0x0 # Enforce POR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnforcePopulationPor|0x1 # Enforce Population POR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EsddcEn|0x0 # Enhanced SDDC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ExtendedType17|0x1 # Extended Type 17 Structure
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FactoryResetClear|0x0 # PMem Factory Reset/Clear
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FadrSupport|0x0 # fADR Support
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FastGoConfig|0x6 # PMem FastGo Configuration
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FastZeroMemSupport|0x0 # Boot-time Fast Zero Memory
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FourxRefreshValue|0x5f # Set FOURx Temperature Refresh
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.HalfxRefreshValue|0x19 # Set Halfx Temperature Refresh
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.HwMemTest|0x1 # MemTest
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LatchSystemShutdownState|0x1 # PMem Latch System Shutdown State
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LegacyADRModeEn|0x0 # Legacy ADR Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LegacyRmt|0x0 # Rank Margin Tool
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LockNgnCsr|0x0 # Lock PMem CSRs
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmBacksideVrefEn|0x1 # LRDIMM Backside Vref
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmRdVrefEn|0x1 # LRDIMM Read Vref
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmRxDqCentering|0x1 # LRDIMM RX DQ Centering
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmTxDqCentering|0x1 # LRDIMM TX DQ Centering
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmWrVrefEn|0x1 # LRDIMM Write Vref
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrdimmDbDfeTraining|0x1 # LRDIMM DB DFE Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LsxImplementation|0x1 # LSx implementation
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.McRonEn|0x0 # MC RON Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MdllOffEn|0x1 # MDLL OFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemCeFloodPolicy|0x2 # Memory Correctable Error Flood Policy
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemHotIn|0x1 # MemHot Input Pin
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemHotOuputAssertThreshold|0x1 # MEMHOT Output Throttling Mode Options
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemHotOut|0x1 # MemHot Output Pin
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemTestLoops|0x1 # MemTest Loops
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemTestOnColdFastBoot|0x0 # MemTest On Cold Fast Boot
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemTripReporting|0x0 # MEMTRIP REPORTING
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MinNormalMemSize|0x2 # Minimum System Memory Size
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MultiThreaded|0x1 # Multi-Threaded MRC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NfitPublishMailboxStructs|0x0 # NVDIMM Mailbox in NFIT
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnArsPublish|0x1 # Publish ARS capability
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnCmdTime|0x2 # PMem CMD Time
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnDebugLock|0x0 # Debug lock for PMem
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccCorr|0x2 # PMem ECC Correctable error
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccExitCorr|0x2 # PMem ECC Write Retry Flow Exit
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccRdChk|0x1 # PMem ECC Read Check
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccWrChk|0x2 # PMem ECC Write Check
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NonPreferredWayMask|0x1 # Non-preferred way mask
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NsddcEn|0x1 # New SDDC Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvDimmEnergyPolicy|0x0 # NVDIMM Energy Policy
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvdimmSmbusMaxAccessTime|0x15e # SMBus Max Access Time
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvdimmSmbusReleaseDelay|0x96 # SMBus Release Delay
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvmMediaStatusException|0x1 # PMem MediaStatus Exception
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvmQos|0x0 # PMem QoS
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvmdimmPerfConfig|0x0 # PMem Performance Setting
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvmdimmPowerCyclePolicy|0x1 # Power Cycle on PMem Surprise Clock Stop
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffPkgMemToMemTrip|0x0 # OFF PKG MEM TO MEMTRIP
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffPkgMemToThermTrip|0x0 # OFF PKG MEM TO THERMTRIP
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetCmdAll|0x64 # Offset CmdAll
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetCmdVref|0x64 # Offset CmdVref
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetCtlAll|0x64 # Offset CtlAll
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetRecEn|0x64 # Offset RecEnDelay
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetRxDq|0x64 # Offset RxDq
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetRxVref|0x64 # Offset RxVref
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetTxDq|0x64 # Offset TxDq
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetTxVref|0x64 # Offset TxVref
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OppSrefEn|0x0 # Opportunistic SR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PagePolicy|0x2 # Page Policy
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PanicWm|0x0 # Refresh Watermarks
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PartialMirrorUefi|0x0 # UEFI ARM Mirror
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PartialMirrorUefiPercent|0x0 # ARM Mirror percentage
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PatrolScrub|0x2 # Patrol Scrub
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PatrolScrubAddrMode|0x1 # Patrol Scrub Address Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PatrolScrubDuration|0x18 # Patrol Scrub Interval
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PclsEn|0x1 # Partial Cache Line Sparing PCLS
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PeriodicRcomp|0x2 # Periodic Rcomp
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PeriodicRcompInterval|0xf # Periodic Rcomp Interval
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PkgcSrefEn|0x1 # PKGC SREF EN
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PlusOneEn|0x0 # Plus One | SDDC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PmemCaching|0x0 # AppDirect cache
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PpdEn|0x1 # PPD
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PreferredReadFirst|0x1 # Preferred read first
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PxcTraining|0x1 # PXC Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RankSparing|0x0 # Memory Rank Sparing
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReadPreamble|0xff # Read Preamble TCLK
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RecEnDelayAverage|0x2 # Rank Switch Configuration
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RmtMinimumMarginCheck|0x1 # RMT Minimum Margin Check
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS86|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RmtOnColdFastBoot|0x0 # RMT On Cold Fast Boot
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RoundTripLatency|0x1 # RoundTrip Latency Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RxCtleTrnEn|0x1 # Rx CTLE Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RxDfe|0x0 # Rx Dfe Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RxOdtEn|0x1 # Rx ODT Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SaiPolicyGroupWaBiosW|0x0 # Enable Pcode WA for SAI PG
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleEn|0x1 # Data Scrambling for DDR4/5
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleEnDDRT|0x1 # Data Scrambling for PMem
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleSeedHigh|0xd395 # Scrambling Seed High
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleSeedLow|0xa02b # Scrambling Seed Low
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SetMemTested|0x1 # Allow Untested Memory for DXE Drivers
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ShortStroke2GB|0x0 # 2GB Short Stroke Configuration
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SmartTestKey|0x0 # SmartTestKey
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SmbSpdAccess|0x0 # SPD-SMBUS Access
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SpareSwErrTh|0x4 # Sparing SW Error Match Threshold
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SpdPrintEn|0x0 # SPD Print
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SpdPrintLength|0x0 # SPD Print Length
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Srat|0x1 # Publish SRAT
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SratCpuHotPlug|0x0 # SRAT CPU Hot Plug
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SratMemoryHotPlug|0x0 # SRAT Memory Hot Plug
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.SrefProgramming|0x0 # SREF Feature
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap1End|0xa # Tap1End
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap1Size|0x1 # Tap1Step
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap1Start|0x8c # Tap1Start
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap2End|0xf # Tap2End
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap2Size|0x1 # Tap2Step
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap2Start|0x73 # Tap2Start
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap3End|0xc # Tap3End
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap3Size|0x1 # Tap3Step
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap3Start|0x70 # Tap3Start
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap4End|0x9 # Tap4End
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap4Size|0x1 # Tap4Step
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap4Start|0x6d # Tap4Start
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TcoCompTraining|0x0 # Tco Comp Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TempRefreshOption|0x0 # Select Temperature Refresh Value
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TrainingCompOptions|0x0 # Training Compensation Options Values
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TrainingResultOffsetFunctionEnable|0x0 # Training Result Offset
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TrefiDelay|0x0 # Additional TREFI Delay
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TrefiNumofRank|0x1 # The Number of Ranks for Stagger TREFI
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TrefiPerChannel|0x0 # Stagger TREFI Per Available Channel
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TriggerSWErrThEn|0x0 # Trigger SW Error Threshold
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TwoxRefreshValue|0x53 # Set TWOx Temperature Refresh
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TxRiseFallSlewRate|0x2 # TX Rise Fall Slew Rate Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Vdd|0x4b0 # Memory Voltage
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.WrCRC|0x0 # WR CRC feature Control
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.WritePreamble|0xff # Write Preamble TCLK
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.XMPMode|0x0 # XMP Profile
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.XMPProfilesSup|0x0 # XMP Profiles Supported
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.allowCorrectableError|0x0 # Allow Memory Training Correctable Error
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.allowCorrectableMemTestError|0x1 # Allow Memory Test Correctable Error
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.bdatEn|0x1 # BDAT
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.check_platform_detect|0x0 # Check PlatformDetectADR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.check_pm_sts|0x0 # Check PCH_PM_STS
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.cmdSetupPercentOffset|0x32 # Cmd Setup % Offset
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.commandTiming|0x0 # Command Timing
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS83|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS77|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS72|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS68|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS106|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS108|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS105|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS71|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[0]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[1]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[2]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[3]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[4]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[5]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[6]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[7]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[8]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[9]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[10]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[11]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[12]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[13]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[14]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS74[15]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS75|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[0]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[1]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[3]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[4]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[6]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[7]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[9]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[10]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[12]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[13]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[15]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[16]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[18]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[19]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[21]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[22]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[24]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[25]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[27]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[28]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[30]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[31]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[33]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[34]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[36]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[37]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[39]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[40]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[42]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[43]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[45]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[46]|0xff
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS82|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS107|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.dimmIsolation|0x0 # DIMM Isolation Enable
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.dllResetTestLoops|0x0 # DLL Reset Test
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.eraseArmNVDIMMS|0x1 # Erase-Arm NVDIMMs
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.eyeDiagram|0x0 # Eye Diagrams
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.haltOnMemErr|0x1 # Halt on mem Training Error
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.iModeTraining|0x1 # iMode Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.imcBclk|0x0 # IMC BCLK
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.interNVDIMMS|0x1 # Interleave NVDIMMs
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktHi|0x29 # Leaky bucket high bit
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktHour|0x18 # Leaky bucket time window based interface Hour
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktLo|0x28 # Leaky bucket low bit
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktMinute|0x0 # Leaky bucket time window based interface Minute
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktTimeWindow|0x0 # Leaky bucket time window based interface
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.logParsing|0x0 # Enhanced Log Parsing
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.lrdimmModuleDelay|0x0 # LRDIMM Module Delay
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.mdllSden|0x2 # MDLL Off
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlows|0xffffffff # Mem Flows
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlowsExt|0xffffffff # Mem FlowsExt
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlowsExt2|0xffffffff # Mem FlowsExt2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlowsExt3|0xffffffff # Mem FlowsExt3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memInterleaveGran1LM|0x3 # 1LM Memory Interleave Granularity
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memhotSupport|0x1 # MEMHOT Throttling Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.mrcRepeatTest|0x0 # DDR Cycling
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.multiSparingRanks|0x2 # Multi Rank Sparing
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.normOppInterval|0x400 # Normal Operation Duration
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.oneRankTimingMode|0x1 # One Rank Timing Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.oppReadInWmm|0x1 # Opp read during WMM
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.partialmirrorsad0|0x0 # Mirror TAD0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.partialmirrorsize[0]|0x0 # Partial Mirror 1 Size (GB)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.partialmirrorsize[1]|0x0 # Partial Mirror 2 Size (GB)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.partialmirrorsize[2]|0x0 # Partial Mirror 3 Size (GB)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.partialmirrorsize[3]|0x0 # Partial Mirror 4 Size (GB)
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.pda|0x1 # PDA
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.pprErrInjTest|0x0 # PPR Error Injection test
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.pprType|0x2 # PPR Type
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.promoteMrcWarnings|0x1 # MRC Promote Warnings
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.promoteWarnings|0x1 # Promote Warnings
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.readVrefCenter|0x1 # Read Vref Centering
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.refreshMode|0x2 # 2x Refresh Enable
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.restoreNVDIMMS|0x1 # Restore NVDIMMs
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseAllDIMMs|0x0 # Erase All DIMMs
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[0]|0x0 # S0 CH0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[1]|0x0 # S0 CH1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[2]|0x0 # S0 CH2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[3]|0x0 # S0 CH3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[4]|0x0 # S0 CH4
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[5]|0x0 # S0 CH5
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[6]|0x0 # S0 CH6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[7]|0x0 # S0 CH7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[8]|0x0 # S1 CH0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[9]|0x0 # S1 CH1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[10]|0x0 # S1 CH2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[11]|0x0 # S1 CH3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[12]|0x0 # S1 CH4
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[13]|0x0 # S1 CH5
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[14]|0x0 # S1 CH6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[15]|0x0 # S1 CH7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[16]|0x0 # S2 CH0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[17]|0x0 # S2 CH1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[18]|0x0 # S2 CH2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[19]|0x0 # S2 CH3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[20]|0x0 # S2 CH4
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[21]|0x0 # S2 CH5
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[22]|0x0 # S2 CH6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[23]|0x0 # S2 CH7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[24]|0x0 # S3 CH0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[25]|0x0 # S3 CH1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[26]|0x0 # S3 CH2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[27]|0x0 # S3 CH3
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[28]|0x0 # S3 CH4
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[29]|0x0 # S3 CH5
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[30]|0x0 # S3 CH6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.setSecureEraseSktCh[31]|0x0 # S3 CH7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.smbSpeed|0x2 # SMB Clock Frequency
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.spareErrTh|0x7fff # Correctable Error Threshold
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.spdCrcCheck|0x2 # SPD CRC Check
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tCAS|0x0 # CAS Latency
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tCWL|0x0 # tCWL
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tFAW|0x0 # tFAW
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRAS|0x0 # tRAS
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRC|0x0 # tRC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRCD|0x0 # tRCD
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tREFI|0x0 # Refresh Rate
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRFC|0x0 # tRFC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRP|0x0 # tRP
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRRD|0x0 # tRRD
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRRD_L|0x0 # tRRD_L
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tRTP|0x0 # tRTP
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tWR|0x0 # tWR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.tWTR|0x0 # tWTR
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.thermalthrottlingsupport|0x2 # Throttling Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.timeWindow|0x0 # Correctable Error Time Window
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.turnaroundOpt|0x1 # Turnaround Time Optimization
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.turnaroundOptDdrt|0x1 # Turnaround Time Optimization PMem
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.txEqCalibration|0x1 # Tx Eq Training
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.volMemMode|0x1 # Volatile Memory Mode
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.wrVrefCenter|0x1 # Write Vref Centering
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[0]|0x1 # Bus Resources Allocation Ratio
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[1]|0x1 # Bus Resources Allocation Ratio
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[2]|0x1 # Bus Resources Allocation Ratio
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[3]|0x1 # Bus Resources Allocation Ratio
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2KtiLinkSpeed|0x3 # Current UPI Link Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2KtiPortDisable|0x0 # Link Disable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.D2KCreditConfig|0x2 # D2K Credit configuration
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Degrade4SPreference|0x0 # Degraded 4S Topology Preference
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DegradePrecedence|0x0 # Degrade Precedence
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS154|0x5
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS159|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS176|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS181|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS182|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS180|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS178|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS179|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS183|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS167|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS168|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS158|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS164|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS157|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS163|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS151|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS156|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS162|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS187|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS186|0xffffffff
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS152|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS153|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS169|0x4
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS185|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS173|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS177|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS160|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS161|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS170|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS171|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS172|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS184|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS174|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS155|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS165|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS166|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS175|0x5
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DirectoryModeEn|0x2 # Directory Mode Enable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.IoDcMode|0x1 # IO Directory Cache (IODC)
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.IrqThreshold|0x1 # Local/Remote Threshold
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiAdaptationEn|0x2 # UPI Adaptation Enable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiAdaptationSpeed|0x3 # UPI Adaptation Speed
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiCpuSktHotPlugTopology|0x0 # CPU Hot Plug Topology
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiCrcMode|0x2 # CRC Mode
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiFailoverEn|0x2 # UPI Dynamic Link Width Reduction Support
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLbEn|0x0 # UPI Load Board for Failed Links
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLinkL0pEn|0x2 # Link L0p Enable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLinkL1En|0x2 # Link L1 Enable
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLinkVnaOverride|0x7f # UPI VNA Credit Override
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiPrefetchEn|0x2 # KTI Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiSkuMismatchCheck|0x1 # CPU SKU Type Mismatch check
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.LLCDeadLineAlloc|0x1 # LLC dead line alloc
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.LegacyVgaSoc|0x0 # Legacy VGA Socket
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.LegacyVgaStack|0x0 # Legacy VGA Stack
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.MbeBwCal|0x3 # MBA BW Calibration
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.P2pRelaxedOrdering|0x0 # PCIe Remote P2P Relaxed Ordering
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.QpiCpuSktHotPlugEn|0x0 # CPU Hot Plug
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.QpiLinkSpeed|0x3 # Link Frequency Select
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.QpiLinkSpeedMode|0x1 # Link Speed Mode
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.RdCurForXptPrefetchEn|0x2 # RdCur for XPT Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.SncEn|0x0 # SNC (Sub NUMA)
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.SnoopAllCores|0x2 # Snoop All Cores Configuration
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.SnoopThrottleConfig|0x4 # Snoop Throttle Configuration
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.SplitLock|0x0 # SplitLock
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.StaleAtoSOptEn|0x2 # Stale AtoS
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.TorThresLoctoremEmpty|0x1 # Loctorem Thresholds Empty
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.TorThresLoctoremNorm|0x1 # Loctorem Thresholds Normal
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.TscSyncEn|0x2 # TSC Sync support
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.XptPrefetchEn|0x2 # XPT Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.XptRemotePrefetchEn|0x2 # XPT Remote Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AcpiS3Enable|0x0 # ACPI S3
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AcpiS4Enable|0x0 # ACPI S4
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AllowLpStateMdfs[0]|0x0 # Allow LP state
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AllowLpStateMdfs[1]|0x0 # Allow LP state
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AllowLpStateMdfs[2]|0x0 # Allow LP state
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AllowLpStateMdfs[3]|0x0 # Allow LP state
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AltEngPerfBIAS|0x7 # ENERGY_PERF_BIAS_CFG mode
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AvxIccpLevel|0x1 # AVX ICCP pre-grant level
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AvxLicensePreGrant|0x0 # AVX Licence Pre-Grant Override
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AvxSupport|0x1 # AVX Support
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.BootPState|0x0 # Boot performance mode
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.C1AutoDemotion|0x1 # CPU C1 auto demotion
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.C1AutoUnDemotion|0x1 # CPU C1 auto undemotion
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.C2C3TT|0x0 # C2C3TT
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.C6Enable|0xff # CPU C6 report
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlMultiplier[0]|0x0 # MULTIPLIER:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlMultiplier[1]|0x0 # MULTIPLIER:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlMultiplier[2]|0x0 # MULTIPLIER:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlValid[0]|0x0 # VALID:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlValid[1]|0x0 # VALID:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlValid[2]|0x0 # VALID:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlValue[0]|0x0 # VALUE:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlValue[1]|0x0 # VALUE:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CStateLatencyCtrlValue[2]|0x0 # VALUE:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ConfigTdpLevel|0x0 # AVX P1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ConfigTdpLock|0x1 # Config TDP Lock
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CurrentConfig|0x0 # Current Limit Override
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CurrentLimit|0x438 # Current Limitation
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.DynamicIss|0x0 # Dynamic SST-PP
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.DynamicL1|0x0 # Dynamic L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EETurboDisable|0x0 # Energy Efficient Turbo
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EetOverrideEn|0x0 # EET Mode
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Iio[0]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Iio[1]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Iio[2]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Iio[3]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Kti[0]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Kti[1]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Kti[2]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Kti[3]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Rlink[0]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Rlink[1]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Rlink[2]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLinkInL1Rlink[3]|0x0 # Link in L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableLowerLatencyMode|0x0 # Register Access Low Latency Mode
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaDino[0]|0x0 # PKGC_CRITERIA DINO
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaDino[1]|0x0 # PKGC_CRITERIA DINO
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaDino[2]|0x0 # PKGC_CRITERIA DINO
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaDino[3]|0x0 # PKGC_CRITERIA DINO
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaFxr[0]|0x0 # PKGC_CRITERIA FXR
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaFxr[1]|0x0 # PKGC_CRITERIA FXR
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaFxr[2]|0x0 # PKGC_CRITERIA FXR
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaFxr[3]|0x0 # PKGC_CRITERIA FXR
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHbm[0]|0x1 # PKGC_CRITERIA HBMx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHbm[1]|0x1 # PKGC_CRITERIA HBMx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHbm[2]|0x1 # PKGC_CRITERIA HBMx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHbm[3]|0x1 # PKGC_CRITERIA HBMx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHcx[0]|0x0 # PKGC_CRITERIA HCX
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHcx[1]|0x0 # PKGC_CRITERIA HCX
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHcx[2]|0x0 # PKGC_CRITERIA HCX
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHcx[3]|0x0 # PKGC_CRITERIA HCX
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHqm[0]|0x0 # PKGC_CRITERIA HQM
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHqm[1]|0x0 # PKGC_CRITERIA HQM
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHqm[2]|0x0 # PKGC_CRITERIA HQM
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaHqm[3]|0x0 # PKGC_CRITERIA HQM
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaIio[0]|0x0 # PKGC_CRITERIA IIOx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaIio[1]|0x0 # PKGC_CRITERIA IIOx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaIio[2]|0x0 # PKGC_CRITERIA IIOx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaIio[3]|0x0 # PKGC_CRITERIA IIOx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaKti[0]|0x0 # PKGC_CRITERIA KTI
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaKti[1]|0x0 # PKGC_CRITERIA KTI
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaKti[2]|0x0 # PKGC_CRITERIA KTI
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaKti[3]|0x0 # PKGC_CRITERIA KTI
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[0]|0xff # PKGC_CRITERIA MCDDRx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[1]|0xff # PKGC_CRITERIA MCDDRx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[2]|0xff # PKGC_CRITERIA MCDDRx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[3]|0xff # PKGC_CRITERIA MCDDRx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMdfs[0]|0x0 # PKGC_CRITERIA MDFS
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMdfs[1]|0x0 # PKGC_CRITERIA MDFS
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMdfs[2]|0x0 # PKGC_CRITERIA MDFS
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMdfs[3]|0x0 # PKGC_CRITERIA MDFS
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaNac[0]|0x0 # PKGC_CRITERIA NAC
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaNac[1]|0x0 # PKGC_CRITERIA NAC
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaNac[2]|0x0 # PKGC_CRITERIA NAC
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaNac[3]|0x0 # PKGC_CRITERIA NAC
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaRlink[0]|0x0 # PKGC_CRITERIA Rlink
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaRlink[1]|0x0 # PKGC_CRITERIA Rlink
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaRlink[2]|0x0 # PKGC_CRITERIA Rlink
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaRlink[3]|0x0 # PKGC_CRITERIA Rlink
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaTip[0]|0x0 # PKGC_CRITERIA TIP
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaTip[1]|0x0 # PKGC_CRITERIA TIP
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaTip[2]|0x0 # PKGC_CRITERIA TIP
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaTip[3]|0x0 # PKGC_CRITERIA TIP
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgcCriteria|0xff # Enable PKGC_SA_PS_CRITERIA
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableProcHot|0x3 # PROCHOT Modes
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableThermalMonitor|0x1 # Thermal Monitor
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableXe|0x1 # Extreme Edition
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EngAvgTimeWdw1|0x1a # Averaging Time Window
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnhancedPmaxDetector|0x1 # PMAX Detector Enhancement
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.FastRaplDutyCycle|0x40 # FAST_RAPL_NSTRIKE_PL2_DUTY_CYCLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.GpssTimer|0x32 # GPSS timer
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio0PkgcClkGateDis[0]|0x0 # IIO0_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio0PkgcClkGateDis[1]|0x0 # IIO0_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio0PkgcClkGateDis[2]|0x0 # IIO0_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio0PkgcClkGateDis[3]|0x0 # IIO0_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio1PkgcClkGateDis[0]|0x0 # IIO1_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio1PkgcClkGateDis[1]|0x0 # IIO1_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio1PkgcClkGateDis[2]|0x0 # IIO1_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio1PkgcClkGateDis[3]|0x0 # IIO1_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio2PkgcClkGateDis[0]|0x0 # IIO2_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio2PkgcClkGateDis[1]|0x0 # IIO2_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio2PkgcClkGateDis[2]|0x0 # IIO2_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Iio2PkgcClkGateDis[3]|0x0 # IIO2_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.InputUncoreFreq|0x7f # Uncore Freq:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.IoBwPlmtOvrdEn|0x0 # IO_BW_PLIMIT_OVRD_EN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.IomApmOvrdEn|0x0 # IOM_APM_OVERRIDE_ENABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.IssTdpLevel|0x0 # Intel SST-PP
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01PkgcClkGateDis[0]|0x0 # UPI01_PKGC_CLK_GATE_DISABL
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01PkgcClkGateDis[1]|0x0 # UPI01_PKGC_CLK_GATE_DISABL
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01PkgcClkGateDis[2]|0x0 # UPI01_PKGC_CLK_GATE_DISABL
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01PkgcClkGateDis[3]|0x0 # UPI01_PKGC_CLK_GATE_DISABL
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[0]|0x1 # UPI01 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[1]|0x1 # UPI01 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[2]|0x1 # UPI01 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[3]|0x1 # UPI01 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[0]|0x1 # UPI_0_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[1]|0x1 # UPI_0_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[2]|0x1 # UPI_0_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[3]|0x1 # UPI_0_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[0]|0x1 # UPI_1_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[1]|0x1 # UPI_1_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[2]|0x1 # UPI_1_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[3]|0x1 # UPI_1_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23PkgcClkGateDis[0]|0x0 # UPI23_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23PkgcClkGateDis[1]|0x0 # UPI23_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23PkgcClkGateDis[2]|0x0 # UPI23_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23PkgcClkGateDis[3]|0x0 # UPI23_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[0]|0x1 # UPI23 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[1]|0x1 # UPI23 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[2]|0x1 # UPI23 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[3]|0x1 # UPI23 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[0]|0x1 # UPI_2_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[1]|0x1 # UPI_2_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[2]|0x1 # UPI_2_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[3]|0x1 # UPI_2_IN_L1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45PkgcClkGateDis[0]|0x0 # UPI45_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45PkgcClkGateDis[1]|0x0 # UPI45_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45PkgcClkGateDis[2]|0x0 # UPI45_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45PkgcClkGateDis[3]|0x0 # UPI45_PKGC_CLK_GATE_DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[0]|0x1 # UPI45 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[1]|0x1 # UPI45 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[2]|0x1 # UPI45 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[3]|0x1 # UPI45 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.KtiApmOvrdEn|0x0 # UPI_APM_OVERRIDE_ENABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.LTRSwInput|0x1 # LTR IIO Input
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0PkgcClkGateDis[0]|0x0 # MC0 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0PkgcClkGateDis[1]|0x0 # MC0 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0PkgcClkGateDis[2]|0x0 # MC0 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0PkgcClkGateDis[3]|0x0 # MC0 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[0]|0x1 # MC0 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[1]|0x1 # MC0 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[2]|0x1 # MC0 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[3]|0x1 # MC0 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1PkgcClkGateDis[0]|0x0 # MC1 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1PkgcClkGateDis[1]|0x0 # MC1 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1PkgcClkGateDis[2]|0x0 # MC1 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1PkgcClkGateDis[3]|0x0 # MC1 PKGC CLK GATE DISABLE
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[0]|0x1 # MC1 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[1]|0x1 # MC1 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[2]|0x1 # MC1 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[3]|0x1 # MC1 PLLs Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.MonitorMWait|0x1 # Enable Monitor MWAIT
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.NativeAspmEnable|0x2 # Native ASPM
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.NonSnpLatMult|0x0 # Non-Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.NonSnpLatOvrd|0x0 # Non-Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.NonSnpLatVal|0x0 # Non-Snoop Latency Value
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.NonSnpLatVld|0x0 # Non-Snoop Latency Override Valid
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.OSCx|0x0 # OS ACPI Cx
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.OnDieThermalThrottling|0x0 # T-State Throttle Level
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.OverclockingLock|0x1 # Overclocking Lock
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0TtlTimeHigh1|0x3f # P0 TotalTimeThreshold High
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0TtlTimeLow1|0x28 # P0 TotalTimeThreshold Low
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[0]|0x1 # PCIe IIO0 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[1]|0x1 # PCIe IIO0 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[2]|0x1 # PCIe IIO0 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[3]|0x1 # PCIe IIO0 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[0]|0x1 # PCIe IIO1 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[1]|0x1 # PCIe IIO1 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[2]|0x1 # PCIe IIO1 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[3]|0x1 # PCIe IIO1 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[0]|0x1 # PCIe IIO2 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[1]|0x1 # PCIe IIO2 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[2]|0x1 # PCIe IIO2 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[3]|0x1 # PCIe IIO2 PLL Shutdown En
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PackageCState|0xff # Package C State
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[0]|0x1 # PCIE Port0 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[1]|0x1 # PCIE Port0 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[2]|0x1 # PCIE Port0 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[3]|0x1 # PCIE Port0 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[0]|0x1 # PCIE Port1 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[1]|0x1 # PCIE Port1 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[2]|0x1 # PCIE Port1 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[3]|0x1 # PCIE Port1 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[0]|0x1 # PCIE Port2 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[1]|0x1 # PCIE Port2 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[2]|0x1 # PCIE Port2 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[3]|0x1 # PCIE Port2 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[0]|0x1 # PCIE Port3 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[1]|0x1 # PCIE Port3 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[2]|0x1 # PCIE Port3 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[3]|0x1 # PCIE Port3 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[0]|0x1 # PCIE Port4 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[1]|0x1 # PCIE Port4 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[2]|0x1 # PCIE Port4 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[3]|0x1 # PCIE Port4 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[0]|0x1 # PCIE Port5 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[1]|0x1 # PCIE Port5 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[2]|0x1 # PCIE Port5 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[3]|0x1 # PCIE Port5 PCIE_IN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcodeWdogTimerEn|0x2 # Pcode Dispatcher Watchdog Timer
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPLimitClipC|0x1f # Perf P-Limit Clip
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPLimitEn|0x1 # Perf P Limit
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPLmtThshld|0xf # Perf P-Limit Threshold
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPlimitDifferential|0x1 # Perf P-Limit Differential
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskDino[0]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskDino[1]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskDino[2]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskDino[3]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskFxr[0]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskFxr[1]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskFxr[2]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskFxr[3]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHcx[0]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHcx[1]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHcx[2]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHcx[3]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHqm[0]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHqm[1]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHqm[2]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskHqm[3]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskNac[0]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskNac[1]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskNac[2]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskNac[3]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskTip[0]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskTip[1]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskTip[2]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaAllowedPsMaskTip[3]|0x0 # PKGC_ALLOWED_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoDino[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoDino[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoDino[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoDino[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoFxr[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoFxr[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoFxr[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoFxr[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHbm[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHbm[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHbm[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHbm[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHcx[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHcx[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHcx[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHcx[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHqm[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHqm[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHqm[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoHqm[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoIio[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoIio[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoIio[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoIio[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoKti[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoKti[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoKti[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoKti[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMcddr[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMcddr[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMcddr[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMcddr[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMdfs[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMdfs[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMdfs[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoMdfs[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoNac[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoNac[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoNac[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoNac[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoRlink[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoRlink[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoRlink[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoRlink[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoTip[0]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoTip[1]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoTip[2]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaInstanceNoTip[3]|0x0 # Instance_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpType[0]|0x0 # CPU0 Logical_ip_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpType[1]|0x0 # CPU1 Logical_ip_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpType[2]|0x0 # CPU2 Logical_ip_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpType[3]|0x0 # CPU3 Logical_ip_type
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeHbm[0]|0x18 # HBM:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeHbm[1]|0x18 # HBM:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeHbm[2]|0x18 # HBM:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeHbm[3]|0x18 # HBM:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[0]|0x20 # IIO:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[1]|0x20 # IIO:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[2]|0x20 # IIO:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[3]|0x20 # IIO:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[0]|0x10 # MCDDR:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[1]|0x10 # MCDDR:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[2]|0x10 # MCDDR:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[3]|0x10 # MCDDR:
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCLatNeg|0x1 # PKG C-state Lat. Neg.
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCstEntryValCtl|0x0 # PKGC_ENTRY_CRITERIA OVRD
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskDino[0]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskDino[1]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskDino[2]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskDino[3]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskFxr[0]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskFxr[1]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskFxr[2]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskFxr[3]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHcx[0]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHcx[1]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHcx[2]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHcx[3]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHqm[0]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHqm[1]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHqm[2]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskHqm[3]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskNac[0]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskNac[1]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskNac[2]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskNac[3]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskTip[0]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskTip[1]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskTip[2]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteraPsMaskTip[3]|0x0 # PKGC_CRITERIA_PS_MASK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionHbm[0]|0x0 # HBM Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionHbm[1]|0x0 # HBM Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionHbm[2]|0x0 # HBM Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionHbm[3]|0x0 # HBM Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionMcddr[0]|0x0 # MCDDR Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionMcddr[1]|0x0 # MCDDR Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionMcddr[2]|0x0 # MCDDR Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgcCriteriaPsOptionMcddr[3]|0x0 # MCDDR Option
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxAutoAdjustment|0x0 # BIOS Auto Adjustment
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxDetector|0x1 # Detector
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxLoadLine|0x0 # DC LL Select
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxOffset|0x0 # PMAX Config Positive Offset
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxOffsetNegative|0x0 # PMAX Config Negative Offset
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxSign|0x0 # PMAX Config Sign
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxTriggerSetup|0x0 # Trigger Setup
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit1En|0x1 # PL1 Limit
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit1Power|0x0 # PL1 Power Limit
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit1Time|0x1 # PL1 Time Window
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit2En|0x1 # PL2 Limit
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit2Power|0x0 # PL2 Power Limit
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit2Time|0x1 # PL2 Time Window
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PpcccLock|0x1 # Lock Indication
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorAPSrocketing|0x0 # APS rocketing
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorActivePbf|0x0 # Activate SST-BF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorC1eEnable|0x1 # Enhanced Halt State (C1E)
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorConfigurePbf|0x1 # Configure SST-BF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEPPEnable|0x1 # EPP Enable
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEistEnable|0x1 # SpeedStep (Pstates)
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEistPsdFunc|0x0 # EIST PSD Function
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEppProfile|0x80 # EPP profile
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorHWPMEnable|0x1 # Hardware P-States
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorHWPMInterrupt|0x0 # HardwarePM Interrupt
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorOutofBandAlternateEPB|0x0 # PECI PCS EPB
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorRaplPrioritization|0x0 # RAPL Prioritization
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorScalability|0x0 # Scalability
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProchotLock|0x1 # PROCHOT LOCK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProchotResponseRatio|0x0 # PROCHOT RATIO
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PwrPerfSwitch|0x1 # Dynamic Loadline Switch
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PwrPerfTuning|0x0 # Power Performance Tuning
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.RunCpuPpmInPei|0x0 # Run CPU PPM code in PEI
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SAPMControl|0x0 # SAPM Control
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[0]|0x1 # SAPMCTL_CFG LOCK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[1]|0x1 # SAPMCTL_CFG LOCK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[2]|0x1 # SAPMCTL_CFG LOCK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[3]|0x1 # SAPMCTL_CFG LOCK
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SetvidDecayDisable[0]|0x0 # SetVID Decay Disable
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SetvidDecayDisable[1]|0x0 # SetVID Decay Disable
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SetvidDecayDisable[2]|0x0 # SetVID Decay Disable
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SetvidDecayDisable[3]|0x0 # SetVID Decay Disable
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SnpLatMult|0x0 # Snoop Latency Multiplier
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SnpLatOvrd|0x0 # Force Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SnpLatVal|0x0 # Force Non-Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SnpLatVld|0x0 # Snoop Latency Override
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SwLtrOvrdCtl|0x0 # PCIe LTR Override Control
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TCCActivationOffset|0x0 # TCC Activation Offset
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TStateEnable|0x0 # Software Controlled T-States
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ThermalMonitorStatusFilter|0x0 # Therm-Monitor-Status Filter
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ThermalMonitorStatusFilterTimeWindow|0x9 # Therm-Monitor-Status Filter Time Window
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboMode|0x1 # Turbo Mode
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboPowerLimitCsrLock|0x1 # Package RAPL Limit CSR Lock
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboPowerLimitLock|0x0 # Package RAPL Limit MSR Lock
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[0]|0xff # TurboRatioCores0
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[1]|0xff # TurboRatioCores1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[2]|0xff # TurboRatioCores2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[3]|0xff # TurboRatioCores3
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[4]|0xff # TurboRatioCores4
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[5]|0xff # TurboRatioCores5
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[6]|0xff # TurboRatioCores6
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[7]|0xff # TurboRatioCores7
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[0]|0x0 # TurboRatioLimit0
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[1]|0x0 # TurboRatioLimit1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[2]|0x0 # TurboRatioLimit2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[3]|0x0 # TurboRatioLimit3
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[4]|0x0 # TurboRatioLimit4
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[5]|0x0 # TurboRatioLimit5
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[6]|0x0 # TurboRatioLimit6
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitRatio[7]|0x0 # TurboRatioLimit7
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.UncoreFreqRaplLimit|0x1 # Uncore Freq RAPL
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.UncoreFreqScaling|0x1 # Uncore Freq Scaling
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.UncrPerfPlmtOvrdEn|0x1 # UNCORE_PERF_PLIMIT_OVRD_EN
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.VccSAandVccIOdisable|0x0 # VccSA/VccIO Disable
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.WFRWAEnable|0x0
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.WorkLdConfig|0x0 # Workload Configuration
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.AcExceptionOnSplitLockEnable|0x0 # #AC Exception On Split Lock
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.AcmType|0x0 # ACM Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.AesEnable|0x1 # AES-NI
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.AllowMixedPowerOnCpuRatio|0x0 # Skip Flex Ratio Override
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.AmpPrefetchEnable|0x0 # AMP Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.BiosAcmErrorReset|0x0 # BIOS ACM Error Reset
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.BspSelection|0xff # Bsp Selection
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CFRPucodeEnable|0x0 # Processor Pcode/Ucode CFR
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CFRPucodeManualCommit|0x0 # Manual Commit Pcode/Ucode CFR
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CFRS3mEnable|0x0 # Processor S3M CFR
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CFRS3mManualCommit|0x0 # Manual Commit S3M FW CFR
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CheckCpuBist|0x1 # Check CPU BIST Result
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CoreDisableMask[0]|0x0 # Disable Bitmap
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CoreDisableMask[1]|0x0 # Disable Bitmap
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CoreDisableMask[2]|0x0 # Disable Bitmap
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CoreDisableMask[3]|0x0 # Disable Bitmap
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CoreFailover|0x1 # Core Failover
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CpuCrashLogGprs|0x0 # Cpu CrashLog Gprs
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CpuDbpEnable|0x0 # DBP-F
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CpuL1NextPagePrefetcherDisable|0x0 # L1 Next Page Prefetcher
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CpuMtoIWa|0x1 # MtoI Workaround
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CpuPaLimit|0x1 # Limit CPU PA to 46 bits
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CpuidMaxValue|0x0 # Max CPUID Value Limit
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CrDimmsPresent|0x0 # SW Guard Extensions (SGX)
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.DCUIPPrefetcherEnable|0x1 # DCU IP Prefetcher
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.DCUModeSelection|0x0 # DCU Mode
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.DCUStreamerPrefetcherEnable|0x1 # DCU Streamer Prefetcher
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.DebugInterface|0x0 # DEBUG INTERFACE
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS245|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS192|0x0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS234|0x0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS241|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS238|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS242|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS244|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS240|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS243|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS236|0x0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS237|0x0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS235|0x0 # TME key restore
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.EnableMktme|0x0 # Total Memory Encryption Multi-Tenant(TME-MT)
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.EnableSaf|0x0 # Enable FuSa (SAF) - variable to handle dynamic BIOS menu
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.EnableSgx|0x0 # SW Guard Extensions (SGX)
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.EnableTme|0x0 # Total Memory Encryption (TME)
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.EpochUpdate|0x2 # Select Owner EPOCH input type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.FastStringEnable|0x1 # Fast String
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ForcePhysicalModeEnable|0x0 # APIC Physical Mode
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.GlobalPsmiEnable|0x1 # Global PSMI Enable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.IedTraceSize|0x0 # IED Trace memory
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.IioLlcWaysMask|0x0 # IIO LLC Ways [19:0](Hex)
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.IotEn[0]|0x0 # IOT Cfg
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.IotEn[1]|0x0 # IOT Cfg
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.IotEn[2]|0x0 # IOT Cfg
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.IotEn[3]|0x0 # IOT Cfg
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.L2RfoPrefetchDisable|0x0 # L2 RFO Prefetch Disable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.LlcPrefetchEnable|0x1 # LLC Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.LockChipset|0x1 # Lock Chipset
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.MachineCheckEnable|0x1 # Machine Check
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.MlcSpatialPrefetcherEnable|0x1 # Adjacent Cache Prefetch
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.MlcStreamerPrefetcherEnable|0x1 # Hardware Prefetcher
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[0]|0x1 # OCLA Tor IDs
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[1]|0x1 # OCLA Tor IDs
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[2]|0x1 # OCLA Tor IDs
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[3]|0x1 # OCLA Tor IDs
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[0]|0x1 # Num of OCLA ways
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[1]|0x1 # Num of OCLA Ways
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[2]|0x1 # Num of OCLA Ways
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[3]|0x1 # Num of OCLA Ways
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PCIeDownStreamPECIWrite|0x0 # Down Stream PECI
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciAgtEspiTrustBit|0x0 # eSPI Agent
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciAgtGenericTrustBit|0x0 # Generic Agent
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciAgtIeTrustBit|0x1 # IE Agent
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciAgtLegacyTrustBit|0x1 # Legacy Agent
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciAgtSmbusTrustBit|0x0 # SMBus Agent
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciInTrustControlBit|0x1 # PECI
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PpinControl|0x1 # PPIN Control
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PrmrrSize|0x80000000 # PRMRR Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorFlexibleRatio|0x17 # CPU Core Flex Ratio
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorFlexibleRatioOverrideEnable|0x0 # CPU Flex Ratio Override
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorHyperThreadingDisable|0x0 # Hyper-Threading [ALL]
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorLtsxEnable|0x0 # Enable Intel(R) TXT
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorMsrLockControl|0x1 # MSR Lock Control
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorMsrPkgCstConfigControlLock|0x1 # PKG CST CONFIG CONTROL MSR Lock
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorSmxEnable|0x0 # Enable SMX
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorVmxEnable|0x1 # VMX
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorX2apic|0x1 # Extended APIC
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[0]|0x1 # PSMI Handler Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[1]|0x1 # PSMI Handler Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[2]|0x1 # PSMI Handler Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[3]|0x1 # PSMI Handler Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTrace[0]|0x0 # PSMI Enable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTrace[1]|0x0 # PSMI Enable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTrace[2]|0x0 # PSMI Enable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTrace[3]|0x0 # PSMI Enable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[0]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[1]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[2]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[3]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[0]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[1]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[2]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[3]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[0]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[1]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[2]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[3]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[0]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[1]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[2]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[3]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[0]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[1]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[2]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[3]|0x1 # Buffer Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion0[0]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion0[1]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion0[2]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion0[3]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion1[0]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion1[1]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion1[2]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion1[3]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion2[0]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion2[1]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion2[2]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion2[3]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion3[0]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion3[1]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion3[2]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion3[3]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion4[0]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion4[1]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion4[2]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceMemTypeRegion4[3]|0x0 # Cache Type
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion0[0]|0x0 # PSMI Trace Region 0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion0[1]|0x0 # PSMI Trace Region 0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion0[2]|0x0 # PSMI Trace Region 0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion0[3]|0x0 # PSMI Trace Region 0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion1[0]|0x0 # PSMI Trace Region 1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion1[1]|0x0 # PSMI Trace Region 1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion1[2]|0x0 # PSMI Trace Region 1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion1[3]|0x0 # PSMI Trace Region 1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion2[0]|0x0 # PSMI Trace Region 2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion2[1]|0x0 # PSMI Trace Region 2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion2[2]|0x0 # PSMI Trace Region 2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion2[3]|0x0 # PSMI Trace Region 2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion3[0]|0x0 # PSMI Trace Region 3
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion3[1]|0x0 # PSMI Trace Region 3
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion3[2]|0x0 # PSMI Trace Region 3
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion3[3]|0x0 # PSMI Trace Region 3
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion4[0]|0x0 # PSMI Trace Region 4
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion4[1]|0x0 # PSMI Trace Region 4
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion4[2]|0x0 # PSMI Trace Region 4
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceRegion4[3]|0x0 # PSMI Trace Region 4
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.RdtCatOpportunisticTuning|0x0 # RDT CAT Opportunistic Tuning
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.RemoteWaysMask|0x0 # Remote Ways [22:12](Hex)
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxAutoRegistrationAgent|0x0 # Enable/Disable SGX Auto MP Registration Agent
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxDebugMode|0x0 # Enable/Disable SGX Debug Mode
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxEpoch0|0x0 # Software Guard Extensions Epoch 0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxEpoch1|0x0 # Software Guard Extensions Epoch 1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxFactoryReset|0x0 # SGX Factory Reset
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxLePubKeyHash0|0x0 # SGXLEPUBKEYHASH0
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxLePubKeyHash1|0x0 # SGXLEPUBKEYHASH1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxLePubKeyHash2|0x0 # SGXLEPUBKEYHASH2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxLePubKeyHash3|0x0 # SGXLEPUBKEYHASH3
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxLeWr|0x1 # SGXLEPUBKEYHASHx Write Enable
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxPackageInfoInBandAccess|0x0 # SGX Package Info In-Band Access
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxQoS|0x1 # SGX QoS
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SmbusErrorRecovery|0x1 # Smbus Error Recovery
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SmmBlockedDelayed|0x0 # SMM Blocked and Delayed
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ThreeStrikeTimer|0x1 # 3StrikeTimer
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.TscResetEnable|0x0 # TSC Reset
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.TsegSize|0x5 # TSEG Smram Size
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.eSmmSaveState|0x0 # eSMM Save State
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.BaseAboveFourGiga|0x100000000 # Mega-Block base above 4GB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.BaseAboveOneMega|0x100000 # Mega-Block base above 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.BaseBelowOneMega|0x50000 # Mega-Block base below 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.CoreMegaBlock|0x0 # Core Mega Block Support
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.PolicyUnUsedAboveFourGiga|0x0 # Mega-Block non-used policy above 4GB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.PolicyUnUsedAboveOneMega|0x0 # Mega-Block non-used policy above 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.PolicyUnUsedBelowOneMega|0x0 # Mega-Block non-used policy below 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.PolicyUsedAboveFourGiga|0x4 # Mega-Block policy above 4GB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.PolicyUsedAboveOneMega|0x4 # Mega-Block policy above 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.PolicyUsedBelowOneMega|0x4 # Mega-Block policy below 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.SizeAboveFourGiga|0x0 # Mega-Block size above 4GB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.SizeAboveOneMega|0x0 # Mega-Block size above 1MB
+gStructPcdTokenSpaceGuid.PcdSvConfiguration.SizeBelowOneMega|0x0 # Mega-Block size below 1MB
+gStructPcdTokenSpaceGuid.PcdTCG2_CONFIGURATION.TpmDevice|0x1 # Attempt TPM Device
+gStructPcdTokenSpaceGuid.PcdTCG2_VERSION.PpiVersion|0x332e31 # Attempt PPI Version
+gStructPcdTokenSpaceGuid.PcdTCG2_VERSION.Tpm2AcpiTableRev|0x4 # Attempt Rev of TPM2 ACPI Table
+
+[PcdsDynamicHii.common.DEFAULT.MANUFACTURING]
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_IeResetPrepDone|0x0 # IE Reset Prep Done
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_MeResetPrepDone|0x0 # ME Reset Prep Done
+gStructPcdTokenSpaceGuid.PcdSetup.StorageOpROMSuppression|0x1 # Storage OPROM Suppression
+gStructPcdTokenSpaceGuid.PcdSetup.TagecMem|0x1 # Reserve TAGEC Memory
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS117|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemHotOuputAssertThreshold|0x0 # MEMHOT Output Throttling Mode Options
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PCIeDownStreamPECIWrite|0x1 # Down Stream PECI
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorMsrLockControl|0x0 # MSR Lock Control
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorVmxEnable|0x0 # VMX
+
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc b/Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc
new file mode 100644
index 0000000000..0c166ade00
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc
@@ -0,0 +1,3796 @@
+## @file
+# @copyright
+# Copyright 2019 - 2021 Intel Corporation. <BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ VPD_TOOL_GUID = 8C3D856A-9BE6-468E-850A-24F7A8D38E08
+
+[SkuIds]
+ 0|DEFAULT # The entry: 0|DEFAULT is reserved and always required.
+
+[DefaultStores]
+ 0|STANDARD # UEFI Standard default 0|STANDARD is reserved.
+ 1|MANUFACTURING # UEFI Manufacturing default 1|MANUFACTURING is reserved.
+
+[PcdsDynamicExVpd.common.DEFAULT]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdNvStoreDefaultValueBuffer|*
+
+[PcdsDynamicExHii.common.DEFAULT.STANDARD]
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig|L"FpgaSocketConfig"|gFpgaSocketVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig|L"SocketMemoryConfig"|gEfiSocketMemoryVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdPchSetup|L"PchSetup"|gPchSetupVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig|L"SocketProcessorCoreConfig"|gEfiSocketProcessorCoreVarGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSetup|L"Setup"|gCommonSystemConfigurationGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig|L"SocketCommonRcConfig"|gEfiSocketCommonRcVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig|L"SocketPowerManagementConfig"|gEfiSocketPowermanagementVarGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig|L"SocketMpLinkConfig"|gEfiSocketMpLinkVariableGuid|0x00||NV, BS, RT
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig|L"SocketIioConfig"|gEfiSocketIioVariableGuid|0x00||NV, BS, RT
+
+!if $(TARGET) == "DEBUG"
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvl|0x4
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvlTrainResults|0x8
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DebugPrintLevel|0xF
+!else
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvl|0x0
+gStructPcdTokenSpaceGuid.PcdSetup.serialDebugMsgLvlTrainResults|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DebugPrintLevel|0x0
+!endif
+
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ATS|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CbDmaMultiCastEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CoherencySupport|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutGlobal|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutGlobalValue|0x9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[0]|0x9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[1]|0x9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[2]|0x9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.CompletionTimeoutValue[3]|0x9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU0[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU1[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU2[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU3[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ConfigIOU4[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[64]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[65]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[66]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[67]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[68]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[69]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[70]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[71]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[72]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[73]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[74]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[75]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[76]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[77]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[78]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[79]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[80]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[81]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[82]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DeEmphasis[83]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DevPresIoApicIio[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS19|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[4]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[5]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[6]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[7]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[8]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[9]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[10]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[11]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[12]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[13]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[14]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[15]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[16]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[17]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[18]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[19]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[20]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[21]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[22]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[23]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[24]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[25]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[26]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[27]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[28]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[29]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[30]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[31]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[32]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[33]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[34]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[35]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[36]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[37]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[38]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[39]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[40]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[41]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[42]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[43]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[44]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[45]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[46]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[47]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[48]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[49]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[50]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[51]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[52]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[53]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[54]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[55]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[56]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[57]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[58]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[59]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[60]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[61]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[62]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[63]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[64]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[65]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[66]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[67]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[68]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[69]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[70]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[71]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[72]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[73]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[74]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[75]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[76]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[77]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[78]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[79]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[80]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[81]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[82]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS39[83]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[0]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[1]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[2]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[3]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[4]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[5]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[6]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[7]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[8]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[9]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[10]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[11]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[12]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[13]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[14]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[15]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[16]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[17]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[18]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[19]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[20]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[21]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[22]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[23]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[24]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[25]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[26]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[27]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[28]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[29]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[30]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[31]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[32]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[33]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[34]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[35]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[36]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[37]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[38]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[39]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[40]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[41]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[42]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[43]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[44]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[45]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[46]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[47]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[48]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[49]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[50]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[51]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[52]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[53]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[54]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[55]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[56]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[57]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[58]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[59]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[60]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[61]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[62]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[63]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[64]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[65]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[66]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[67]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[68]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[69]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[70]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[71]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[72]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[73]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[74]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[75]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[76]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[77]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[78]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[79]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[80]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[81]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[82]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS26[83]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[0]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[1]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[2]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[3]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[4]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[5]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[6]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[7]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[8]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[9]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[10]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[11]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[12]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[13]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[14]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[15]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[16]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[17]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[18]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[19]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[20]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[21]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[22]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[23]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[24]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[25]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[26]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[27]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[28]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[29]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[30]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[31]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[32]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[33]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[34]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[35]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[36]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[37]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[38]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[39]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[40]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[41]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[42]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[43]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[44]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[45]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[46]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[47]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[48]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[49]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[50]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[51]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[52]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[53]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[54]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[55]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[56]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[57]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[58]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[59]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[60]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[61]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[62]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[63]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[64]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[65]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[66]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[67]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[68]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[69]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[70]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[71]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[72]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[73]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[74]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[75]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[76]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[77]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[78]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[79]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[80]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[81]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[82]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS27[83]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[0]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[1]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[2]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[3]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[4]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[5]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[6]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[7]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[8]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[9]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[10]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[11]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[12]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[13]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[14]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[15]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[16]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[17]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[18]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[19]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[20]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[21]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[22]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[23]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[24]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[25]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[26]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[27]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[28]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[29]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[30]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[31]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[32]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[33]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[34]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[35]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[36]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[37]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[38]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[39]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[40]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[41]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[42]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[43]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[44]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[45]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[46]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[47]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[48]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[49]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[50]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[51]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[52]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[53]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[54]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[55]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[56]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[57]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[58]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[59]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[60]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[61]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[62]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[63]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[64]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[65]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[66]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[67]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[68]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[69]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[70]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[71]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[72]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[73]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[74]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[75]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[76]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[77]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[78]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[79]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[80]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[81]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[82]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS25[83]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[0]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[1]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[2]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[3]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[4]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[5]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[6]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[7]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[8]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[9]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[10]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[11]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[12]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[13]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[14]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[15]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[16]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[17]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[18]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[19]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[20]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[21]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[22]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[23]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[24]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[25]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[26]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[27]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[28]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[29]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[30]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[31]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[32]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[33]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[34]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[35]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[36]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[37]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[38]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[39]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[40]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[41]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[42]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[43]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[44]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[45]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[46]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[47]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[48]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[49]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[50]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[51]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[52]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[53]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[54]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[55]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[56]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[57]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[58]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[59]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[60]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[61]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[62]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[63]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[64]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[65]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[66]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[67]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[68]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[69]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[70]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[71]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[72]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[73]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[74]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[75]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[76]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[77]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[78]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[79]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[80]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[81]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[82]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS29[83]|0x29
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[0]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[1]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[2]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[3]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[4]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[5]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[6]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[7]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[8]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[9]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[10]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[11]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[12]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[13]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[14]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[15]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[16]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[17]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[18]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[19]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[20]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[21]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[22]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[23]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[24]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[25]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[26]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[27]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[28]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[29]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[30]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[31]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[32]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[33]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[34]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[35]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[36]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[37]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[38]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[39]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[40]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[41]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[42]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[43]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[44]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[45]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[46]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[47]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[48]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[49]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[50]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[51]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[52]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[53]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[54]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[55]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[56]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[57]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[58]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[59]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[60]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[61]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[62]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[63]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[64]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[65]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[66]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[67]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[68]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[69]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[70]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[71]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[72]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[73]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[74]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[75]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[76]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[77]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[78]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[79]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[80]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[81]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[82]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS30[83]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[0]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[1]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[2]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[3]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[4]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[5]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[6]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[7]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[8]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[9]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[10]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[11]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[12]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[13]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[14]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[15]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[16]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[17]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[18]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[19]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[20]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[21]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[22]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[23]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[24]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[25]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[26]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[27]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[28]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[29]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[30]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[31]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[32]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[33]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[34]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[35]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[36]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[37]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[38]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[39]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[40]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[41]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[42]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[43]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[44]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[45]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[46]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[47]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[48]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[49]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[50]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[51]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[52]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[53]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[54]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[55]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[56]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[57]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[58]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[59]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[60]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[61]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[62]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[63]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[64]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[65]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[66]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[67]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[68]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[69]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[70]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[71]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[72]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[73]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[74]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[75]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[76]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[77]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[78]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[79]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[80]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[81]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[82]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS28[83]|0xB
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS17|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS16|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS14|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS13|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS12|0x99
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS18|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[4]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[5]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[6]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[7]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[8]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[9]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[10]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[11]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[12]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[13]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[14]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[15]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[16]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[17]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[18]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[19]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[20]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[21]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[22]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[23]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[24]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[25]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[26]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[27]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[28]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[29]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[30]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[31]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[32]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[33]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[34]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[35]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[36]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[37]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[38]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[39]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[40]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[41]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[42]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[43]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[44]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[45]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[46]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[47]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[48]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[49]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[50]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[51]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[52]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[53]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[54]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[55]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[56]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[57]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[58]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[59]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[60]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[61]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[62]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[63]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[64]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[65]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[66]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[67]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[68]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[69]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[70]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[71]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[72]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[73]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[74]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[75]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[76]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[77]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[78]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[79]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[80]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[81]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[82]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS40[83]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[4]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[5]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[6]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[7]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[8]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[9]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[10]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[11]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[12]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[13]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[14]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[15]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[16]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[17]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[18]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[19]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[20]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[21]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[22]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[23]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[24]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[25]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[26]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[27]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[28]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[29]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[30]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[31]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[32]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[33]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[34]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[35]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[36]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[37]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[38]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[39]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[40]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[41]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[42]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[43]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[44]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[45]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[46]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[47]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[48]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[49]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[50]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[51]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[52]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[53]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[54]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[55]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[56]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[57]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[58]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[59]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[60]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[61]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[62]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[63]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[64]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[65]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[66]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[67]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[68]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[69]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[70]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[71]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[72]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[73]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[74]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[75]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[76]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[77]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[78]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[79]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[80]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[81]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[82]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.ReservedS41[83]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DmiAllocatingFlow|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.DualCvIoFlow|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[1]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[2]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[3]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[4]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[5]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[6]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[7]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[8]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[9]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[10]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[11]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[12]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[13]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[14]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[15]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[16]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[17]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[18]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[19]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[20]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[21]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[22]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[23]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[24]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[25]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[26]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[27]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[28]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[29]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[30]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[31]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[32]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[33]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[34]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[35]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[36]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[37]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[38]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[39]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[40]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[41]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[42]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[43]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[44]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[45]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[46]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[47]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[48]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[49]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[50]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[51]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[52]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[53]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[54]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[55]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[56]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[57]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[58]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[59]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[60]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[61]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[62]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[63]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[64]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[65]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[66]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[67]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[68]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[69]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[70]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[71]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[72]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[73]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[74]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[75]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[76]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[77]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[78]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[79]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[80]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[81]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[82]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.EOI[83]|0x0
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[64]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[65]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[66]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[67]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[68]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[69]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[70]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[71]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[72]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[73]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[74]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[75]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[76]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[77]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[78]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[79]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[80]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[81]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[82]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.HidePEXPMenu[83]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.InterruptRemap|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[0]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[1]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[2]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[3]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[4]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[5]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[6]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[7]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[8]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[9]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[10]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[11]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[12]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[13]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[14]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[15]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[16]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[17]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[18]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[19]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[20]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[21]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[22]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[23]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[24]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[25]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[26]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[27]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[28]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[29]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[30]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[31]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[32]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[33]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[34]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[35]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[36]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[37]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[38]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[39]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[40]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[41]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[42]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[43]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[44]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[45]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[46]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[47]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[48]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[49]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[50]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[51]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[52]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[53]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[54]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[55]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[56]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[57]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[58]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[59]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[60]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[61]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[62]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[63]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[64]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[65]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[66]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[67]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[68]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[69]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[70]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[71]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[72]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[73]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[74]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[75]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[76]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[77]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[78]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[79]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[80]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[81]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[82]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.IODC[83]|0x6
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.McastIndexPosition|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.McastNumGroup|0x8
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[64]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[65]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[66]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[67]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[68]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[69]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[70]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[71]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[72]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[73]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[74]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[75]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[76]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[77]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[78]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[79]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[80]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[81]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[82]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.MctpEn[83]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NoSnoopWrCfg|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[0]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[1]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[2]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[3]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[4]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[5]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[6]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[7]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[8]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[9]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[10]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[11]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[12]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[13]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[14]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[15]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[16]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[17]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[18]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ1[19]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[0]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[1]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[2]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[3]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[4]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[5]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[6]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[7]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[8]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[9]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[10]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[11]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[12]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[13]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[14]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[15]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[16]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[17]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[18]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2[19]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[0]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[1]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[2]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[3]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[4]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[5]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[6]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[7]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[8]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[9]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[10]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[11]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[12]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[13]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[14]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[15]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[16]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[17]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[18]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_0[19]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[0]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[1]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[2]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[3]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[4]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[5]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[6]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[7]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[8]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[9]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[10]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[11]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[12]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[13]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[14]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[15]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[16]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[17]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[18]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeEmBarSZ2_1[19]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[0]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[1]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[2]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[3]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[4]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[5]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[6]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[7]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[8]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[9]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[10]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[11]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[12]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[13]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[14]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[15]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[16]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[17]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[18]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar1[19]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[0]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[1]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[2]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[3]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[4]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[5]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[6]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[7]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[8]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[9]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[10]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[11]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[12]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[13]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[14]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[15]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[16]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[17]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[18]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2[19]|0x16
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[0]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[1]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[2]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[3]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[4]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[5]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[6]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[7]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[8]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[9]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[10]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[11]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[12]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[13]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[14]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[15]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[16]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[17]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[18]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_0[19]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[0]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[1]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[2]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[3]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[4]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[5]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[6]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[7]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[8]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[9]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[10]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[11]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[12]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[13]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[14]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[15]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[16]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[17]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[18]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbBarSizeImBar2_1[19]|0xC
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbLinkBiosTrainEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[0]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[1]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[2]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[3]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[4]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[5]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[6]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[7]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[8]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[9]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[10]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[11]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[12]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[13]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[14]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[15]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[16]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[17]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[18]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.NtbXlinkCtlOverride[19]|0x3
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Pci64BitResourceAllocation|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PCIe_LTR|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAllocatingFlow|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[0]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[1]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[2]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[3]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[4]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[5]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[6]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[7]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[8]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[9]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[10]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[11]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[12]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[13]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[14]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[15]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[16]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[17]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[18]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[19]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[20]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[21]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[22]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[23]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[24]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[25]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[26]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[27]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[28]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[29]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[30]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[31]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[32]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[33]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[34]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[35]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[36]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[37]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[38]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[39]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[40]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[41]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[42]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[43]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[44]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[45]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[46]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[47]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[48]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[49]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[50]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[51]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[52]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[53]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[54]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[55]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[56]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[57]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[58]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[59]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[60]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[61]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[62]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[63]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[64]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[65]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[66]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[67]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[68]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[69]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[70]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[71]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[72]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[73]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[74]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[75]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[76]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[77]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[78]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[79]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[80]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[81]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[82]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieAspm[83]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieBiosTrainEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[64]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[65]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[66]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[67]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[68]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[69]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[70]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[71]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[72]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[73]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[74]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[75]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[76]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[77]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[78]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[79]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[80]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[81]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[82]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieCommonClock[83]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[64]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[65]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[66]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[67]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[68]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[69]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[70]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[71]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[72]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[73]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[74]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[75]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[76]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[77]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[78]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[79]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[80]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[81]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[82]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieDataLinkFeatureExchangeEnable[83]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieExtendedTagField|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieGlobalAspm|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[0]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[1]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[2]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[3]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[4]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[5]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[6]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[7]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[8]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[9]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[10]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[11]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[12]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[13]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[14]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[15]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[16]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[17]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[18]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[19]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[20]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[21]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[22]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[23]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[24]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[25]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[26]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[27]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[28]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[29]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[30]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[31]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[32]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[33]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[34]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[35]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[36]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[37]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[38]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[39]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[40]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[41]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[42]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[43]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[44]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[45]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[46]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[47]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[48]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[49]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[50]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[51]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[52]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[53]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[54]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[55]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[56]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[57]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[58]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[59]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[60]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[61]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[62]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[63]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[64]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[65]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[66]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[67]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[68]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[69]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[70]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[71]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[72]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[73]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[74]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[75]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[76]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[77]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[78]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[79]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[80]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[81]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[82]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieL1Latency[83]|0x4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[0]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[1]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[2]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[3]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[4]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[5]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[6]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[7]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[8]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[9]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[10]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[11]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[12]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[13]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[14]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[15]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[16]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[17]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[18]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[19]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[20]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[21]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[22]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[23]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[24]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[25]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[26]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[27]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[28]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[29]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[30]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[31]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[32]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[33]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[34]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[35]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[36]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[37]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[38]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[39]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[40]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[41]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[42]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[43]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[44]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[45]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[46]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[47]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[48]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[49]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[50]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[51]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[52]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[53]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[54]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[55]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[56]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[57]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[58]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[59]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[60]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[61]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[62]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[63]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[64]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[65]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[66]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[67]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[68]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[69]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[70]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[71]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[72]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[73]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[74]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[75]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[76]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[77]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[78]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[79]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[80]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[81]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[82]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxPayload[83]|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieMaxReadRequestSize|0x7
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[12]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[18]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[24]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[30]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[64]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[65]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[66]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[67]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[68]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[69]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[70]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[71]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[72]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[73]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[74]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[75]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[76]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[77]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[78]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[79]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[80]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[81]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[82]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortClkGateEnable[83]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[1]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[2]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[3]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[4]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[5]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[6]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[7]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[8]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[9]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[10]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[11]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[12]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[13]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[14]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[15]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[16]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[17]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[18]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[19]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[20]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[21]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[22]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[23]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[24]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[25]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[26]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[27]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[28]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[29]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[30]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[31]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[32]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[33]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[34]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[35]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[36]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[37]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[38]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[39]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[40]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[41]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[42]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[43]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[44]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[45]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[46]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[47]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[48]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[49]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[50]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[51]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[52]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[53]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[54]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[55]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[56]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[57]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[58]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[59]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[60]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[61]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[62]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[63]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[64]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[65]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[66]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[67]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[68]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[69]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[70]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[71]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[72]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[73]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[74]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[75]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[76]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[77]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[78]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[79]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[80]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[81]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[82]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePortEnable[83]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PciePtm|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieRelaxedOrdering|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom1|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom2|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom3|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom4|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom5|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom6|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom7|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PcieSlotOprom8|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PerformanceTuningMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.PostedInterrupt|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.SnoopResponseHoldOff|0x9
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[1]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[2]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[3]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[4]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[5]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[7]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[8]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[9]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[10]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[11]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[13]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[14]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[15]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[16]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[17]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[19]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[20]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[21]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[22]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[23]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[1]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[2]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[3]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[4]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[5]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[7]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[8]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[9]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[10]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[11]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[13]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[14]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[15]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[16]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[17]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[19]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[20]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[21]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[22]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[23]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[8]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[9]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[10]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[11]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[13]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[14]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[15]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[16]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[17]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[19]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[20]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[21]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[22]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[23]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[1]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[2]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[3]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[4]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[5]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[7]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[8]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[9]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[10]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[11]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[13]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[14]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[15]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[16]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[17]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[19]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[20]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[21]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[22]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[23]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[1]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[2]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[3]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[4]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[5]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[7]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[8]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[9]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[10]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[11]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[13]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[14]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[15]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[16]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[17]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[19]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[20]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[21]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[22]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[23]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VtdAcsWa|0x1
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmiohBase|0x2
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmiohSize|0x3
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmcfgBase|0x6
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.MmcfgSize|0x6
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.IsocEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.NumaEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS6|0xF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[4]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[5]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[6]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[7]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[8]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[9]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[10]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[11]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[12]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[13]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[14]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[15]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[16]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[17]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[18]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[19]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[20]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[21]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[22]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[23]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[24]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[25]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[26]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[27]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[28]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[29]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[30]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketCommonRcConfig.ReservedS7[31]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.D2KCreditConfig|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS154|0x5
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS159|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS176|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS177|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS181|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS182|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS180|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS178|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS179|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS167|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS168|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS158|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS164|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS157|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS163|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS151|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS156|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS162|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS152|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS153|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS169|0x8
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS173|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS160|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS161|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS170|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS171|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS172|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS184|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS174|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS155|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS165|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS166|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.ReservedS175|0x5
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.DirectoryModeEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.IoDcMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.IrqThreshold|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiAdaptationSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiCrcMode|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiFailoverEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLinkL0pEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLinkL1En|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiPrefetchEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.KtiSkuMismatchCheck|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.LLCDeadLineAlloc|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.QpiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.QpiLinkSpeedMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.RdCurForXptPrefetchEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.StaleAtoSOptEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.TorThresLoctoremEmpty|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.TorThresLoctoremNorm|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.MbeBwCal|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.TscSyncEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.XptPrefetchEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.XptRemotePrefetchEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu0P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu1P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu2P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu3P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdddcErrInjEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ADRDataSaveMode|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ADREn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondition|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondPause|0x186A0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondTrefi|0x3CF0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondTwr|0xA
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AdvMemTestCondVdd|0x4EC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.allowCorrectableMemTestError|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.AttemptFastBootCold|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS99|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS100|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS101|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS104|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS89|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS102|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS103|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS91|0x10
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS88|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS90|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS95|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS96|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS97|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS98|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Blockgnt2cmd1cyc|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CkeIdleTimer|0x14
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CkMode|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmdNormalization|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.cmdSetupPercentOffset|0x32
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmdTxEqCalibration|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CmsEnableDramPm|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.CustomRefreshRate|0x14
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DataDllOff|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmAveragePowerLimit|0x2EE0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmAveragePowerTimeConstant|0x6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmEccModeSwitch|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmMbbAveragePowerTimeConstant|0x3A98
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmMbbFeature|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DcpmmMbbMaxPowerLimit|0x3A98
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdjcTraining|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrMemoryType|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DdrtCkeEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS48|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS83|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS122|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS121|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS120|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS136|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS63|0x7
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS62|0xF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS67|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS65|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS66|0x40
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS73|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS109|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS78|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS68|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS110|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS57|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS56|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS61|0x1FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS51|0x1F
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS52|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS50|0x40
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS60|0x3F
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS58|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS59|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS55|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS53|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS54|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS108|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS70|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS79|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS117|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS118|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS140|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS141|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS142|0x0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS75|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS80|0x4
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS149|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[4]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[5]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[12]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[13]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[14]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[15]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[16]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[17]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[24]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[25]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[26]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[27]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[28]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[29]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[36]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[37]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[38]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[39]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[40]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[41]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS64|0x7FF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS113|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS134|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS69|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS133|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DieSparing|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Disddrtopprd|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRaplEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRaplExtendedRange|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRaplPwrLimitLockCsr|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DramRonEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.DutyCycleTraining|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EccEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EccSupport|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EliminateDirectoryInFarMemory|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS84|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS85|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnforcePopulationPor|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EnforcePOR|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.eraseArmNVDIMMS|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.EsddcEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FastGoConfig|0x6
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.FourxRefreshValue|0x5F
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.HalfxRefreshValue|0x19
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.haltOnMemErr|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.HwMemTest|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.iModeTraining|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LatchSystemShutdownState|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktHi|0x29
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktHour|0x18
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.leakyBktLo|0x28
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmBacksideVrefEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmRdVrefEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmRxDqCentering|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmTxDqCentering|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LrDimmWrVrefEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.LsxImplementation|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.McRonEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MdllOffEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.mdllSden|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemCeFloodPolicy|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlows|0xFFFFFFFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlowsExt|0xFFFFFFFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlowsExt2|0xFFFFFFFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memFlowsExt3|0xFFFFFFFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemHotOuputAssertThreshold|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.memInterleaveGran1LM|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MemTestLoops|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.multiSparingRanks|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.MultiThreaded|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnArsPublish|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnCmdTime|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccCorr|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccExitCorr|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccRdChk|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NgnEccWrChk|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NonPreferredWayMask|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.normOppInterval|0x400
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvdimmSmbusMaxAccessTime|0x15E
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvdimmSmbusReleaseDelay|0x96
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvmdimmPowerCyclePolicy|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.NvmMediaStatusException|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetCmdAll|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetCmdVref|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetCtlAll|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetRxDq|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetRxVref|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetTxDq|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.OffsetTxVref|0x64
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.oneRankTimingMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.oppReadInWmm|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PagePolicy|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PatrolScrub|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PatrolScrubAddrMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PatrolScrubDuration|0x18
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.pda|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PeriodicRcomp|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PeriodicRcompInterval|0xF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PkgcSrefEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PpdEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.pprType|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PreferredReadFirst|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.promoteMrcWarnings|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.promoteWarnings|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.PxcTraining|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.readVrefCenter|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.refreshMode|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.restoreNVDIMMS|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RoundTripLatency|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.RxCtleTrnEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleEnDDRT|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleSeedHigh|0xD395
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ScrambleSeedLow|0xA02B
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.smbSpeed|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.spareErrTh|0x7FFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.spdCrcCheck|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Srat|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap1End|0xA
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap1Size|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap1Start|0x8C
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap2End|0xF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap2Size|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap2Start|0x73
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap3End|0xC
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap3Size|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap3Start|0x70
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap4End|0x9
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap4Size|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Tap4Start|0x6D
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TempRefreshOption|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.thermalthrottlingsupport|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TrefiNumofRank|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.turnaroundOpt|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.turnaroundOptDdrt|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.TwoxRefreshValue|0x53
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.txEqCalibration|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.Vdd|0x4B0
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.volMemMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.wrVrefCenter|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.CurrentLimit|0x438
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EngAvgTimeWdw1|0x17
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit1Time|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit2Time|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AcpiS3Enable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AcpiS4Enable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AltEngPerfBIAS|0x7
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AvxIccpLevel|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.AvxSupport|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.C1AutoDemotion|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.C1AutoUnDemotion|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ConfigTdpLock|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgcCriteria|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[0]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[1]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[2]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[3]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableProcHot|0x3
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableThermalMonitor|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnableXe|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnhancedPmaxDetector|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.FastRaplDutyCycle|0x40
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.GpssTimer|0x32
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.LTRSwInput|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.MonitorMWait|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.NativeAspmEnable|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.OverclockingLock|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0TtlTimeHigh1|0x3A
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0TtlTimeLow1|0x23
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PackageCState|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcodeWdogTimerEn|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPLimitClipC|0x1F
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPlimitDifferential|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPLimitEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PerfPLmtThshld|0xF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[0]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[1]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[2]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[3]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[0]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[1]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[2]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[3]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PmaxDetector|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit1En|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PowerLimit2En|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PpcccLock|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorC1eEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorConfigurePbf|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEistEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEPPEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorEppProfile|0x55
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProcessorHWPMEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.ProchotLock|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PwrPerfSwitch|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboMode|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboPowerLimitCsrLock|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[0]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[1]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[2]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[3]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[4]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[5]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[6]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.TurboRatioLimitCores[7]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.UncrPerfPlmtOvrdEn|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PrmrrSize|0x80000000
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.AesEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.BspSelection|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CheckCpuBist|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.CoreFailover|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.DCUIPPrefetcherEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.DCUStreamerPrefetcherEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS245|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS241|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS242|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ReservedS240|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.EpochUpdate|0x2
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.FastStringEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.GlobalPsmiEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.KeySplit|0x7
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.LockChipset|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.MachineCheckEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.MlcSpatialPrefetcherEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.MlcStreamerPrefetcherEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PeciInTrustControlBit|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PpinControl|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorFlexibleRatio|0x17
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ProcessorVmxEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxAutoRegistrationAgent|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxLeWr|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxPackageInfoInBandAccess|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SgxQoS|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.SmbusErrorRecovery|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.ThreeStrikeTimer|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.TsegSize|0x5
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorErrThres|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.CpuVccInVoltage|0x167
+gStructPcdTokenSpaceGuid.PcdSetup.SerialBaudRate|0x1C200
+gStructPcdTokenSpaceGuid.PcdSetup.Gen12TimeWindow|0xFFFF
+gStructPcdTokenSpaceGuid.PcdSetup.ReserveStartAddr|0x100000
+gStructPcdTokenSpaceGuid.PcdSetup.BaudRate|0x5
+gStructPcdTokenSpaceGuid.PcdSetup.ExpectedBer|0x7FFFFFFFF
+gStructPcdTokenSpaceGuid.PcdSetup.XmlCliSupport|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ApplicationProfile|0xFF
+gStructPcdTokenSpaceGuid.PcdSetup.LomDisableByGpio|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[0]|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[1]|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[2]|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FpkPortConfig[3]|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.XhciWakeOnUsbEnabled|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.SystemErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.RasLogLevel|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PoisonEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.UboxToPcuMcaEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaCsmiEn|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.CsmiDynamicDisable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.EmcaMsmiEn|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.ElogCorrErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ElogMemErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ElogProcErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.LmceEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.WheaSupportEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.WheaLogMemoryEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.WheaLogProcEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.WheaLogPciEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.WheaErrInjEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.MemErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.CorrMemErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.SpareIntSelect|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FnvErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FnvErrorLowPrioritySignal|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FnvErrorHighPrioritySignal|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.NgnHostAlertPatrolScrubUNC|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ReportAlertSPA|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IoMcaEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioSev1Pcc|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioErrRegistersClearEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.DisableMAerrorLoggingDueToLER|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.EdpcInterrupt|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.EdpcErrCorMsg|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioIrpErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioMiscErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioVtdErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioDmaErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioDmiErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioPcieAddCorrErrorEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.IioPcieAddUnCorrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PsfUrEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PmsbRouterParityErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieCorrErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieUncorrErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieFatalErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerCorrErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerNfatErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerFatErrEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PcieAerEcrcEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.McBankWarmBootClearError|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_parityError|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_qtOverflow|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_unexprsp|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_csraccunaligned|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_unceccCs1|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_unceccCs0|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_rcvdpoison|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_crreccCs1|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.irpp0_crreccCs0|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PropagateSerr|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PropagatePerr|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.Use1GPageTable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.UsbMassResetDelay|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ConsoleRedirection|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.LegacyOsRedirection|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.DataBits|0x8
+gStructPcdTokenSpaceGuid.PcdSetup.Parity|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.StopBits|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ARIEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.SRIOVEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.SvidEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FivrFaultsEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.FivrEfficiencyEnable|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.ReservedS2|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.ReservedS3|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.Gen34TimeWindow|0x2
+gStructPcdTokenSpaceGuid.PcdSetup.Gen34ErrorThreshold|0x10
+gStructPcdTokenSpaceGuid.PcdSetup.Gen34ReEqualization|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.Gen2LinkDegradation|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.Gen3LinkDegradation|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.Gen4LinkDegradation|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.Ce2LmLoggingEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.KtiFirstCeLatchEn|0x1
+gStructPcdTokenSpaceGuid.PcdSetup.PatrolScrubErrorReporting|0x0
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[0]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[1]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[2]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[3]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[4]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[5]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[6]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[7]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[8]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[9]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[10]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[11]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[12]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[13]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[14]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[15]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[16]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[17]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[18]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideValue[19]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[0]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[1]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[2]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[3]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[4]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[5]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[6]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[7]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[8]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[9]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[10]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[11]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[12]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[13]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[14]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[15]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[16]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[17]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[18]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideValue[19]|0x3C
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataSnoopLatencyOverrideValue|0x28
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataSnoopLatencyOverrideValue|0x28
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrMultiplierVal|0x63
+gStructPcdTokenSpaceGuid.PcdPchSetup.AdrTimerVal|0x4
+gStructPcdTokenSpaceGuid.PcdPchSetup.Btcg|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_BmcRootPort|0x5
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_IeResetPrepDone|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.Dwr_MeResetPrepDone|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.DwrEn_PMCGBL|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchBiosLock|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchCrossThrottling|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchEvaLockDown|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchEvaMrom0HookEnable|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchEvaMrom1HookEnable|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchGpioLockDown|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchHdAudio|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieGlobalAspm|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[10]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[11]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[12]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[13]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[14]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[15]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[16]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[17]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[18]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieLtrEnable[19]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[0]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[1]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[2]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[3]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[4]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[5]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[6]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[7]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[8]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[9]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[10]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[11]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[12]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[13]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[14]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[15]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[16]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[17]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[18]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMode[19]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[0]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[1]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[2]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[3]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[4]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[5]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[6]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[7]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[8]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[9]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[10]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[11]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[12]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[13]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[14]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[15]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[16]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[17]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[18]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieNonSnoopLatencyOverrideMultiplier[19]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[0]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[1]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[2]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[3]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[4]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[5]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[6]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[7]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[8]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[9]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[10]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[11]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[12]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[13]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[14]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[15]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[16]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[17]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[18]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMode[19]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[0]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[1]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[2]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[3]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[4]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[5]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[6]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[7]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[8]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[9]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[10]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[11]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[12]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[13]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[14]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[15]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[16]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[17]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[18]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieSnoopLatencyOverrideMultiplier[19]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieUX16MaxPayloadSize|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchPcieUX8MaxPayloadSize|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchRtcLock|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSata|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataLtrConfigLock|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataLtrEnable|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSataSnoopLatencyOverrideMultiplier|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSlpLanLowDc|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchsSata|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataLtrConfigLock|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataLtrEnable|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchSSataSnoopLatencyOverrideMultiplier|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchTraceHubHide|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchTraceHubMode|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[10]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[11]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[12]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbHsPort[13]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PchUsbSsPort[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[0]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[1]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[2]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[3]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[4]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[5]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[6]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[7]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[8]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[9]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[10]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[11]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[12]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[13]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[14]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[15]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[16]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[17]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[18]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCm[19]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[0]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[1]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[2]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[3]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[4]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[5]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[6]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[7]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[8]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[9]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[10]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[11]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[12]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[13]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[14]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[15]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[16]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[17]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[18]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieLaneCp[19]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PciePllSsc|0xFE
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[10]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[11]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[12]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[13]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[14]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[15]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[16]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[17]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[18]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortACS[19]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[10]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[11]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[12]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[13]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[14]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[15]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[16]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[17]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[18]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortAER[19]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[10]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[11]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[12]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[13]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[14]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[15]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[16]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[17]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[18]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEn[19]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[8]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[9]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[10]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[11]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[12]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[13]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[14]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[15]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[16]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[17]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[18]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortEqPh3Method[19]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortFunctionSwapping|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[0]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[1]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[2]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[3]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[4]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[5]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[6]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[7]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[8]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[9]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[10]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[11]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[12]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[13]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[14]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[15]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[16]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[17]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[18]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortL1SubStates[19]|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieRootPortMaxReadRequestSize|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[0]|0x6
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[1]|0x4
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[2]|0x8
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[3]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCm[4]|0xA
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[0]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[1]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[2]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[3]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PcieSwEqCoeffCp[4]|0x2
+gStructPcdTokenSpaceGuid.PcdPchSetup.PmcReadDisable|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataHddlk|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataLedl|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataMechanicalSw[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[6]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataPort[7]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidIooe|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidIrrt|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidOub|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR0|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR1|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR10|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidR5|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataRaidSrt|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.SataSalp|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataHddlk|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataLedl|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[0]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[1]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[2]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[3]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[4]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataPort[5]|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidIooe|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidIrrt|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidOub|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR0|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR1|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR10|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidR5|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataRaidSrt|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.sSataSalp|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.TestSmbusSpdWriteDisable|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.ThermalDeviceEnable|0x3
+gStructPcdTokenSpaceGuid.PcdPchSetup.Usb3PinsTermination|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.XhciIdleL1|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.XhciOcMapEnabled|0x1
+gStructPcdTokenSpaceGuid.PcdPchSetup.XTpmLen|0x1
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaSetupEnabled|0x3
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH1[0]|0x5A
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH1[1]|0x5A
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH2[0]|0x5D
+gStructPcdTokenSpaceGuid.PcdFpgaSocketConfig.FpgaThermalTH2[1]|0x5D
+
+!if $(MAX_SOCKET) > 4
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[36]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[42]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[48]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[49]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[50]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[51]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[52]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[53]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[54]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[55]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[56]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[57]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[58]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[59]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[60]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[61]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[62]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.Cb3DmaEn[63]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[25]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[26]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[27]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[28]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[29]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[31]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[32]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[33]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[34]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[35]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[37]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[38]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[39]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[40]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[41]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[43]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[44]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[45]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[46]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarAttr[47]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[25]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[26]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[27]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[28]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[29]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[31]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[32]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[33]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[34]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[35]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[37]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[38]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[39]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[40]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[41]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[43]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[44]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[45]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[46]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDCfgBarSz[47]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[25]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[26]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[27]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[28]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[29]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[31]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[32]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[33]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[34]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[35]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[37]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[38]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[39]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[40]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[41]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[43]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[44]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[45]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[46]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBar2Attr[47]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[25]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[26]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[27]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[28]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[29]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[31]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[32]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[33]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[34]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[35]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[37]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[38]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[39]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[40]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[41]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[43]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[44]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[45]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[46]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz1[47]|0x19
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[25]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[26]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[27]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[28]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[29]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[31]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[32]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[33]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[34]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[35]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[37]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[38]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[39]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[40]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[41]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[43]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[44]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[45]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[46]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketIioConfig.VMDMemBarSz2[47]|0x14
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.BusRatio[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P0KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P0KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P1KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P1KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P2KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P2KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P3KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P3KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P4KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P4KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P5KtiLinkSpeed|0x3
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P5KtiLinkVnaOverride|0x7F
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu4P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu5P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu6P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P0ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P0ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P0ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P0ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P1ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P1ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P1ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P1ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P2ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P2ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P2ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P2ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P3ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P3ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P3ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P3ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P4ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P4ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P4ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P4ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P5ReservedS189|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P5ReservedS190|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P5ReservedS191|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMpLinkConfig.Cpu7P5ReservedS246|0x2
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[48]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[49]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[50]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[51]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[52]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[53]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[60]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[61]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[62]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[63]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[64]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[65]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[72]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[73]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[74]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[75]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[76]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[77]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[84]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[85]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[86]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[87]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[88]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketMemoryConfig.ReservedS81[89]|0xFF
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[4]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[5]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[6]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.EnablePkgCCriteriaMcddr[7]|0x2
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti01pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti0In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti1In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti23pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti2In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Kti45pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc0pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.Mc1pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P0pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P1pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.P2pllOffEna[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio0In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio1In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio2In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio3In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio4In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PcieIio5In[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[4]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[5]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[6]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeIio[7]|0x20
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[4]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[5]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[6]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.PkgCCriteriaLogicalIpTypeMcddr[7]|0x10
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketPowerManagementConfig.SapmCtlLock[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMaxTorEntry[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.OclaMinWay[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiHandlerSize[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion0[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion1[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion2[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion3[7]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[4]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[5]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[6]|0x1
+gStructPcdTokenSpaceGuid.PcdSocketProcessorCoreConfig.PsmiTraceBufferSizeRegion4[7]|0x1
+!endif
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
new file mode 100644
index 0000000000..7d0716172e
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
@@ -0,0 +1,111 @@
+# @ build_board.py
+# Extensions for building WilsonCityRvp using build_bios.py
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+"""
+This module serves as a sample implementation of the build extension
+scripts
+"""
+
+import os
+import sys
+
+def pre_build_ex(config, functions):
+ """Additional Pre BIOS build function
+
+ :param config: The environment variables to be used in the build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: nothing
+ """
+ print("pre_build_ex")
+ config["BUILD_DIR_PATH"] = os.path.join(config["WORKSPACE"],
+ 'Build',
+ config["PLATFORM_BOARD_PACKAGE"],
+ "{}_{}".format(
+ config["TARGET"],
+ config["TOOL_CHAIN_TAG"]))
+ # set BUILD_DIR path
+ config["BUILD_DIR"] = os.path.join('Build',
+ config["PLATFORM_BOARD_PACKAGE"],
+ "{}_{}".format(
+ config["TARGET"],
+ config["TOOL_CHAIN_TAG"]))
+ config["BUILD_X64"] = os.path.join(config["BUILD_DIR_PATH"], 'X64')
+ config["BUILD_IA32"] = os.path.join(config["BUILD_DIR_PATH"], 'IA32')
+
+ if not os.path.isdir(config["BUILD_DIR_PATH"]):
+ try:
+ os.makedirs(config["BUILD_DIR_PATH"])
+ except OSError:
+ print("Error while creating Build folder")
+ sys.exit(1)
+
+ #@todo: Replace this with PcdFspModeSelection
+ if config.get("API_MODE_FSP_WRAPPER_BUILD", "FALSE") == "TRUE":
+ config["EXT_BUILD_FLAGS"] += " -D FSP_MODE=0"
+ else:
+ config["EXT_BUILD_FLAGS"] += " -D FSP_MODE=1"
+ return None
+
+def _merge_files(files, ofile):
+ with open(ofile, 'wb') as of:
+ for x in files:
+ if not os.path.exists(x):
+ return
+
+ with open(x, 'rb') as f:
+ of.write(f.read())
+
+def build_ex(config, functions):
+ """Additional BIOS build function
+
+ :param config: The environment variables to be used in the build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ print("build_ex")
+ fv_path = os.path.join(config["BUILD_DIR_PATH"], "FV")
+ binary_fd = os.path.join(fv_path, "BINARY.fd")
+ main_fd = os.path.join(fv_path, "MAIN.fd")
+ secpei_fd = os.path.join(fv_path, "SECPEI.fd")
+ board_fd = config["BOARD"].upper()
+ final_fd = os.path.join(fv_path, "{}.fd".format(board_fd))
+ _merge_files((binary_fd, main_fd, secpei_fd), final_fd)
+ return None
+
+
+def post_build_ex(config, functions):
+ """Additional Post BIOS build function
+
+ :param config: The environment variables to be used in the post
+ build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ print("post_build_ex")
+ return None
+
+
+def clean_ex(config, functions):
+ """Additional clean function
+
+ :param config: The environment variables to be used in the build process
+ :type config: Dictionary
+ :param functions: A dictionary of function pointers
+ :type functions: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ print("clean_ex")
+ return None
diff --git a/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
new file mode 100644
index 0000000000..42bbb852d5
--- /dev/null
+++ b/Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
@@ -0,0 +1,36 @@
+# @ build_config.cfg
+# This is the WilsonCityRvp board specific build settings
+#
+# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+
+[CONFIG]
+WORKSPACE_PLATFORM_BIN =
+EDK_SETUP_OPTION =
+openssl_path =
+PLATFORM_BOARD_PACKAGE = WhitleyOpenBoardPkg
+PROJECT = WhitleyOpenBoardPkg/WilsonCityRvp
+BOARD = WilsonCityRvp
+FLASH_MAP_FDF = WhitleyOpenBoardPkg/FspFlashOffsets.fdf
+PROJECT_DSC = WhitleyOpenBoardPkg/PlatformPkg.dsc
+BOARD_PKG_PCD_DSC = WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
+ADDITIONAL_SCRIPTS = WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
+PrepRELEASE = DEBUG
+SILENT_MODE = FALSE
+EXT_CONFIG_CLEAR =
+CapsuleBuild = FALSE
+EXT_BUILD_FLAGS = -D CPUTARGET=ICX -D RP_PKG=WhitleyOpenBoardPkg -D SILICON_PKG=WhitleySiliconPkg -D PCD_DYNAMIC_AS_DYNAMICEX -D MAX_CORE=64 -D MAX_THREAD=2 -D PLATFORM_PKG=MinPlatformPkg
+MAX_SOCKET = 4
+CAPSULE_BUILD = 0
+TARGET = DEBUG
+TARGET_SHORT = D
+PERFORMANCE_BUILD = FALSE
+FSP_WRAPPER_BUILD = TRUE
+FSP_BIN_PKG = WhitleyFspBinPkg
+FSP_PKG_NAME = WhitleyFspPkg
+FSP_BINARY_BUILD = FALSE
+FSP_TEST_RELEASE = FALSE
+SECURE_BOOT_ENABLE = FALSE
+BIOS_INFO_GUID = 4A4CA1C6-871C-45BB-8801-6910A7AA5807
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 15/17] Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (13 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 14/17] WhitleyOpenBoardPkg: Add build scripts and package metadata Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 16/17] Readme.md: Add WhitleyOpenBoardPkg Nate DeSimone
` (3 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
Platform/Intel/build.cfg | 2 ++
Platform/Intel/build_bios.py | 28 ++++++++++++++++------------
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/Platform/Intel/build.cfg b/Platform/Intel/build.cfg
index ede542f9f5..896ea340df 100644
--- a/Platform/Intel/build.cfg
+++ b/Platform/Intel/build.cfg
@@ -62,3 +62,5 @@ UpXtreme = WhiskeylakeOpenBoardPkg/UpXtreme/build_config.cfg
WhiskeylakeURvp = WhiskeylakeOpenBoardPkg/WhiskeylakeURvp/build_config.cfg
CometlakeURvp = CometlakeOpenBoardPkg/CometlakeURvp/build_config.cfg
TigerlakeURvp = TigerlakeOpenBoardPkg/TigerlakeURvp/build_config.cfg
+CooperCityRvp = WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
+WilsonCityRvp = WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
diff --git a/Platform/Intel/build_bios.py b/Platform/Intel/build_bios.py
index 8f855f63eb..4450b2c37f 100644
--- a/Platform/Intel/build_bios.py
+++ b/Platform/Intel/build_bios.py
@@ -1,4 +1,5 @@
-
+#!/usr/bin/env python3
+#
# @ build_bios.py
# Builds BIOS using configuration files and dynamically
# imported functions from board directory
@@ -35,7 +36,7 @@ except ImportError:
def pre_build(build_config, build_type="DEBUG", silent=False, toolchain=None):
"""Sets the environment variables that shall be used for the build
- :param build_config: The build configuration as defined in the JOSN
+ :param build_config: The build configuration as defined in the JSON
configuration files
:type build_config: Dictionary
:param build_type: The build target, DEBUG, RELEASE, RELEASE_PDB,
@@ -58,7 +59,7 @@ def pre_build(build_config, build_type="DEBUG", silent=False, toolchain=None):
# update the current config with the build config
config.update(build_config)
- # make the config and build python 2.7 compartible
+ # make the config and build python 2.7 compatible
config = py_27_fix(config)
# Set WORKSPACE environment.
@@ -130,9 +131,9 @@ def pre_build(build_config, build_type="DEBUG", silent=False, toolchain=None):
config["PACKAGES_PATH"] += os.pathsep + filepath
config["PACKAGES_PATH"] += os.pathsep + config["WORKSPACE_DRIVERS"]
config["PACKAGES_PATH"] += os.pathsep + \
- os.path.join(config["WORKSPACE"], "FSP")
+ os.path.join(config["WORKSPACE"], config["WORKSPACE_FSP_BIN"])
config["PACKAGES_PATH"] += os.pathsep + \
- os.path.join(config["WORKSPACE"], "edk2")
+ os.path.join(config["WORKSPACE"], config["WORKSPACE_CORE"])
config["PACKAGES_PATH"] += os.pathsep + os.path.join(config["WORKSPACE"])
config["PACKAGES_PATH"] += os.pathsep + config["WORKSPACE_PLATFORM_BIN"]
config["EDK_TOOLS_PATH"] = os.path.join(config["WORKSPACE"],
@@ -389,7 +390,10 @@ def build(config):
command.append(config["REBUILD_MODE"])
if config["EXT_BUILD_FLAGS"] and config["EXT_BUILD_FLAGS"] != "":
- command.append(config["EXT_BUILD_FLAGS"])
+ ext_build_flags = config["EXT_BUILD_FLAGS"].split(" ")
+ ext_build_flags = [x.strip() for x in ext_build_flags]
+ ext_build_flags = [x for x in ext_build_flags if x != ""]
+ command.extend(ext_build_flags)
if config.get('BINARY_CACHE_CMD_LINE'):
command.append(config['HASH'])
@@ -453,7 +457,7 @@ def post_build(config):
shell = True
command = ["FitGen", "-D",
final_fd, temp_fd, "-NA",
- "-I", config["BIOS_INFO_GUID"]]
+ "-I", config["BIOS_INFO_GUID"]] #@todo: Need mechanism to add additional options to the FitGen command line
if os.name == "posix": # linux
shell = False
@@ -600,7 +604,7 @@ def post_build_ex(config):
def clean_ex(config):
- """ An extension of the platform cleanning
+ """ An extension of the platform cleaning
:param config: The environment variables used in the clean process
:type config: Dictionary
@@ -658,7 +662,7 @@ def execute_script(command, env_variables, collect_env=False,
:type command: List:String
:param env_variables: Environment variables passed to the process
:type env_variables: String
- :param collect_env: Enables the collection of evironment variables
+ :param collect_env: Enables the collection of environment variables
when process execution is done
:type collect_env: Boolean
:param enable_std_pipe: Enables process out to be piped to
@@ -705,7 +709,7 @@ def execute_script(command, env_variables, collect_env=False,
# wait for process to be done
execute.wait()
- # if collect enviroment variables
+ # if collect environment variables
if collect_env:
# get the new environment variables
std_out, env = get_environment_variables(std_out, env_marker)
@@ -713,7 +717,7 @@ def execute_script(command, env_variables, collect_env=False,
def patch_config(config):
- """ An extension of the platform cleanning
+ """ An extension of the platform cleaning
:param config: The environment variables used in the build process
:type config: Dictionary
@@ -888,7 +892,7 @@ def get_config():
def get_platform_config(platform_name, config_data):
- """ Reads the platform specifig config file
+ """ Reads the platform specific config file
param platform_name: The name of the platform to be built
:type platform_name: String
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 16/17] Readme.md: Add WhitleyOpenBoardPkg
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (14 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 15/17] Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 17/17] Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg Nate DeSimone
` (2 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
Platform/Intel/Readme.md | 14 ++++++++++++++
Readme.md | 2 ++
2 files changed, 16 insertions(+)
diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md
index 06c5f32b1e..0052538be1 100644
--- a/Platform/Intel/Readme.md
+++ b/Platform/Intel/Readme.md
@@ -59,6 +59,7 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
* The `WhiskeylakeOpenBoardPkg` contains board implementations for WhiskeyLake systems.
* The `CometlakeOpenBoardPkg` contains board implementations for CometLake systems.
* The `TigerlakeOpenBoardPkg` contains board implementations for TigerLake systems.
+* The `WhitleyOpenBoardPkg` contains board implementations for Ice Lake-SP and Cooper Lake systems.
### **Supported Hardware**
@@ -78,6 +79,8 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
| WHL-U DDR4 RVP | WhiskeyLake | WhiskeylakeOpenBoardPkg | WhiskeylakeURvp |
| CML-U LPDDR3 RVP | CometLake V1 | CometlakeOpenBoardPkg | CometlakeURvp |
| TGL-U DDR4 RVP | TigerLake | TigerlakeOpenBoardPkg | TigerlakeURvp |
+| Wilson City RVP | IceLake-SP (Xeon Scalable) | WhitleyOpenBoardPkg | WilsonCityRvp |
+| Cooper City RVP | Copper Lake | WhitleyOpenBoardPkg | CooperCityRvp |
*Note: RVP = Reference and Validation Platform*
@@ -257,6 +260,14 @@ return back to the minimum platform caller.
| | | build settings, environment variables.
| | |
| | |------WhiskeylakeOpenBoardPkg
+ | | | |------CooperCityRvp
+ | | | | |---build_config.cfg: CooperCityRvp specific build
+ | | | | settings environment variables.
+ | | | |------WilsonCityRvp
+ | | | |---build_config.cfg: WilsonCityRvp specific build
+ | | | settings environment variables.
+ | | |
+ | | |------WhitleyOpenBoardPkg
| | | |------UpXtreme
| | | |---build_config.cfg: UpXtreme specific build
| | | settings environment variables.
@@ -328,6 +339,9 @@ For PurleyOpenBoardPkg
1. This firmware project has been tested booting to Microsoft Windows 10 x64 with AHCI mode and Integrated Graphic Device.
2. This firmware project has been also tested booting to Puppy Linux BionicPup64 8.0 with AHCI mode and Integrated Graphic Device.
+**WhitleyOpenBoardPkg**
+1. This firmware project has been tested booting to UEFI shell with headless serial console
+
### **Package Builds**
In some cases, such as BoardModulePkg, a package may provide a set of functionality that is included in other
diff --git a/Readme.md b/Readme.md
index d8cd211334..62876b4b7d 100644
--- a/Readme.md
+++ b/Readme.md
@@ -246,6 +246,8 @@ they will be documented with the platform.
* [Simics](Platform/Intel/SimicsOpenBoardPkg)
* [Whiskey Lake](Platform/Intel/WhiskeylakeOpenBoardPkg)
* [Comet Lake](Platform/Intel/CometlakeOpenBoardPkg)
+* [Tiger Lake](Platform/Intel/TigerlakeOpenBoardPkg)
+* [Whitley/Cedar Island](Platform/Intel/WhitleyOpenBoardPkg)
For more information, see the
[EDK II Minimum Platform Specification](https://edk2-docs.gitbooks.io/edk-ii-minimum-platform-specification).
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [edk2-platforms] [PATCH V1 17/17] Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (15 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 16/17] Readme.md: Add WhitleyOpenBoardPkg Nate DeSimone
@ 2021-07-13 0:41 ` Nate DeSimone
2021-07-13 1:35 ` [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Oram, Isaac W
2021-07-14 2:03 ` Michael D Kinney
18 siblings, 0 replies; 20+ messages in thread
From: Nate DeSimone @ 2021-07-13 0:41 UTC (permalink / raw)
To: devel
Cc: Isaac Oram, Mohamed Abbas, Chasel Chiu, Michael D Kinney,
Liming Gao, Eric Dong, Michael Kubacki
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
---
Maintainers.txt | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/Maintainers.txt b/Maintainers.txt
index 10a9521ec3..9b8d6aead9 100644
--- a/Maintainers.txt
+++ b/Maintainers.txt
@@ -219,6 +219,12 @@ M: Sai Chaganty <rangasai.v.chaganty@intel.com>
M: Nate DeSimone <nathaniel.l.desimone@intel.com>
R: Heng Luo <heng.luo@intel.com>
+Platform/Intel/WhitleyOpenBoardPkg
+F: Platform/Intel/WhitleyOpenBoardPkg/
+M: Isaac Oram <isaac.w.oram@intel.com>
+M: Nate DeSimone <nathaniel.l.desimone@intel.com>
+M: Chasel Chiu <chasel.chiu@intel.com>
+
Platform/Intel/SimicsOpenBoardPkg
F: Platform/Intel/SimicsOpenBoardPkg/
M: Agyeman Prince <prince.agyeman@intel.com>
@@ -279,6 +285,12 @@ M: Sai Chaganty <rangasai.v.chaganty@intel.com>
M: Nate DeSimone <nathaniel.l.desimone@intel.com>
R: Heng Luo <heng.luo@intel.com>
+Silicon/Intel/WhitleySiliconPkg
+F: Silicon/Intel/WhitleySiliconPkg/
+M: Isaac Oram <isaac.w.oram@intel.com>
+M: Nate DeSimone <nathaniel.l.desimone@intel.com>
+M: Chasel Chiu <chasel.chiu@intel.com>
+
Silicon/Intel/SimicsX58SktPkg
F: Silicon/Intel/SimicsX58SktPkg/
M: Agyeman Prince <prince.agyeman@intel.com>
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (16 preceding siblings ...)
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 17/17] Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg Nate DeSimone
@ 2021-07-13 1:35 ` Oram, Isaac W
2021-07-14 2:03 ` Michael D Kinney
18 siblings, 0 replies; 20+ messages in thread
From: Oram, Isaac W @ 2021-07-13 1:35 UTC (permalink / raw)
To: Desimone, Nathaniel L, devel@edk2.groups.io
Cc: Abbas, Mohamed, Chiu, Chasel, Kinney, Michael D, Liming Gao,
Dong, Eric, Michael Kubacki
Series Reviewed-by: isaac.w.oram@intel.com
-----Original Message-----
From: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
Sent: Monday, July 12, 2021 5:41 PM
To: devel@edk2.groups.io
Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abbas, Mohamed <mohamed.abbas@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Dong, Eric <eric.dong@intel.com>; Michael Kubacki <Michael.Kubacki@microsoft.com>
Subject: [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform
This patch series adds WhitleyOpenBoardPkg and WhitleySiliconPkg
to edk2-platforms. These platforms along with the corresponding
FSP and microcode binaries support the 3rd Generation Xeon
Scalable processors formerly known as IceLake-SP and CooperLake.
There are still some issues to be worked out. WhitleySiliconPkg
has multiple DEC files that need to be mered together. And the
WhitleyOpenBoardPkg DSC files need to be adjusted to conform to
the MinPlatform *OpenBoardPkg guidelines. Additionally, there
are non-standard build flags that replicate functionality
provided by already existing FixedAtBuild PCDs. For example,
FSP_MODE instead of PcdFspModeSelection. These issues will
be addressed in future patch series.
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Mohamed Abbas <mohamed.abbas@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
Nate DeSimone (17):
WhitleySiliconPkg: Add DEC and DSC files
WhitleySiliconPkg: Add Includes and Libraries
WhitleySiliconPkg: Add Cpu Includes
WhitleySiliconPkg: Add Me Includes
WhitleySiliconPkg: Add PCH Register Includes
WhitleySiliconPkg: Add PCH Includes
WhitleySiliconPkg: Add PCH Libraries
WhitleySiliconPkg: Add Security Includes
WhitleySiliconPkg: Add SiliconPolicyInit
WhitleyOpenBoardPkg: Add Includes and Libraries
WhitleyOpenBoardPkg: Add Platform Modules
WhitleyOpenBoardPkg: Add Feature Modules
WhitleyOpenBoardPkg: Add UBA Modules
WhitleyOpenBoardPkg: Add build scripts and package metadata
Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py
Readme.md: Add WhitleyOpenBoardPkg
Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg
Maintainers.txt | 12 +
Platform/Intel/Readme.md | 14 +
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c | 104 +
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h | 67 +
.../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf | 70 +
.../CooperCityRvp/build_board.py | 111 +
.../CooperCityRvp/build_config.cfg | 36 +
.../Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c | 704 ++
.../PlatformCpuPolicy/PlatformCpuPolicy.inf | 81 +
.../WhitleyOpenBoardPkg/DynamicExPcd.dsc | 19 +
.../Pci/Dxe/PciHostBridge/PciHostBridge.c | 1634 ++++
.../Pci/Dxe/PciHostBridge/PciHostBridge.h | 300 +
.../Pci/Dxe/PciHostBridge/PciHostBridge.inf | 69 +
.../Dxe/PciHostBridge/PciHostBridgeSupport.c | 127 +
.../Pci/Dxe/PciHostBridge/PciHostResource.h | 62 +
.../Pci/Dxe/PciHostBridge/PciRebalance.c | 1356 +++
.../Pci/Dxe/PciHostBridge/PciRebalance.h | 158 +
.../Pci/Dxe/PciHostBridge/PciRebalanceIo.c | 218 +
.../Dxe/PciHostBridge/PciRebalanceMmio32.c | 163 +
.../Dxe/PciHostBridge/PciRebalanceMmio64.c | 204 +
.../Pci/Dxe/PciHostBridge/PciRootBridge.h | 573 ++
.../Pci/Dxe/PciHostBridge/PciRootBridgeIo.c | 1664 ++++
.../Dxe/PciPlatform/PciIovPlatformPolicy.c | 99 +
.../Dxe/PciPlatform/PciIovPlatformPolicy.h | 53 +
.../Pci/Dxe/PciPlatform/PciPlatform.c | 541 ++
.../Pci/Dxe/PciPlatform/PciPlatform.h | 209 +
.../Pci/Dxe/PciPlatform/PciPlatform.inf | 87 +
.../Pci/Dxe/PciPlatform/PciPlatformHooks.c | 939 ++
.../Pci/Dxe/PciPlatform/PciPlatformHooks.h | 31 +
.../Pci/Dxe/PciPlatform/PciSupportLib.c | 108 +
.../Pci/Dxe/PciPlatform/PciSupportLib.h | 46 +
.../Pei/PlatformVariableInitPei.c | 274 +
.../Pei/PlatformVariableInitPei.h | 41 +
.../Pei/PlatformVariableInitPei.inf | 58 +
.../WhitleyOpenBoardPkg/FspFlashOffsets.fdf | 21 +
.../Include/Dsc/CoreDxeInclude.dsc | 135 +
...blePerformanceMonitoringInfrastructure.dsc | 40 +
.../Include/Dsc/EnableRichDebugMessages.dsc | 50 +
.../Include/Fdf/CommonNvStorageFtwWorking.fdf | 20 +
.../Include/Fdf/CommonSpiFvHeaderInfo.fdf | 24 +
...anceMonitoringInfrastructurePostMemory.fdf | 14 +
...manceMonitoringInfrastructurePreMemory.fdf | 11 +
.../Include/Fdf/NvStorage512K.fdf | 46 +
.../Include/GpioInitData.h | 26 +
.../Include/Guid/PlatformVariableCommon.h | 33 +
.../Include/Guid/SetupVariable.h | 720 ++
.../Include/Guid/UbaCfgHob.h | 74 +
.../WhitleyOpenBoardPkg/Include/IoApic.h | 23 +
.../Include/Library/MultiPlatSupportLib.h | 67 +
.../Include/Library/PeiPlatformHooklib.h | 17 +
.../Include/Library/PlatformClocksLib.h | 87 +
.../Include/Library/PlatformOpromPolicyLib.h | 83 +
.../Library/PlatformSetupVariableSyncLib.h | 60 +
.../Include/Library/PlatformVariableHookLib.h | 47 +
.../Include/Library/ReadFfsLib.h | 58 +
.../Include/Library/SetupLib.h | 134 +
.../Include/Library/UbaAcpiUpdateLib.h | 38 +
.../Include/Library/UbaBoardSioInfoLib.h | 47 +
.../Include/Library/UbaClkGenUpdateLib.h | 49 +
.../Include/Library/UbaClocksConfigLib.h | 51 +
.../Include/Library/UbaGpioInitLib.h | 26 +
.../Include/Library/UbaGpioPlatformConfig.h | 259 +
.../Include/Library/UbaGpioUpdateLib.h | 51 +
.../Library/UbaHsioPtssTableConfigLib.h | 52 +
.../Include/Library/UbaIioConfigLib.h | 227 +
.../Library/UbaIioPortBifurcationInitLib.h | 47 +
.../Include/Library/UbaOpromUpdateLib.h | 115 +
.../Include/Library/UbaPcdUpdateLib.h | 44 +
.../Include/Library/UbaPchEarlyUpdateLib.h | 63 +
.../Library/UbaPcieBifurcationUpdateLib.h | 130 +
.../Include/Library/UbaPlatLib.h | 25 +
.../Include/Library/UbaSlotUpdateLib.h | 124 +
.../Include/Library/UbaSoftStrapUpdateLib.h | 57 +
.../Include/Library/UbaSystemBoardInfoLib.h | 36 +
.../Library/UbaSystemConfigUpdateLib.h | 42 +
.../Include/Library/UbaUsbOcUpdateLib.h | 51 +
.../Include/OnboardNicStructs.h | 98 +
.../Include/PchSetupVariable.h | 10 +
.../Include/PchSetupVariableLbg.h | 372 +
.../WhitleyOpenBoardPkg/Include/PlatDevData.h | 183 +
.../Include/PlatPirqData.h | 36 +
.../Include/Ppi/ExReportStatusCodeHandler.h | 38 +
.../Include/Ppi/SmbusPolicy.h | 29 +
.../Include/Ppi/UbaCfgDb.h | 144 +
.../Include/Protocol/LegacyBios.h | 1550 +++
.../Include/Protocol/LegacyBiosPlatform.h | 752 ++
.../Include/Protocol/PciIovPlatform.h | 72 +
.../Include/Protocol/PlatformType.h | 48 +
.../Include/Protocol/UbaCfgDb.h | 114 +
.../Include/Protocol/UbaDevsUpdateProtocol.h | 86 +
.../Include/Protocol/UbaMakerProtocol.h | 22 +
.../WhitleyOpenBoardPkg/Include/SetupTable.h | 25 +
.../WhitleyOpenBoardPkg/Include/SioRegs.h | 251 +
.../WhitleyOpenBoardPkg/Include/SystemBoard.h | 75 +
.../WhitleyOpenBoardPkg/Include/UbaKti.h | 29 +
.../BoardAcpiLib/DxeBoardAcpiTableLib.c | 37 +
.../BoardAcpiLib/DxeBoardAcpiTableLib.inf | 44 +
.../BoardAcpiLib/DxeMtOlympusAcpiTableLib.c | 54 +
.../BoardAcpiLib/SmmBoardAcpiEnableLib.c | 51 +
.../BoardAcpiLib/SmmBoardAcpiEnableLib.inf | 48 +
.../BoardAcpiLib/SmmSiliconAcpiEnableLib.c | 138 +
.../Library/BoardInitLib/BoardInitDxeLib.c | 299 +
.../Library/BoardInitLib/BoardInitDxeLib.inf | 72 +
.../Library/BoardInitLib/BoardInitDxeLib.uni | 29 +
.../Library/BoardInitLib/BoardInitPreMemLib.c | 450 +
.../BoardInitLib/BoardInitPreMemLib.inf | 66 +
.../MultiPlatSupportLib/MultiPlatSupport.h | 48 +
.../MultiPlatSupportLib/MultiPlatSupportLib.c | 255 +
.../MultiPlatSupportLib.inf | 49 +
.../FspWrapperHobProcessLib.c | 722 ++
.../PeiFspWrapperHobProcessLib.inf | 99 +
.../PeiPlatformHookLib/PeiPlatformHooklib.c | 43 +
.../PeiPlatformHookLib/PeiPlatformHooklib.inf | 34 +
.../Library/PeiReportFvLib/PeiReportFvLib.c | 270 +
.../Library/PeiReportFvLib/PeiReportFvLib.inf | 65 +
.../PeiUbaGpioPlatformConfigLib.c | 518 +
.../Library/PeiUbaPlatLib/PeiUbaPlatLib.inf | 60 +
.../PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c | 61 +
.../PeiUbaPlatLib/UbaBoardSioInfoLib.c | 54 +
.../PeiUbaPlatLib/UbaClkGenUpdateLib.c | 134 +
.../PeiUbaPlatLib/UbaClocksConfigLib.c | 59 +
.../Library/PeiUbaPlatLib/UbaGpioUpdateLib.c | 68 +
.../PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c | 58 +
.../PeiUbaPlatLib/UbaIioConfigLibPei.c | 219 +
.../UbaIioPortBifurcationInitLib.c | 55 +
.../Library/PeiUbaPlatLib/UbaPcdUpdateLib.c | 69 +
.../PeiUbaPlatLib/UbaPchEarlyUpdateLib.c | 108 +
.../PeiUbaPlatLib/UbaPchPcieBifurcationLib.c | 57 +
.../PeiUbaPlatLib/UbaSlotUpdateLibPei.c | 156 +
.../PeiUbaPlatLib/UbaSoftStrapUpdateLib.c | 95 +
.../PlatformClocksLib/Pei/PlatformClocksLib.c | 347 +
.../Pei/PlatformClocksLib.inf | 40 +
.../PlatformCmosAccessLib.c | 73 +
.../PlatformCmosAccessLib.inf | 45 +
.../Library/PlatformHooksLib/PlatformHooks.c | 203 +
.../PlatformHooksLib/PlatformHooksLib.inf | 28 +
.../PlatformOpromPolicyLibNull.c | 88 +
.../PlatformOpromPolicyLibNull.inf | 29 +
.../PlatformSetupVariableSyncLibNull.c | 81 +
.../PlatformSetupVariableSyncLibNull.inf | 28 +
.../PlatformVariableHookLibNull.c | 55 +
.../PlatformVariableHookLibNull.inf | 24 +
.../Library/ReadFfsLib/ReadFfsLib.c | 446 +
.../Library/ReadFfsLib/ReadFfsLib.inf | 34 +
.../Library/SerialPortLib/Ns16550.h | 46 +
.../Library/SerialPortLib/SerialPortLib.c | 1023 ++
.../Library/SerialPortLib/SerialPortLib.inf | 55 +
.../Library/SetCacheMtrrLib/SetCacheMtrrLib.c | 867 ++
.../SetCacheMtrrLib/SetCacheMtrrLib.inf | 55 +
.../PchPolicyUpdateUsb.c | 152 +
.../SiliconPolicyUpdateLib.c | 778 ++
.../SiliconPolicyUpdateLib.inf | 64 +
.../SiliconPolicyUpdateLibFsp.c | 770 ++
.../SiliconPolicyUpdateLibFsp.inf | 68 +
.../SmmSpiFlashCommonLib.inf | 57 +
.../SmmSpiFlashCommonLib/SpiFlashCommon.c | 237 +
.../SpiFlashCommonSmmLib.c | 55 +
.../DxeTcg2PhysicalPresenceLib.c | 41 +
.../DxeTcg2PhysicalPresenceLib.inf | 29 +
.../Library/UbaGpioInitLib/UbaGpioInitLib.c | 145 +
.../Library/UbaGpioInitLib/UbaGpioInitLib.inf | 46 +
.../Dxe/PlatformType/PlatformType.inf | 58 +
.../Platform/Dxe/PlatformType/PlatformTypes.c | 364 +
.../Platform/Dxe/PlatformType/PlatformTypes.h | 58 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.c | 157 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.h | 40 +
.../Platform/Dxe/S3NvramSave/S3NvramSave.inf | 52 +
.../Platform/Pei/DummyPchSpi/DummyPchSpi.inf | 43 +
.../Platform/Pei/DummyPchSpi/PchSpi.c | 383 +
.../EmulationPlatformInit.c | 124 +
.../EmulationPlatformInit.inf | 46 +
.../Platform/Pei/PlatformInfo/PlatformInfo.c | 761 ++
.../Platform/Pei/PlatformInfo/PlatformInfo.h | 89 +
.../Pei/PlatformInfo/PlatformInfo.inf | 63 +
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.dec | 781 ++
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc | 931 ++
.../Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf | 827 ++
.../WhitleyOpenBoardPkg/PlatformPkgConfig.dsc | 45 +
.../WhitleyOpenBoardPkg/StructurePcd.dsc | 8553 +++++++++++++++++
.../WhitleyOpenBoardPkg/StructurePcdCpx.dsc | 3796 ++++++++
.../Uba/BoardInit/Dxe/BoardInitDxe.c | 87 +
.../Uba/BoardInit/Dxe/BoardInitDxe.h | 30 +
.../Uba/BoardInit/Dxe/BoardInitDxe.inf | 70 +
.../Uba/BoardInit/Pei/BoardInitPei.c | 48 +
.../Uba/BoardInit/Pei/BoardInitPei.h | 20 +
.../Uba/BoardInit/Pei/BoardInitPei.inf | 55 +
.../Uba/CfgDb/Dxe/CfgDbDxe.c | 518 +
.../Uba/CfgDb/Dxe/CfgDbDxe.h | 32 +
.../Uba/CfgDb/Dxe/CfgDbDxe.inf | 54 +
.../Uba/CfgDb/Pei/CfgDbPei.c | 803 ++
.../Uba/CfgDb/Pei/CfgDbPei.h | 33 +
.../Uba/CfgDb/Pei/CfgDbPei.inf | 54 +
.../WhitleyOpenBoardPkg/Uba/UbaCommon.dsc | 29 +
.../WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf | 16 +
.../Uba/UbaDxeRpBoards.fdf | 22 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.c | 206 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.h | 33 +
.../SystemBoardInfoDxe/SystemBoardInfoDxe.inf | 45 +
.../SystemConfigUpdateDxe.c | 94 +
.../SystemConfigUpdateDxe.h | 30 +
.../SystemConfigUpdateDxe.inf | 48 +
.../Uba/UbaMain/Common/Pei/BoardInfo.c | 69 +
.../Uba/UbaMain/Common/Pei/Clockgen.c | 27 +
.../Uba/UbaMain/Common/Pei/ClocksConfig.c | 177 +
.../UbaMain/Common/Pei/GpioPlatformConfig.c | 166 +
.../UbaMain/Common/Pei/HsioPtssTableConfig.c | 460 +
.../Common/Pei/IioBifurcationSlotTable.h | 156 +
.../UbaMain/Common/Pei/IioPortBifurcation.c | 913 ++
.../Common/Pei/IioPortBifurcationVer1.c | 1356 +++
.../UbaMain/Common/Pei/PchHsioPtssTables.h | 51 +
.../Common/Pei/PchLbgHsioPtssTablesBx.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesBx.h | 18 +
.../Common/Pei/PchLbgHsioPtssTablesBx_Ext.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesBx_Ext.h | 20 +
.../Common/Pei/PchLbgHsioPtssTablesSx.c | 27 +
.../Common/Pei/PchLbgHsioPtssTablesSx.h | 21 +
.../Common/Pei/PchLbgHsioPtssTablesSx_Ext.c | 44 +
.../Common/Pei/PchLbgHsioPtssTablesSx_Ext.h | 21 +
.../Common/Pei/PeiCommonBoardInitLib.c | 75 +
.../Common/Pei/PeiCommonBoardInitLib.h | 55 +
.../Common/Pei/PeiCommonBoardInitLib.inf | 76 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 107 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 161 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 48 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 108 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
.../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 48 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 124 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
.../TypeCooperCityRP/Pei/AcpiTablePcds.c | 51 +
.../UbaMain/TypeCooperCityRP/Pei/GpioTable.c | 297 +
.../TypeCooperCityRP/Pei/IioBifurInit.c | 393 +
.../UbaMain/TypeCooperCityRP/Pei/KtiEparam.c | 241 +
.../UbaMain/TypeCooperCityRP/Pei/PcdData.c | 259 +
.../TypeCooperCityRP/Pei/PchEarlyUpdate.c | 81 +
.../TypeCooperCityRP/Pei/PeiBoardInit.h | 96 +
.../TypeCooperCityRP/Pei/PeiBoardInitLib.c | 224 +
.../TypeCooperCityRP/Pei/PeiBoardInitLib.inf | 163 +
.../UbaMain/TypeCooperCityRP/Pei/SlotTable.c | 164 +
.../TypeCooperCityRP/Pei/SoftStrapFixup.c | 110 +
.../Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c | 123 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 99 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 118 +
.../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 47 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 115 +
.../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
.../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 47 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 127 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
.../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
.../TypeWilsonCityRP/Pei/AcpiTablePcds.c | 53 +
.../UbaMain/TypeWilsonCityRP/Pei/GpioTable.c | 287 +
.../TypeWilsonCityRP/Pei/IioBifurInit.c | 387 +
.../UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c | 107 +
.../UbaMain/TypeWilsonCityRP/Pei/PcdData.c | 274 +
.../TypeWilsonCityRP/Pei/PchEarlyUpdate.c | 92 +
.../TypeWilsonCityRP/Pei/PeiBoardInit.h | 77 +
.../TypeWilsonCityRP/Pei/PeiBoardInitLib.c | 156 +
.../TypeWilsonCityRP/Pei/PeiBoardInitLib.inf | 166 +
.../UbaMain/TypeWilsonCityRP/Pei/SlotTable.c | 171 +
.../TypeWilsonCityRP/Pei/SoftStrapFixup.c | 120 +
.../Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c | 126 +
.../Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf | 24 +
.../WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc | 44 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c | 43 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h | 20 +
.../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf | 50 +
.../ExSerialStatusCodeWorker.c | 194 +
.../ExStatusCodeHandlerPei.c | 111 +
.../ExStatusCodeHandlerPei.h | 85 +
.../ExStatusCodeHandlerPei.inf | 61 +
.../ExReportStatusCodeRouterPei.c | 301 +
.../ExReportStatusCodeRouterPei.h | 104 +
.../ExReportStatusCodeRouterPei.inf | 51 +
.../PeiInterposerToSvidMap.c | 136 +
.../PeiInterposerToSvidMap.inf | 53 +
.../WilsonCityRvp/build_board.py | 111 +
.../WilsonCityRvp/build_config.cfg | 36 +
Platform/Intel/build.cfg | 2 +
Platform/Intel/build_bios.py | 28 +-
Readme.md | 2 +
Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec | 541 ++
.../Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec | 101 +
.../Cpu/Include/CpuDataStruct.h | 27 +
.../Cpu/Include/CpuPolicyPeiDxeCommon.h | 58 +
.../Cpu/Include/Guid/CpuNvramData.h | 34 +
.../Cpu/Include/Library/CpuConfigLib.h | 30 +
.../Cpu/Include/Library/CpuEarlyDataLib.h | 41 +
.../Cpu/Include/Library/CpuPpmLib.h | 16 +
.../Cpu/Include/PpmPolicyPeiDxeCommon.h | 320 +
.../Cpu/Include/ProcessorPpmSetup.h | 14 +
.../Cpu/Include/Protocol/CpuPolicyProtocol.h | 31 +
.../Cpu/Include/Protocol/PpmPolicyProtocol.h | 16 +
.../Include/BackCompatible.h | 19 +
.../Include/ConfigBlock/TraceHubConfig.h | 65 +
.../Include/ConfigBlock/Usb2PhyConfig.h | 63 +
.../Include/ConfigBlock/UsbConfig.h | 85 +
.../WhitleySiliconPkg/Include/Cpu/CpuIds.h | 18 +
.../Include/CpuAndRevisionDefines.h | 283 +
.../Include/EmulationConfiguration.h | 22 +
.../Intel/WhitleySiliconPkg/Include/Fpga.h | 17 +
.../WhitleySiliconPkg/Include/GpioConfig.h | 288 +
.../Include/Guid/EmulationDfxVariable.h | 25 +
.../Include/Guid/FpgaSocketVariable.h | 39 +
.../Include/Guid/MemBootHealthGuid.h | 71 +
.../Include/Guid/MemoryMapData.h | 197 +
.../Include/Guid/PartialMirrorGuid.h | 61 +
.../Include/Guid/PlatformInfo.h | 150 +
.../Guid/SiliconPolicyInitLibInterface.h | 78 +
.../Include/Guid/SocketCommonRcVariable.h | 57 +
.../Include/Guid/SocketIioVariable.h | 444 +
.../Include/Guid/SocketMemoryVariable.h | 477 +
.../Include/Guid/SocketMpLinkVariable.h | 320 +
.../Include/Guid/SocketPciResourceData.h | 60 +
.../Guid/SocketPowermanagementVariable.h | 300 +
.../Guid/SocketProcessorCoreVariable.h | 143 +
.../Include/Guid/SocketVariable.h | 36 +
.../Include/Guid/StatusCodeDataTypeExDebug.h | 50 +
.../WhitleySiliconPkg/Include/IioConfig.h | 398 +
.../Include/IioPlatformData.h | 204 +
.../Intel/WhitleySiliconPkg/Include/IioRegs.h | 179 +
.../Include/IioSetupDefinitions.h | 60 +
.../Include/IioUniversalData.h | 166 +
.../WhitleySiliconPkg/Include/ImonVrSvid.h | 26 +
.../Include/KtiSetupDefinitions.h | 22 +
.../Include/Library/CompressedVariableLib.h | 35 +
.../Library/EmulationConfigurationLib.h | 34 +
.../Include/Library/MemTypeLib.h | 32 +
.../Include/Library/MemVrSvidMapLib.h | 66 +
.../Include/Library/PchInfoLib.h | 22 +
.../Include/Library/PlatformHooksLib.h | 17 +
.../Include/Library/SemaphoreLib.h | 326 +
.../Intel/WhitleySiliconPkg/Include/MaxCore.h | 20 +
.../WhitleySiliconPkg/Include/MaxSocket.h | 20 +
.../WhitleySiliconPkg/Include/MaxThread.h | 20 +
.../WhitleySiliconPkg/Include/MemCommon.h | 41 +
.../Include/Memory/Ddr4SpdRegisters.h | 38 +
.../Include/Memory/ProcSmbChipCommon.h | 28 +
.../WhitleySiliconPkg/Include/Platform.h | 266 +
.../Include/PlatformInfoTypes.h | 106 +
.../Include/Ppi/DynamicSiLibraryPpi.h | 474 +
.../Include/Ppi/MemoryPolicyPpi.h | 2112 ++++
.../Include/Ppi/RasImcS3Data.h | 53 +
.../Include/Ppi/UpiPolicyPpi.h | 39 +
.../Protocol/DynamicSiLibraryProtocol.h | 252 +
.../Protocol/DynamicSiLibrarySmmProtocol.h | 60 +
.../Include/Protocol/GlobalNvsArea.h | 212 +
.../Include/Protocol/IioUds.h | 47 +
.../Include/Protocol/PciCallback.h | 85 +
.../WhitleySiliconPkg/Include/RcVersion.h | 23 +
.../Include/ScratchpadList.h | 49 +
.../Include/SiliconUpdUpdate.h | 53 +
.../WhitleySiliconPkg/Include/SystemInfoVar.h | 93 +
.../Include/UncoreCommonIncludes.h | 111 +
.../WhitleySiliconPkg/Include/Upi/KtiDisc.h | 36 +
.../WhitleySiliconPkg/Include/Upi/KtiHost.h | 304 +
.../WhitleySiliconPkg/Include/Upi/KtiSi.h | 32 +
.../Include/UsraAccessType.h | 291 +
.../Core/Include/DataTypes.h | 36 +
.../BaseMemoryCoreLib/Core/Include/MemHost.h | 1051 ++
.../Core/Include/MemHostChipCommon.h | 190 +
.../BaseMemoryCoreLib/Core/Include/MemRegs.h | 25 +
.../Core/Include/MrcCommonTypes.h | 28 +
.../Core/Include/NGNDimmPlatformCfgData.h | 22 +
.../BaseMemoryCoreLib/Core/Include/SysHost.h | 193 +
.../Core/Include/SysHostChipCommon.h | 101 +
.../BaseMemoryCoreLib/Platform/MemDefaults.h | 28 +
.../BaseMemoryCoreLib/Platform/PlatformHost.h | 35 +
.../FspWrapperPlatformLib.c | 243 +
.../FspWrapperPlatformLib.inf | 71 +
.../Library/SetupLib/PeiSetupLib.c | 259 +
.../Library/SetupLib/PeiSetupLib.inf | 55 +
.../Library/SetupLib/SetupLib.c | 253 +
.../Library/SetupLib/SetupLib.inf | 59 +
.../Library/SetupLib/SetupLibNull.c | 159 +
.../Library/SetupLib/SetupLibNull.inf | 46 +
.../SiliconPolicyInitLibShim.c | 104 +
.../SiliconPolicyInitLibShim.inf | 38 +
.../SiliconWorkaroundLibNull.c | 38 +
.../SiliconWorkaroundLibNull.inf | 50 +
.../Me/MeSps.4/Include/Library/SpsPeiLib.h | 22 +
.../WhitleySiliconPkg/MrcCommonConfig.dsc | 71 +
.../SouthClusterLbg/Include/GpioPinsSklH.h | 300 +
.../SouthClusterLbg/Include/Library/GpioLib.h | 1016 ++
.../Include/Library/PchMultiPchBase.h | 37 +
.../Include/Library/PchPcieRpLib.h | 145 +
.../Pch/SouthClusterLbg/Include/PchAccess.h | 629 ++
.../Pch/SouthClusterLbg/Include/PchLimits.h | 108 +
.../SouthClusterLbg/Include/PchPolicyCommon.h | 2161 +++++
.../Include/PchReservedResources.h | 82 +
.../Pch/SouthClusterLbg/Include/PcieRegs.h | 288 +
.../Include/Ppi/PchHsioPtssTable.h | 31 +
.../Include/Ppi/PchPcieDeviceTable.h | 126 +
.../SouthClusterLbg/Include/Ppi/PchPolicy.h | 23 +
.../SouthClusterLbg/Include/Ppi/PchReset.h | 95 +
.../Pch/SouthClusterLbg/Include/Ppi/Spi.h | 28 +
.../Include/Private/Library/PchSpiCommonLib.h | 458 +
.../Include/Protocol/PchReset.h | 114 +
.../SouthClusterLbg/Include/Protocol/Spi.h | 305 +
.../Include/Register/PchRegsDci.h | 44 +
.../Include/Register/PchRegsDmi.h | 302 +
.../Include/Register/PchRegsEva.h | 124 +
.../Include/Register/PchRegsFia.h | 106 +
.../Include/Register/PchRegsGpio.h | 531 +
.../Include/Register/PchRegsHda.h | 271 +
.../Include/Register/PchRegsHsio.h | 190 +
.../Include/Register/PchRegsItss.h | 90 +
.../Include/Register/PchRegsLan.h | 156 +
.../Include/Register/PchRegsLpc.h | 490 +
.../Include/Register/PchRegsP2sb.h | 132 +
.../Include/Register/PchRegsPcie.h | 620 ++
.../Include/Register/PchRegsPcr.h | 177 +
.../Include/Register/PchRegsPmc.h | 731 ++
.../Include/Register/PchRegsPsf.h | 304 +
.../Include/Register/PchRegsPsth.h | 66 +
.../Include/Register/PchRegsSata.h | 713 ++
.../Include/Register/PchRegsSmbus.h | 157 +
.../Include/Register/PchRegsSpi.h | 354 +
.../Include/Register/PchRegsThermal.h | 113 +
.../Include/Register/PchRegsTraceHub.h | 147 +
.../Include/Register/PchRegsUsb.h | 529 +
.../Library/PeiDxeSmmGpioLib/GpioLibrary.h | 224 +
.../Product/Whitley/SiliconPkg10nmPcds.dsc | 99 +
.../SecurityIp/SecurityIpMkTme1v0_Inputs.h | 25 +
.../SecurityIp/SecurityIpMkTme1v0_Outputs.h | 18 +
.../SecurityIp/SecurityIpSgxTem1v0_Inputs.h | 39 +
.../SecurityIp/SecurityIpSgxTem1v0_Outputs.h | 22 +
.../Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h | 13 +
.../SecurityIp/SecurityIpTdx1v0_Outputs.h | 11 +
.../Include/Guid/SecurityPolicy_Flat.h | 22 +
.../Intel/WhitleySiliconPkg/SiliconPkg.dec | 1004 ++
.../SiliconPolicyInit/SiliconPolicyInitLate.c | 52 +
.../SiliconPolicyInitLate.inf | 49 +
.../SiliconPolicyInitPreAndPostMem.c | 63 +
.../SiliconPolicyInitPreAndPostMem.inf | 48 +
.../WhitleySiliconPkg/WhitleySiliconPkg.dec | 65 +
437 files changed, 86801 insertions(+), 12 deletions(-)
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
create mode 100644 Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Platform.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c
create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf
create mode 100644 Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec
--
2.27.0.windows.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
` (17 preceding siblings ...)
2021-07-13 1:35 ` [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Oram, Isaac W
@ 2021-07-14 2:03 ` Michael D Kinney
18 siblings, 0 replies; 20+ messages in thread
From: Michael D Kinney @ 2021-07-14 2:03 UTC (permalink / raw)
To: Desimone, Nathaniel L, devel@edk2.groups.io, Kinney, Michael D
Cc: Oram, Isaac W, Abbas, Mohamed, Chiu, Chasel, Liming Gao,
Dong, Eric, Michael Kubacki
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
> -----Original Message-----
> From: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
> Sent: Monday, July 12, 2021 5:41 PM
> To: devel@edk2.groups.io
> Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abbas, Mohamed <mohamed.abbas@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Dong, Eric
> <eric.dong@intel.com>; Michael Kubacki <Michael.Kubacki@microsoft.com>
> Subject: [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform
>
> This patch series adds WhitleyOpenBoardPkg and WhitleySiliconPkg
> to edk2-platforms. These platforms along with the corresponding
> FSP and microcode binaries support the 3rd Generation Xeon
> Scalable processors formerly known as IceLake-SP and CooperLake.
>
> There are still some issues to be worked out. WhitleySiliconPkg
> has multiple DEC files that need to be mered together. And the
> WhitleyOpenBoardPkg DSC files need to be adjusted to conform to
> the MinPlatform *OpenBoardPkg guidelines. Additionally, there
> are non-standard build flags that replicate functionality
> provided by already existing FixedAtBuild PCDs. For example,
> FSP_MODE instead of PcdFspModeSelection. These issues will
> be addressed in future patch series.
>
> Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Co-authored-by: Isaac Oram <isaac.w.oram@intel.com>
> Co-authored-by: Mohamed Abbas <mohamed.abbas@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Isaac Oram <isaac.w.oram@intel.com>
> Cc: Mohamed Abbas <mohamed.abbas@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Michael Kubacki <Michael.Kubacki@microsoft.com>
>
> Nate DeSimone (17):
> WhitleySiliconPkg: Add DEC and DSC files
> WhitleySiliconPkg: Add Includes and Libraries
> WhitleySiliconPkg: Add Cpu Includes
> WhitleySiliconPkg: Add Me Includes
> WhitleySiliconPkg: Add PCH Register Includes
> WhitleySiliconPkg: Add PCH Includes
> WhitleySiliconPkg: Add PCH Libraries
> WhitleySiliconPkg: Add Security Includes
> WhitleySiliconPkg: Add SiliconPolicyInit
> WhitleyOpenBoardPkg: Add Includes and Libraries
> WhitleyOpenBoardPkg: Add Platform Modules
> WhitleyOpenBoardPkg: Add Feature Modules
> WhitleyOpenBoardPkg: Add UBA Modules
> WhitleyOpenBoardPkg: Add build scripts and package metadata
> Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py
> Readme.md: Add WhitleyOpenBoardPkg
> Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg
>
> Maintainers.txt | 12 +
> Platform/Intel/Readme.md | 14 +
> .../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c | 104 +
> .../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h | 67 +
> .../WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf | 70 +
> .../CooperCityRvp/build_board.py | 111 +
> .../CooperCityRvp/build_config.cfg | 36 +
> .../Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c | 704 ++
> .../PlatformCpuPolicy/PlatformCpuPolicy.inf | 81 +
> .../WhitleyOpenBoardPkg/DynamicExPcd.dsc | 19 +
> .../Pci/Dxe/PciHostBridge/PciHostBridge.c | 1634 ++++
> .../Pci/Dxe/PciHostBridge/PciHostBridge.h | 300 +
> .../Pci/Dxe/PciHostBridge/PciHostBridge.inf | 69 +
> .../Dxe/PciHostBridge/PciHostBridgeSupport.c | 127 +
> .../Pci/Dxe/PciHostBridge/PciHostResource.h | 62 +
> .../Pci/Dxe/PciHostBridge/PciRebalance.c | 1356 +++
> .../Pci/Dxe/PciHostBridge/PciRebalance.h | 158 +
> .../Pci/Dxe/PciHostBridge/PciRebalanceIo.c | 218 +
> .../Dxe/PciHostBridge/PciRebalanceMmio32.c | 163 +
> .../Dxe/PciHostBridge/PciRebalanceMmio64.c | 204 +
> .../Pci/Dxe/PciHostBridge/PciRootBridge.h | 573 ++
> .../Pci/Dxe/PciHostBridge/PciRootBridgeIo.c | 1664 ++++
> .../Dxe/PciPlatform/PciIovPlatformPolicy.c | 99 +
> .../Dxe/PciPlatform/PciIovPlatformPolicy.h | 53 +
> .../Pci/Dxe/PciPlatform/PciPlatform.c | 541 ++
> .../Pci/Dxe/PciPlatform/PciPlatform.h | 209 +
> .../Pci/Dxe/PciPlatform/PciPlatform.inf | 87 +
> .../Pci/Dxe/PciPlatform/PciPlatformHooks.c | 939 ++
> .../Pci/Dxe/PciPlatform/PciPlatformHooks.h | 31 +
> .../Pci/Dxe/PciPlatform/PciSupportLib.c | 108 +
> .../Pci/Dxe/PciPlatform/PciSupportLib.h | 46 +
> .../Pei/PlatformVariableInitPei.c | 274 +
> .../Pei/PlatformVariableInitPei.h | 41 +
> .../Pei/PlatformVariableInitPei.inf | 58 +
> .../WhitleyOpenBoardPkg/FspFlashOffsets.fdf | 21 +
> .../Include/Dsc/CoreDxeInclude.dsc | 135 +
> ...blePerformanceMonitoringInfrastructure.dsc | 40 +
> .../Include/Dsc/EnableRichDebugMessages.dsc | 50 +
> .../Include/Fdf/CommonNvStorageFtwWorking.fdf | 20 +
> .../Include/Fdf/CommonSpiFvHeaderInfo.fdf | 24 +
> ...anceMonitoringInfrastructurePostMemory.fdf | 14 +
> ...manceMonitoringInfrastructurePreMemory.fdf | 11 +
> .../Include/Fdf/NvStorage512K.fdf | 46 +
> .../Include/GpioInitData.h | 26 +
> .../Include/Guid/PlatformVariableCommon.h | 33 +
> .../Include/Guid/SetupVariable.h | 720 ++
> .../Include/Guid/UbaCfgHob.h | 74 +
> .../WhitleyOpenBoardPkg/Include/IoApic.h | 23 +
> .../Include/Library/MultiPlatSupportLib.h | 67 +
> .../Include/Library/PeiPlatformHooklib.h | 17 +
> .../Include/Library/PlatformClocksLib.h | 87 +
> .../Include/Library/PlatformOpromPolicyLib.h | 83 +
> .../Library/PlatformSetupVariableSyncLib.h | 60 +
> .../Include/Library/PlatformVariableHookLib.h | 47 +
> .../Include/Library/ReadFfsLib.h | 58 +
> .../Include/Library/SetupLib.h | 134 +
> .../Include/Library/UbaAcpiUpdateLib.h | 38 +
> .../Include/Library/UbaBoardSioInfoLib.h | 47 +
> .../Include/Library/UbaClkGenUpdateLib.h | 49 +
> .../Include/Library/UbaClocksConfigLib.h | 51 +
> .../Include/Library/UbaGpioInitLib.h | 26 +
> .../Include/Library/UbaGpioPlatformConfig.h | 259 +
> .../Include/Library/UbaGpioUpdateLib.h | 51 +
> .../Library/UbaHsioPtssTableConfigLib.h | 52 +
> .../Include/Library/UbaIioConfigLib.h | 227 +
> .../Library/UbaIioPortBifurcationInitLib.h | 47 +
> .../Include/Library/UbaOpromUpdateLib.h | 115 +
> .../Include/Library/UbaPcdUpdateLib.h | 44 +
> .../Include/Library/UbaPchEarlyUpdateLib.h | 63 +
> .../Library/UbaPcieBifurcationUpdateLib.h | 130 +
> .../Include/Library/UbaPlatLib.h | 25 +
> .../Include/Library/UbaSlotUpdateLib.h | 124 +
> .../Include/Library/UbaSoftStrapUpdateLib.h | 57 +
> .../Include/Library/UbaSystemBoardInfoLib.h | 36 +
> .../Library/UbaSystemConfigUpdateLib.h | 42 +
> .../Include/Library/UbaUsbOcUpdateLib.h | 51 +
> .../Include/OnboardNicStructs.h | 98 +
> .../Include/PchSetupVariable.h | 10 +
> .../Include/PchSetupVariableLbg.h | 372 +
> .../WhitleyOpenBoardPkg/Include/PlatDevData.h | 183 +
> .../Include/PlatPirqData.h | 36 +
> .../Include/Ppi/ExReportStatusCodeHandler.h | 38 +
> .../Include/Ppi/SmbusPolicy.h | 29 +
> .../Include/Ppi/UbaCfgDb.h | 144 +
> .../Include/Protocol/LegacyBios.h | 1550 +++
> .../Include/Protocol/LegacyBiosPlatform.h | 752 ++
> .../Include/Protocol/PciIovPlatform.h | 72 +
> .../Include/Protocol/PlatformType.h | 48 +
> .../Include/Protocol/UbaCfgDb.h | 114 +
> .../Include/Protocol/UbaDevsUpdateProtocol.h | 86 +
> .../Include/Protocol/UbaMakerProtocol.h | 22 +
> .../WhitleyOpenBoardPkg/Include/SetupTable.h | 25 +
> .../WhitleyOpenBoardPkg/Include/SioRegs.h | 251 +
> .../WhitleyOpenBoardPkg/Include/SystemBoard.h | 75 +
> .../WhitleyOpenBoardPkg/Include/UbaKti.h | 29 +
> .../BoardAcpiLib/DxeBoardAcpiTableLib.c | 37 +
> .../BoardAcpiLib/DxeBoardAcpiTableLib.inf | 44 +
> .../BoardAcpiLib/DxeMtOlympusAcpiTableLib.c | 54 +
> .../BoardAcpiLib/SmmBoardAcpiEnableLib.c | 51 +
> .../BoardAcpiLib/SmmBoardAcpiEnableLib.inf | 48 +
> .../BoardAcpiLib/SmmSiliconAcpiEnableLib.c | 138 +
> .../Library/BoardInitLib/BoardInitDxeLib.c | 299 +
> .../Library/BoardInitLib/BoardInitDxeLib.inf | 72 +
> .../Library/BoardInitLib/BoardInitDxeLib.uni | 29 +
> .../Library/BoardInitLib/BoardInitPreMemLib.c | 450 +
> .../BoardInitLib/BoardInitPreMemLib.inf | 66 +
> .../MultiPlatSupportLib/MultiPlatSupport.h | 48 +
> .../MultiPlatSupportLib/MultiPlatSupportLib.c | 255 +
> .../MultiPlatSupportLib.inf | 49 +
> .../FspWrapperHobProcessLib.c | 722 ++
> .../PeiFspWrapperHobProcessLib.inf | 99 +
> .../PeiPlatformHookLib/PeiPlatformHooklib.c | 43 +
> .../PeiPlatformHookLib/PeiPlatformHooklib.inf | 34 +
> .../Library/PeiReportFvLib/PeiReportFvLib.c | 270 +
> .../Library/PeiReportFvLib/PeiReportFvLib.inf | 65 +
> .../PeiUbaGpioPlatformConfigLib.c | 518 +
> .../Library/PeiUbaPlatLib/PeiUbaPlatLib.inf | 60 +
> .../PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c | 61 +
> .../PeiUbaPlatLib/UbaBoardSioInfoLib.c | 54 +
> .../PeiUbaPlatLib/UbaClkGenUpdateLib.c | 134 +
> .../PeiUbaPlatLib/UbaClocksConfigLib.c | 59 +
> .../Library/PeiUbaPlatLib/UbaGpioUpdateLib.c | 68 +
> .../PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c | 58 +
> .../PeiUbaPlatLib/UbaIioConfigLibPei.c | 219 +
> .../UbaIioPortBifurcationInitLib.c | 55 +
> .../Library/PeiUbaPlatLib/UbaPcdUpdateLib.c | 69 +
> .../PeiUbaPlatLib/UbaPchEarlyUpdateLib.c | 108 +
> .../PeiUbaPlatLib/UbaPchPcieBifurcationLib.c | 57 +
> .../PeiUbaPlatLib/UbaSlotUpdateLibPei.c | 156 +
> .../PeiUbaPlatLib/UbaSoftStrapUpdateLib.c | 95 +
> .../PlatformClocksLib/Pei/PlatformClocksLib.c | 347 +
> .../Pei/PlatformClocksLib.inf | 40 +
> .../PlatformCmosAccessLib.c | 73 +
> .../PlatformCmosAccessLib.inf | 45 +
> .../Library/PlatformHooksLib/PlatformHooks.c | 203 +
> .../PlatformHooksLib/PlatformHooksLib.inf | 28 +
> .../PlatformOpromPolicyLibNull.c | 88 +
> .../PlatformOpromPolicyLibNull.inf | 29 +
> .../PlatformSetupVariableSyncLibNull.c | 81 +
> .../PlatformSetupVariableSyncLibNull.inf | 28 +
> .../PlatformVariableHookLibNull.c | 55 +
> .../PlatformVariableHookLibNull.inf | 24 +
> .../Library/ReadFfsLib/ReadFfsLib.c | 446 +
> .../Library/ReadFfsLib/ReadFfsLib.inf | 34 +
> .../Library/SerialPortLib/Ns16550.h | 46 +
> .../Library/SerialPortLib/SerialPortLib.c | 1023 ++
> .../Library/SerialPortLib/SerialPortLib.inf | 55 +
> .../Library/SetCacheMtrrLib/SetCacheMtrrLib.c | 867 ++
> .../SetCacheMtrrLib/SetCacheMtrrLib.inf | 55 +
> .../PchPolicyUpdateUsb.c | 152 +
> .../SiliconPolicyUpdateLib.c | 778 ++
> .../SiliconPolicyUpdateLib.inf | 64 +
> .../SiliconPolicyUpdateLibFsp.c | 770 ++
> .../SiliconPolicyUpdateLibFsp.inf | 68 +
> .../SmmSpiFlashCommonLib.inf | 57 +
> .../SmmSpiFlashCommonLib/SpiFlashCommon.c | 237 +
> .../SpiFlashCommonSmmLib.c | 55 +
> .../DxeTcg2PhysicalPresenceLib.c | 41 +
> .../DxeTcg2PhysicalPresenceLib.inf | 29 +
> .../Library/UbaGpioInitLib/UbaGpioInitLib.c | 145 +
> .../Library/UbaGpioInitLib/UbaGpioInitLib.inf | 46 +
> .../Dxe/PlatformType/PlatformType.inf | 58 +
> .../Platform/Dxe/PlatformType/PlatformTypes.c | 364 +
> .../Platform/Dxe/PlatformType/PlatformTypes.h | 58 +
> .../Platform/Dxe/S3NvramSave/S3NvramSave.c | 157 +
> .../Platform/Dxe/S3NvramSave/S3NvramSave.h | 40 +
> .../Platform/Dxe/S3NvramSave/S3NvramSave.inf | 52 +
> .../Platform/Pei/DummyPchSpi/DummyPchSpi.inf | 43 +
> .../Platform/Pei/DummyPchSpi/PchSpi.c | 383 +
> .../EmulationPlatformInit.c | 124 +
> .../EmulationPlatformInit.inf | 46 +
> .../Platform/Pei/PlatformInfo/PlatformInfo.c | 761 ++
> .../Platform/Pei/PlatformInfo/PlatformInfo.h | 89 +
> .../Pei/PlatformInfo/PlatformInfo.inf | 63 +
> .../Intel/WhitleyOpenBoardPkg/PlatformPkg.dec | 781 ++
> .../Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc | 931 ++
> .../Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf | 827 ++
> .../WhitleyOpenBoardPkg/PlatformPkgConfig.dsc | 45 +
> .../WhitleyOpenBoardPkg/StructurePcd.dsc | 8553 +++++++++++++++++
> .../WhitleyOpenBoardPkg/StructurePcdCpx.dsc | 3796 ++++++++
> .../Uba/BoardInit/Dxe/BoardInitDxe.c | 87 +
> .../Uba/BoardInit/Dxe/BoardInitDxe.h | 30 +
> .../Uba/BoardInit/Dxe/BoardInitDxe.inf | 70 +
> .../Uba/BoardInit/Pei/BoardInitPei.c | 48 +
> .../Uba/BoardInit/Pei/BoardInitPei.h | 20 +
> .../Uba/BoardInit/Pei/BoardInitPei.inf | 55 +
> .../Uba/CfgDb/Dxe/CfgDbDxe.c | 518 +
> .../Uba/CfgDb/Dxe/CfgDbDxe.h | 32 +
> .../Uba/CfgDb/Dxe/CfgDbDxe.inf | 54 +
> .../Uba/CfgDb/Pei/CfgDbPei.c | 803 ++
> .../Uba/CfgDb/Pei/CfgDbPei.h | 33 +
> .../Uba/CfgDb/Pei/CfgDbPei.inf | 54 +
> .../WhitleyOpenBoardPkg/Uba/UbaCommon.dsc | 29 +
> .../WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf | 16 +
> .../Uba/UbaDxeRpBoards.fdf | 22 +
> .../SystemBoardInfoDxe/SystemBoardInfoDxe.c | 206 +
> .../SystemBoardInfoDxe/SystemBoardInfoDxe.h | 33 +
> .../SystemBoardInfoDxe/SystemBoardInfoDxe.inf | 45 +
> .../SystemConfigUpdateDxe.c | 94 +
> .../SystemConfigUpdateDxe.h | 30 +
> .../SystemConfigUpdateDxe.inf | 48 +
> .../Uba/UbaMain/Common/Pei/BoardInfo.c | 69 +
> .../Uba/UbaMain/Common/Pei/Clockgen.c | 27 +
> .../Uba/UbaMain/Common/Pei/ClocksConfig.c | 177 +
> .../UbaMain/Common/Pei/GpioPlatformConfig.c | 166 +
> .../UbaMain/Common/Pei/HsioPtssTableConfig.c | 460 +
> .../Common/Pei/IioBifurcationSlotTable.h | 156 +
> .../UbaMain/Common/Pei/IioPortBifurcation.c | 913 ++
> .../Common/Pei/IioPortBifurcationVer1.c | 1356 +++
> .../UbaMain/Common/Pei/PchHsioPtssTables.h | 51 +
> .../Common/Pei/PchLbgHsioPtssTablesBx.c | 44 +
> .../Common/Pei/PchLbgHsioPtssTablesBx.h | 18 +
> .../Common/Pei/PchLbgHsioPtssTablesBx_Ext.c | 44 +
> .../Common/Pei/PchLbgHsioPtssTablesBx_Ext.h | 20 +
> .../Common/Pei/PchLbgHsioPtssTablesSx.c | 27 +
> .../Common/Pei/PchLbgHsioPtssTablesSx.h | 21 +
> .../Common/Pei/PchLbgHsioPtssTablesSx_Ext.c | 44 +
> .../Common/Pei/PchLbgHsioPtssTablesSx_Ext.h | 21 +
> .../Common/Pei/PeiCommonBoardInitLib.c | 75 +
> .../Common/Pei/PeiCommonBoardInitLib.h | 55 +
> .../Common/Pei/PeiCommonBoardInitLib.inf | 76 +
> .../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 107 +
> .../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 161 +
> .../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 48 +
> .../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 108 +
> .../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
> .../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 48 +
> .../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 124 +
> .../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
> .../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
> .../TypeCooperCityRP/Pei/AcpiTablePcds.c | 51 +
> .../UbaMain/TypeCooperCityRP/Pei/GpioTable.c | 297 +
> .../TypeCooperCityRP/Pei/IioBifurInit.c | 393 +
> .../UbaMain/TypeCooperCityRP/Pei/KtiEparam.c | 241 +
> .../UbaMain/TypeCooperCityRP/Pei/PcdData.c | 259 +
> .../TypeCooperCityRP/Pei/PchEarlyUpdate.c | 81 +
> .../TypeCooperCityRP/Pei/PeiBoardInit.h | 96 +
> .../TypeCooperCityRP/Pei/PeiBoardInitLib.c | 224 +
> .../TypeCooperCityRP/Pei/PeiBoardInitLib.inf | 163 +
> .../UbaMain/TypeCooperCityRP/Pei/SlotTable.c | 164 +
> .../TypeCooperCityRP/Pei/SoftStrapFixup.c | 110 +
> .../Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c | 123 +
> .../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c | 99 +
> .../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h | 118 +
> .../Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf | 47 +
> .../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c | 115 +
> .../Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h | 57 +
> .../SlotDataUpdateDxe/SlotDataUpdateDxe.inf | 47 +
> .../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c | 127 +
> .../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h | 27 +
> .../Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf | 44 +
> .../TypeWilsonCityRP/Pei/AcpiTablePcds.c | 53 +
> .../UbaMain/TypeWilsonCityRP/Pei/GpioTable.c | 287 +
> .../TypeWilsonCityRP/Pei/IioBifurInit.c | 387 +
> .../UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c | 107 +
> .../UbaMain/TypeWilsonCityRP/Pei/PcdData.c | 274 +
> .../TypeWilsonCityRP/Pei/PchEarlyUpdate.c | 92 +
> .../TypeWilsonCityRP/Pei/PeiBoardInit.h | 77 +
> .../TypeWilsonCityRP/Pei/PeiBoardInitLib.c | 156 +
> .../TypeWilsonCityRP/Pei/PeiBoardInitLib.inf | 166 +
> .../UbaMain/TypeWilsonCityRP/Pei/SlotTable.c | 171 +
> .../TypeWilsonCityRP/Pei/SoftStrapFixup.c | 120 +
> .../Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c | 126 +
> .../Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf | 24 +
> .../WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc | 44 +
> .../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c | 43 +
> .../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h | 20 +
> .../Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf | 50 +
> .../ExSerialStatusCodeWorker.c | 194 +
> .../ExStatusCodeHandlerPei.c | 111 +
> .../ExStatusCodeHandlerPei.h | 85 +
> .../ExStatusCodeHandlerPei.inf | 61 +
> .../ExReportStatusCodeRouterPei.c | 301 +
> .../ExReportStatusCodeRouterPei.h | 104 +
> .../ExReportStatusCodeRouterPei.inf | 51 +
> .../PeiInterposerToSvidMap.c | 136 +
> .../PeiInterposerToSvidMap.inf | 53 +
> .../WilsonCityRvp/build_board.py | 111 +
> .../WilsonCityRvp/build_config.cfg | 36 +
> Platform/Intel/build.cfg | 2 +
> Platform/Intel/build_bios.py | 28 +-
> Readme.md | 2 +
> Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec | 541 ++
> .../Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec | 101 +
> .../Cpu/Include/CpuDataStruct.h | 27 +
> .../Cpu/Include/CpuPolicyPeiDxeCommon.h | 58 +
> .../Cpu/Include/Guid/CpuNvramData.h | 34 +
> .../Cpu/Include/Library/CpuConfigLib.h | 30 +
> .../Cpu/Include/Library/CpuEarlyDataLib.h | 41 +
> .../Cpu/Include/Library/CpuPpmLib.h | 16 +
> .../Cpu/Include/PpmPolicyPeiDxeCommon.h | 320 +
> .../Cpu/Include/ProcessorPpmSetup.h | 14 +
> .../Cpu/Include/Protocol/CpuPolicyProtocol.h | 31 +
> .../Cpu/Include/Protocol/PpmPolicyProtocol.h | 16 +
> .../Include/BackCompatible.h | 19 +
> .../Include/ConfigBlock/TraceHubConfig.h | 65 +
> .../Include/ConfigBlock/Usb2PhyConfig.h | 63 +
> .../Include/ConfigBlock/UsbConfig.h | 85 +
> .../WhitleySiliconPkg/Include/Cpu/CpuIds.h | 18 +
> .../Include/CpuAndRevisionDefines.h | 283 +
> .../Include/EmulationConfiguration.h | 22 +
> .../Intel/WhitleySiliconPkg/Include/Fpga.h | 17 +
> .../WhitleySiliconPkg/Include/GpioConfig.h | 288 +
> .../Include/Guid/EmulationDfxVariable.h | 25 +
> .../Include/Guid/FpgaSocketVariable.h | 39 +
> .../Include/Guid/MemBootHealthGuid.h | 71 +
> .../Include/Guid/MemoryMapData.h | 197 +
> .../Include/Guid/PartialMirrorGuid.h | 61 +
> .../Include/Guid/PlatformInfo.h | 150 +
> .../Guid/SiliconPolicyInitLibInterface.h | 78 +
> .../Include/Guid/SocketCommonRcVariable.h | 57 +
> .../Include/Guid/SocketIioVariable.h | 444 +
> .../Include/Guid/SocketMemoryVariable.h | 477 +
> .../Include/Guid/SocketMpLinkVariable.h | 320 +
> .../Include/Guid/SocketPciResourceData.h | 60 +
> .../Guid/SocketPowermanagementVariable.h | 300 +
> .../Guid/SocketProcessorCoreVariable.h | 143 +
> .../Include/Guid/SocketVariable.h | 36 +
> .../Include/Guid/StatusCodeDataTypeExDebug.h | 50 +
> .../WhitleySiliconPkg/Include/IioConfig.h | 398 +
> .../Include/IioPlatformData.h | 204 +
> .../Intel/WhitleySiliconPkg/Include/IioRegs.h | 179 +
> .../Include/IioSetupDefinitions.h | 60 +
> .../Include/IioUniversalData.h | 166 +
> .../WhitleySiliconPkg/Include/ImonVrSvid.h | 26 +
> .../Include/KtiSetupDefinitions.h | 22 +
> .../Include/Library/CompressedVariableLib.h | 35 +
> .../Library/EmulationConfigurationLib.h | 34 +
> .../Include/Library/MemTypeLib.h | 32 +
> .../Include/Library/MemVrSvidMapLib.h | 66 +
> .../Include/Library/PchInfoLib.h | 22 +
> .../Include/Library/PlatformHooksLib.h | 17 +
> .../Include/Library/SemaphoreLib.h | 326 +
> .../Intel/WhitleySiliconPkg/Include/MaxCore.h | 20 +
> .../WhitleySiliconPkg/Include/MaxSocket.h | 20 +
> .../WhitleySiliconPkg/Include/MaxThread.h | 20 +
> .../WhitleySiliconPkg/Include/MemCommon.h | 41 +
> .../Include/Memory/Ddr4SpdRegisters.h | 38 +
> .../Include/Memory/ProcSmbChipCommon.h | 28 +
> .../WhitleySiliconPkg/Include/Platform.h | 266 +
> .../Include/PlatformInfoTypes.h | 106 +
> .../Include/Ppi/DynamicSiLibraryPpi.h | 474 +
> .../Include/Ppi/MemoryPolicyPpi.h | 2112 ++++
> .../Include/Ppi/RasImcS3Data.h | 53 +
> .../Include/Ppi/UpiPolicyPpi.h | 39 +
> .../Protocol/DynamicSiLibraryProtocol.h | 252 +
> .../Protocol/DynamicSiLibrarySmmProtocol.h | 60 +
> .../Include/Protocol/GlobalNvsArea.h | 212 +
> .../Include/Protocol/IioUds.h | 47 +
> .../Include/Protocol/PciCallback.h | 85 +
> .../WhitleySiliconPkg/Include/RcVersion.h | 23 +
> .../Include/ScratchpadList.h | 49 +
> .../Include/SiliconUpdUpdate.h | 53 +
> .../WhitleySiliconPkg/Include/SystemInfoVar.h | 93 +
> .../Include/UncoreCommonIncludes.h | 111 +
> .../WhitleySiliconPkg/Include/Upi/KtiDisc.h | 36 +
> .../WhitleySiliconPkg/Include/Upi/KtiHost.h | 304 +
> .../WhitleySiliconPkg/Include/Upi/KtiSi.h | 32 +
> .../Include/UsraAccessType.h | 291 +
> .../Core/Include/DataTypes.h | 36 +
> .../BaseMemoryCoreLib/Core/Include/MemHost.h | 1051 ++
> .../Core/Include/MemHostChipCommon.h | 190 +
> .../BaseMemoryCoreLib/Core/Include/MemRegs.h | 25 +
> .../Core/Include/MrcCommonTypes.h | 28 +
> .../Core/Include/NGNDimmPlatformCfgData.h | 22 +
> .../BaseMemoryCoreLib/Core/Include/SysHost.h | 193 +
> .../Core/Include/SysHostChipCommon.h | 101 +
> .../BaseMemoryCoreLib/Platform/MemDefaults.h | 28 +
> .../BaseMemoryCoreLib/Platform/PlatformHost.h | 35 +
> .../FspWrapperPlatformLib.c | 243 +
> .../FspWrapperPlatformLib.inf | 71 +
> .../Library/SetupLib/PeiSetupLib.c | 259 +
> .../Library/SetupLib/PeiSetupLib.inf | 55 +
> .../Library/SetupLib/SetupLib.c | 253 +
> .../Library/SetupLib/SetupLib.inf | 59 +
> .../Library/SetupLib/SetupLibNull.c | 159 +
> .../Library/SetupLib/SetupLibNull.inf | 46 +
> .../SiliconPolicyInitLibShim.c | 104 +
> .../SiliconPolicyInitLibShim.inf | 38 +
> .../SiliconWorkaroundLibNull.c | 38 +
> .../SiliconWorkaroundLibNull.inf | 50 +
> .../Me/MeSps.4/Include/Library/SpsPeiLib.h | 22 +
> .../WhitleySiliconPkg/MrcCommonConfig.dsc | 71 +
> .../SouthClusterLbg/Include/GpioPinsSklH.h | 300 +
> .../SouthClusterLbg/Include/Library/GpioLib.h | 1016 ++
> .../Include/Library/PchMultiPchBase.h | 37 +
> .../Include/Library/PchPcieRpLib.h | 145 +
> .../Pch/SouthClusterLbg/Include/PchAccess.h | 629 ++
> .../Pch/SouthClusterLbg/Include/PchLimits.h | 108 +
> .../SouthClusterLbg/Include/PchPolicyCommon.h | 2161 +++++
> .../Include/PchReservedResources.h | 82 +
> .../Pch/SouthClusterLbg/Include/PcieRegs.h | 288 +
> .../Include/Ppi/PchHsioPtssTable.h | 31 +
> .../Include/Ppi/PchPcieDeviceTable.h | 126 +
> .../SouthClusterLbg/Include/Ppi/PchPolicy.h | 23 +
> .../SouthClusterLbg/Include/Ppi/PchReset.h | 95 +
> .../Pch/SouthClusterLbg/Include/Ppi/Spi.h | 28 +
> .../Include/Private/Library/PchSpiCommonLib.h | 458 +
> .../Include/Protocol/PchReset.h | 114 +
> .../SouthClusterLbg/Include/Protocol/Spi.h | 305 +
> .../Include/Register/PchRegsDci.h | 44 +
> .../Include/Register/PchRegsDmi.h | 302 +
> .../Include/Register/PchRegsEva.h | 124 +
> .../Include/Register/PchRegsFia.h | 106 +
> .../Include/Register/PchRegsGpio.h | 531 +
> .../Include/Register/PchRegsHda.h | 271 +
> .../Include/Register/PchRegsHsio.h | 190 +
> .../Include/Register/PchRegsItss.h | 90 +
> .../Include/Register/PchRegsLan.h | 156 +
> .../Include/Register/PchRegsLpc.h | 490 +
> .../Include/Register/PchRegsP2sb.h | 132 +
> .../Include/Register/PchRegsPcie.h | 620 ++
> .../Include/Register/PchRegsPcr.h | 177 +
> .../Include/Register/PchRegsPmc.h | 731 ++
> .../Include/Register/PchRegsPsf.h | 304 +
> .../Include/Register/PchRegsPsth.h | 66 +
> .../Include/Register/PchRegsSata.h | 713 ++
> .../Include/Register/PchRegsSmbus.h | 157 +
> .../Include/Register/PchRegsSpi.h | 354 +
> .../Include/Register/PchRegsThermal.h | 113 +
> .../Include/Register/PchRegsTraceHub.h | 147 +
> .../Include/Register/PchRegsUsb.h | 529 +
> .../Library/PeiDxeSmmGpioLib/GpioLibrary.h | 224 +
> .../Product/Whitley/SiliconPkg10nmPcds.dsc | 99 +
> .../SecurityIp/SecurityIpMkTme1v0_Inputs.h | 25 +
> .../SecurityIp/SecurityIpMkTme1v0_Outputs.h | 18 +
> .../SecurityIp/SecurityIpSgxTem1v0_Inputs.h | 39 +
> .../SecurityIp/SecurityIpSgxTem1v0_Outputs.h | 22 +
> .../Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h | 13 +
> .../SecurityIp/SecurityIpTdx1v0_Outputs.h | 11 +
> .../Include/Guid/SecurityPolicy_Flat.h | 22 +
> .../Intel/WhitleySiliconPkg/SiliconPkg.dec | 1004 ++
> .../SiliconPolicyInit/SiliconPolicyInitLate.c | 52 +
> .../SiliconPolicyInitLate.inf | 49 +
> .../SiliconPolicyInitPreAndPostMem.c | 63 +
> .../SiliconPolicyInitPreAndPostMem.inf | 48 +
> .../WhitleySiliconPkg/WhitleySiliconPkg.dec | 65 +
> 437 files changed, 86801 insertions(+), 12 deletions(-)
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/BiosInfo/BiosInfo.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_board.py
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/CooperCityRvp/build_config.cfg
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Cpu/Dxe/PlatformCpuPolicy/PlatformCpuPolicy.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/DynamicExPcd.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridge.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostBridgeSupport.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciHostResource.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalance.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceIo.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio32.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRebalanceMmio64.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridge.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciHostBridge/PciRootBridgeIo.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciIovPlatformPolicy.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatform.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciPlatformHooks.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Pci/Dxe/PciPlatform/PciSupportLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Features/Variable/PlatformVariable/Pei/PlatformVariableInitPei.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/FspFlashOffsets.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/CoreDxeInclude.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnablePerformanceMonitoringInfrastructure.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Dsc/EnableRichDebugMessages.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonNvStorageFtwWorking.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/CommonSpiFvHeaderInfo.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePostMemory.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/EnablePerformanceMonitoringInfrastructurePreMemory.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Fdf/NvStorage512K.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/GpioInitData.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/PlatformVariableCommon.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/SetupVariable.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Guid/UbaCfgHob.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/IoApic.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/MultiPlatSupportLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PeiPlatformHooklib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformClocksLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformOpromPolicyLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformSetupVariableSyncLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/PlatformVariableHookLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/ReadFfsLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/SetupLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaAcpiUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaBoardSioInfoLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClkGenUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaClocksConfigLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioInitLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioPlatformConfig.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaGpioUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaHsioPtssTableConfigLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioConfigLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaIioPortBifurcationInitLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaOpromUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcdUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPchEarlyUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPcieBifurcationUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaPlatLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSlotUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSoftStrapUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemBoardInfoLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaSystemConfigUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Library/UbaUsbOcUpdateLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/OnboardNicStructs.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariable.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PchSetupVariableLbg.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatDevData.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/PlatPirqData.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/ExReportStatusCodeHandler.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/SmbusPolicy.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Ppi/UbaCfgDb.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBios.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/LegacyBiosPlatform.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PciIovPlatform.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/PlatformType.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaCfgDb.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaDevsUpdateProtocol.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/Protocol/UbaMakerProtocol.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SetupTable.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SioRegs.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/SystemBoard.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Include/UbaKti.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeBoardAcpiTableLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/DxeMtOlympusAcpiTableLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmBoardAcpiEnableLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardAcpiLib/SmmSiliconAcpiEnableLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitDxeLib.uni
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/BoardInitLib/BoardInitPreMemLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupport.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/MultiPlatSupportLib/MultiPlatSupportLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/FspWrapperHobProcessLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiFspWrapperHobProcessLib/PeiFspWrapperHobProcessLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiPlatformHookLib/PeiPlatformHooklib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiReportFvLib/PeiReportFvLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaGpioPlatformConfigLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaPlatLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/PeiUbaUsbOcUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaBoardSioInfoLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClkGenUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaClocksConfigLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaGpioUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaHsioPtssTableConfigLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioConfigLibPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaIioPortBifurcationInitLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPcdUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchEarlyUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaPchPcieBifurcationLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSlotUpdateLibPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PeiUbaPlatLib/UbaSoftStrapUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformClocksLib/Pei/PlatformClocksLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformCmosAccessLib/PlatformCmosAccessLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooks.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformHooksLib/PlatformHooksLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformOpromPolicyLibNull/PlatformOpromPolicyLibNull.inf
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.c
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformSetupVariableSyncLibNull/PlatformSetupVariableSyncLibNull.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/PlatformVariableHookLibNull/PlatformVariableHookLibNull.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/ReadFfsLib/ReadFfsLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/Ns16550.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SerialPortLib/SerialPortLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/PchPolicyUpdateUsb.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SiliconPolicyUpdateLib/SiliconPolicyUpdateLibFsp.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SmmSpiFlashCommonLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommon.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/SmmSpiFlashCommonLib/SpiFlashCommonSmmLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Library/UbaGpioInitLib/UbaGpioInitLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformType.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/PlatformType/PlatformTypes.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Dxe/S3NvramSave/S3NvramSave.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/DummyPchSpi.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/DummyPchSpi/PchSpi.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/EmulationPlatformInit/EmulationPlatformInit.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Platform/Pei/PlatformInfo/PlatformInfo.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dec
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkg.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/PlatformPkgConfig.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcd.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/StructurePcdCpx.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Dxe/BoardInitDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/BoardInit/Pei/BoardInitPei.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Dxe/CfgDbDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/CfgDb/Pei/CfgDbPei.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaCommon.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeCommon.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaDxeRpBoards.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemBoardInfoDxe/SystemBoardInfoDxe.inf
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.c
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.h
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Dxe/SystemConfigUpdateDxe/SystemConfigUpdateDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/BoardInfo.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/Clockgen.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/ClocksConfig.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/GpioPlatformConfig.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/HsioPtssTableConfig.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioBifurcationSlotTable.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcation.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/IioPortBifurcationVer1.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchHsioPtssTables.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesBx_Ext.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PchLbgHsioPtssTablesSx_Ext.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/Common/Pei/PeiCommonBoardInitLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/AcpiTablePcds.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/GpioTable.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/IioBifurInit.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/KtiEparam.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PcdData.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PchEarlyUpdate.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInit.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/PeiBoardInitLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SlotTable.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/SoftStrapFixup.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeCooperCityRP/Pei/UsbOC.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.h
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/IioCfgUpdateDxe/IioCfgUpdateDxe.inf
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.c
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.h
> create mode 100644
> Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/SlotDataUpdateDxe/SlotDataUpdateDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Dxe/UsbOcUpdateDxe/UsbOcUpdateDxe.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/AcpiTablePcds.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/GpioTable.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/IioBifurInit.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/KtiEparam.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PcdData.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PchEarlyUpdate.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInit.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/PeiBoardInitLib.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SlotTable.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/SoftStrapFixup.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaMain/TypeWilsonCityRP/Pei/UsbOC.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaPei.fdf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaRpBoards.dsc
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Uba/UbaUpdatePcds/Pei/UpdatePcdsPei.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExSerialStatusCodeWorker.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeHandler/ExStatusCodeHandlerPei.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.h
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiExStatusCodeRouter/ExReportStatusCodeRouterPei.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.c
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/Universal/PeiInterposerToSvidMap/PeiInterposerToSvidMap.inf
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_board.py
> create mode 100644 Platform/Intel/WhitleyOpenBoardPkg/WilsonCityRvp/build_config.cfg
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/CpRcPkg.dec
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/CpuRcPkg.dec
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuDataStruct.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/CpuPolicyPeiDxeCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Guid/CpuNvramData.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuConfigLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuEarlyDataLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Library/CpuPpmLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/PpmPolicyPeiDxeCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/ProcessorPpmSetup.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/CpuPolicyProtocol.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Cpu/Include/Protocol/PpmPolicyProtocol.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/BackCompatible.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/TraceHubConfig.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/Usb2PhyConfig.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ConfigBlock/UsbConfig.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Cpu/CpuIds.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/CpuAndRevisionDefines.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/EmulationConfiguration.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Fpga.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/GpioConfig.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/EmulationDfxVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/FpgaSocketVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemBootHealthGuid.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/MemoryMapData.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PartialMirrorGuid.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/PlatformInfo.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SiliconPolicyInitLibInterface.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketCommonRcVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketIioVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMemoryVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketMpLinkVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPciResourceData.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketPowermanagementVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketProcessorCoreVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/SocketVariable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Guid/StatusCodeDataTypeExDebug.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioConfig.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioPlatformData.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioRegs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioSetupDefinitions.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/IioUniversalData.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ImonVrSvid.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/KtiSetupDefinitions.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/CompressedVariableLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/EmulationConfigurationLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemTypeLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/MemVrSvidMapLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PchInfoLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/PlatformHooksLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Library/SemaphoreLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxCore.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxSocket.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MaxThread.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/MemCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/Ddr4SpdRegisters.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Memory/ProcSmbChipCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Platform.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/PlatformInfoTypes.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/DynamicSiLibraryPpi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/MemoryPolicyPpi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/RasImcS3Data.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Ppi/UpiPolicyPpi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibraryProtocol.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/DynamicSiLibrarySmmProtocol.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/GlobalNvsArea.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/IioUds.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Protocol/PciCallback.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/RcVersion.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/ScratchpadList.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SiliconUpdUpdate.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/SystemInfoVar.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UncoreCommonIncludes.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiDisc.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiHost.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/Upi/KtiSi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Include/UsraAccessType.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/DataTypes.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHost.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemHostChipCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MemRegs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/MrcCommonTypes.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/NGNDimmPlatformCfgData.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHost.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Core/Include/SysHostChipCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/MemDefaults.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/BaseMemoryCoreLib/Platform/PlatformHost.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/FspWrapperPlatformLib/FspWrapperPlatformLib.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/PeiSetupLib.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLib.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SetupLib/SetupLibNull.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconPolicyInitLibShim/SiliconPolicyInitLibShim.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Library/SiliconWorkaroundLibNull/SiliconWorkaroundLibNull.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Me/MeSps.4/Include/Library/SpsPeiLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/MrcCommonConfig.dsc
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/GpioPinsSklH.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/GpioLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchMultiPchBase.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Library/PchPcieRpLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchAccess.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchLimits.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchPolicyCommon.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PchReservedResources.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/PcieRegs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchHsioPtssTable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPcieDeviceTable.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchPolicy.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/PchReset.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Ppi/Spi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Private/Library/PchSpiCommonLib.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/PchReset.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Protocol/Spi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDci.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsDmi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsEva.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsFia.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsGpio.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHda.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsHsio.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsItss.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLan.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsLpc.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsP2sb.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcie.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPcr.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPmc.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsf.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsPsth.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSata.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSmbus.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsSpi.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsThermal.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsTraceHub.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Include/Register/PchRegsUsb.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Pch/SouthClusterLbg/Library/PeiDxeSmmGpioLib/GpioLibrary.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Product/Whitley/SiliconPkg10nmPcds.dsc
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Inputs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpMkTme1v0_Outputs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Inputs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpSgxTem1v0_Outputs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Inputs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityIp/SecurityIpTdx1v0_Outputs.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/Security/Include/Guid/SecurityPolicy_Flat.h
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPkg.dec
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitLate.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.c
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/SiliconPolicyInit/SiliconPolicyInitPreAndPostMem.inf
> create mode 100644 Silicon/Intel/WhitleySiliconPkg/WhitleySiliconPkg.dec
>
> --
> 2.27.0.windows.1
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2021-07-14 2:03 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-13 0:41 [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 01/17] WhitleySiliconPkg: Add DEC and DSC files Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 02/17] WhitleySiliconPkg: Add Includes and Libraries Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 03/17] WhitleySiliconPkg: Add Cpu Includes Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 04/17] WhitleySiliconPkg: Add Me Includes Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 05/17] WhitleySiliconPkg: Add PCH Register Includes Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 06/17] WhitleySiliconPkg: Add PCH Includes Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 07/17] WhitleySiliconPkg: Add PCH Libraries Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 08/17] WhitleySiliconPkg: Add Security Includes Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 09/17] WhitleySiliconPkg: Add SiliconPolicyInit Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 10/17] WhitleyOpenBoardPkg: Add Includes and Libraries Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 11/17] WhitleyOpenBoardPkg: Add Platform Modules Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 12/17] WhitleyOpenBoardPkg: Add Feature Modules Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 13/17] WhitleyOpenBoardPkg: Add UBA Modules Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 14/17] WhitleyOpenBoardPkg: Add build scripts and package metadata Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 15/17] Platform/Intel: Add WhitleyOpenBoardPkg to build_bios.py Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 16/17] Readme.md: Add WhitleyOpenBoardPkg Nate DeSimone
2021-07-13 0:41 ` [edk2-platforms] [PATCH V1 17/17] Maintainers.txt: Add WhitleyOpenBoardPkg and WhitleySiliconPkg Nate DeSimone
2021-07-13 1:35 ` [edk2-platforms] [PATCH V1 00/17] Add IceLake-SP and CooperLake Support to MinPlatform Oram, Isaac W
2021-07-14 2:03 ` Michael D Kinney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox