[edk2-devel] [edk2-platforms] [PATCH V1 13/17] WhitleyOpenBoardPkg: Add UBA Modules

Nate DeSimone nathaniel.l.desimone at intel.com
Tue Jul 13 00:41:27 UTC 2021


Signed-off-by: Nate DeSimone <nathaniel.l.desimone at intel.com>
Co-authored-by: Isaac Oram <isaac.w.oram at intel.com>
Co-authored-by: Mohamed Abbas <mohamed.abbas at intel.com>
Cc: Chasel Chiu <chasel.chiu at intel.com>
Cc: Michael D Kinney <michael.d.kinney at intel.com>
Cc: Isaac Oram <isaac.w.oram at intel.com>
Cc: Mohamed Abbas <mohamed.abbas at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Cc: Eric Dong <eric.dong at intel.com>
Cc: Michael Kubacki <Michael.Kubacki at 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



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#77718): https://edk2.groups.io/g/devel/message/77718
Mute This Topic: https://groups.io/mt/84168634/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list