From: "Sun, Zailiang" <zailiang.sun@intel.com>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Qian, Yi" <yi.qian@intel.com>,
"Kubacki, Michael A" <michael.a.kubacki@intel.com>,
Leif Lindholm <leif.lindholm@linaro.org>,
"Ard Biesheuvel" <ard.biesheuvel@linaro.org>
Subject: Re: [edk2-platforms: Patch 5/8] Platform/Vlv2DeviceRefCodePkg: Import Vlv2DeviceRefCodePkg from edk2
Date: Mon, 13 May 2019 02:52:16 +0000 [thread overview]
Message-ID: <7CB7EF03E15B5D48981329A508747A9850C63ADE@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190510033435.24112-6-michael.d.kinney@intel.com>
Reviewed-by: Zailiang Sun <zailiang.sun@intel.com>
> -----Original Message-----
> From: Kinney, Michael D
> Sent: Friday, May 10, 2019 11:35 AM
> To: devel@edk2.groups.io
> Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>;
> Kubacki, Michael A <michael.a.kubacki@intel.com>; Leif Lindholm
> <leif.lindholm@linaro.org>; Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Subject: [edk2-platforms: Patch 5/8] Platform/Vlv2DeviceRefCodePkg:
> Import Vlv2DeviceRefCodePkg from edk2
>
> https://bugzilla.tianocore.org/show_bug.cgi?id=1374
>
> Import Vlv2DeviceRefCodePkg from edk2/master.
>
> Cc: Zailiang Sun <zailiang.sun@intel.com>
> Cc: Yi Qian <yi.qian@intel.com>
> Cc: Michael Kubacki <michael.a.kubacki@intel.com>
> Cc: Leif Lindholm <leif.lindholm@linaro.org>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
> ---
> .../AcpiTablesPCAT/98_LINK.ASL | 617 +++++++++
> .../AcpiTablesPCAT/AcpiTablePlatform.h | 70 +
> .../AcpiTablesPCAT/AcpiTables.inf | 40 +
> .../AcpiTablesPCAT/CPU.asl | 49 +
> .../AcpiTablesPCAT/DSDT.ASL | 75 +
> .../AcpiTablesPCAT/Facp/Facp.aslc | 188 +++
> .../AcpiTablesPCAT/Facs/Facs.aslc | 84 ++
> .../AcpiTablesPCAT/GloblNvs.asl | 348 +++++
> .../AcpiTablesPCAT/Gpe.asl | 99 ++
> .../AcpiTablesPCAT/HOST_BUS.ASL | 347 +++++
> .../AcpiTablesPCAT/Hpet/Hpet.aslc | 63 +
> .../AcpiTablesPCAT/INTELGFX.ASL | 879 ++++++++++++
> .../AcpiTablesPCAT/INTELISPDev2.ASL | 71 +
> .../AcpiTablesPCAT/IgdOGBDA.ASL | 155 +++
> .../AcpiTablesPCAT/IgdOMOBF.ASL | 485 +++++++
> .../AcpiTablesPCAT/IgdOSBCB.ASL | 274 ++++
> .../AcpiTablesPCAT/IgdOpRn.ASL | 299 ++++
> .../AcpiTablesPCAT/IoTVirtualDevice.asl | 171 +++
> .../AcpiTablesPCAT/LPC_DEV.ASL | 151 +++
> .../AcpiTablesPCAT/LpcB.asl | 59 +
> .../AcpiTablesPCAT/Lpit/Lpit.aslc | 223 +++
> .../AcpiTablesPCAT/Madt/Madt.h | 189 +++
> .../AcpiTablesPCAT/Madt/Madt30.aslc | 178 +++
> .../AcpiTablesPCAT/Mcfg/Mcfg.aslc | 86 ++
> .../AcpiTablesPCAT/PCI_DRC.ASL | 90 ++
> .../AcpiTablesPCAT/Pch.asl | 686 ++++++++++
> .../AcpiTablesPCAT/PchAudio.asl | 36 +
> .../AcpiTablesPCAT/PchEhci.asl | 269 ++++
> .../AcpiTablesPCAT/PchLpss.asl | 1093 +++++++++++++++
> .../AcpiTablesPCAT/PchPcie.asl | 50 +
> .../AcpiTablesPCAT/PchScc.asl | 610 +++++++++
> .../AcpiTablesPCAT/PchSmb.asl | 833 ++++++++++++
> .../AcpiTablesPCAT/PchXhci.asl | 379 ++++++
> .../AcpiTablesPCAT/PciTree.asl | 377 ++++++
> .../AcpiTablesPCAT/Platform.asl | 703 ++++++++++
> .../AcpiTablesPCAT/RTD3.asl | 197 +++
> .../AcpiTablesPCAT/RhProxy.asl | 160 +++
> .../AcpiTablesPCAT/THERMAL.ASL | 137 ++
> .../AcpiTablesPCAT/UsbSbd.asl | 93 ++
> .../AcpiTablesPCAT/Video.asl | 34 +
> .../AcpiTablesPCAT/Vlv.asl | 39 +
> .../AcpiTablesPCAT/Wsmt/Wsmt.aslc | 54 +
> .../AcpiTablesPCAT/token.asl | 39 +
> .../Guid/Vlv2DeviceRefCodePkgTokenSpace.h | 24 +
> .../Include/Ppi/PttPassThruPpi.h | 92 ++
> .../Include/Ppi/fTPMPolicy.h | 26 +
> .../Include/Protocol/PttPassThru.h | 91 ++
> .../Guid/PowerManagementAcpiTableStorage.h | 27 +
> .../CPU/Include/Ppi/VlvPolicy.h | 104 ++
> .../CPU/Include/Protocol/PpmPlatformPolicy.h | 132 ++
> .../ValleyView2Soc/CPU/Include/Types.h | 55 +
> .../AcpiTables/PowerManagementAcpiTables.inf | 39 +
> .../PowerManagement/AcpiTables/Ssdt/ApCst.asl | 110 ++
> .../PowerManagement/AcpiTables/Ssdt/ApIst.asl | 166 +++
> .../PowerManagement/AcpiTables/Ssdt/ApTst.asl | 262 ++++
> .../AcpiTables/Ssdt/Cpu0Cst.asl | 274 ++++
> .../AcpiTables/Ssdt/Cpu0Ist.asl | 260 ++++
> .../AcpiTables/Ssdt/Cpu0Tst.asl | 235 ++++
> .../PowerManagement/AcpiTables/Ssdt/CpuPm.asl | 793 +++++++++++
> .../Include/PlatformBaseAddresses.h | 92 ++
> .../NorthCluster/Include/Ppi/Capsule.h | 60 +
> .../Include/Ppi/PlatformMemoryRange.h | 144 ++
> .../Include/Ppi/PlatformMemorySize.h | 46 +
> .../NorthCluster/Include/Ppi/SmmAccess.h | 165 +++
> .../NorthCluster/Include/Ppi/VlvMmioPolicy.h | 39 +
> .../NorthCluster/Include/Ppi/VlvPeiInit.h | 35 +
> .../NorthCluster/Include/Ppi/VlvPolicy.h | 106 ++
> .../Include/Protocol/IgdOpRegion.h | 213 +++
> .../NorthCluster/Include/Protocol/MemInfo.h | 83 ++
> .../Include/Protocol/PlatformGopPolicy.h | 67 +
> .../Include/Protocol/VlvPlatformPolicy.h | 105 ++
> .../NorthCluster/Include/Valleyview.h | 55 +
> .../NorthCluster/Include/VlvAccess.h | 254 ++++
> .../Include/VlvCommonDefinitions.h | 252 ++++
> .../SouthCluster/Include/Guid/PchInitVar.h | 48 +
> .../Include/Guid/SataControllerGuid.h | 34 +
> .../SouthCluster/Include/Guid/SmbusArpMap.h | 30 +
> .../SouthCluster/Include/Guid/Vlv2Variable.h | 28 +
> .../Include/IndustryStandard/CeAta.h | 126 ++
> .../Include/IndustryStandard/Mmc.h | 349 +++++
> .../Include/IndustryStandard/SdCard.h | 157 +++
> .../SouthCluster/Include/Library/I2CLib.h | 169 +++
> .../Include/Library/PchPlatformLib.h | 115 ++
> .../SouthCluster/Include/PchAccess.h | 471 +++++++
> .../Include/PchCommonDefinitions.h | 210 +++
> .../SouthCluster/Include/PchRegs.h | 205 +++
> .../SouthCluster/Include/PchRegs/PchRegsHda.h | 50 +
> .../Include/PchRegs/PchRegsLpss.h | 486 +++++++
> .../Include/PchRegs/PchRegsPcie.h | 83 ++
> .../SouthCluster/Include/PchRegs/PchRegsPcu.h | 1201
> +++++++++++++++++
> .../Include/PchRegs/PchRegsRcrb.h | 48 +
> .../Include/PchRegs/PchRegsSata.h | 245 ++++
> .../SouthCluster/Include/PchRegs/PchRegsScc.h | 53 +
> .../Include/PchRegs/PchRegsSmbus.h | 149 ++
> .../SouthCluster/Include/PchRegs/PchRegsSpi.h | 119 ++
> .../SouthCluster/Include/PchRegs/PchRegsUsb.h | 92 ++
> .../SouthCluster/Include/Ppi/PchInit.h | 75 +
> .../SouthCluster/Include/Ppi/PchPeiInit.h | 34 +
> .../Include/Ppi/PchPlatformPolicy.h | 161 +++
> .../SouthCluster/Include/Ppi/PchUsbPolicy.h | 69 +
> .../SouthCluster/Include/Ppi/PeiBlockIo.h | 230 ++++
> .../SouthCluster/Include/Ppi/Sdhc.h | 359 +++++
> .../SouthCluster/Include/Ppi/SmbusPolicy.h | 40 +
> .../SouthCluster/Include/Ppi/Spi.h | 42 +
> .../Include/Protocol/ActiveBios.h | 123 ++
> .../Include/Protocol/ActiveBiosProtocol.h | 125 ++
> .../Protocol/DxePchPolicyUpdateProtocol.h | 51 +
> .../Include/Protocol/EmmcCardInfoProtocol.h | 42 +
> .../SouthCluster/Include/Protocol/Gpio.h | 161 +++
> .../Include/Protocol/HwWatchdogTimer.h | 294 ++++
> .../SouthCluster/Include/Protocol/I2cBus.h | 164 +++
> .../Include/Protocol/PchExtendedReset.h | 84 ++
> .../SouthCluster/Include/Protocol/PchInfo.h | 60 +
> .../Include/Protocol/PchPlatformPolicy.h | 550 ++++++++
> .../SouthCluster/Include/Protocol/PchReset.h | 114 ++
> .../Include/Protocol/PchS3Support.h | 132 ++
> .../SouthCluster/Include/Protocol/SdHostIo.h | 409 ++++++
> .../Include/Protocol/SmbiosSlotPopulation.h | 47 +
> .../Include/Protocol/SmmIchnDispatchEx.h | 159 +++
> .../SouthCluster/Include/Protocol/SmmSmbus.h | 39 +
> .../SouthCluster/Include/Protocol/Spi.h | 260 ++++
> .../SouthCluster/Include/Protocol/TcoReset.h | 88 ++
> .../SouthCluster/Include/Rsci.h | 28 +
> .../SouthCluster/Include/TianoApi.h | 61 +
> .../Vlv2DeviceRefCodePkg.dec | 231 ++++
> 125 files changed, 24185 insertions(+)
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/98_LINK.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTablePlatform.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/CPU.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/DSDT.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facp/Facp.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facs/Facs.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/GloblNvs.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Gpe.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/HOST_BUS.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Hpet/Hpet.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELGFX.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELISPDev2.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGBDA.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOMOBF.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOSBCB.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOpRn.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IoTVirtualDevice.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LPC_DEV.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LpcB.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Lpit/Lpit.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt30.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Mcfg/Mcfg.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PCI_DRC.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Pch.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchAudio.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchEhci.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchLpss.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchPcie.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchScc.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchSmb.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchXhci.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PciTree.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Platform.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RTD3.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RhProxy.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/THERMAL.ASL
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/UsbSbd.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Video.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Vlv.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Wsmt/Wsmt.aslc
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/token.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Guid/Vlv2DeviceRefCodePkgTo
> kenSpace.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/PttPassThruPpi.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/fTPMPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/PttPassThru.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Guid/Po
> werManagementAcpiTableStorage.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Ppi/VlvP
> olicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Protocol/
> PpmPlatformPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Types.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/PowerManagementAcpiTables.inf
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/ApCst.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/ApIst.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/ApTst.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/Cpu0Cst.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/Cpu0Ist.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/Cpu0Tst.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManageme
> nt/AcpiTables/Ssdt/CpuPm.asl
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> PlatformBaseAddresses.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/Capsule.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/PlatformMemoryRange.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/PlatformMemorySize.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/SmmAccess.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/VlvMmioPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/VlvPeiInit.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Ppi/VlvPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Protocol/IgdOpRegion.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Protocol/MemInfo.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Protocol/PlatformGopPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Protocol/VlvPlatformPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> Valleyview.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> VlvAccess.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/
> VlvCommonDefinitions.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Guid/PchInitVar.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Guid/SataControllerGuid.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Guid/SmbusArpMap.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Guid/Vlv2Variable.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/I
> ndustryStandard/CeAta.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/I
> ndustryStandard/Mmc.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/I
> ndustryStandard/SdCard.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/L
> ibrary/I2CLib.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/L
> ibrary/PchPlatformLib.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchAccess.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchCommonDefinitions.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsHda.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsLpss.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsPcie.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsPcu.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsRcrb.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsSata.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsScc.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsSmbus.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsSpi.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> PchRegs/PchRegsUsb.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/PchInit.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/PchPeiInit.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/PchPlatformPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/PchUsbPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/PeiBlockIo.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/Sdhc.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/SmbusPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Ppi/Spi.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/ActiveBios.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/ActiveBiosProtocol.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/DxePchPolicyUpdateProtocol.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/EmmcCardInfoProtocol.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/Gpio.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/HwWatchdogTimer.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/I2cBus.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/PchExtendedReset.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/PchInfo.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/PchPlatformPolicy.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/PchReset.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/PchS3Support.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/SdHostIo.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/SmbiosSlotPopulation.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/SmmIchnDispatchEx.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/SmmSmbus.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/Spi.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Protocol/TcoReset.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> Rsci.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/
> TianoApi.h
> create mode 100644
> Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
>
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/98_LINK.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/98_LINK.ASL
> new file mode 100644
> index 0000000000..50ebaffc34
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/98_LINK.ASL
> @@ -0,0 +1,617 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +
> +// Use this information when determining the Possible IRQs that can be
> +// used in a given system.
> +//
> +// The following IRQs are always in use by legacy devices:
> +// 0 = System Timer
> +// 2 = 8259 PIC
> +// 8 = RTC
> +// 9 = SCI Interrupt (It may be used, we choose not to)
> +// 13 = Co-processor Error
> +//
> +// The following may be in use by legacy devices:
> +// 1 = If using PS/2 Keyboard
> +// 3 = If COMx Port Enabled and IRQ = 3
> +// 4 = If COMx Port Enabled and IRQ = 4
> +// 5 = If LPT Port Enabled and IRQ = 5
> +// 6 = If FDC Enabled
> +// 7 = If LPT Port Enabled and IRQ = 7
> +// 12 = If using PS/2 Mouse
> +// 14 = Primary IDE (If populated and in Compatibility Mode)
> +// 15 = Secondary IDE (If populated and in Compatibility Mode)
> +//
> +// The following will never be in use by legacy devices:
> +// 10 = Assign to PARC, PCRC, PERC, PGRC
> +// 11 = Assign to PBRC, PDRC, PFRC, PHRC
> +
> +Device(LNKA) // PARC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F")) // PCI Interrupt Link Device
> +
> + Name(_UID,1) // Unique to other Link Devices
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PARC,0x80,PARC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSA)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLA,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLA,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PARC,0x0F),IRQ0)
> +
> + Return(RTLA)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PARC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PARC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKB) // PBRC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,2)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PBRC,0x80,PBRC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSB)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLB,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLB,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PBRC,0x0F),IRQ0)
> +
> + Return(RTLB)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in.
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it,
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PBRC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PBRC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKC) // PCRC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,3)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PCRC,0x80,PCRC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSC)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLC,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLC,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PCRC,0x0F),IRQ0)
> +
> + Return(RTLC)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in.
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it,
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PCRC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PCRC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKD) // PDRC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,4)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PDRC,0x80,PDRC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSD)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLD,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLD,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PDRC,0x0F),IRQ0)
> +
> + Return(RTLD)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in.
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it,
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PDRC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PDRC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKE) // PERC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,5)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PERC,0x80,PERC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSE)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLE,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLE,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PERC,0x0F),IRQ0)
> +
> + Return(RTLE)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PERC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PERC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKF) // PFRC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,6)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PFRC,0x80,PFRC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSF)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLF,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLF,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PFRC,0x0F),IRQ0)
> +
> + Return(RTLF)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in.
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it,
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PFRC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PFRC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKG) // PGRC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,7)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PGRC,0x80,PGRC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSG)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLG,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLG,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PGRC,0x0F),IRQ0)
> +
> + Return(RTLG)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in.
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it,
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PGRC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PGRC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> +
> +Device(LNKH) // PHRC Routing Resource
> +{
> + Name(_HID,EISAID("PNP0C0F"))
> +
> + Name(_UID,8)
> +
> + // Disable the PCI IRQ.
> +
> + Method(_DIS,0,Serialized)
> + {
> + Or(PHRC,0x80,PHRC)
> + }
> +
> + // Possible IRQ Resource Setting.
> +
> + Method (_PRS, 0, Serialized)
> + {
> + return (PRSH)
> + }
> +
> + // Current IRQ Resource Setting.
> +
> + Method(_CRS,0,Serialized)
> + {
> + Name(RTLH,ResourceTemplate()
> + {
> + IRQ(Level,ActiveLow,Shared) {}
> + })
> +
> + // Point to specific byte.
> +
> + CreateWordField(RTLH,1,IRQ0)
> +
> + // Zero out IRQ mask bits 0-15
> +
> + Store(Zero,IRQ0)
> +
> + ShiftLeft(1,And(PHRC,0x0F),IRQ0)
> +
> + Return(RTLH)
> + }
> +
> + // Set IRQ Resource Setting.
> +
> + Method(_SRS,1,Serialized)
> + {
> + // Point to the specific byte passed in.
> +
> + CreateWordField(Arg0,1,IRQ0)
> +
> + // Determine the IRQ bit to set and store it,
> +
> + FindSetRightBit(IRQ0,Local0)
> + Decrement(Local0)
> + Store(Local0,PHRC)
> + }
> +
> + // PCI IRQ Status.
> +
> + Method(_STA,0,Serialized)
> + {
> + If(And(PHRC,0x80))
> + {
> + Return(0x0009)
> + }
> + Else
> + {
> + Return(0x000B)
> + }
> + }
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTablePlatform.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTablePlatform.h
> new file mode 100644
> index 0000000000..b3a7cba106
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTablePlatform.h
> @@ -0,0 +1,70 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + AcpiTablePlatform.h
> +
> +
> +Abstract: File contains platform specific ACPI defines for use in ACPI tables
> +
> +
> +--*/
> +#ifndef _Platform_h_INCLUDED_
> +#define _Platform_h_INCLUDED_
> +
> +#ifdef ECP_FLAG
> +#include "EdkIIGlueDxe.h"
> +#endif
> +#include <IndustryStandard/Acpi.h>
> +//
> +// ACPI table information used to initialize tables.
> +//
> +#define EFI_ACPI_OEM_ID 'O','E','M','I','D',' ' // OEMID 6 bytes long
> +#define EFI_ACPI_OEM_TABLE_ID
> SIGNATURE_64('O','E','M','T','A','B','L','E') // OEM table id 8 bytes long
> +#define EFI_ACPI_OEM_REVISION 0x00000005
> +#define EFI_ACPI_CREATOR_ID SIGNATURE_32('C','R','E','A')
> +#define EFI_ACPI_CREATOR_REVISION 0x0100000D
> +#define INT_MODEL 0x01
> +#define PM_PROFILE EFI_ACPI_4_0_PM_PROFILE_MOBILE
> +#define SCI_INT_VECTOR 0x0009
> +#define SMI_CMD_IO_PORT 0x000000B2
> +#define ACPI_ENABLE 0x0A0
> +#define ACPI_DISABLE 0x0A1
> +#define S4BIOS_REQ 0x00
> +#define PSTATE_CNT 0x00
> +#define PM1a_EVT_BLK 0x00000400
> +#define PM1b_EVT_BLK 0x00000000
> +#define PM1a_CNT_BLK 0x00000404
> +#define PM1b_CNT_BLK 0x00000000
> +#define PM2_CNT_BLK 0x00000450
> +#define PM_TMR_BLK 0x00000408
> +#define GPE0_BLK 0x00000420
> +#define GPE1_BLK 0x00000000
> +#define PM1_EVT_LEN 0x04
> +#define PM1_CNT_LEN 0x02
> +#define PM2_CNT_LEN 0x01
> +#define PM_TM_LEN 0x04
> +#define GPE0_BLK_LEN 0x10
> +#define GPE1_BLK_LEN 0x00
> +#define GPE1_BASE 0x00
> +#define CST_CNT 0x00
> +#define P_LVL2_LAT 0x0064
> +#define P_LVL3_LAT 0x01F4
> +#define FLUSH_SIZE 0x0400
> +#define FLUSH_STRIDE 0x0010
> +#define DUTY_OFFSET 0x01
> +#define DUTY_WIDTH 0x03
> +#define DAY_ALRM 0x0D
> +#define MON_ALRM 0x00
> +#define CENTURY 0x32
> +#define FLAG ( EFI_ACPI_4_0_WBINVD | EFI_ACPI_4_0_SLP_BUTTON
> | EFI_ACPI_4_0_RESET_REG_SUP | EFI_ACPI_4_0_RTC_S4)
> +#define IAPC_BOOT_ARCH ( EFI_ACPI_4_0_VGA_NOT_PRESENT |
> EFI_ACPI_4_0_8042 | EFI_ACPI_4_0_LEGACY_DEVICES)
> +#define RESERVED 0x00
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
> new file mode 100644
> index 0000000000..170598df7f
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
> @@ -0,0 +1,40 @@
> +## @file
> +# Component description file for PlatformAcpiTable module.
> +#
> +# Build acpi table data required by system boot.
> +# All .asi files tagged with "ToolCode="DUMMY"" in following file list are
> device description and are included
> +# by top level ASL file which will be dealed with by asl.exe application.
> +#
> +# Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#
> +#
> +##
> +
> +[defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = AcpiTables
> + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD
> + MODULE_TYPE = USER_DEFINED
> + VERSION_STRING = 1.0
> + EDK_RELEASE_VERSION = 0x00020000
> + EFI_SPECIFICATION_VERSION = 0x00020000
> +
> +[sources.common]
> + DSDT.ASL
> + RhProxy.asl
> + Facs/Facs.aslc
> + Facp/Facp.aslc
> + Madt/Madt30.aslc
> + Mcfg/Mcfg.aslc
> + Hpet/Hpet.aslc
> + Lpit/Lpit.aslc
> + Wsmt/Wsmt.aslc
> +
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> + Vlv2TbltDevicePkg/PlatformPkg.dec
> + Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/CPU.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/CPU.asl
> new file mode 100644
> index 0000000000..8449ed0d55
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/CPU.asl
> @@ -0,0 +1,49 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +
> +// NOTE: The _PDC Implementation is out of the scope of this
> +// reference code. Please see the latest Hyper-Threading Technology
> +// Reference Code for complete implementation details.
> +
> +Scope(\_PR)
> +{
> + Processor(CPU0, // Unique name for Processor 0.
> + 1, // Unique ID for Processor 0.
> + 0x00, // CPU0 ACPI P_BLK address = ACPIBASE + 10h.
> + 0) // CPU0 P_BLK length = 6 bytes.
> + {}
> +
> + Processor(CPU1, // Unique name for Processor 1.
> + 2, // Unique ID for Processor 1.
> + 0x00,
> + 0) // CPU1 P_BLK length = 6 bytes.
> + {}
> +
> + Processor(CPU2, // Unique name for Processor 2.
> + 3, // Unique ID for Processor 2.
> + 0x00,
> + 0) // CPU2 P_BLK length = 6 bytes.
> + {}
> +
> + Processor(CPU3, // Unique name for Processor 3.
> + 4, // Unique ID for Processor 3.
> + 0x00,
> + 0) // CPU3 P_BLK length = 6 bytes.
> + {}
> +} // End _PR
> +
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/DSDT.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/DSDT.ASL
> new file mode 100644
> index 0000000000..cbf0d302b1
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/DSDT.ASL
> @@ -0,0 +1,75 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Sandy Bridge *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +DefinitionBlock (
> + "DSDT.aml",
> + "DSDT",
> + 0x02, // DSDT revision.
> + "OEMID", // OEM ID (6 byte string)
> + "VLV-SOC", // OEM table ID (8 byte string)
> + 0x0 // OEM version of DSDT table (4 byte Integer)
> +)
> +
> +// BEGIN OF ASL SCOPE
> +{
> + External(MDBG, MethodObj)
> +
> + Method(ADBG, 1, Serialized)
> + {
> +
> + If(CondRefOf(MDBG)) //check if SSDT is loaded
> + {
> + Return(MDBG(Arg0))
> + }
> +
> + Return(0)
> + }
> +
> +
> +// Miscellaneous services enabled in Project
> + include ("token.asl")
> + include ("GloblNvs.asl")
> + include ("PciTree.asl")
> + include ("Pch.asl")
> + include ("Vlv.asl")
> + include ("CPU.asl")
> + include ("Platform.asl")
> + include ("THERMAL.ASL")
> + include ("PCI_DRC.ASL")
> + include ("Video.asl")
> + include ("Gpe.asl")
> + //include ("IoTVirtualDevice.asl")
> +
> + // Sleep states supported by Chipset/Board.
> + // SSx - BIOS setup controlled enabled _Sx Sleep state status
> + // Values to be written to SLP_TYPE register are provided by SBACPI.SDL
> (South Bridge ACPI ModulePart)
> +
> + Name(\_S0, Package(4) {0x0,0x0,0,0}) // mandatory System state
> + Name(\_S1, Package(4) {0x1,0x0,0,0})
> + Name(\_S3, Package(4) {0x5,0x0,0,0})
> + Name(\_S4, Package(4) {0x6,0x0,0,0})
> + Name(\_S5, Package(4) {0x7,0x0,0,0}) // mandatory System state
> +
> + Method(PTS, 1) // METHOD CALLED FROM _PTS PRIOR TO ENTER ANY
> SLEEP STATE
> + {
> + If(Arg0) // entering any sleep state
> + {
> + }
> + }
> + Method(WAK, 1) // METHOD CALLED FROM _WAK RIGHT AFTER WAKE
> UP
> + {
> + }
> +
> +}// End of ASL File
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facp/Facp.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facp/Facp.aslc
> new file mode 100644
> index 0000000000..df47144623
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facp/Facp.aslc
> @@ -0,0 +1,188 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Facp.c
> +
> +
> +Abstract: The fixed ACPI description Table (FADT) Structure
> +
> +
> +--*/
> +#ifdef ECP_FLAG
> +#include "EDKIIGlueDxe.h"
> +#else
> +#include <PiDxe.h>
> +#endif
> +#include <IndustryStandard/Acpi50.h>
> +#include "AcpiTablePlatform.h"
> +
> +EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE FACP = {
> + {
> + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
> + sizeof (EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE),
> + EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION,
> + 0, // to make sum of entire table
> == 0
> + EFI_ACPI_OEM_ID, // OEMID is a 6 bytes long field
> + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long)
> + EFI_ACPI_OEM_REVISION, // OEM revision number
> + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID
> + EFI_ACPI_CREATOR_REVISION // ASL compiler revision number
> + },
> + 0, // Physical addesss of FACS
> + 0, // Physical address of DSDT
> + INT_MODEL, // System Interrupt
> Model (ignored in 2k and later, must be 0 for 98)
> + PM_PROFILE, // Preferred PM
> Profile
> + SCI_INT_VECTOR, // System vector of
> SCI interrupt
> + SMI_CMD_IO_PORT, // Port address of
> SMI command port
> + ACPI_ENABLE, // value to write to port
> smi_cmd to enable ACPI
> + ACPI_DISABLE, // value to write to port
> smi_cmd to disable ACPI
> + S4BIOS_REQ, // Value to write to SMI
> CMD port to enter the S4BIOS state
> + PSTATE_CNT, // PState control
> + PM1a_EVT_BLK, // Port address of
> Power Mgt 1a Event Reg Blk
> + PM1b_EVT_BLK, // Port address of
> Power Mgt 1b Event Reg Blk
> + PM1a_CNT_BLK, // Port address of
> Power Mgt 1a Ctrl Reg Blk
> + PM1b_CNT_BLK, // Port address of
> Power Mgt 1b Ctrl Reg Blk
> + PM2_CNT_BLK, // Port address of
> Power Mgt 2 Ctrl Reg Blk
> + PM_TMR_BLK, // Port address of
> Power Mgt Timer Ctrl Reg Blk
> + GPE0_BLK, // Port addr of General
> Purpose Event 0 Reg Blk
> + GPE1_BLK, // Port addr of General
> Purpose Event 1 Reg Blk
> + PM1_EVT_LEN, // Byte Length of ports
> at pm1X_evt_blk
> + PM1_CNT_LEN, // Byte Length of
> ports at pm1X_cnt_blk
> + PM2_CNT_LEN, // Byte Length of
> ports at pm2_cnt_blk
> + PM_TM_LEN, // Byte Length of ports
> at pm_tm_blk
> + GPE0_BLK_LEN, // Byte Length of ports
> at gpe0_blk
> + GPE1_BLK_LEN, // Byte Length of ports
> at gpe1_blk
> + GPE1_BASE, // offset in gpe model
> where gpe1 events start
> + CST_CNT, // _CST support
> + P_LVL2_LAT, // worst case HW latency
> to enter/exit C2 state
> + P_LVL3_LAT, // worst case HW latency
> to enter/exit C3 state
> + FLUSH_SIZE, // Size of area read to
> flush caches
> + FLUSH_STRIDE, // Stride used in
> flushing caches
> + DUTY_OFFSET, // bit location of duty
> cycle field in p_cnt reg
> + DUTY_WIDTH, // bit width of duty
> cycle field in p_cnt reg
> + DAY_ALRM, // index to day-of-
> month alarm in RTC CMOS RAM
> + MON_ALRM, // index to month-of-
> year alarm in RTC CMOS RAM
> + CENTURY, // index to century in RTC
> CMOS RAM
> + IAPC_BOOT_ARCH, // IA-PCI Boot
> Architecture Flag
> + RESERVED, // reserved
> + FLAG,
> + {
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 8,
> + 0,
> + 0,
> + 0xCF9
> + },
> + 0x0E, // Hardware reset value
> + 0, 0, 0, // Reserved
> + 0, // XFirmwareCtrl
> + 0, // XDsdt
> + //
> + // X_PM1a Event Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x20,
> + 0x00,
> + EFI_ACPI_3_0_DWORD,
> + PM1a_EVT_BLK,
> +
> + //
> + // X_PM1b Event Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x00,
> + 0x00,
> + EFI_ACPI_RESERVED_BYTE,
> + PM1b_EVT_BLK,
> +
> + //
> + // X_PM1a Control Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x10,
> + 0x00,
> + EFI_ACPI_3_0_WORD,
> + PM1a_CNT_BLK,
> +
> + //
> + // X_PM1b Control Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x00,
> + 0x00,
> + EFI_ACPI_RESERVED_BYTE,
> + PM1b_CNT_BLK,
> +
> + //
> + // X_PM2 Control Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x08,
> + 0x00,
> + EFI_ACPI_3_0_BYTE,
> + PM2_CNT_BLK,
> +
> + //
> + // X_PM Timer Control Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x20,
> + 0x00,
> + EFI_ACPI_3_0_DWORD,
> + PM_TMR_BLK,
> +
> + //
> + // X_General Purpose Event 0 Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x80,
> + 0x00,
> + EFI_ACPI_RESERVED_BYTE,
> + GPE0_BLK,
> +
> + //
> + // X_General Purpose Event 1 Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x00,
> + 0x00,
> + EFI_ACPI_RESERVED_BYTE,
> + GPE1_BLK,
> +
> + //
> + // Sleep Control Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x08,
> + 0x00,
> + EFI_ACPI_RESERVED_BYTE,
> + 0,
> +
> + //
> + // Sleep Status Register Block
> + //
> + EFI_ACPI_5_0_SYSTEM_IO,
> + 0x08,
> + 0x00,
> + EFI_ACPI_RESERVED_BYTE,
> + 0,
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&FACP;
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facs/Facs.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facs/Facs.aslc
> new file mode 100644
> index 0000000000..e216f61299
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Facs/Facs.aslc
> @@ -0,0 +1,84 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Ea815acpiFACS.c
> +
> +
> +Abstract:
> +
> + This file contains the FACS structure definition.
> +
> +--*/
> +
> +//
> +// Statements that include other files
> +//
> +#ifdef ECP_FLAG
> +#include "EDKIIGlueDxe.h"
> +#else
> +#include <PiDxe.h>
> +#endif
> +#include <IndustryStandard/Acpi50.h>
> +#include "AcpiTablePlatform.h"
> +
> +EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE FACS = {
> + EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE,
> + sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE),
> +
> + //
> + // Hardware Signature will be updated at runtime
> + //
> + 0x00000000, //HardwareSignature
> + 0x00000000, //FirmwareWakingVector
> + 0x00000000, //GlobalLock
> + 0x00000000, //Flags
> + 0x0000000000000000, //XFirmwareWakingVector
> + EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION,
> + EFI_ACPI_RESERVED_BYTE, //Reserved0[3]
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + 0x00000000, //OspmFlags
> + EFI_ACPI_RESERVED_BYTE, //Reserved1[24]
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE,
> + EFI_ACPI_RESERVED_BYTE
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&FACS;
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/GloblNvs.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/GloblNvs.asl
> new file mode 100644
> index 0000000000..513fa95e46
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/GloblNvs.asl
> @@ -0,0 +1,348 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +
> +// Define a Global region of ACPI NVS Region that may be used for any
> +// type of implementation. The starting offset and size will be fixed
> +// up by the System BIOS during POST. Note that the Size must be a word
> +// in size to be fixed up correctly.
> +
> +OperationRegion(GNVS,SystemMemory,0xFFFF0000,0xAA55)
> +Field(GNVS,AnyAcc,Lock,Preserve)
> +{
> + Offset(0), // Miscellaneous Dynamic Registers:
> + OSYS, 16, // (00) Operating System
> + , 8, // (02)
> + , 8, // (03)
> + , 8, // (04)
> + , 8, // (05)
> + , 8, // (06)
> + , 8, // (07)
> + , 8, // (08)
> + , 8, // (09)
> + , 8, // (10)
> + P80D, 32, // (11) Port 80 Debug Port Value
> + LIDS, 8, // (15) Lid State (Lid Open = 1)
> + , 8, // (16)
> + , 8, // (17)
> + Offset(18), // Thermal Policy Registers:
> + , 8, // (18)
> + , 8, // (19)
> + ACTT, 8, // (20) Active Trip Point
> + PSVT, 8, // (21) Passive Trip Point
> + TC1V, 8, // (22) Passive Trip Point TC1 Value
> + TC2V, 8, // (23) Passive Trip Point TC2 Value
> + TSPV, 8, // (24) Passive Trip Point TSP Value
> + CRTT, 8, // (25) Critical Trip Point
> + DTSE, 8, // (26) Digital Thermal Sensor Enable
> + DTS1, 8, // (27) Digital Thermal Sensor 1 Reading
> + DTS2, 8, // (28) Digital Thermal Sensor 2 Reading
> + DTSF, 8, // (29) DTS SMI Function Call
> + Offset(30), // Battery Support Registers:
> + , 8, // (30)
> + , 8, // (31)
> + , 8, // (32)
> + , 8, // (33)
> + , 8, // (34)
> + , 8, // (35)
> + , 8, // (36)
> + Offset(40), // CPU Identification Registers:
> + APIC, 8, // (40) APIC Enabled by SBIOS (APIC Enabled = 1)
> + MPEN, 8, // (41) Number of Logical Processors if MP Enabled != 0
> + , 8, // (42)
> + , 8, // (43)
> + , 8, // (44)
> + , 32, // (45)
> + Offset(50), // SIO CMOS Configuration Registers:
> + , 8, // (50)
> + , 8, // (51)
> + , 8, // (52)
> + , 8, // (53)
> + , 8, // (54)
> + , 8, // (55)
> + , 8, // (56)
> + , 8, // (57)
> + , 8, // (58)
> + Offset(60), // Internal Graphics Registers:
> + , 8, // (60)
> + , 8, // (61)
> + CADL, 8, // (62) Current Attached Device List
> + , 8, // (63)
> + CSTE, 16, // (64) Current Display State
> + NSTE, 16, // (66) Next Display State
> + , 16, // (68)
> + NDID, 8, // (70) Number of Valid Device IDs
> + DID1, 32, // (71) Device ID 1
> + DID2, 32, // (75) Device ID 2
> + DID3, 32, // (79) Device ID 3
> + DID4, 32, // (83) Device ID 4
> + DID5, 32, // (87) Device ID 5
> + , 32, // (91)
> + , 8, // (95) Fifth byte of AKSV (mannufacturing mode)
> + Offset(103), // Backlight Control Registers:
> + , 8, // (103)
> + BRTL, 8, // (104) Brightness Level Percentage
> + Offset(105), // Ambiant Light Sensor Registers:
> + , 8, // (105)
> + , 8, // (106)
> + LLOW, 8, // (107) LUX Low Value
> + , 8, // (108)
> + Offset(110), // EMA Registers:
> + , 8, // (110)
> + , 16, // (111)
> + , 16, // (113)
> + Offset(116), // MEF Registers:
> + , 8, // (116) MEF Enable
> + Offset(117), // PCIe Dock:
> + , 8, // (117)
> + Offset(120), // TPM Registers:
> + , 8, // (120)
> + , 8, // (121)
> + , 8, // (122)
> + , 8, // (123)
> + , 32, // (124)
> + , 8, // (125)
> + , 8, // (129)
> + Offset(130), //
> + , 56, // (130)
> + , 56, // (137)
> + , 8, // (144)
> + , 56, // (145)
> + Offset(170), // IGD OpRegion/Software SCI base address
> + ASLB, 32, // (170) IGD OpRegion base address
> + Offset(174), // IGD OpRegion/Software SCI shared data
> + IBTT, 8, // (174) IGD Boot Display Device
> + IPAT, 8, // (175) IGD Panel Type CMOs option
> + ITVF, 8, // (176) IGD TV Format CMOS option
> + ITVM, 8, // (177) IGD TV Minor Format CMOS option
> + IPSC, 8, // (178) IGD Panel Scaling
> + IBLC, 8, // (179) IGD BLC Configuration
> + IBIA, 8, // (180) IGD BIA Configuration
> + ISSC, 8, // (181) IGD SSC Configuration
> + I409, 8, // (182) IGD 0409 Modified Settings Flag
> + I509, 8, // (183) IGD 0509 Modified Settings Flag
> + I609, 8, // (184) IGD 0609 Modified Settings Flag
> + I709, 8, // (185) IGD 0709 Modified Settings Flag
> + IDMM, 8, // (186) IGD DVMT Mode
> + IDMS, 8, // (187) IGD DVMT Memory Size
> + IF1E, 8, // (188) IGD Function 1 Enable
> + HVCO, 8, // (189) HPLL VCO
> + NXD1, 32, // (190) Next state DID1 for _DGS
> + NXD2, 32, // (194) Next state DID2 for _DGS
> + NXD3, 32, // (198) Next state DID3 for _DGS
> + NXD4, 32, // (202) Next state DID4 for _DGS
> + NXD5, 32, // (206) Next state DID5 for _DGS
> + NXD6, 32, // (210) Next state DID6 for _DGS
> + NXD7, 32, // (214) Next state DID7 for _DGS
> + NXD8, 32, // (218) Next state DID8 for _DGS
> + GSMI, 8, // (222) GMCH SMI/SCI mode (0=SCI)
> + PAVP, 8, // (223) IGD PAVP data
> + Offset(225),
> + OSCC, 8, // (225) PCIE OSC Control
> + NEXP, 8, // (226) Native PCIE Setup Value
> + Offset(235), // Global Variables
> + DSEN, 8, // (235) _DOS Display Support Flag.
> + ECON, 8, // (236) Embedded Controller Availability Flag.
> + GPIC, 8, // (237) Global IOAPIC/8259 Interrupt Mode Flag.
> + CTYP, 8, // (238) Global Cooling Type Flag.
> + L01C, 8, // (239) Global L01 Counter.
> + VFN0, 8, // (240) Virtual Fan0 Status.
> + VFN1, 8, // (241) Virtual Fan1 Status.
> + Offset(256),
> + NVGA, 32, // (256) NVIG opregion address
> + NVHA, 32, // (260) NVHM opregion address
> + AMDA, 32, // (264) AMDA opregion address
> + DID6, 32, // (268) Device ID 6
> + DID7, 32, // (272) Device ID 7
> + DID8, 32, // (276) Device ID 8
> + Offset(332),
> + USEL, 8, // (332) UART Selection
> + PU1E, 8, // (333) PCU UART 1 Enabled
> + PU2E, 8, // (334) PCU UART 2 Enabled
> +
> + LPE0, 32, // (335) LPE Bar0
> + LPE1, 32, // (339) LPE Bar1
> + LPE2, 32, // (343) LPE Bar2
> +
> + Offset(347),
> + , 8, // (347)
> + , 8, // (348)
> + PFLV, 8, // (349) Platform Flavor
> +
> + Offset(351),
> + ICNF, 8, // (351) ISCT / AOAC Configuration
> + XHCI, 8, // (352) xHCI controller mode
> + PMEN, 8, // (353) PMIC enable/disable
> +
> + LPEE, 8, // (354) LPE enable/disable
> + ISPA, 32, // (355) ISP Base Addr
> + ISPD, 8, // (359) ISP Device Selection 0: Disabled; 1: PCI Device 2; 2: PCI
> Device 3
> +
> + offset(360), // ((4+8+6)*4+2)*4=296
> + //
> + // Lpss controllers
> + //
> + PCIB, 32,
> + PCIT, 32,
> + D10A, 32, //DMA1
> + D10L, 32,
> + D11A, 32,
> + D11L, 32,
> + P10A, 32, // PWM1
> + P10L, 32,
> + P11A, 32,
> + P11L, 32,
> + P20A, 32, // PWM2
> + P20L, 32,
> + P21A, 32,
> + P21L, 32,
> + U10A, 32, // UART1
> + U10L, 32,
> + U11A, 32,
> + U11L, 32,
> + U20A, 32, // UART2
> + U20L, 32,
> + U21A, 32,
> + U21L, 32,
> + SP0A, 32, // SPI
> + SP0L, 32,
> + SP1A, 32,
> + SP1L, 32,
> +
> + D20A, 32, //DMA2
> + D20L, 32,
> + D21A, 32,
> + D21L, 32,
> + I10A, 32, // I2C1
> + I10L, 32,
> + I11A, 32,
> + I11L, 32,
> + I20A, 32, // I2C2
> + I20L, 32,
> + I21A, 32,
> + I21L, 32,
> + I30A, 32, // I2C3
> + I30L, 32,
> + I31A, 32,
> + I31L, 32,
> + I40A, 32, // I2C4
> + I40L, 32,
> + I41A, 32,
> + I41L, 32,
> + I50A, 32, // I2C5
> + I50L, 32,
> + I51A, 32,
> + I51L, 32,
> + I60A, 32, // I2C6
> + I60L, 32,
> + I61A, 32,
> + I61L, 32,
> + I70A, 32, // I2C7
> + I70L, 32,
> + I71A, 32,
> + I71L, 32,
> + //
> + // Scc controllers
> + //
> + eM0A, 32, // EMMC
> + eM0L, 32,
> + eM1A, 32,
> + eM1L, 32,
> + SI0A, 32, // SDIO
> + SI0L, 32,
> + SI1A, 32,
> + SI1L, 32,
> + SD0A, 32, // SDCard
> + SD0L, 32,
> + SD1A, 32,
> + SD1L, 32,
> + MH0A, 32, //
> + MH0L, 32,
> + MH1A, 32,
> + MH1L, 32,
> +
> + offset(656),
> + SDRM, 8,
> + offset(657),
> + HLPS, 8, //(657) Hide Devices
> + offset(658),
> + OSEL, 8, //(658) OS Seletion - Windows/Android
> +
> + offset(659), // VLV1 DPTF
> + SDP1, 8, //(659) An enumerated value corresponding to SKU
> + DPTE, 8, //(660) DPTF Enable
> + THM0, 8, //(661) System Thermal 0
> + THM1, 8, //(662) System Thermal 1
> + THM2, 8, //(663) System Thermal 2
> + THM3, 8, //(664) System Thermal 3
> + THM4, 8, //(665) System Thermal 3
> + CHGR, 8, //(666) DPTF Changer Device
> + DDSP, 8, //(667) DPTF Display Device
> + DSOC, 8, //(668) DPTF SoC device
> + DPSR, 8, //(669) DPTF Processor device
> + DPCT, 32, //(670) DPTF Processor participant critical temperature
> + DPPT, 32, //(674) DPTF Processor participant passive temperature
> + DGC0, 32, //(678) DPTF Generic sensor0 participant critical temperature
> + DGP0, 32, //(682) DPTF Generic sensor0 participant passive
> temperature
> + DGC1, 32, //(686) DPTF Generic sensor1 participant critical temperature
> + DGP1, 32, //(690) DPTF Generic sensor1 participant passive
> temperature
> + DGC2, 32, //(694) DPTF Generic sensor2 participant critical temperature
> + DGP2, 32, //(698) DPTF Generic sensor2 participant passive
> temperature
> + DGC3, 32, //(702) DPTF Generic sensor3 participant critical temperature
> + DGP3, 32, //(706) DPTF Generic sensor3 participant passive
> temperature
> + DGC4, 32, //(710)DPTF Generic sensor3 participant critical temperature
> + DGP4, 32, //(714)DPTF Generic sensor3 participant passive
> temperature
> + DLPM, 8, //(718) DPTF Current low power mode setting
> + DSC0, 32, //(719) DPTF Critical threshold0 for SCU
> + DSC1, 32, //(723) DPTF Critical threshold1 for SCU
> + DSC2, 32, //(727) DPTF Critical threshold2 for SCU
> + DSC3, 32, //(731) DPTF Critical threshold3 for SCU
> + DSC4, 32, //(735) DPTF Critical threshold3 for SCU
> + DDBG, 8, //(739) DPTF Super Debug option. 0 - Disabled, 1 - Enabled
> + LPOE, 32, //(740) DPTF LPO Enable
> + LPPS, 32, //(744) P-State start index
> + LPST, 32, //(748) Step size
> + LPPC, 32, //(752) Power control setting
> + LPPF, 32, //(756) Performance control setting
> + DPME, 8, //(760) DPTF DPPM enable/disable
> + BCSL, 8, //(761) Battery charging solution 0-CLV 1-ULPMC
> + NFCS, 8, //(762) NFCx Select 1: NFC1 2:NFC2
> + PCIM, 8, //(763) EMMC device 0-ACPI mode, 1-PCI mode
> + TPMA, 32, //(764)
> + TPML, 32, //(768)
> + ITSA, 8, //(772) I2C Touch Screen Address
> + S0IX, 8, //(773) S0ix status
> + SDMD, 8, //(774) SDIO Mode
> + EMVR, 8, //(775) eMMC controller version
> + BMBD, 32, //(776) BM Bound
> + FSAS, 8, //(780) FSA Status
> + BDID, 8, //(781) Board ID
> + FBID, 8, //(782) FAB ID
> + OTGM, 8, //(783) OTG mode
> + STEP, 8, //(784) Stepping ID
> + WITT, 8, //(785) Enable Test Device connected to I2C for WHCK test.
> + SOCS, 8, //(786) provide the SoC stepping infomation
> + AMTE, 8, //(787) Ambient Trip point change
> + UTS, 8, //(788) Enable Test Device connected to URT for WHCK test.
> + SCPE, 8, //(789) Allow higher performance on AC/USB - Enable/Disable
> + Offset(792),
> + EDPV, 8, //(792) Check for eDP display device
> + DIDX, 32, //(793) Device ID for eDP device
> + IOT, 8, //(794) MinnowBoard Max JP1 is configured for MSFT IOT
> project.
> + BATT, 8, //(795) The Flag of RTC Battery Prensent.
> + LPAD, 8, //(796)
> +}
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Gpe.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Gpe.asl
> new file mode 100644
> index 0000000000..c3c9cb6315
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Gpe.asl
> @@ -0,0 +1,99 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +// General Purpose Events. This Scope handles the Run-time and
> +// Wake-time SCIs. The specific method called will be determined by
> +// the _Lxx value, where xx equals the bit location in the General
> +// Purpose Event register(s).
> +
> +Scope(\_GPE)
> +{
> + //
> + // Software GPE caused the event.
> + //
> + Method(_L02)
> + {
> + // Clear GPE status bit.
> + Store(0,GPEC)
> + //
> + // Handle DTS Thermal Events.
> + //
> + External(DTSE, IntObj)
> + If(CondRefOf(DTSE))
> + {
> + If(LGreaterEqual(DTSE, 0x01))
> + {
> + Notify(\_TZ.TZ01,0x80)
> + }
> + }
> + }
> +
> + //
> + // PUNIT SCI event.
> + //
> + Method(_L04)
> + {
> + // Clear the PUNIT Status Bit.
> + Store(1, PSCI)
> + }
> +
> +
> + //
> + // IGD OpRegion SCI event (see IGD OpRegion/Software SCI BIOS SPEC).
> + //
> + Method(_L05)
> + {
> + If(LAnd(\_SB.PCI0.GFX0.GSSE, LNot(GSMI))) // Graphics software SCI
> event?
> + {
> + \_SB.PCI0.GFX0.GSCI() // Handle the SWSCI
> + }
> + }
> +
> + //
> + // This PME event (PCH's GPE #13) is received when any PCH internal
> device with PCI Power Management capabilities
> + // on bus 0 asserts the equivalent of the PME# signal.
> + //
> + Method(_L0D, 0)
> + {
> + If(LAnd(\_SB.PCI0.EHC1.PMEE, \_SB.PCI0.EHC1.PMES))
> + {
> + If(LNotEqual(OSEL, 1))
> + {
> + Store(1, \_SB.PCI0.EHC1.PMES) //Clear PME status
> + Store(0, \_SB.PCI0.EHC1.PMEE) //Disable PME
> + }
> + Notify(\_SB.PCI0.EHC1, 0x02)
> + }
> + If(LAnd(\_SB.PCI0.XHC1.PMEE, \_SB.PCI0.XHC1.PMES))
> + {
> + If(LNotEqual(OSEL, 1))
> + {
> + Store(1, \_SB.PCI0.XHC1.PMES) //Clear PME status
> + Store(0, \_SB.PCI0.XHC1.PMEE) //Disable PME
> + }
> + Notify(\_SB.PCI0.XHC1, 0x02)
> + }
> + If(LAnd(\_SB.PCI0.HDEF.PMEE, \_SB.PCI0.HDEF.PMES))
> + {
> + If(LNotEqual(OSEL, 1))
> + {
> + Store(1, \_SB.PCI0.HDEF.PMES) //Clear PME status
> + Store(0, \_SB.PCI0.HDEF.PMEE) //Disable PME
> + }
> + Notify(\_SB.PCI0.HDEF, 0x02)
> + }
> + }
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/HOST_BUS.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/HOST_BUS.ASL
> new file mode 100644
> index 0000000000..6b0c2a349f
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/HOST_BUS.ASL
> @@ -0,0 +1,347 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + HOST_BUS.ASL
> +
> +Abstract:
> +
> + Baytrail PCI configuration space definition.
> +
> +---*/
> +Device(VLVC)
> +{
> + Name(_ADR, 0x00000000) // Device 0, Function 0
> +
> + // Define various MCH Controller PCI Configuration Space
> + // registers which will be used to dynamically produce all
> + // resources in the Host Bus _CRS.
> + OperationRegion(HBUS, PCI_Config, 0x00, 0xFF)
> + Field(HBUS, DWordAcc, NoLock, Preserve)
> + {
> + Offset(0xD0),
> + SMCR, 32, // VLV Message Control Register (0xD0)
> + Offset(0xD4),
> + SMDR, 32, // VLV Message Data Register (0xD4)
> + Offset(0xD8),
> + MCRX, 32, // VLV Message Control Register Extension (0xD8)
> + }
> +
> + // Define a method to read a 32-bit register on the VLV Message bus.
> + // Arg0 = Port
> + // Arg1 = Register
> + //
> + // Returns 32-bit register value
> +
> + Method(RMBR, 2, Serialized)
> + {
> +
> + // Initiate regsiter read message on VLV Message Bus MCR
> +
> + Or(ShiftLeft(Arg0, 16), ShiftLeft(Arg1, 8), Local0)
> + Or(0x100000F0, Local0, SMCR)
> +
> + // Read register value from Message Data Register
> +
> + Return(SMDR)
> + }
> +
> +
> + // Define a method to write a 32-bit register on the VLV Message bus MDR.
> + // Arg0 = Port
> + // Arg1 = Register
> + // Arg2 = 32-bit value
> +
> + Method(WMBR, 3, Serialized)
> + {
> +
> + // Write register value to Message Data Register
> +
> + Store(Arg2, SMDR)
> +
> + // Initiate register write message on VLV Message Bus
> +
> + Or(ShiftLeft(Arg0, 16), ShiftLeft(Arg1, 8), Local0)
> + Or(0x110000F0, Local0, SMCR)
> + }
> +}
> +
> +//
> +// BUS, I/O, and MMIO resources
> +//
> +Method(_CRS,0,Serialized)
> +{
> + //Update ISP0 reserved memory
> + CreateDwordField(RES0, ^ISP0._MIN,ISMN)
> + CreateDwordField(RES0, ^ISP0._MAX,ISMX)
> + CreateDwordField(RES0, ^ISP0._LEN,ISLN)
> + If (LEqual(ISPD,1))
> + {
> + Store (ISPA, ISMN)
> + Add (ISMN, ISLN, ISMX)
> + Subtract(ISMX, 1, ISMX)
> + } Else
> + {
> + Store (0, ISMN)
> + Store (0, ISMX)
> + Store (0, ISLN)
> + }
> +
> + //PCI MMIO SPACE
> + CreateDwordField(RES0, ^PM01._MIN,M1MN)
> + CreateDwordField(RES0, ^PM01._MAX,M1MX)
> + CreateDwordField(RES0, ^PM01._LEN,M1LN)
> +
> + //Get dBMBOUND Base
> + And(BMBD, 0xFF000000, M1MN)
> +
> + //Get ECBASE
> + Store(PCIT, M1MX)
> + Add(Subtract(M1MX, M1MN), 1, M1LN)
> + Subtract(M1MX, 1, M1MX)
> +
> + // Create pointers to Gfx Stolen Memory Sizing values.
> + CreateDwordField(RES0, ^STOM._MIN,GSMN)
> + CreateDwordField(RES0, ^STOM._MAX,GSMX)
> + CreateDwordField(RES0, ^STOM._LEN,GSLN)
> +
> + If (LNotEqual (\_SB.PCI0.GFX0.GSTM, 0xFFFFFFFF))
> + {
> + Store(0x00, GSMN) //Read the Stolen memory base from B0:D2:F0:R5C
> + } else
> + {
> + Store(\_SB.PCI0.GFX0.GSTM, GSMN) //Read the Stolen memory base
> from B0:D2:F0:R5C
> + }
> + If (LNotEqual (\_SB.PCI0.GFX0.GUMA, 0xFFFFFFFF))
> + {
> + Store(0x00, GSLN) //Read the Stolen memory base from B0:D2:F0:R5C
> + } else
> + {
> + ShiftLeft(\_SB.PCI0.GFX0.GUMA, 25, GSLN) //Read Stolen memory base
> form B0:D2:F0:R50
> + }
> + Add(GSMN, GSLN, GSMX) //Store the Stolen Memory Size
> + Subtract(GSMX, 1, GSMX)
> +
> + Return(RES0)
> +}
> +
> +Name( RES0,ResourceTemplate()
> +{
> + WORDBusNumber ( // Bus number resource (0); the bridge produces
> bus numbers for its subsequent buses
> + ResourceProducer, // bit 0 of general flags is 1
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + PosDecode, // PosDecode
> + 0x0000, // Granularity
> + 0x0000, // Min
> + 0x00FF, // Max
> + 0x0000, // Translation
> + 0x0100 // Range Length = Max-Min+1
> + )
> +
> + IO (Decode16, 0x70, 0x77, 0x01, 0x08) //Consumed resource (0xCF8-
> 0xCFF)
> + IO (Decode16, 0xCF8, 0xCF8, 0x01, 0x08) //Consumed resource (0xCF8-
> 0xCFF)
> +
> + WORDIO ( // Consumed-and-produced resource (all I/O below CF8)
> + ResourceProducer, // bit 0 of general flags is 0
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + PosDecode,
> + EntireRange,
> + 0x0000, // Granularity
> + 0x0000, // Min
> + 0x006F, // Max
> + 0x0000, // Translation
> + 0x0070 // Range Length
> + )
> +
> + WORDIO ( // Consumed-and-produced resource
> + ResourceProducer, // bit 0 of general flags is 0
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + PosDecode,
> + EntireRange,
> + 0x0000, // Granularity
> + 0x0078, // Min
> + 0x0CF7, // Max
> + 0x0000, // Translation
> + 0x0C80 // Range Length
> + )
> +
> + WORDIO ( // Consumed-and-produced resource (all I/O above CFF)
> + ResourceProducer, // bit 0 of general flags is 0
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + PosDecode,
> + EntireRange,
> + 0x0000, // Granularity
> + 0x0D00, // Min
> + 0xFFFF, // Max
> + 0x0000, // Translation
> + 0xF300 // Range Length
> + )
> +
> + DWORDMEMORY ( // Descriptor for legacy VGA video RAM
> + ResourceProducer, // bit 0 of general flags is 0
> + PosDecode,
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + Cacheable,
> + ReadWrite,
> + 0x00000000, // Granularity
> + 0x000A0000, // Min
> + 0x000BFFFF, // Max
> + 0x00000000, // Translation
> + 0x00020000 // Range Length
> + )
> +
> + DWORDMEMORY ( // Descriptor for legacy OptionRom
> + ResourceProducer, // bit 0 of general flags is 0
> + PosDecode,
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + Cacheable,
> + ReadWrite,
> + 0x00000000, // Granularity
> + 0x000C0000, // Min
> + 0x000DFFFF, // Max
> + 0x00000000, // Translation
> + 0x00020000 // Range Length
> + )
> +
> + DWORDMEMORY ( // Descriptor for BIOS Area
> + ResourceProducer, // bit 0 of general flags is 0
> + PosDecode,
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + Cacheable,
> + ReadWrite,
> + 0x00000000, // Granularity
> + 0x000E0000, // Min
> + 0x000FFFFF, // Max
> + 0x00000000, // Translation
> + 0x00020000 // Range Length
> + )
> +
> + DWORDMEMORY ( // Descriptor for ISP0 reserved Mem
> + ResourceProducer, // bit 0 of general flags is 0
> + PosDecode,
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + Cacheable,
> + ReadWrite,
> + 0x00000000, // Granularity
> + 0x7A000000, // Min
> + 0x7A3FFFFF, // Max
> + 0x00000000, // Translation
> + 0x00400000 // Range Length
> + ,,,
> + ISP0
> + )
> +
> + DWORDMEMORY ( // Descriptor for VGA Stolen Mem
> + ResourceProducer, // bit 0 of general flags is 0
> + PosDecode,
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + Cacheable,
> + ReadWrite,
> + 0x00000000, // Granularity
> + 0x7C000000, // Min
> + 0x7FFFFFFF, // Max
> + 0x00000000, // Translation
> + 0x04000000 // Range Length
> + ,,,
> + STOM
> + )
> +
> + DWORDMEMORY ( // Descriptor for PCI MMIO
> + ResourceProducer, // bit 0 of general flags is 0
> + PosDecode,
> + MinFixed, // Range is fixed
> + MaxFixed, // Range is fixed
> + Cacheable,
> + ReadWrite,
> + 0x00000000, // Granularity
> + 0x80000000, // Min
> + 0xDFFFFFFF, // Max
> + 0x00000000, // Translation
> + 0x60000000 // Range Length
> + ,,,
> + PM01
> + )
> +})
> +
> +//Name(GUID,UUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))
> +Name(GUID,Buffer()
> +{
> + 0x5b, 0x4d, 0xdb, 0x33,
> + 0xf7, 0x1f,
> + 0x1c, 0x40,
> + 0x96, 0x57,
> + 0x74, 0x41, 0xc0, 0x3d, 0xd7, 0x66
> +})
> +
> +
> +Name(SUPP,0) // PCI _OSC Support Field value
> +Name(CTRL,0) // PCI _OSC Control Field value
> +
> +Method(_OSC,4,Serialized)
> +{
> + // Check for proper UUID
> + // Save the capabilities buffer
> + Store(Arg3,Local0)
> +
> + // Create DWord-adressable fields from the Capabilties Buffer
> + CreateDWordField(Local0,0,CDW1)
> + CreateDWordField(Local0,4,CDW2)
> + CreateDWordField(Local0,8,CDW3)
> +
> + // Check for proper UUID
> + If(LAnd(LEqual(Arg0,GUID),NEXP))
> + {
> + // Save Capabilities DWord2 & 3
> + Store(CDW2,SUPP)
> + Store(CDW3,CTRL)
> +
> + If(Not(And(CDW1,1))) // Query flag clear?
> + {
> + // Disable GPEs for features granted native control.
> + If(And(CTRL,0x02))
> + {
> + NHPG()
> + }
> + If(And(CTRL,0x04)) // PME control granted?
> + {
> + NPME()
> + }
> + }
> +
> + If(LNotEqual(Arg1,One))
> + {
> + // Unknown revision
> + Or(CDW1,0x08,CDW1)
> + }
> +
> + If(LNotEqual(CDW3,CTRL))
> + {
> + // Capabilities bits were masked
> + Or(CDW1,0x10,CDW1)
> + }
> + // Update DWORD3 in the buffer
> + And(CTRL,0xfe,CTRL)
> + Store(CTRL,CDW3)
> + Store(CTRL,OSCC)
> + Return(Local0)
> + } Else
> + {
> + Or(CDW1,4,CDW1) // Unrecognized UUID
> + Return(Local0)
> + }
> +} // End _OSC
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Hpet/Hpet.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Hpet/Hpet.aslc
> new file mode 100644
> index 0000000000..ecbe51e6b0
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Hpet/Hpet.aslc
> @@ -0,0 +1,63 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Hpet.c
> +
> +Abstract:
> +
> + This file contains a structure definition for the ACPI HPET Table.
> +--*/
> +
> +//
> +// Statements that include other files
> +//
> +#ifdef ECP_FLAG
> +#include <Tiano.h>
> +#endif
> +#include <Hpet.h>
> +#include "AcpiTablePlatform.h"
> +
> +// Hpet Table
> +EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER HPET = {
> + {
> + EFI_ACPI_3_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE,
> + sizeof (EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER),
> + EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_REVISION,
> + 0, // to make sum of entire table == 0
> + EFI_ACPI_OEM_ID, // OEMID is a 6 bytes long field
> + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long)
> + EFI_ACPI_OEM_REVISION, // OEM revision
> + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID
> + EFI_ACPI_CREATOR_REVISION // ASL compiler revision number
> + },
> + 0x0, // EventTimerBlockId
> + {
> + 0x00, // Address_Space_ID = System Memory
> + 0x40, // Register_Bit_Width = 32 bits, mentioned about write
> failures when in 64bit in SCU HAS
> + 0x00, // Register_Bit_offset
> + 0x00, // Dword access
> + HPET_BASE_ADDRESS, // Base addresse of HPET
> + },
> + 0x0, // Only HPET's _UID in Namespace
> + MAIN_COUNTER_MIN_PERIODIC_CLOCK_TICKS,
> + 0x0
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&HPET;
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELGFX.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELGFX.ASL
> new file mode 100644
> index 0000000000..a2ba398568
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELGFX.ASL
> @@ -0,0 +1,879 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + INTELGFX.ASL
> +
> +Abstract:
> +
> + IGD OpRegion/Software ACPI Reference Code for the Baytrail Family.
> +
> +--*/
> +
> +// Enable/Disable Output Switching. In WIN2K/WINXP, _DOS = 0 will
> +// get called during initialization to prepare for an ACPI Display
> +// Switch Event. During an ACPI Display Switch, the OS will call
> +// _DOS = 2 immediately after a Notify=0x80 to temporarily disable
> +// all Display Switching. After ACPI Display Switching is complete,
> +// the OS will call _DOS = 0 to re-enable ACPI Display Switching.
> +
> +Method(_DOS,1)
> +{
> + // Store Display Switching and LCD brightness BIOS control bit
> + Store(And(Arg0,7),DSEN)
> +}
> +
> +// Enumerate the Display Environment. This method will return
> +// valid addresses for all display device encoders present in the
> +// system. The Miniport Driver will reject the addresses for every
> +// encoder that does not have an attached display device. After
> +// enumeration is complete, the OS will call the _DGS methods
> +// during a display switch only for the addresses accepted by the
> +// Miniport Driver. For hot-insertion and removal of display
> +// devices, a re-enumeration notification will be required so the
> +// address of the newly present display device will be accepted by
> +// the Miniport Driver.
> +
> +Method(_DOD, 0, Serialized)
> +{
> + Store(0, NDID)
> + If(LNotEqual(DIDL, Zero))
> + {
> + Store(SDDL(DIDL),DID1)
> + }
> + If(LNotEqual(DDL2, Zero))
> + {
> + Store(SDDL(DDL2),DID2)
> + }
> + If(LNotEqual(DDL3, Zero))
> + {
> + Store(SDDL(DDL3),DID3)
> + }
> + If(LNotEqual(DDL4, Zero))
> + {
> + Store(SDDL(DDL4),DID4)
> + }
> + If(LNotEqual(DDL5, Zero))
> + {
> + Store(SDDL(DDL5),DID5)
> + }
> +
> + // TODO - This level of flexibility is not needed for a true
> + // OEM design. Simply determine the greatest number of
> + // encoders the platform will suppport then remove all
> + // return packages beyond that value. Note that for
> + // current silicon, the maximum number of encoders
> + // possible is 5.
> +
> + If(LEqual(NDID,1))
> + {
> + If (LNOTEqual (ISPD, 0))
> + {
> + Name(TMP0,Package() {0xFFFFFFFF,0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP0,0))
> + //Add ISP device to GFX0
> + Store(0x00020F38, Index(TMP0,1))
> + Return(TMP0)
> + } Else
> + {
> + Name(TMP1,Package() {0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP1,0))
> + Return(TMP1)
> + }
> + }
> +
> + If(LEqual(NDID,2))
> + {
> + If (LNOTEqual (ISPD, 0))
> + {
> + Name(TMP2,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP2,0))
> + Store(Or(0x10000,DID2),Index(TMP2,1))
> + //Add ISP device to GFX0
> + Store(0x00020F38, Index(TMP2,2))
> + Return(TMP2)
> + } Else
> + {
> + Name(TMP3,Package() {0xFFFFFFFF, 0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP3,0))
> + Store(Or(0x10000,DID2),Index(TMP3,1))
> + Return(TMP3)
> + }
> + }
> +
> + If(LEqual(NDID,3))
> + {
> + If (LNOTEqual (ISPD, 0))
> + {
> + Name(TMP4,Package() {0xFFFFFFFF, 0xFFFFFFFF,
> 0xFFFFFFFF,0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP4,0))
> + Store(Or(0x10000,DID2),Index(TMP4,1))
> + Store(Or(0x10000,DID3),Index(TMP4,2))
> + //Add ISP device to GFX0
> + Store(0x00020F38, Index(TMP4,3))
> + Return(TMP4)
> + } Else
> + {
> + Name(TMP5,Package() {0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP5,0))
> + Store(Or(0x10000,DID2),Index(TMP5,1))
> + Store(Or(0x10000,DID3),Index(TMP5,2))
> + Return(TMP5)
> + }
> + }
> +
> + If(LEqual(NDID,4))
> + {
> + If (LNOTEqual (ISPD, 0))
> + {
> + Name(TMP6,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
> 0xFFFFFFFF, 0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP6,0))
> + Store(Or(0x10000,DID2),Index(TMP6,1))
> + Store(Or(0x10000,DID3),Index(TMP6,2))
> + Store(Or(0x10000,DID4),Index(TMP6,3))
> + //Add ISP device to GFX0
> + Store(0x00020F38, Index(TMP6,4))
> + Return(TMP6)
> + } Else
> + {
> + Name(TMP7,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
> 0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP7,0))
> + Store(Or(0x10000,DID2),Index(TMP7,1))
> + Store(Or(0x10000,DID3),Index(TMP7,2))
> + Store(Or(0x10000,DID4),Index(TMP7,3))
> + Return(TMP7)
> + }
> + }
> +
> + If(LGreater(NDID,4))
> + {
> + If (LNOTEqual (ISPD, 0))
> + {
> + Name(TMP8,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
> 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP8,0))
> + Store(Or(0x10000,DID2),Index(TMP8,1))
> + Store(Or(0x10000,DID3),Index(TMP8,2))
> + Store(Or(0x10000,DID4),Index(TMP8,3))
> + Store(Or(0x10000,DID5),Index(TMP8,4))
> + //Add ISP device to GFX0
> + Store(0x00020F38, Index(TMP8,5))
> + Return(TMP8)
> + } Else
> + {
> + Name(TMP9,Package() {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
> 0xFFFFFFFF, 0xFFFFFFFF})
> + Store(Or(0x10000,DID1),Index(TMP9,0))
> + Store(Or(0x10000,DID2),Index(TMP9,1))
> + Store(Or(0x10000,DID3),Index(TMP9,2))
> + Store(Or(0x10000,DID4),Index(TMP9,3))
> + Store(Or(0x10000,DID5),Index(TMP9,4))
> + Return(TMP9)
> + }
> + }
> +
> + // If nothing else, return Unknown LFP.
> + // (Prevents compiler warning.)
> +
> + //Add ISP device to GFX0
> + If (LNOTEqual (ISPD, 0))
> + {
> + Return(Package() {0x00000400, 0x00020F38})
> + } Else
> + {
> + Return(Package() {0x00000400})
> + }
> +}
> +
> +Device(DD01)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID1),0x400))
> + {
> + Store(0x1, EDPV)
> + Store(DID1, DIDX)
> + Return(1)
> + }
> + If(LEqual(DID1,0))
> + {
> + Return(1)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID1))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + Return(CDDS(DID1))
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID1))
> + }
> +
> + // Device Set State.
> +
> + // _DSS Table:
> + //
> + // BIT31 BIT30 Execution
> + // 0 0 Don't implement.
> + // 0 1 Cache change. Nothing to Implement.
> + // 1 0 Don't Implement.
> + // 1 1 Display Switch Complete. Implement.
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> +
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +Device(DD02)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID2),0x400))
> + {
> + Store(0x2, EDPV)
> + Store(DID2, DIDX)
> + Return(2)
> + }
> + If(LEqual(DID2,0))
> + {
> + Return(2)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID2))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + Return(CDDS(DID2))
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + // Return the Next State.
> + Return(NDDS(DID2))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> +
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +Device(DD03)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID3),0x400))
> + {
> + Store(0x3, EDPV)
> + Store(DID3, DIDX)
> + Return(3)
> + }
> + If(LEqual(DID3,0))
> + {
> + Return(3)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID3))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(DID3,0))
> + {
> + Return(0x0B)
> + }
> + Else
> + {
> + Return(CDDS(DID3))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID3))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +Device(DD04)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID4),0x400))
> + {
> + Store(0x4, EDPV)
> + Store(DID4, DIDX)
> + Return(4)
> + }
> + If(LEqual(DID4,0))
> + {
> + Return(4)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID4))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(DID4,0))
> + {
> + Return(0x0B)
> + }
> + Else
> + {
> + Return(CDDS(DID4))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID4))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> +
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +
> +Device(DD05)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID5),0x400))
> + {
> + Store(0x5, EDPV)
> + Store(DID5, DIDX)
> + Return(5)
> + }
> + If(LEqual(DID5,0))
> + {
> + Return(5)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID5))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(DID5,0))
> + {
> + Return(0x0B)
> + }
> + Else
> + {
> + Return(CDDS(DID5))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID5))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +
> +Device(DD06)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID6),0x400))
> + {
> + Store(0x6, EDPV)
> + Store(DID6, DIDX)
> + Return(6)
> + }
> + If(LEqual(DID6,0))
> + {
> + Return(6)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID6))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(DID6,0))
> + {
> + Return(0x0B)
> + }
> + Else
> + {
> + Return(CDDS(DID6))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID6))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +
> +Device(DD07)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID7),0x400))
> + {
> + Store(0x7, EDPV)
> + Store(DID7, DIDX)
> + Return(7)
> + }
> + If(LEqual(DID7,0))
> + {
> + Return(7)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID7))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(DID7,0))
> + {
> + Return(0x0B)
> + }
> + Else
> + {
> + Return(CDDS(DID7))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID7))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +
> +Device(DD08)
> +{
> +
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(And(0x0F00,DID8),0x400))
> + {
> + Store(0x8, EDPV)
> + Store(DID8, DIDX)
> + Return(8)
> + }
> + If(LEqual(DID8,0))
> + {
> + Return(8)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DID8))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(DID8,0))
> + {
> + Return(0x0B)
> + }
> + Else
> + {
> + Return(CDDS(DID8))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DID8))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> +
> + Store(NSTE,CSTE)
> + }
> + }
> +}
> +
> +//device for eDP
> +Device(DD1F)
> +{
> + // Return Unique ID.
> +
> + Method(_ADR,0,Serialized)
> + {
> + If(LEqual(EDPV, 0x0))
> + {
> + Return(0x1F)
> + }
> + Else
> + {
> + Return(And(0xFFFF,DIDX))
> + }
> + }
> +
> + // Return the Current Status.
> +
> + Method(_DCS,0)
> + {
> + If(LEqual(EDPV, 0x0))
> + {
> + Return(0x00)
> + }
> + Else
> + {
> + Return(CDDS(DIDX))
> + }
> + }
> +
> + // Query Graphics State (active or inactive).
> +
> + Method(_DGS,0)
> + {
> + Return(NDDS(DIDX))
> + }
> +
> + // Device Set State. (See table above.)
> +
> + Method(_DSS,1)
> + {
> + If(LEqual(And(Arg0,0xC0000000),0xC0000000))
> + {
> + // State change was performed by the
> + // Video Drivers. Simply update the
> + // New State.
> + Store(NSTE,CSTE)
> + }
> + }
> + // Query List of Brightness Control Levels Supported.
> +
> + Method(_BCL,0)
> + {
> + // List of supported brightness levels in the following sequence.
> +
> + // Level when machine has full power.
> + // Level when machine is on batteries.
> + // Other supported levels.
> + Return(Package() {80, 50, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
> 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
> 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
> 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
> 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100})
> + }
> +
> + // Set the Brightness Level.
> +
> + Method (_BCM,1)
> + {
> + // Set the requested level if it is between 0 and 100%.
> +
> + If(LAnd(LGreaterEqual(Arg0,0),LLessEqual(Arg0,100)))
> + {
> + \_SB.PCI0.GFX0.AINT(1, Arg0)
> + Store(Arg0,BRTL) // Store Brightness Level.
> + }
> + }
> +
> + // Brightness Query Current level.
> +
> + Method (_BQC,0)
> + {
> + Return(BRTL)
> + }
> +}
> +
> +Method(SDDL,1)
> +{
> + Increment(NDID)
> + Store(And(Arg0,0xF0F),Local0)
> + Or(0x80000000,Local0, Local1)
> + If(LEqual(DIDL,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL2,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL3,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL4,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL5,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL6,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL7,Local0))
> + {
> + Return(Local1)
> + }
> + If(LEqual(DDL8,Local0))
> + {
> + Return(Local1)
> + }
> + Return(0)
> +}
> +
> +Method(CDDS,1)
> +{
> + Store(And(Arg0,0xF0F),Local0)
> +
> + If(LEqual(0, Local0))
> + {
> + Return(0x1D)
> + }
> + If(LEqual(CADL, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL2, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL3, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL4, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL5, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL6, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL7, Local0))
> + {
> + Return(0x1F)
> + }
> + If(LEqual(CAL8, Local0))
> + {
> + Return(0x1F)
> + }
> + Return(0x1D)
> +}
> +
> +Method(NDDS,1)
> +{
> + Store(And(Arg0,0xF0F),Local0)
> +
> + If(LEqual(0, Local0))
> + {
> + Return(0)
> + }
> + If(LEqual(NADL, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL2, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL3, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL4, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL5, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL6, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL7, Local0))
> + {
> + Return(1)
> + }
> + If(LEqual(NDL8, Local0))
> + {
> + Return(1)
> + }
> + Return(0)
> +}
> +
> +//
> +// Include IGD OpRegion/Software SCI interrupt handler which is use by
> +// the graphics drivers to request data from system BIOS.
> +//
> +include("IgdOpRn.ASL")
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELISPDev2.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELISPDev2.ASL
> new file mode 100644
> index 0000000000..97548a41f9
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/INTELISPDev2.ASL
> @@ -0,0 +1,71 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + INTELISPDev2.ASL
> +
> +Abstract:
> +
> + ISP Exist as B0D2F0 Software ACPI Reference Code for the Baytrail Family.
> +
> +--*/
> +////Device ISP0
> +Device(ISP0)
> +{
> + Name(_ADR, 0x0F38)
> + //Name (_HID, "80860F38")
> + //Name (_CID, "80860F38")
> + Name(_DDN, "VLV2 ISP - 80860F38")
> + Name(_UID, 0x01)
> +
> + Method (_STA, 0, NotSerialized)
> + {
> + If(LEqual(ISPD,1)) //Dev2 need report ISP0 as GFX0 child
> + {
> + Return (0xF)
> + }
> + Else
> + {
> + Return (0x0)
> + }
> + }
> + Name(SBUF,ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00400000, ISP0)
> + })
> + Method(_CRS, 0x0, NotSerialized)
> + {
> + Return (SBUF)
> + }
> + Method (_SRS, 0x1, NotSerialized)
> + {
> + }
> + Method (_DIS, 0x0, NotSerialized)
> + {
> + }
> + Method(_DSM, 0x4, NotSerialized)
> + {
> + If (LEqual (Arg0, 0x01))
> + {
> + ///Switch ISP to D3H
> + Return (0x01)
> + }
> + Elseif (LEqual (Arg0, 0x02))
> + {
> + //Switch ISP to D0
> + Return (0x02)
> + }
> + Else
> + {
> + //Do nothing
> + Return (0x0F)
> + }
> + }
> +} ///End ISP0
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGBDA.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGBDA.ASL
> new file mode 100644
> index 0000000000..4482db6906
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGBDA.ASL
> @@ -0,0 +1,155 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + IgdOGBDA.ASL
> +
> +Abstract:
> +
> + IGD OpRegion/Software SCI Reference Code for the Baytrail Family.
> + This file contains Get BIOS Data Area funciton support for
> + the Integrated Graphics Device (IGD) OpRegion/Software SCI mechanism.
> +
> +--*/
> +
> +
> +Method (GBDA, 0, Serialized)
> +{
> +
> + // Supported calls: Sub-function 0
> +
> + If (LEqual(GESF, 0))
> + {
> + //<TODO> Update implementation specific supported calls. Reference
> + // code is set to Intel's validated implementation.
> +
> + Store(0x0000279, PARM)
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(SUCC) // Success
> + }
> +
> + // Requested callbacks: Sub-function 1
> +
> + If (LEqual(GESF, 1))
> + {
> +
> + //<TODO> Update implementation specific system BIOS requested call
> + // back functions. Call back functions are where the driver calls the
> + // system BIOS at function indicated event.
> +
> + Store(0x00000240, PARM)
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(SUCC) // Success
> + }
> +
> + // Get Boot display Preferences: Sub-function 4
> +
> + If (LEqual(GESF, 4))
> + {
> +
> + //<TODO> Update the implementation specific Get Boot Display
> + // Preferences function.
> +
> + And(PARM, 0xEFFF0000, PARM) // PARM[30:16] = Boot device ports
> + And(PARM, ShiftLeft(DeRefOf(Index(DBTB, IBTT)), 16), PARM)
> + Or(IBTT, PARM, PARM) // PARM[7:0] = Boot device type
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(SUCC) // Success
> + }
> +
> + // Panel details: Sub-function 5
> +
> + If (LEqual(GESF, 5))
> + {
> +
> + //<TODO> Update the implementation specific Get Panel Details
> + // function.
> +
> + Store(IPSC, PARM) // Report the scaling setting
> + Or(PARM, ShiftLeft(IPAT, 8), PARM)
> + Add(PARM, 0x100, PARM) // Adjust panel type, 0 = VBT default
> + Or(PARM, ShiftLeft(LIDS, 16), PARM) // Report the lid state
> + Add(PARM, 0x10000, PARM) // Adjust the lid state, 0 = Unknown
> + Or(PARM, ShiftLeft(IBLC, 18), PARM) // Report the BLC setting
> + Or(PARM, ShiftLeft(IBIA, 20), PARM) // Report the BIA setting
> + Store(Zero, GESF)
> + Return(SUCC)
> + }
> +
> + // TV-standard/Video-connector: Sub-function 6
> +
> + If (LEqual(GESF, 6))
> + {
> +
> + //<TODO> Update the implementation specific Get
> + // TV-standard/Video-connectorPanel function.
> +
> + Store(ITVF, PARM)
> + Or(PARM, ShiftLeft(ITVM, 4), PARM)
> + Store(Zero, GESF)
> + Return(SUCC)
> + }
> +
> + // Internal graphics: Sub-function 7
> +
> + If (LEqual(GESF, 7))
> + {
> + Store(GIVD, PARM) // PARM[0] - VGA mode(1=VGA)
> + Xor(PARM, 1, PARM) // Invert the VGA mode polarity
> + Or(PARM, ShiftLeft(GMFN, 1), PARM) // PARM[1] - # IGD PCI functions-1
> + // PARM[3:2] - Reserved
> + // PARM[4] - IGD D3 support(0=cold)
> + // PARM[10:5] - Reserved
> + Or(PARM, ShiftLeft(3, 11), PARM) // PARM[12:11] - DVMT mode(11b = 5.0)
> +
> + //
> + // Report DVMT 5.0 Total Graphics memory size.
> + //
> + Or(PARM, ShiftLeft(IDMS, 17), PARM) // Bits 20:17 are for Gfx total
> memory size
> +
> + // If the "Set Internal Graphics" call is supported, the modified
> + // settings flag must be programmed per the specification. This means
> + // that the flag must be set to indicate that system BIOS requests
> + // these settings. Once "Set Internal Graphics" is called, the
> + // modified settings flag must be cleared on all subsequent calls to
> + // this function.
> +
> + // Report the graphics frequency based on
> DISPLAY_CLOCK_FREQUENCY_ENCODING [MMADR+0x20C8]
> +
> + Or(ShiftLeft(Derefof(Index(CDCT, \_SB.PCI0.GFX0.MCHK.DCFE)),
> 21),PARM, PARM)
> +
> + Store(1, GESF) // Set the modified settings flag
> + Return(SUCC)
> + }
> +
> + // Spread spectrum clocks: Sub-function 10
> +
> + If (LEqual(GESF, 10))
> + {
> +
> + Store(0, PARM) // Assume SSC is disabled
> +
> + If(ISSC)
> + {
> + Or(PARM, 3, PARM) // If SSC enabled, return SSC1+Enabled
> + }
> +
> + Store(0, GESF) // Set the modified settings flag
> + Return(SUCC) // Success
> + }
> +
> +
> + // A call to a reserved "Get BIOS data" function was received.
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(CRIT) // Reserved, "Critical failure"
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOMOBF.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOMOBF.ASL
> new file mode 100644
> index 0000000000..917e3268d7
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOMOBF.ASL
> @@ -0,0 +1,485 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + IgdOMOBF.ASL
> +
> +Abstract:
> +
> + IGD OpRegion/Software SCI Reference Code for the Baytrail Family.
> + This file contains ASL code with the purpose of handling events
> + i.e. hotkeys and other system interrupts.
> +
> +--*/
> +
> +
> +// Notes:
> +// 1. The following routines are to be called from the appropriate event
> +// handlers.
> +// 2. This code cannot comprehend the exact implementation in the OEM's
> BIOS.
> +// Therefore, an OEM must call these methods from the existing event
> +// handler infrastructure. Details on when/why to call each method is
> +// included in the method header under the "usage" section.
> +
> +
> +/*********************************************************
> ***************;
> +;* ACPI Notification Methods
> +;*********************************************************
> ***************/
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: PDRD
> +;*
> +;* Description: Check if the graphics driver is ready to process
> +;* notifications and video extensions.
> +;*
> +;* Usage: This method is to be called prior to performing any
> +;* notifications or handling video extensions.
> +;* Ex: If (PDRD()) {Return (FAIL)}
> +;*
> +;* Input: None
> +;*
> +;* Output: None
> +;*
> +;* References: DRDY (Driver ready status), ASLP (Driver recommended
> +;* sleep timeout value).
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(PDRD)
> +{
> + If(LNot(DRDY))
> + {
> +
> + // Sleep for ASLP milliseconds if the driver is not ready.
> +
> + Sleep(ASLP)
> + }
> +
> + // If DRDY is clear, the driver is not ready. If the return value is
> + // !=0, do not perform any notifications or video extension handling.
> +
> + Return(LNot(DRDY))
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: PSTS
> +;*
> +;* Description: Check if the graphics driver has completed the previous
> +;* "notify" command.
> +;*
> +;* Usage: This method is called before every "notify" command. A
> +;* "notify" should only be set if the driver has completed the
> +;* previous command. Else, ignore the event and exit the parent
> +;* method.
> +;* Ex: If (PSTS()) {Return (FAIL)}
> +;*
> +;* Input: None
> +;*
> +;* Output: None
> +;*
> +;* References: CSTS (Notification status), ASLP (Driver recommended sleep
> +;* timeout value).
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(PSTS)
> +{
> + If(LGreater(CSTS, 2))
> + {
> + // Sleep for ASLP milliseconds if the status is not "success,
> + // failure, or pending"
> + //
> + Sleep(ASLP)
> + }
> +
> + Return(LEqual(CSTS, 3)) // Return True if still Dispatched
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: GNOT
> +;*
> +;* Description: Call the appropriate methods to query the graphics driver
> +;* status. If all methods return success, do a notification of
> +;* the graphics device.
> +;*
> +;* Usage: This method is to be called when a graphics device
> +;* notification is required (display switch hotkey, etc).
> +;*
> +;* Input: Arg0 = Current event type:
> +;* 1 = display switch
> +;* 2 = lid
> +;* 3 = dock
> +;* Arg1 = Notification type:
> +;* 0 = Re-enumeration
> +;* 0x80 = Display switch
> +;*
> +;* Output: Returns 0 = success, 1 = failure
> +;*
> +;* References: PDRD and PSTS methods. OSYS (OS version)
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(GNOT, 2)
> +{
> + // Check for 1. Driver loaded, 2. Driver ready.
> + // If any of these cases is not met, skip this event and return failure.
> + //
> + If(PDRD())
> + {
> + Return(0x1) // Return failure if driver not loaded.
> + }
> +
> + Store(Arg0, CEVT) // Set up the current event value
> + Store(3, CSTS) // CSTS=BIOS dispatched an event
> +
> + If(LAnd(LEqual(CHPD, 0), LEqual(Arg1, 0))) // Do not re-enum if driver
> supports hotplug
> + {
> + If(LOr(LGreater(OSYS, 2000), LLess(OSYS, 2006)))
> + {
> + //
> + // WINXP requires that the entire PCI Bridge be re-enumerated.
> + //
> + Notify(\_SB.PCI0, Arg1)
> + }
> + Else
> + {
> + //
> + // Re-enumerate the Graphics Device for non-XP operating systems.
> + //
> + Notify(\_SB.PCI0.GFX0, Arg1)
> + }
> + }
> +
> + Notify(\_SB.PCI0.GFX0,0x80)
> +
> +
> + Return(0x0) // Return success
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: GHDS
> +;*
> +;* Description: Handle a hotkey display switching event (performs a
> +;* Notify(GFX0, 0).
> +;*
> +;* Usage: This method must be called when a hotkey event occurs and
> the
> +;* purpose of that hotkey is to do a display switch.
> +;*
> +;* Input: Arg0 = Toggle table number.
> +;*
> +;* Output: Returns 0 = success, 1 = failure.
> +;* CEVT and TIDX are indirect outputs.
> +;*
> +;* References: TIDX, GNOT
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(GHDS, 1)
> +{
> + Store(Arg0, TIDX) // Store the table number
> +
> + // Call GNOT for CEVT = 1 = hotkey, notify value = 0
> +
> + Return(GNOT(1, 0)) // Return stats from GNOT
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: GLID
> +;*
> +;* Description: Handle a lid event (performs the Notify(GFX0, 0), but not the
> +;* lid notify).
> +;*
> +;* Usage: This method must be called when a lid event occurs. A
> +;* Notify(LID0, 0x80) must follow the call to this method.
> +;*
> +;* Input: Arg0 = Lid state:
> +;* 0 = All closed
> +;* 1 = internal LFP lid open
> +;* 2 = external lid open
> +;* 3 = both external and internal open
> +;*
> +;* Output: Returns 0=success, 1=failure.
> +;* CLID and CEVT are indirect outputs.
> +;*
> +;* References: CLID, GNOT
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(GLID, 1)
> +{
> + Store(Arg0, CLID) // Store the current lid state
> +
> + // Call GNOT for CEVT=2=Lid, notify value = 0
> +
> + Return(GNOT(2, 0)) // Return stats from GNOT
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: GDCK
> +;*
> +;* Description: Handle a docking event by updating the current docking
> status
> +;* and doing a notification.
> +;*
> +;* Usage: This method must be called when a docking event occurs.
> +;*
> +;* Input: Arg0 = Docking state:
> +;* 0 = Undocked
> +;* 1 = Docked
> +;*
> +;* Output: Returns 0=success, 1=failure.
> +;* CDCK and CEVT are indirect outputs.
> +;*
> +;* References: CDCK, GNOT
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(GDCK, 1)
> +{
> + Store(Arg0, CDCK) // Store the current dock state
> +
> + // Call GNOT for CEVT=4=Dock, notify value = 0
> +
> + Return(GNOT(4, 0)) // Return stats from GNOT
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;* ASLE Interrupt Methods
> +;*********************************************************
> ***************/
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: PARD
> +;*
> +;* Description: Check if the driver is ready to handle ASLE interrupts
> +;* generate by the system BIOS.
> +;*
> +;* Usage: This method must be called before generating each ASLE
> +;* interrupt.
> +;*
> +;* Input: None
> +;*
> +;* Output: Returns 0 = success, 1 = failure.
> +;*
> +;* References: ARDY (Driver readiness), ASLP (Driver recommended sleep
> +;* timeout value)
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(PARD)
> +{
> + If(LNot(ARDY))
> + {
> +
> + // Sleep for ASLP milliseconds if the driver is not ready.
> +
> + Sleep(ASLP)
> + }
> +
> + // If ARDY is clear, the driver is not ready. If the return value is
> + // !=0, do not generate the ASLE interrupt.
> +
> + Return(LNot(ARDY))
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: AINT
> +;*
> +;* Description: Call the appropriate methods to generate an ASLE interrupt.
> +;* This process includes ensuring the graphics driver is ready
> +;* to process the interrupt, ensuring the driver supports the
> +;* interrupt of interest, and passing information about the event
> +;* to the graphics driver.
> +;*
> +;* Usage: This method must called to generate an ASLE interrupt.
> +;*
> +;* Input: Arg0 = ASLE command function code:
> +;* 0 = Set ALS illuminance
> +;* 1 = Set backlight brightness
> +;* 2 = Do Panel Fitting
> +;* Arg1 = If Arg0 = 0, current ALS reading:
> +;* 0 = Reading below sensor range
> +;* 1-0xFFFE = Current sensor reading
> +;* 0xFFFF = Reading above sensor range
> +;* Arg1 = If Arg0 = 1, requested backlight percentage
> +;*
> +;* Output: Returns 0 = success, 1 = failure
> +;*
> +;* References: PARD method.
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(AINT, 2)
> +{
> +
> + // Return failure if the requested feature is not supported by the
> + // driver.
> +
> + If(LNot(And(TCHE, ShiftLeft(1, Arg0))))
> + {
> + Return(0x1)
> + }
> +
> + // Return failure if the driver is not ready to handle an ASLE
> + // interrupt.
> +
> + If(PARD())
> + {
> + Return(0x1)
> + }
> +
> + // Evaluate the first argument (Panel fitting, backlight brightness, or ALS).
> +
> + If(LEqual(Arg0, 2)) // Arg0 = 2, so request a panel fitting mode
> change.
> + {
> + If(CPFM) // If current mode field is non-zero use it.
> + {
> + And(CPFM, 0x0F, Local0) // Create variables without reserved
> + And(EPFM, 0x0F, Local1) // or valid bits.
> +
> + If(LEqual(Local0, 1)) // If current mode is centered,
> + {
> + If(And(Local1, 6)) // and if stretched is enabled,
> + {
> + Store(6, PFIT) // request stretched.
> + }
> + Else // Otherwise,
> + {
> + If(And(Local1, 8)) // if aspect ratio is enabled,
> + {
> + Store(8, PFIT) // request aspect ratio.
> + }
> + Else // Only centered mode is enabled
> + {
> + Store(1, PFIT) // so request centered. (No change.)
> + }
> + }
> + }
> + If(LEqual(Local0, 6)) // If current mode is stretched,
> + {
> + If(And(Local1, 8)) // and if aspect ratio is enabled,
> + {
> + Store(8, PFIT) // request aspect ratio.
> + }
> + Else // Otherwise,
> + {
> + If(And(Local1, 1)) // if centered is enabled,
> + {
> + Store(1, PFIT) // request centered.
> + }
> + Else // Only stretched mode is enabled
> + {
> + Store(6, PFIT) // so request stretched. (No change.)
> + }
> + }
> + }
> + If(LEqual(Local0, 8)) // If current mode is aspect ratio,
> + {
> + If(And(Local1, 1)) // and if centered is enabled,
> + {
> + Store(1, PFIT) // request centered.
> + }
> + Else // Otherwise,
> + {
> + If(And(Local1, 6)) // if stretched is enabled,
> + {
> + Store(6, PFIT) // request stretched.
> + }
> + Else // Only aspect ratio mode is enabled
> + {
> + Store(8, PFIT) // so request aspect ratio. (No change.)
> + }
> + }
> + }
> + }
> +
> + // The following code for panel fitting (within the Else condition) is
> retained for backward compatiblity.
> +
> + Else // If CFPM field is zero use PFIT and toggle the
> + {
> + Xor(PFIT,7,PFIT) // mode setting between stretched and centered
> only.
> + }
> +
> + Or(PFIT,0x80000000,PFIT) // Set the valid bit for all cases.
> +
> + Store(4, ASLC) // Store "Panel fitting event" to ASLC[31:1]
> + }
> + Else
> + {
> + If(LEqual(Arg0, 1)) // Arg0=1, so set the backlight brightness.
> + {
> + Store(Divide(Multiply(Arg1, 255), 100), BCLP) // Convert from percent to
> 0-255.
> +
> + Or(BCLP, 0x80000000, BCLP) // Set the valid bit.
> +
> + Store(2, ASLC) // Store "Backlight control event" to ASLC[31:1]
> + }
> + Else
> + {
> + If(LEqual(Arg0, 0)) // Arg0=0, so set the ALS illuminace
> + {
> + Store(Arg1, ALSI)
> +
> + Store(1, ASLC) // Store "ALS event" to ASLC[31:1]
> + }
> + Else
> + {
> + Return(0x1) // Unsupported function
> + }
> + }
> + }
> +
> + Store(0x01, ASLE) // Generate ASLE interrupt
> + Return(0x0) // Return success
> +}
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: SCIP
> +;*
> +;* Description: Checks the presence of the OpRegion and SCI
> +;*
> +;* Usage: This method is called before other OpRegion methods. The
> +;* former "GSMI True/False is not always valid. This method
> +;* checks if the OpRegion Version is non-zero and if non-zero,
> +;* (present and readable) then checks the GSMI flag.
> +;*
> +;* Input: None
> +;*
> +;* Output: Boolean True = SCI present.
> +;*
> +;* References: None
> +;*
> +;*********************************************************
> ***************/
> +
> +Method(SCIP)
> +{
> + If(LNotEqual(OVER,0)) // If OpRegion Version not 0.
> + {
> + Return(LNot(GSMI)) // Return True if SCI.
> + }
> +
> + Return(0) // Else Return False.
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOSBCB.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOSBCB.ASL
> new file mode 100644
> index 0000000000..9e0482efb9
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOSBCB.ASL
> @@ -0,0 +1,274 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + IgdOSBCB.ASL
> +
> +Abstract:
> +
> + IGD OpRegion/Software SCI Reference Code for the Baytrail Family.
> + This file contains the system BIOS call back functionality for the
> + OpRegion/Software SCI mechanism.
> +
> +--*/
> +
> +
> +Method (SBCB, 0, Serialized)
> +{
> +
> + // Supported Callbacks: Sub-function 0
> +
> + If (LEqual(GESF, 0x0))
> + {
> +
> + //<TODO> An OEM may support the driver->SBIOS status callbacks, but
> + // the supported callbacks value must be modified. The code that is
> + // executed upon reception of the callbacks must be also be updated
> + // to perform the desired functionality.
> +
> + Store(0x00000000, PARM) // No callbacks supported
> +
> + If(LEqual(PFLV,FMBL))
> + {
> + Store(0x000F87FD, PARM) // Mobile
> + }
> + If(LEqual(PFLV,FDTP))
> + {
> + Store(0x000F87BD, PARM) // Desktop
> + }
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(SUCC) // "Success"
> + }
> +
> + // BIOS POST Completion: Sub-function 1
> +
> + If (LEqual(GESF, 1))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Pre-Hires Set Mode: Sub-function 3
> +
> + If (LEqual(GESF, 3))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Post-Hires Set Mode: Sub-function 4
> +
> + If (LEqual(GESF, 4))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Display Switch: Sub-function 5
> +
> + If (LEqual(GESF, 5))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Set TV format: Sub-function 6
> +
> + If (LEqual(GESF, 6))
> + {
> +
> + //<TODO> If implemented, the input values must be saved into
> + // non-volatile storage for parsing during the next boot. The
> + // following Sample code is Intel validated implementation.
> +
> + Store(And(PARM, 0x0F), ITVF)
> + Store(ShiftRight(And(PARM, 0xF0), 4), ITVM)
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC)
> + }
> +
> + // Adapter Power State: Sub-function 7
> +
> + If (LEqual(GESF, 7))
> + {
> +
> + // Upon notification from driver that the Adapter Power State = D0,
> + // check if previous lid event failed. If it did, retry the lid
> + // event here.
> + If(LEqual(PARM, 0))
> + {
> + Store(CLID, Local0)
> + If(And(0x80000000,Local0))
> + {
> + And(CLID, 0x0000000F, CLID)
> + GLID(CLID)
> + }
> + }
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Display Power State: Sub-function 8
> +
> + If (LEqual(GESF, 8))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Set Boot Display: Sub-function 9
> +
> + If (LEqual(GESF, 9))
> + {
> +
> + //<TODO> An OEM may elect to implement this method. In that case,
> + // the input values must be saved into non-volatile storage for
> + // parsing during the next boot. The following Sample code is Intel
> + // validated implementation.
> +
> + And(PARM, 0xFF, IBTT) // Save the boot display to NVS
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Reserved, "Critical failure"
> + }
> +
> + // Set Panel Details: Sub-function 10 (0Ah)
> +
> + If (LEqual(GESF, 10))
> + {
> +
> + //<TODO> An OEM may elect to implement this method. In that case,
> + // the input values must be saved into non-volatile storage for
> + // parsing during the next boot. The following Sample code is Intel
> + // validated implementation.
> +
> + // Set the panel-related NVRAM variables based the input from the driver.
> +
> + And(PARM, 0xFF, IPSC)
> +
> + // Change panel type if a change is requested by the driver (Change if
> + // panel type input is non-zero). Zero=No change requested.
> +
> + If(And(ShiftRight(PARM, 8), 0xFF))
> + {
> + And(ShiftRight(PARM, 8), 0xFF, IPAT)
> + Decrement(IPAT) // 0 = no change, so fit to CMOS map
> + }
> + And(ShiftRight(PARM, 18), 0x3, IBLC)
> + And(ShiftRight(PARM, 20), 0x7, IBIA)
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Success
> + }
> +
> + // Set Internal Graphics: Sub-function 11 (0Bh)
> +
> + If (LEqual(GESF, 11))
> + {
> +
> + //<TODO> An OEM may elect to implement this method. In that case,
> + // the input values must be saved into non-volatile storage for
> + // parsing during the next boot. The following Sample code is Intel
> + // validated implementation.
> +
> + And(ShiftRight(PARM, 1), 1, IF1E) // Program the function 1 option
> +
> + // Fixed memory/DVMT memory
> +
> + And(ShiftRight(PARM, 17), 0xF, IDMS) // Program DVMT/fixed memory
> size
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Success
> + }
> +
> + // Post-Hires to DOS FS: Sub-function 16 (10h)
> +
> + If (LEqual(GESF, 16))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // APM Complete: Sub-function 17 (11h)
> +
> + If (LEqual(GESF, 17))
> + {
> +
> + Store(ShiftLeft(LIDS, 8), PARM) // Report the lid state
> + Add(PARM, 0x100, PARM) // Adjust the lid state, 0 = Unknown
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Set Spread Spectrum Clocks: Sub-function 18 (12h)
> +
> + If (LEqual(GESF, 18))
> + {
> +
> + //<TODO> An OEM may elect to implement this method. In that case,
> + // the input values must be saved into non-volatile storage for
> + // parsing during the next boot. The following Sample code is Intel
> + // validated implementation.
> +
> + If(And(PARM, 1))
> + {
> + If(LEqual(ShiftRight(PARM, 1), 1))
> + {
> + Store(1, ISSC) // Enable HW SSC, only for clock 1
> + }
> + Else
> + {
> + Store(Zero, GESF)
> + Return(CRIT) // Failure, as the SSC clock must be 1
> + }
> + }
> + Else
> + {
> + Store(0, ISSC) // Disable SSC
> + }
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Success
> + }
> +
> + // Post VBE/PM Callback: Sub-function 19 (13h)
> +
> + If (LEqual(GESF, 19))
> + {
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Not supported, but no failure
> + }
> +
> + // Set PAVP Data: Sub-function 20 (14h)
> +
> + If (LEqual(GESF, 20))
> + {
> + And(PARM, 0xF, PAVP) // Store PAVP info
> + Store(Zero, GESF) // Clear the exit parameter
> + Store(Zero, PARM)
> + Return(SUCC) // Success
> + }
> +
> + // A call to a reserved "System BIOS callbacks" function was received
> +
> + Store(Zero, GESF) // Clear the exit parameter
> + Return(SUCC) // Reserved, "Critical failure"
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOpRn.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOpRn.ASL
> new file mode 100644
> index 0000000000..8575fbfe6c
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOpRn.ASL
> @@ -0,0 +1,299 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + IgdOpRn.ASL
> +
> +Abstract:
> +
> + IGD OpRegion/Software SCI Reference Code for the Baytrail Family.
> + This file contains the interrupt handler code for the Integrated
> + Graphics Device (IGD) OpRegion/Software SCI mechanism.
> +
> +--*/
> +
> +
> +//NOTES:
> +//
> +// (1) The code contained in this file inherits the scope in which it
> +// was included. So BIOS developers must be sure to include this
> +// file in the scope associated with the graphics device
> +// (ex. \_SB.PCI0.GFX0).
> +// (2) Create a _L06 method under the GPE scope to handle the event
> +// generated by the graphics driver. The _L06 method must call
> +// the GSCI method in this file.
> +// (3) The MCHP operation region assumes that _ADR and _BBN names
> +// corresponding to bus 0, device0, function 0 have been declared
> +// under the PCI0 scope.
> +// (4) Before the first execution of the GSCI method, the base address
> +// of the GMCH SCI OpRegion must be programmed where the driver can
> +// access it. A 32bit scratch register at 0xFC in the IGD PCI
> +// configuration space (B0/D2/F0/R0FCh) is used for this purpose.
> +
> +// Define an OperationRegion to cover the GMCH PCI configuration space
> as
> +// described in the IGD OpRegion specificiation.
> +
> +// Define an OperationRegion to cover the IGD PCI configuration space as
> +// described in the IGD OpRegion specificiation.
> +
> +OperationRegion(IGDP, PCI_Config,0x00,0x100)
> +Field(IGDP, AnyAcc, NoLock, Preserve)
> +{
> + Offset(0x10), // GTTMMADR
> + MADR, 32,
> + Offset(0x50), // GMCH Graphics Control Register
> + , 1,
> + GIVD, 1, // IGD VGA disable bit
> + , 1,
> + GUMA, 5, // Stolen memory size
> + , 8,
> + Offset(0x54),
> + , 4,
> + GMFN, 1, // Gfx function 1 enable
> + , 27,
> + Offset(0x5C), // Stolen Memory Base Address
> + GSTM, 32,
> + Offset(0xE0), // Reg 0xE8, SWSCI control register
> + GSSE, 1, // Graphics SCI event (1=event pending)
> + GSSB, 14, // Graphics SCI scratchpad bits
> + GSES, 1, // Graphics event select (1=SCI)
> + Offset(0xE4),
> + ASLE, 8, // Reg 0xE4, ASLE interrupt register
> + , 24, // Only use first byte of ASLE reg
> + Offset(0xFC),
> + ASLS, 32, // Reg 0xFC, Address of the IGD OpRegion
> +}
> +
> +Method (MCHK, 0, Serialized)
> +{
> +
> + If (LNotEqual (MADR, 0xFFFFFFFF))
> + {
> + OperationRegion(IGMM,SystemMemory,MADR,0x3000)
> + Field(IGMM,AnyAcc, NoLock, Preserve)
> + {
> + Offset(0X20C8),
> + , 4,
> + DCFE, 4, // DISPLAY_CLOCK_FREQUENCY_ENCODING
> + }
> + }
> +}
> +
> +
> +// Define an OperationRegion to cover the IGD OpRegion layout.
> +
> +OperationRegion(IGDM, SystemMemory, ASLB, 0x2000)
> +Field(IGDM, AnyAcc, NoLock, Preserve)
> +{
> +
> + // OpRegion Header
> +
> + SIGN, 128, // Signature-"IntelGraphicsMem"
> + SIZE, 32, // OpRegion Size
> + OVER, 32, // OpRegion Version
> + SVER, 256, // System BIOS Version
> + VVER, 128, // VBIOS Version
> + GVER, 128, // Driver version
> + MBOX, 32, // Mailboxes supported
> + DMOD, 32, // Driver Model
> + PCON, 32, // 96, Platform Configuration
> +
> + // OpRegion Mailbox 1 (Public ACPI Methods)
> + // Note: Mailbox 1 is normally reserved for desktop platforms.
> +
> + Offset(0x100),
> + DRDY, 32, // Driver readiness (ACPI notification)
> + CSTS, 32, // Notification status
> + CEVT, 32, // Current event
> + Offset(0x120),
> + DIDL, 32, // Supported display device ID list
> + DDL2, 32, // Allows for 8 devices
> + DDL3, 32,
> + DDL4, 32,
> + DDL5, 32,
> + DDL6, 32,
> + DDL7, 32,
> + DDL8, 32,
> + CPDL, 32, // Currently present display list
> + CPL2, 32, // Allows for 8 devices
> + CPL3, 32,
> + CPL4, 32,
> + CPL5, 32,
> + CPL6, 32,
> + CPL7, 32,
> + CPL8, 32,
> + CAD1, 32, // Currently active display list
> + CAL2, 32, // Allows for 8 devices
> + CAL3, 32,
> + CAL4, 32,
> + CAL5, 32,
> + CAL6, 32,
> + CAL7, 32,
> + CAL8, 32,
> + NADL, 32, // Next active display list
> + NDL2, 32, // Allows for 8 devices
> + NDL3, 32,
> + NDL4, 32,
> + NDL5, 32,
> + NDL6, 32,
> + NDL7, 32,
> + NDL8, 32,
> + ASLP, 32, // ASL sleep timeout
> + TIDX, 32, // Toggle table index
> + CHPD, 32, // Current hot plug enable indicator
> + CLID, 32, // Current lid state indicator
> + CDCK, 32, // Current docking state indicator
> + SXSW, 32, // Display switch notify on resume
> + EVTS, 32, // Events supported by ASL (diag only)
> + CNOT, 32, // Current OS notifications (diag only)
> + NRDY, 32,
> +
> + // OpRegion Mailbox 2 (Software SCI Interface)
> +
> + Offset(0x200), // SCIC
> + SCIE, 1, // SCI entry bit (1=call unserviced)
> + GEFC, 4, // Entry function code
> + GXFC, 3, // Exit result
> + GESF, 8, // Entry/exit sub-function/parameter
> + , 16, // SCIC[31:16] reserved
> + Offset(0x204), // PARM
> + PARM, 32, // PARM register (extra parameters)
> + DSLP, 32, // Driver sleep time out
> +
> + // OpRegion Mailbox 3 (BIOS to Driver Notification)
> + // Note: Mailbox 3 is normally reserved for desktop platforms.
> +
> + Offset(0x300),
> + ARDY, 32, // Driver readiness (power conservation)
> + ASLC, 32, // ASLE interrupt command/status
> + TCHE, 32, // Technology enabled indicator
> + ALSI, 32, // Current ALS illuminance reading
> + BCLP, 32, // Backlight brightness
> + PFIT, 32, // Panel fitting state or request
> + CBLV, 32, // Current brightness level
> + BCLM, 320, // Backlight brightness level duty cycle mapping table
> + CPFM, 32, // Current panel fitting mode
> + EPFM, 32, // Enabled panel fitting modes
> + PLUT, 592, // Optional. 74-byte Panel LUT Table
> + PFMB, 32, // Optional. PWM Frequency and Minimum
> Brightness
> + CCDV, 32, // Optional. Gamma, Brightness, Contrast values.
> + PCFT, 32, // Optional. Power Conservation Features
> +
> + Offset(0x3B6),
> + STAT, 32, // Status register
> +
> + // OpRegion Mailbox 4 (VBT)
> +
> + Offset(0x400),
> + GVD1, 0xC000, // 6K bytes maximum VBT image
> +
> + // OpRegion Mailbox 5 (BIOS to Driver Notification Extension)
> +
> + Offset(0x1C00),
> + PHED, 32, // Panel Header
> + BDDC, 2048, // Panel EDID (Max 256 bytes)
> +
> +}
> +
> +
> +
> +// Convert boot display type into a port mask.
> +
> +Name (DBTB, Package()
> +{
> + 0x0000, // Automatic
> + 0x0007, // Port-0 : Integrated CRT
> + 0x0038, // Port-1 : DVO-A, or Integrated LVDS
> + 0x01C0, // Port-2 : SDVO-B, or SDVO-B/C
> + 0x0E00, // Port-3 : SDVO-C
> + 0x003F, // [CRT + DVO-A / Integrated LVDS]
> + 0x01C7, // [CRT + SDVO-B] or [CRT + SDVO-B/C]
> + 0x0E07, // [CRT + SDVO-C]
> + 0x01F8, // [DVO-A / Integrated LVDS + SDVO-B]
> + 0x0E38, // [DVO-A / Integrated LVDS + SDVO-C]
> + 0x0FC0, // [SDVO-B + SDVO-C]
> + 0x0000, // Reserved
> + 0x0000, // Reserved
> + 0x0000, // Reserved
> + 0x0000, // Reserved
> + 0x0000, // Reserved
> + 0x7000, // Port-4: Integrated TV
> + 0x7007, // [Integrated TV + CRT]
> + 0x7038, // [Integrated TV + LVDS]
> + 0x71C0, // [Integrated TV + DVOB]
> + 0x7E00 // [Integrated TV + DVOC]
> +})
> +
> +// Core display clock value table.
> +
> +Name (CDCT, Package()
> +{
> + Package() {160},
> + Package() {200},
> + Package() {267},
> + Package() {320},
> + Package() {356},
> + Package() {400},
> +})
> +
> +// Defined exit result values:
> +
> +Name (SUCC, 1) // Exit result: Success
> +Name (NVLD, 2) // Exit result: Invalid parameter
> +Name (CRIT, 4) // Exit result: Critical failure
> +Name (NCRT, 6) // Exit result: Non-critical failure
> +
> +
> +/*********************************************************
> ***************;
> +;*
> +;* Name: GSCI
> +;*
> +;* Description: Handles an SCI generated by the graphics driver. The
> +;* PARM and SCIC input fields are parsed to determine the
> +;* functionality requested by the driver. GBDA or SBCB
> +;* is called based on the input data in SCIC.
> +;*
> +;* Usage: The method must be called in response to a GPE 06 event
> +;* which will be generated by the graphics driver.
> +;* Ex: Method(\_GPE._L06) {Return(\_SB.PCI0.GFX0.GSCI())}
> +;*
> +;* Input: PARM and SCIC are indirect inputs
> +;*
> +;* Output: PARM and SIC are indirect outputs
> +;*
> +;* References: GBDA (Get BIOS Data method), SBCB (System BIOS Callback
> +;* method)
> +;*
> +;*********************************************************
> ***************/
> +
> +Method (GSCI, 0, Serialized)
> +{
> + Include("IgdOGBDA.ASL") // "Get BIOS Data" Functions
> + Include("IgdOSBCB.ASL") // "System BIOS CallBacks"
> +
> + If (LEqual(GEFC, 4))
> + {
> + Store(GBDA(), GXFC) // Process Get BIOS Data functions
> + }
> +
> + If (LEqual(GEFC, 6))
> + {
> + Store(SBCB(), GXFC) // Process BIOS Callback functions
> + }
> +
> + Store(0, GEFC) // Wipe out the entry function code
> + Store(1, SCIS) // Clear the GUNIT SCI status bit in PCH ACPI I/O
> space.
> + Store(0, GSSE) // Clear the SCI generation bit in PCI space.
> + Store(0, SCIE) // Clr SCI serviced bit to signal completion
> +
> + Return(Zero)
> +}
> +
> +// Include MOBLFEAT.ASL for mobile systems only. Remove for desktop.
> +Include("IgdOMOBF.ASL") // IGD SCI mobile features
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IoTVirtualDevice.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IoTVirtualDevice.asl
> new file mode 100644
> index 0000000000..320b36ffb2
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IoTVirtualDevice.asl
> @@ -0,0 +1,171 @@
> +/** @file
> +Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +Device(IOTD) {
> + Name(_HID, "MSFT8000")
> + Name(_CID, "MSFT8000")
> +
> + Name(_CRS, ResourceTemplate() {
> + // Index 0
> + SPISerialBus( // Pin 5, 7, 9 , 11 of JP1 for SIO_SPI
> + 1, // Device selection
> + PolarityLow, // Device selection polarity
> + FourWireMode, // wiremode
> + 8, // databit len
> + ControllerInitiated, // slave mode
> + 8000000, // Connection speed
> + ClockPolarityLow, // Clock polarity
> + ClockPhaseSecond, // clock phase
> + "\\_SB.SPI1", // ResourceSource: SPI bus controller name
> + 0, // ResourceSourceIndex
> + ResourceConsumer, // Resource usage
> + JSPI, // DescriptorName: creates name for offset of resource
> descriptor
> + ) // Vendor Data
> +
> + // Index 1
> + I2CSerialBus( // Pin 13, 15 of JP1, for SIO_I2C5 (signal)
> + 0x00, // SlaveAddress: bus address (TBD)
> + , // SlaveMode: default to ControllerInitiated
> + 400000, // ConnectionSpeed: in Hz
> + , // Addressing Mode: default to 7 bit
> + "\\_SB.I2C6", // ResourceSource: I2C bus controller name (For
> MinnowBoard Max, hardware I2C5(0-based) is reported as ACPI I2C6(1-
> based))
> + ,
> + ,
> + JI2C, // Descriptor Name: creates name for offset of resource
> descriptor
> + ) // VendorData
> +
> + // Index 2
> + UARTSerialBus( // Pin 17, 19 of JP1, for SIO_UART2
> + 115200, // InitialBaudRate: in bits ber second
> + , // BitsPerByte: default to 8 bits
> + , // StopBits: Defaults to one bit
> + 0xfc, // LinesInUse: 8 1-bit flags to declare line enabled
> + , // IsBigEndian: default to LittleEndian
> + , // Parity: Defaults to no parity
> + , // FlowControl: Defaults to no flow control
> + 32, // ReceiveBufferSize
> + 32, // TransmitBufferSize
> + "\\_SB.URT2", // ResourceSource: UART bus controller name
> + ,
> + ,
> + UAR2, // DescriptorName: creates name for offset of resource
> descriptor
> + )
> +
> + // Index 3
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO2",) {0}
> // Pin 21 of JP1 (GPIO_S5[00])
> + // Index 4
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO2",)
> {0}
> +
> + // Index 5
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO2",) {1}
> // Pin 23 of JP1 (GPIO_S5[01])
> + // Index 6
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO2",)
> {1}
> +
> + // Index 7
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO2",) {2}
> // Pin 25 of JP1 (GPIO_S5[02])
> + // Index 8
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO2",)
> {2}
> +
> + // Index 9
> + UARTSerialBus( // Pin 6, 8, 10, 12 of JP1, for SIO_UART1
> + 115200, // InitialBaudRate: in bits ber second
> + , // BitsPerByte: default to 8 bits
> + , // StopBits: Defaults to one bit
> + 0xfc, // LinesInUse: 8 1-bit flags to declare line enabled
> + , // IsBigEndian: default to LittleEndian
> + , // Parity: Defaults to no parity
> + FlowControlHardware, // FlowControl: Defaults to no flow control
> + 32, // ReceiveBufferSize
> + 32, // TransmitBufferSize
> + "\\_SB.URT1", // ResourceSource: UART bus controller name
> + ,
> + ,
> + UAR1, // DescriptorName: creates name for offset of resource
> descriptor
> + )
> +
> + // Index 10
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {62}
> // Pin 14 of JP1 (GPIO_SC[62])
> + // Index 11
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {62}
> +
> + // Index 12
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {63}
> // Pin 16 of JP1 (GPIO_SC[63])
> + // Index 13
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {63}
> +
> + // Index 14
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {65}
> // Pin 18 of JP1 (GPIO_SC[65])
> + // Index 15
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {65}
> +
> + // Index 16
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {64}
> // Pin 20 of JP1 (GPIO_SC[64])
> + // Index 17
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {64}
> +
> + // Index 18
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {94}
> // Pin 22 of JP1 (GPIO_SC[94])
> + // Index 19
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {94}
> +
> + // Index 20
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {95}
> // Pin 24 of JP1 (GPIO_SC[95])
> + // Index 21
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {95}
> +
> + // Index 22
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",) {54}
> // Pin 26 of JP1 (GPIO_SC[54])
> + // Index 23
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 0,"\\_SB.GPO0",)
> {54}
> + })
> +
> + Name(_DSD, Package() {
> + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
> + Package(1) { // Just one Property for IOT (at this time)
> + Package(2) { //The �symbolic-identifiers� property
> + "symbolic-identifiers",
> + Package() { //Contains all the <resource index, symbolic-
> identifier> pairs
> + 0, "SPI0",
> + 1, "I2C5",
> + 2, "UART2",
> + 3, 21, // Pin 21 of JP1 (GPIO_S5[00])
> + 4, 21, // Pin 21 for separate resource.
> + 5, 23, // Pin 23 of JP1 (GPIO_S5[01])
> + 6, 23,
> + 7, 25, // Pin 25 of JP1 (GPIO_S5[02])
> + 8, 25,
> + 9, "UART1",
> + 10, 14, // Pin 14 of JP1 (GPIO_SC[62])
> + 11, 14,
> + 12, 16, // Pin 16 of JP1 (GPIO_SC[63])
> + 13, 16,
> + 14, 18, // Pin 18 of JP1 (GPIO_SC[65])
> + 15, 18,
> + 16, 20, // Pin 20 of JP1 (GPIO_SC[64])
> + 17, 20,
> + 18, 22, // Pin 22 of JP1 (GPIO_SC[94])
> + 19, 22,
> + 20, 24, // Pin 24 of JP1 (GPIO_SC[95])
> + 21, 24,
> + 22, 26, // Pin 26 of JP1 (GPIO_SC[54])
> + 23, 26
> + }
> + }
> + }
> + })
> +
> + Method(_STA,0,Serialized) {
> +
> + //
> + // Only report IoT virtual device when all pins' configuration follows
> MSFT's datasheet.
> + //
> + If (LEqual(IOT, 1)) {
> + Return (0xF)
> + }
> +
> + Return (0x0)
> + }
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LPC_DEV.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LPC_DEV.ASL
> new file mode 100644
> index 0000000000..7367f4c77c
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LPC_DEV.ASL
> @@ -0,0 +1,151 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +Device(FWHD) // Firmware Hub Device
> +{
> + Name(_HID,EISAID("INT0800"))
> +
> + Name(_CRS,ResourceTemplate()
> + {
> + Memory32Fixed(ReadOnly,0xFF000000,0x1000000)
> + })
> +}
> +
> +Device(IPIC) // 8259 PIC
> +{
> + Name(_HID,EISAID("PNP0000"))
> +
> + Name(_CRS,ResourceTemplate()
> + {
> + IO(Decode16,0x20,0x20,0x01,0x02)
> + IO(Decode16,0x24,0x24,0x01,0x02)
> + IO(Decode16,0x28,0x28,0x01,0x02)
> + IO(Decode16,0x2C,0x2C,0x01,0x02)
> + IO(Decode16,0x30,0x30,0x01,0x02)
> + IO(Decode16,0x34,0x34,0x01,0x02)
> + IO(Decode16,0x38,0x38,0x01,0x02)
> + IO(Decode16,0x3C,0x3C,0x01,0x02)
> + IO(Decode16,0xA0,0xA0,0x01,0x02)
> + IO(Decode16,0xA4,0xA4,0x01,0x02)
> + IO(Decode16,0xA8,0xA8,0x01,0x02)
> + IO(Decode16,0xAC,0xAC,0x01,0x02)
> + IO(Decode16,0xB0,0xB0,0x01,0x02)
> + IO(Decode16,0xB4,0xB4,0x01,0x02)
> + IO(Decode16,0xB8,0xB8,0x01,0x02)
> + IO(Decode16,0xBC,0xBC,0x01,0x02)
> + IO(Decode16,0x4D0,0x4D0,0x01,0x02)
> + IRQNoFlags() {2}
> + })
> +}
> +
> +Device(LDRC) // LPC Device Resource Consumption
> +{
> + Name(_HID,EISAID("PNP0C02"))
> +
> + Name(_UID,2)
> +
> + Name(_CRS,ResourceTemplate()
> + {
> + IO(Decode16,0x4E,0x4E,0x1,0x02) // LPC Slot Access.
> + IO(Decode16,0x61,0x61,0x1,0x1) // NMI Status.
> + IO(Decode16,0x63,0x63,0x1,0x1) // Processor I/F.
> + IO(Decode16,0x65,0x65,0x1,0x1) // Processor I/F.
> + IO(Decode16,0x67,0x67,0x1,0x1) // Processor I/F.
> + IO(Decode16,0x70,0x70,0x1,0x1) // NMI Enable.
> + IO(Decode16,0x80,0x80,0x1,0x10) // Postcode.
> + IO(Decode16,0x92,0x92,0x1,0x1) // Processor I/F.
> + IO(Decode16,0xB2,0xB2,0x01,0x02) // Software SMI.
> + IO(Decode16,0x680,0x680,0x1,0x20) // 32 Byte I/O.
> + IO(Decode16,0x400,0x400,0x1,0x80) // ACPI Base.
> + IO(Decode16,0x500,0x500,0x1,0xFF) // GPIO Base.
> + })
> +}
> +
> +Device(TIMR) // 8254 Timer
> +{
> + Name(_HID,EISAID("PNP0100"))
> +
> + Name(_CRS,ResourceTemplate()
> + {
> + IO(Decode16,0x40,0x40,0x01,0x04)
> + IO(Decode16,0x50,0x50,0x10,0x04)
> + IRQNoFlags() {0}
> + })
> +}
> +
> +Device(IUR3) // Internal UART
> +{
> + Name(_HID, EISAID("PNP0501"))
> +
> + Name(_UID,1)
> +
> + // Status Method for internal UART
> +
> + Method(_STA,0,Serialized)
> + {
> + // Only report resources to the OS if internal UART is
> + // not set to Disabled in BIOS Setup.
> +
> + If(LEqual(USEL,0))
> + {
> + If(LEqual(PU1E,1))
> + {
> + Store(1,UI3E) // Enable IRQ3 for UART
> + Store(1,UI4E) // Enable IRQ4 for UART
> + Store(1,C1EN) // Enable UART
> + Return(0x000F)
> + }
> + }
> +
> + Return(0x0000)
> + }
> +
> + // Disable Method for internal UART
> +
> + Method(_DIS,0,Serialized)
> + {
> + Store(0,UI3E)
> + Store(0,UI4E)
> + Store(0,C1EN)
> + }
> +
> + // Current Resource Setting Method for internal UART
> +
> + Method(_CRS,0,Serialized)
> + {
> + // Create the Buffer that stores the Resources to
> + // be returned.
> +
> + Name(BUF0,ResourceTemplate()
> + {
> + IO(Decode16,0x03F8,0x03F8,0x01,0x08)
> + IRQNoFlags() {3}
> + })
> +
> + Name(BUF1,ResourceTemplate()
> + {
> + IO(Decode16,0x03F8,0x03F8,0x01,0x08)
> + IRQNoFlags() {4}
> + })
> +
> + If (LLessEqual(SRID, 0x04))
> + {
> + Return(BUF0)
> + } Else
> + {
> + Return(BUF1)
> + }
> + }
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LpcB.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LpcB.asl
> new file mode 100644
> index 0000000000..157c149d0a
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/LpcB.asl
> @@ -0,0 +1,59 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +// LPC Bridge - Device 31, Function 0
> +// Define the needed LPC registers used by ASL.
> +
> +scope(\_SB)
> +{
> + OperationRegion(ILBR, SystemMemory, \IBAS, 0x8C)
> + Field(ILBR, AnyAcc, NoLock, Preserve)
> + {
> + Offset(0x08), // 0x08
> + PARC, 8,
> + PBRC, 8,
> + PCRC, 8,
> + PDRC, 8,
> + PERC, 8,
> + PFRC, 8,
> + PGRC, 8,
> + PHRC, 8,
> + Offset(0x88), // 0x88
> + , 3,
> + UI3E, 1,
> + UI4E, 1
> + }
> +
> + Include ("98_LINK.ASL")
> +}
> +
> +OperationRegion(LPC0, PCI_Config, 0x00, 0xC0)
> +Field(LPC0, AnyAcc, NoLock, Preserve)
> +{
> + Offset(0x08), // 0x08
> + SRID, 8, // Revision ID
> + Offset(0x080), // 0x80
> + C1EN, 1, // COM1 Enable
> + , 31
> +}
> +
> +
> +Include ("LPC_DEV.ASL")
> +
> +
> +
> +
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Lpit/Lpit.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Lpit/Lpit.aslc
> new file mode 100644
> index 0000000000..9847ec3a12
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Lpit/Lpit.aslc
> @@ -0,0 +1,223 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +--*/
> +
> +//
> +// Include files
> +//
> +
> +#include <PiDxe.h>
> +#include <IndustryStandard/Acpi50.h>
> +
> +
> +
> +//
> +// LPIT Definitions
> +//
> +
> +#define EFI_ACPI_LOW_POWER_IDLE_TABLE_REVISION 0x1
> +
> +//
> +// Ensure proper structure formats
> +//
> +#pragma pack(1)
> +
> +typedef union _EFI_ACPI_LPI_STATE_FLAGS {
> + struct {
> + UINT32 Disabled :1;
> + UINT32 CounterUnavailable :1;
> + UINT32 Reserved :30;
> + };
> + UINT32 AsUlong;
> +} EFI_ACPI_LPI_STATE_FLAGS, *PEFI_ACPI_LPI_STATE_FLAGS;
> +
> +// Only Mwait LPI here:
> +
> +typedef struct _EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR {
> + UINT32 Type; // offset: 0
> + UINT32 Length; // offset: 4
> + UINT16 UniqueId; // offset: 8
> + UINT8 Reserved[2]; // offset: 9
> + EFI_ACPI_LPI_STATE_FLAGS Flags; // offset: 12
> + EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE EntryTrigger; // offset: 16
> + UINT32 Residency; // offset: 28
> + UINT32 Latency; // offset: 32
> + EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE ResidencyCounter; //
> offset: 36
> + UINT64 ResidencyCounterFrequency; //offset: 48
> +} EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR;
> +
> +
> +//
> +// Defines for LPIT table, some are VLV specific
> +//
> +
> +
> +// signature "LPIT"
> +#define EFI_ACPI_LOW_POWER_IDLE_TABLE_SIGNATURE 0x5449504c
> +
> +#define EFI_ACPI_OEM_LPIT_REVISION 0x00000000
> +
> +#define EFI_ACPI_LOW_POWER_IDLE_MWAIT_TYPE 0x0
> +#define EFI_ACPI_LOW_POWER_IDLE_DEFAULT_FLAG 0x0
> +#define EFI_ACPI_LOW_POWER_IDLE_RES_FREQ_8K 0x8000 // 32768
> +
> +//
> +// LPI state count (4 on VLV: S0ir, S0i1, S0i2, S0i3)
> +//
> +
> +#define EFI_ACPI_VLV_LPI_STATE_COUNT 0x4
> +
> +//
> +// LPI TRIGGER (HW C7 on VLV),
> +// TOFIX!!!
> +//
> +#define EFI_ACPI_VLV_LPI_TRIGGER {0x7F,0x1,0x2,0x0,0x64}
> +
> +//
> +// LPI residency counter (MMIO)
> +//
> +#define EFI_ACPI_VLV_LPI_RES_COUNTER0 {0x0,32,0x0,0x03,0xFED03080}
> +#define EFI_ACPI_VLV_LPI_RES_COUNTER1 {0x0,32,0x0,0x03,0xFED03084}
> +#define EFI_ACPI_VLV_LPI_RES_COUNTER2 {0x0,32,0x0,0x03,0xFED03088}
> +#define EFI_ACPI_VLV_LPI_RES_COUNTER3 {0x0,32,0x0,0x03,0xFED0308C}
> +
> +//
> +// LPI break-even residency in us - all match S0i3 residency
> +// Residency estimate: Latency x 3
> +//
> +#define EFI_ACPI_VLV_LPI_MIN_RES0 15000
> +#define EFI_ACPI_VLV_LPI_MIN_RES1 15000
> +#define EFI_ACPI_VLV_LPI_MIN_RES2 15000
> +#define EFI_ACPI_VLV_LPI_MIN_RES3 15000
> +
> +//
> +// LPI latency in us - all match S0i3 latency
> +//
> +#define EFI_ACPI_VLV_LPI_LATENCY0 5000
> +#define EFI_ACPI_VLV_LPI_LATENCY1 5000
> +#define EFI_ACPI_VLV_LPI_LATENCY2 5000
> +#define EFI_ACPI_VLV_LPI_LATENCY3 5000
> +
> +
> +//
> +// LPI ID
> +//
> +#define EFI_ACPI_VLV_LPI_UNIQUE_ID0 0
> +#define EFI_ACPI_VLV_LPI_UNIQUE_ID1 1
> +#define EFI_ACPI_VLV_LPI_UNIQUE_ID2 2
> +#define EFI_ACPI_VLV_LPI_UNIQUE_ID3 3
> +
> +//
> +// LPI ACPI table header
> +//
> +
> +
> +typedef struct _EFI_ACPI_LOW_POWER_IDLE_TABLE {
> + EFI_ACPI_DESCRIPTION_HEADER Header;
> + EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR
> LpiStates[EFI_ACPI_VLV_LPI_STATE_COUNT];
> +} EFI_ACPI_LOW_POWER_IDLE_TABLE;
> +
> +#pragma pack()
> +
> +EFI_ACPI_LOW_POWER_IDLE_TABLE Lpit = {
> +
> + //
> + // Header
> + //
> +
> +
> + EFI_ACPI_LOW_POWER_IDLE_TABLE_SIGNATURE,
> + sizeof (EFI_ACPI_LOW_POWER_IDLE_TABLE),
> + EFI_ACPI_LOW_POWER_IDLE_TABLE_REVISION ,
> +
> + //
> + // Checksum will be updated at runtime
> + //
> + 0x00,
> +
> + //
> + // It is expected that these values will be updated at runtime
> + //
> + ' ', ' ', ' ', ' ', ' ', ' ',
> +
> + 0,
> + EFI_ACPI_OEM_LPIT_REVISION,
> + 0,
> + 0,
> +
> +
> +
> + //
> + // Descriptor
> + //
> + {
> + {
> + EFI_ACPI_LOW_POWER_IDLE_MWAIT_TYPE,
> + sizeof(EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR),
> + EFI_ACPI_VLV_LPI_UNIQUE_ID0,
> + {0,0},
> + {EFI_ACPI_LOW_POWER_IDLE_DEFAULT_FLAG}, // Flags
> + EFI_ACPI_VLV_LPI_TRIGGER, //EntryTrigger
> + EFI_ACPI_VLV_LPI_MIN_RES0, //Residency
> + EFI_ACPI_VLV_LPI_LATENCY0, //Latency
> + EFI_ACPI_VLV_LPI_RES_COUNTER0, //ResidencyCounter
> + EFI_ACPI_LOW_POWER_IDLE_RES_FREQ_8K //Residency counter
> frequency
> + },
> + {
> + EFI_ACPI_LOW_POWER_IDLE_MWAIT_TYPE,
> + sizeof(EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR),
> + EFI_ACPI_VLV_LPI_UNIQUE_ID1,
> + {0,0},
> + {EFI_ACPI_LOW_POWER_IDLE_DEFAULT_FLAG}, // Flags
> + EFI_ACPI_VLV_LPI_TRIGGER, //EntryTrigger
> + EFI_ACPI_VLV_LPI_MIN_RES1, //Residency
> + EFI_ACPI_VLV_LPI_LATENCY1, //Latency
> + EFI_ACPI_VLV_LPI_RES_COUNTER1, //ResidencyCounter
> + EFI_ACPI_LOW_POWER_IDLE_RES_FREQ_8K //Residency counter
> frequency
> + },
> + {
> + EFI_ACPI_LOW_POWER_IDLE_MWAIT_TYPE,
> + sizeof(EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR),
> + EFI_ACPI_VLV_LPI_UNIQUE_ID2,
> + {0,0},
> + {EFI_ACPI_LOW_POWER_IDLE_DEFAULT_FLAG}, // Flags
> + EFI_ACPI_VLV_LPI_TRIGGER, //EntryTrigger
> + EFI_ACPI_VLV_LPI_MIN_RES2, //Residency
> + EFI_ACPI_VLV_LPI_LATENCY2, //Latency
> + EFI_ACPI_VLV_LPI_RES_COUNTER2, //ResidencyCounter
> + EFI_ACPI_LOW_POWER_IDLE_RES_FREQ_8K //Residency counter
> frequency
> + },
> + {
> + EFI_ACPI_LOW_POWER_IDLE_MWAIT_TYPE,
> + sizeof(EFI_ACPI_MWAIT_LPI_STATE_DESCRIPTOR),
> + EFI_ACPI_VLV_LPI_UNIQUE_ID3,
> + {0,0},
> + {EFI_ACPI_LOW_POWER_IDLE_DEFAULT_FLAG}, // Flags
> + EFI_ACPI_VLV_LPI_TRIGGER, //EntryTrigger
> + EFI_ACPI_VLV_LPI_MIN_RES3, //Residency
> + EFI_ACPI_VLV_LPI_LATENCY3, //Latency
> + EFI_ACPI_VLV_LPI_RES_COUNTER3, //ResidencyCounter
> + EFI_ACPI_LOW_POWER_IDLE_RES_FREQ_8K //Residency counter
> frequency
> + }
> + }
> +
> +};
> +
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&Lpit;
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt.h
> new file mode 100644
> index 0000000000..72eb44e900
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt.h
> @@ -0,0 +1,189 @@
> +/*++
> +
> +Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + Madt.h
> +
> +Abstract:
> +
> + This file describes the contents of the ACPI Multiple APIC Description
> + Table (MADT). Some additional ACPI values are defined in Acpi1_0.h and
> + Acpi2_0.h.
> + To make changes to the MADT, it is necessary to update the count for the
> + APIC structure being updated, and to modify table found in Madt.c.
> +
> +--*/
> +
> +#ifndef _MADT_H
> +#define _MADT_H
> +
> +//
> +// Statements that include other files
> +//
> +#include "AcpiTablePlatform.h"
> +#include <IndustryStandard/Acpi10.h>
> +#include <IndustryStandard/Acpi20.h>
> +#include <IndustryStandard/Acpi30.h>
> +#include "Platform.h"
> +
> +//
> +// MADT Definitions
> +//
> +#define EFI_ACPI_OEM_MADT_REVISION 0x00000000
> +//
> +// Multiple APIC Flags are defined in AcpiX.0.h
> +//
> +#define EFI_ACPI_1_0_MULTIPLE_APIC_FLAGS
> (EFI_ACPI_1_0_PCAT_COMPAT)
> +#define EFI_ACPI_2_0_MULTIPLE_APIC_FLAGS
> (EFI_ACPI_2_0_PCAT_COMPAT)
> +#define EFI_ACPI_3_0_MULTIPLE_APIC_FLAGS
> (EFI_ACPI_3_0_PCAT_COMPAT)
> +#define EFI_ACPI_4_0_MULTIPLE_APIC_FLAGS
> (EFI_ACPI_4_0_PCAT_COMPAT)
> +
> +//
> +// Define the number of each table type.
> +// This is where the table layout is modified.
> +//
> +#define EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT
> MAX_CPU_NUM
> +#define EFI_ACPI_LOCAL_APIC_NMI_COUNT MAX_CPU_NUM
> +#define EFI_ACPI_IO_APIC_COUNT 1
> +#define EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT 2
> +#define EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT 0
> +#define EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT 0
> +#define EFI_ACPI_IO_SAPIC_COUNT 0
> +#define EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT 0
> +#define EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT 0
> +
> +//
> +// MADT structure
> +//
> +//
> +// Ensure proper structure formats
> +//
> +#pragma pack(1)
> +//
> +// ACPI 1.0 Table structure
> +//
> +typedef struct {
> + EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
> +
> +#if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
> + EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE
> LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_IO_APIC_COUNT > 0
> + EFI_ACPI_1_0_IO_APIC_STRUCTURE
> IoApic[EFI_ACPI_IO_APIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
> + EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
> Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0
> + EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
> NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0
> + EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE
> LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];
> +#endif
> +
> +#if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0
> + EFI_ACPI_1_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
> LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];
> +#endif
> +
> +} EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
> +
> +//
> +// ACPI 2.0 Table structure
> +//
> +typedef struct {
> + EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
> +
> +#if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0
> + EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE
> LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_IO_APIC_COUNT > 0
> + EFI_ACPI_2_0_IO_APIC_STRUCTURE
> IoApic[EFI_ACPI_IO_APIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0
> + EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
> Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0
> + EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
> NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0
> + EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE
> LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];
> +#endif
> +
> +#if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0
> + EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
> LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_IO_SAPIC_COUNT > 0
> + EFI_ACPI_2_0_IO_SAPIC_STRUCTURE
> IoSapic[EFI_ACPI_IO_SAPIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0
> + EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE
> LocalSapic[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0
> + EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE
> PlatformInterruptSources[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_CO
> UNT];
> +#endif
> +
> +} EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
> +
> +//
> +// ACPI 3.0 Table structure
> +//
> +typedef struct {
> + EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER Header;
> +
> +#if EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT > 0 // Type 0x00
> + EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE
> LocalApic[EFI_ACPI_PROCESSOR_LOCAL_APIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_IO_APIC_COUNT > 0 // Type 0x01
> + EFI_ACPI_3_0_IO_APIC_STRUCTURE
> IoApic[EFI_ACPI_IO_APIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT > 0 // Type 0x02
> + EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
> Iso[EFI_ACPI_INTERRUPT_SOURCE_OVERRIDE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT > 0 // Type
> 0x03
> + EFI_ACPI_3_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
> NmiSource[EFI_ACPI_NON_MASKABLE_INTERRUPT_SOURCE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_LOCAL_APIC_NMI_COUNT > 0 // Type 0x04
> + EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE
> LocalApicNmi[EFI_ACPI_LOCAL_APIC_NMI_COUNT];
> +#endif
> +
> +#if EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT > 0 // Type 0x05
> + EFI_ACPI_3_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
> LocalApicOverride[EFI_ACPI_LOCAL_APIC_ADDRESS_OVERRIDE_COUNT];
> +#endif
> +
> +#if EFI_ACPI_IO_SAPIC_COUNT > 0 // Type 0x06
> + EFI_ACPI_3_0_IO_SAPIC_STRUCTURE
> IoSapic[EFI_ACPI_IO_SAPIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT > 0 // Type 0x07 : This
> table changes in madt 2.0
> + EFI_ACPI_3_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE
> LocalSapic[EFI_ACPI_PROCESSOR_LOCAL_SAPIC_COUNT];
> +#endif
> +
> +#if EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_COUNT > 0 // Type 0x08
> + EFI_ACPI_3_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE
> PlatformInterruptSources[EFI_ACPI_PLATFORM_INTERRUPT_SOURCES_CO
> UNT];
> +#endif
> +
> +} EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE;
> +
> +#pragma pack()
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt30.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt30.aslc
> new file mode 100644
> index 0000000000..926b32f512
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Madt/Madt30.aslc
> @@ -0,0 +1,178 @@
> +/*++
> +
> + Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Madt3.0.c
> +
> +Abstract:
> +
> + This file contains a structure definition for the ACPI 2.0 Multiple APIC
> + Description Table (MADT). Any changes to the MADT table require
> updating the
> + respective structure count in Madt.h and then adding the structure to the
> + MADT defined in this file. The table layout is defined in Madt.h and the
> + table contents are defined in Acpi3_0.h and Madt.h.
> +
> +--*/
> +
> +//
> +// Statements that include other files
> +//
> +#include "Madt.h"
> +#include <IndustryStandard/Acpi50.h>
> +
> +//
> +// Multiple APIC Description Table
> +//
> +EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
> + EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, //
> **Signatures are the same 1.0-3.0 because it says "APIC".
> + sizeof (EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE), //
> **Length
> + EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
> + //
> + // EFI_ACPI_3_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, //
> **Table Revision must be 2.0 for ACPI 3.0
> + // Checksum will be updated at runtime
> + //
> + 0x00, // **Check sum
> + //
> + // It is expected that these values will be programmed at runtime
> + //
> + ' ', // OEMID
> + ' ', // Creative way to
> + ' ', // make six bytes
> + ' ', // of space in
> + ' ', // a table for
> + ' ', // **OEMID
> + 0, // **OEM Table ID
> + EFI_ACPI_OEM_MADT_REVISION, // **OEM Revision
> + 0, // **Creator ID
> + 0, // **Creator Revision
> + //
> + // MADT specific fields
> + //
> + LOCAL_APIC_ADDRESS, // **Local APIC Address
> + EFI_ACPI_4_0_MULTIPLE_APIC_FLAGS, // **Flags
> + //
> + // Processor Local APIC Structure
> + // Correct processor order, Primary threads first then Hyper threads
> + // And correct APIC-ids
> + // This text below is included as a reference until Thurley is 100%:
> + // According to EDS the Local APIC ID is determined based of a bit structure
> + // Bit 24: Core ID Bit 25: Core Pair ID Bit 26-27: Reserved Bit 28-30: Socket ID
> Bit 31: Reserved
> + // 4 Sockets and 4 Cores per Socket.
> + // So possible LAPIC IDs 00, 01, 02, 03, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32,
> 33
> + // Static Entries 00, 10, 20, 30, 01, 11, 21, 31, 02, 12, 22, 32, 03, 13, 23, 33
> + // BSP needs to be first entry in table. Check before boot. If BSP non zero
> need to rotate the entries.
> + // Suppore BSP is LAPIC ID xy. Rotate the table by using formula [x + (y * 4)]
> + // So if BSP LAPIC ID is 21 then table rotated 6 times.
> + // End of Reference Text.
> + // Thurley is supposed to be 2 sockets, 4 cores, and hyperthreading
> available per each core.
> + // 2 (sockets) x 4 (cores) = 8 (processors non-HT), 8 (processors non-HT) x 2
> (HT/proc) = 16 (HT procs)
> + // Rhyme & reason of the ordering below. This is a best guess ordering for
> now,
> + // Thurley EPS may give better info on LAPIC numbers.
> + // Ordering was established to help dissipate heat across two sockets
> evenly.
> + // Since logical processor number only has to be unique, I followed
> + // a similar approach to high end servers and have the first digit of the
> LAPIC
> + // id the socket number.
> + //
> + EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC, // Type 0x00
> + sizeof (EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
> + 0x01, // Processor ID
> + 0x00, // Local APIC ID
> + 0x00000001, // Flags - Disabled (until initialized by
> platform driver)
> + EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC, // Type
> + sizeof (EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
> + 0x02, // Processor ID
> + 0x04, // Local APIC ID
> + 0x00000001, // Flags - Disabled (until initialized by
> platform driver)
> + EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC, // Type
> + sizeof (EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
> + 0x03, // Processor ID
> + 0x02, // Local APIC ID
> + 0x00000001, // Flags - Disabled (until initialized by
> platform driver)
> + EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC, // Type
> + sizeof (EFI_ACPI_3_0_PROCESSOR_LOCAL_APIC_STRUCTURE), // Length
> + 0x04, // Processor ID
> + 0x06, // Local APIC ID
> + 0x00000001, // Flags - Disabled (until initialized by
> platform driver)
> + //
> + // *************** IO APIC Structure ******************
> + //
> + //
> + //
> + // ************************** I/O APIC **************
> + //
> + EFI_ACPI_3_0_IO_APIC, // Type 0x01
> + sizeof (EFI_ACPI_3_0_IO_APIC_STRUCTURE), // Length
> + ICH_IOAPIC_ID, // IO APIC ID
> + EFI_ACPI_RESERVED_BYTE, // Reserved
> EFI_ACPI_RESERVED_BYTE
> + IO_APIC_ADDRESS, // IO APIC Address (physical) 0xFEC00000
> + 0x18 * 0, // Global System Interrupt Base
> +
> + //
> + // Interrupt Source Override Structure: Sample
> + //
> + // EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE, // Type 0x02
> + // sizeof (EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE),//
> Length
> + // 0x00, // Bus
> + // 0x00, // Source
> + // 0x00000000, // Global System Interrupt
> + // 0x0000, // Flags
> + //
> + // IRQ0=>IRQ2 Interrupt Source Override Structure
> + //
> + EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE, // Type 0x02
> + sizeof (EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE), //
> Length
> + 0x00, // Bus - ISA
> + 0x00, // Source - IRQ0
> + 0x00000002, // Global System Interrupt - IRQ2
> + 0x0000, // Flags - Conforms to specifications of the bus
> + //
> + // ISO (SCI Active High) Interrupt Source Override Structure
> + //
> + EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE, // Type 0x02
> + sizeof (EFI_ACPI_3_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE), //
> Length
> + 0x00, // Bus - ISA
> + 0x09, // Source - IRQ0
> + 0x00000009, // Global System Interrupt - IRQ2
> + 0x000D, // Flags - Level-tiggered, Active High
> +
> +
> +
> + EFI_ACPI_3_0_LOCAL_APIC_NMI, // Type
> + sizeof (EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE), // Length
> + 0x01, // ACPI Processor ID
> + 0x000D, // Flags - Level-tiggered, Active High
> + 0x01, // Local APIC LINT#
> + EFI_ACPI_3_0_LOCAL_APIC_NMI, // Type
> + sizeof (EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE), // Length
> + 0x02, // ACPI Processor ID
> + 0x000D, // Flags - Level-tiggered, Active High
> + 0x01, // Local APIC LINT#
> + EFI_ACPI_3_0_LOCAL_APIC_NMI, // Type
> + sizeof (EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE), // Length
> + 0x03, // ACPI Processor ID
> + 0x000D, // Flags - Level-tiggered, Active High
> + 0x01, // Local APIC LINT#
> + EFI_ACPI_3_0_LOCAL_APIC_NMI, // Type
> + sizeof (EFI_ACPI_3_0_LOCAL_APIC_NMI_STRUCTURE), // Length
> + 0x04, // ACPI Processor ID
> + 0x000D, // Flags - Level-tiggered, Active High
> + 0x01, // Local APIC LINT#
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&Madt;
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Mcfg/Mcfg.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Mcfg/Mcfg.aslc
> new file mode 100644
> index 0000000000..9373c542f6
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Mcfg/Mcfg.aslc
> @@ -0,0 +1,86 @@
> +/*++
> +
> + Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Mcfg.c
> +
> +Abstract:
> +
> + This file contains a structure definition for the ACPI Memory mapped
> + configuration space base address Description Table (MCFG). Any changes
> + to the MCFG table require updating the respective structure count in
> + Mcfg.h and then adding the structure to the MCFG defined in this file.
> + The table layout is defined in Mcfg.h and the table contents are defined
> + in McfgTable.h and Mcfg.h.
> +
> +--*/
> +
> +//
> +// Statements that include other files
> +//
> +#include <Mcfg.h>
> +
> +//
> +// MCFG Table definition
> +//
> +EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE
> MCFG = {
> +
> EFI_ACPI_3_0_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABL
> E_SIGNATURE,
> + sizeof
> (EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE),
> +
> EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_RE
> VISION,
> + //
> + // Checksum will be updated at runtime
> + //
> + 0x00,
> + //
> + // It is expected that these values will be programmed at runtime
> + //
> + ' ',
> + ' ',
> + ' ',
> + ' ',
> + ' ',
> + ' ',
> +
> + 0,
> + EFI_ACPI_OEM_MCFG_REVISION,
> + 0,
> + 0,
> + //
> + // Beginning of MCFG specific fields
> + //
> + EFI_ACPI_RESERVED_QWORD,
> + //
> + // Sample Memory Mapped Configuration Space Base Address Structure
> + //
> + // 0x0, // Base Address
> + // 0x0, // PCI Segment Group Number
> + // 0x0, // Start Bus Number
> + // 0x0, // End Bus Number
> + // EFI_ACPI_RESERVED_DWORD, // Reserved
> + //
> + // Memory Mapped Configuration Space Base Address Structure
> + //
> + 0x0, // Base Address, will be updated by AcpiPlatform
> + 0x0, // PCI Segment Group Number
> + 0x0, // Start Bus Number
> + PLATFORM_MAX_BUS_NUM, // End Bus Number
> + EFI_ACPI_RESERVED_DWORD, // Reserved
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&MCFG;
> +}
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PCI_DRC.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PCI_DRC.ASL
> new file mode 100644
> index 0000000000..a475040898
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PCI_DRC.ASL
> @@ -0,0 +1,90 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +
> +Scope (\_SB.PCI0)
> +{
> +
> + Device(PDRC) // PCI Device Resource Consumption
> + {
> + Name(_HID,EISAID("PNP0C02"))
> +
> + Name(_UID,1)
> +
> + Name(BUF0,ResourceTemplate()
> + {
> + //
> + // PCI Express BAR _BAS and _LEN will be updated in _CRS below
> according to B0:D0:F0:Reg.60h
> + // Forced hard code at the moment.
> + //
> + //Memory32Fixed(ReadWrite,0,0,PCIX) // PCIEX BAR
> + Memory32Fixed(ReadWrite,0x0E0000000,0x010000000,PCIX)
> +
> + //
> + // SPI BAR. Check if the hard code meets the real configuration.
> + // If not, dynamically update it like the _CRS method below.
> + //
> + Memory32Fixed(ReadWrite,0x0FED01000,0x01000,SPIB) // SPI BAR
> +
> + //
> + // PMC BAR. Check if the hard code meets the real configuration.
> + // If not, dynamically update it like the _CRS method below.
> + //
> + Memory32Fixed(ReadWrite,0x0FED03000,0x01000,PMCB) // PMC BAR
> +
> + //
> + // SMB BAR. Check if the hard code meets the real configuration.
> + // If not, dynamically update it like the _CRS method below.
> + //
> + Memory32Fixed(ReadWrite,0x0FED04000,0x01000,SMBB) // SMB BAR
> +
> + //
> + // IO BAR. Check if the hard code meets the real configuration.
> + // If not, dynamically update it like the _CRS method below.
> + //
> + Memory32Fixed(ReadWrite,0x0FED0C000,0x04000,IOBR) // IO BAR
> +
> + //
> + // ILB BAR. Check if the hard code meets the real configuration.
> + // If not, dynamically update it like the _CRS method below.
> + //
> + Memory32Fixed(ReadWrite,0x0FED08000,0x01000,ILBB) // ILB BAR
> +
> + //
> + // RCRB BAR _BAS will be updated in _CRS below according to
> B0:D31:F0:Reg.F0h
> + //
> + Memory32Fixed(ReadWrite,0x0FED1C000,0x01000,RCRB) // RCRB BAR
> +
> + //
> + // Local APIC range(0xFEE0_0000 to 0xFEEF_FFFF)
> + //
> + Memory32Fixed (ReadOnly, 0x0FEE00000, 0x0100000, LIOH)
> +
> + //
> + // MPHY BAR. Check if the hard code meets the real configuration.
> + // If not, dynamically update it like the _CRS method below.
> + //
> + Memory32Fixed(ReadWrite,0x0FEF00000,0x0100000,MPHB) // MPHY
> BAR
> + })
> +
> + Method(_CRS,0,Serialized)
> + {
> +
> + Return(BUF0)
> + }
> +
> + }
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Pch.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Pch.asl
> new file mode 100644
> index 0000000000..af8aceb515
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Pch.asl
> @@ -0,0 +1,686 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +Scope(\)
> +{
> + //
> + // Define VLV ABASE I/O as an ACPI operating region. The base address
> + // can be found in Device 31, Registers 40-43h.
> + //
> + OperationRegion(PMIO, SystemIo, \PMBS, 0x46)
> + Field(PMIO, ByteAcc, NoLock, Preserve)
> + {
> + , 8,
> + PWBS, 1, // Power Button Status
> + Offset(0x20),
> + , 13,
> + PMEB, 1, // PME_B0_STS
> + Offset(0x42), // General Purpose Control
> + , 1,
> + GPEC, 1
> + }
> + Field(PMIO, ByteAcc, NoLock, WriteAsZeros)
> + {
> + Offset(0x20), // GPE0 Status
> + , 4,
> + PSCI, 1, // PUNIT SCI Status
> + SCIS, 1 // GUNIT SCI Status
> + }
> +
> +
> +
> + //
> + // Define a Memory Region that will allow access to the PMC
> + // Register Block. Note that in the Intel Reference Solution, the PMC
> + // will get fixed up dynamically during POST.
> + //
> + OperationRegion(PMCR, SystemMemory, \PFDR, 0x04)// PMC Function
> Disable Register
> + Field(PMCR,DWordAcc,Lock,Preserve)
> + {
> + Offset(0x00), // Function Disable Register
> + L10D, 1, // (0) LPIO1 DMA Disable
> + L11D, 1, // (1) LPIO1 PWM #1 Disable
> + L12D, 1, // (2) LPIO1 PWM #2 Disable
> + L13D, 1, // (3) LPIO1 HS-UART #1 Disable
> + L14D, 1, // (4) LPIO1 HS-UART #2 Disable
> + L15D, 1, // (5) LPIO1 SPI Disable
> + , 2, // (6:7) Reserved
> + SD1D, 1, // (8) SCC SDIO #1 Disable
> + SD2D, 1, // (9) SCC SDIO #2 Disable
> + SD3D, 1, // (10) SCC SDIO #3 Disable
> + HSID, 1, // (11)
> + HDAD, 1, // (12) Azalia Disable
> + LPED, 1, // (13) LPE Disable
> + OTGD, 1, // (14) USB OTG Disable
> + , 1, // (15) USH Disable
> + , 1, // (16)
> + , 1, // (17)
> + , 1, // (18) USB Disable
> + , 1, // (19) SEC Disable
> + RP1D, 1, // (20) Root Port 0 Disable
> + RP2D, 1, // (21) Root Port 1 Disable
> + RP3D, 1, // (22) Root Port 2 Disable
> + RP4D, 1, // (23) Root Port 3 Disable
> + L20D, 1, // (24) LPIO2 DMA Disable
> + L21D, 1, // (25) LPIO2 I2C #1 Disable
> + L22D, 1, // (26) LPIO2 I2C #2 Disable
> + L23D, 1, // (27) LPIO2 I2C #3 Disable
> + L24D, 1, // (28) LPIO2 I2C #4 Disable
> + L25D, 1, // (29) LPIO2 I2C #5 Disable
> + L26D, 1, // (30) LPIO2 I2C #6 Disable
> + L27D, 1 // (31) LPIO2 I2C #7 Disable
> + }
> +
> +
> + OperationRegion(CLKC, SystemMemory, \PCLK, 0x18)// PMC CLK CTL
> Registers
> + Field(CLKC,DWordAcc,Lock,Preserve)
> + {
> + Offset(0x00), // PLT_CLK_CTL_0
> + CKC0, 2,
> + CKF0, 1,
> + , 29,
> + Offset(0x04), // PLT_CLK_CTL_1
> + CKC1, 2,
> + CKF1, 1,
> + , 29,
> + Offset(0x08), // PLT_CLK_CTL_2
> + CKC2, 2,
> + CKF2, 1,
> + , 29,
> + Offset(0x0C), // PLT_CLK_CTL_3
> + CKC3, 2,
> + CKF3, 1,
> + , 29,
> + Offset(0x10), // PLT_CLK_CTL_4
> + CKC4, 2,
> + CKF4, 1,
> + , 29,
> + Offset(0x14), // PLT_CLK_CTL_5
> + CKC5, 2,
> + CKF5, 1,
> + , 29,
> + }
> +} //end Scope(\)
> +
> +scope (\_SB)
> +{
> + Device(LPEA)
> + {
> + Name (_ADR, 0)
> + Name (_HID, "80860F28")
> + Name (_CID, "80860F28")
> + //Name (_CLS, Package (3) {0x04, 0x01, 0x00})
> + Name (_DDN, "Intel(R) Low Power Audio Controller - 80860F28")
> + Name (_SUB, "80867270")
> + Name (_UID, 1)
> + Name (_DEP, Package() {\_SB.I2C2.RTEK})
> + Name(_PR0,Package() {PLPE})
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If (LAnd(LAnd(LEqual(LPEE, 2), LEqual(LPED, 0)), LEqual(OSEL, 0)))
> + {
> + If(LEqual(LPAD, 1))
> + {
> + Return (0xF)
> + }
> + }
> + Return (0x0)
> + }
> +
> + Method (_DIS, 0x0, NotSerialized)
> + {
> + //Add a dummy disable function
> + }
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0xFE400000, 0x00200000, BAR0) // MMIO
> 1 - LPE MMIO
> + Memory32Fixed (ReadWrite, 0xFE830000, 0x00001000, BAR1) // MMIO
> 2 - Shadowed PCI Config Space
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00100000, BAR2) // LPE
> Memory Bar Allocate during post
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {24}
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {25}
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {26}
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {27}
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {28}
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {29}
> + GpioInt(Edge, ActiveBoth, ExclusiveAndWake, PullNone,
> 0,"\\_SB.GPO2") {28} // Audio jack interrupt
> + }
> + )
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + Store(LPE0, B0BA)
> + CreateDwordField(^RBUF, ^BAR1._BAS, B1BA)
> + Store(LPE1, B1BA)
> + CreateDwordField(^RBUF, ^BAR2._BAS, B2BA)
> + Store(LPE2, B2BA)
> + Return (RBUF)
> + }
> +
> + OperationRegion (KEYS, SystemMemory, LPE1, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> + PowerResource(PLPE, 0, 0) // Power Resource for LPEA
> + {
> + Method (_STA)
> + {
> + Return (1) // Power Resource is always available.
> + }
> +
> + Method (_ON)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + Method (_OFF)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + } // End PLPE
> + } // End "Low Power Engine Audio"
> +
> + Device(LPA2)
> + {
> + Name (_ADR, 0)
> + Name (_HID, "LPE0F28") // _HID: Hardware ID
> + Name (_CID, "LPE0F28") // _CID: Compatible ID
> + Name (_DDN, "Intel(R) SST Audio - LPE0F28") // _DDN: DOS Device Name
> + Name (_SUB, "80867270")
> + Name (_UID, 1)
> + Name (_DEP, Package() {\_SB.I2C2.RTEK})
> + Name(_PR0,Package() {PLPE})
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If (LAnd(LAnd(LEqual(LPEE, 2), LEqual(LPED, 0)), LEqual(OSEL, 1)))
> + {
> + If(LEqual(LPAD, 1))
> + {
> + Return (0xF)
> + }
> + }
> + Return (0x0)
> + }
> +
> + Method (_DIS, 0x0, NotSerialized)
> + {
> + //Add a dummy disable function
> + }
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00100000, BAR2) // LPE
> Memory Bar Allocate during post
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00000100, SHIM)
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00001000, MBOX)
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00014000, IRAM)
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00028000, DRAM)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {29}
> + Memory32Fixed (ReadWrite, 0xFE830000, 0x00001000, BAR1) // MMIO
> 2 - Shadowed PCI Config Space
> + }
> + )
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^SHIM._BAS, SHBA)
> + Add(LPE0, 0x140000, SHBA)
> + CreateDwordField(^RBUF, ^MBOX._BAS, MBBA)
> + Add(LPE0, 0x144000, MBBA)
> + CreateDwordField(^RBUF, ^IRAM._BAS, IRBA)
> + Add(LPE0, 0xC0000, IRBA)
> + CreateDwordField(^RBUF, ^DRAM._BAS, DRBA)
> + Add(LPE0, 0x100000, DRBA)
> + CreateDwordField(^RBUF, ^BAR1._BAS, B1BA)
> + Store(LPE1, B1BA)
> + CreateDwordField(^RBUF, ^BAR2._BAS, B2BA)
> + Store(LPE2, B2BA)
> + Return (RBUF)
> + }
> +
> + OperationRegion (KEYS, SystemMemory, LPE1, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> + PowerResource(PLPE, 0, 0) // Power Resource for LPEA
> + {
> + Method (_STA)
> + {
> + Return (1) // Power Resource is always available.
> + }
> +
> + Method (_ON)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + Method (_OFF)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + } // End PLPE
> +
> + Device (ADMA)
> + {
> + Name (_ADR, Zero) // _ADR: Address
> + Name (_HID, "DMA0F28") // _HID: Hardware ID
> + Name (_CID, "DMA0F28") // _CID: Compatible ID
> + Name (_DDN, "Intel(R) Audio DMA0 - DMA0F28") // _DDN: DOS Device
> Name
> + Name (_UID, One) // _UID: Unique ID
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00001000, DMA0) // LPE
> BASE + LPE DMA0 offset
> + Memory32Fixed (ReadWrite, 0x55AA55AA, 0x00001000, SHIM) // LPE
> BASE + LPE SHIM offset
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {24}
> + })
> +
> + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
> + {
> + CreateDwordField(^RBUF, ^DMA0._BAS, D0BA)
> + Add(LPE0, 0x98000, D0BA)
> + CreateDwordField(^RBUF, ^SHIM._BAS, SHBA)
> + Add(LPE0, 0x140000, SHBA)
> + Return (RBUF)
> + }
> + }
> + } // End "Low Power Engine Audio" for Android
> +}
> +
> +scope (\_SB.PCI0)
> +{
> +
> + //
> + // Serial ATA Host Controller - Device 19, Function 0
> + //
> +
> + Device(SATA)
> + {
> + Name(_ADR,0x00130000)
> + //
> + // SATA Methods pulled in via SSDT.
> + //
> +
> + OperationRegion(SATR, PCI_Config, 0x74,0x4)
> + Field(SATR,WordAcc,NoLock,Preserve)
> + {
> + Offset(0x00), // 0x74, PMCR
> + , 8,
> + PMEE, 1, //PME_EN
> + , 6,
> + PMES, 1 //PME_STS
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + Return(0xf)
> + }
> +
> + Method(_DSW, 3)
> + {
> + } // End _DSW
> + }
> +
> + //
> + // For eMMC 4.41 PCI mode in order to present non-removable device
> under Windows environment
> + //
> + Device(EM41)
> + {
> + Name(_ADR,0x00100000)
> + OperationRegion(SDIO, PCI_Config, 0x84,0x4)
> + Field(SDIO,WordAcc,NoLock,Preserve)
> + {
> + Offset(0x00), // 0x84, PMCR
> + , 8,
> + PMEE, 1, //PME_EN
> + , 6,
> + PMES, 1 //PME_STS
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If (LAnd(LEqual(PCIM, 1), LEqual(SD1D, 0)))
> + {
> + Return(0xF)
> + }
> + Else
> + {
> + Return(0x0)
> + }
> + }
> +
> + Method(_DSW, 3)
> + {
> + } // End _DSW
> +
> + Device (CARD)
> + {
> + Name (_ADR, 0x00000008)
> + Method(_RMV, 0x0, NotSerialized)
> + {
> + Return (0)
> + } // End _DSW
> + }
> + }
> +
> + //
> + // For eMMC 4.5 PCI mode in order to present non-removable device
> under Windows environment
> + //
> + Device(EM45)
> + {
> + Name(_ADR,0x00170000)
> + OperationRegion(SDIO, PCI_Config, 0x84,0x4)
> + Field(SDIO,WordAcc,NoLock,Preserve)
> + {
> + Offset(0x00), // 0x84, PMCR
> + , 8,
> + PMEE, 1, //PME_EN
> + , 6,
> + PMES, 1 //PME_STS
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If (LAnd(LEqual(PCIM, 1), LEqual(HSID, 0)))
> + {
> + Return(0xF)
> + }
> + Else
> + {
> + Return(0x0)
> + }
> + }
> +
> + Method(_DSW, 3)
> + {
> + } // End _DSW
> +
> + Device (CARD)
> + {
> + Name (_ADR, 0x00000008)
> + Method(_RMV, 0x0, NotSerialized)
> + {
> + Return (0)
> + } // End _DSW
> + }
> + }
> + //
> + // For SD Host Controller (Bus 0x00 : Dev 0x12 : Func 0x00) PCI mode in
> order to present non-removable device under Windows environment
> + //
> + Device(SD12)
> + {
> + Name(_ADR,0x00120000)
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 0)) {
> + Return (0x0)
> + }
> +
> + //
> + // If device is disabled.
> + //
> + If (LEqual(SD3D, 1))
> + {
> + Return (0x0)
> + }
> +
> + Return (0xF)
> + }
> +
> + Device (CARD)
> + {
> + Name (_ADR, 0x00000008)
> + Method(_RMV, 0x0, NotSerialized)
> + {
> + // SDRM = 0 non-removable;
> + If (LEqual(SDRM, 0))
> + {
> + Return (0)
> + }
> +
> + Return (1)
> + }
> + }
> + }
> +
> + // xHCI Controller - Device 20, Function 0
> + include("PchXhci.asl")
> +
> + //
> + // High Definition Audio Controller - Device 27, Function 0
> + //
> + Device(HDEF)
> + {
> + Name(_ADR, 0x001B0000)
> + include("PchAudio.asl")
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If (LEqual(HDAD, 0))
> + {
> + Return(0xf)
> + }
> + Return(0x0)
> + }
> +
> + Method(_DSW, 3)
> + {
> + } // End _DSW
> + } // end "High Definition Audio Controller"
> +
> +
> +
> + //
> + // PCIE Root Port #1
> + //
> + Device(RP01)
> + {
> + Name(_ADR, 0x001C0000)
> + include("PchPcie.asl")
> + Name(_PRW, Package() {9, 4})
> +
> + Method(_PRT,0)
> + {
> + If(PICM) { Return(AR04) }// APIC mode
> + Return (PR04) // PIC Mode
> + } // end _PRT
> + } // end "PCIE Root Port #1"
> +
> + //
> + // PCIE Root Port #2
> + //
> + Device(RP02)
> + {
> + Name(_ADR, 0x001C0001)
> + include("PchPcie.asl")
> + Name(_PRW, Package() {9, 4})
> +
> + Method(_PRT,0)
> + {
> + If(PICM) { Return(AR05) }// APIC mode
> + Return (PR05) // PIC Mode
> + } // end _PRT
> +
> + } // end "PCIE Root Port #2"
> +
> + //
> + // PCIE Root Port #3
> + //
> + Device(RP03)
> + {
> + Name(_ADR, 0x001C0002)
> + include("PchPcie.asl")
> + Name(_PRW, Package() {9, 4})
> + Method(_PRT,0)
> + {
> + If(PICM) { Return(AR06) }// APIC mode
> + Return (PR06) // PIC Mode
> + } // end _PRT
> +
> + } // end "PCIE Root Port #3"
> +
> + //
> + // PCIE Root Port #4
> + //
> + Device(RP04)
> + {
> + Name(_ADR, 0x001C0003)
> + include("PchPcie.asl")
> + Name(_PRW, Package() {9, 4})
> + Method(_PRT,0)
> + {
> + If(PICM) { Return(AR07) }// APIC mode
> + Return (PR07) // PIC Mode
> + } // end _PRT
> +
> + } // end "PCIE Root Port #4"
> +
> +
> + Scope(\_SB)
> + {
> + //
> + // Dummy power resource for USB D3 cold support
> + //
> + PowerResource(USBC, 0, 0)
> + {
> + Method(_STA) { Return (0xF) }
> + Method(_ON) {}
> + Method(_OFF) {}
> + }
> + }
> + //
> + // EHCI Controller - Device 29, Function 0
> + //
> + Device(EHC1)
> + {
> + Name(_ADR, 0x001D0000)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + include("PchEhci.asl")
> + Name(_PRW, Package() {0x0D, 4})
> +
> + OperationRegion(USBR, PCI_Config, 0x54,0x4)
> + Field(USBR,WordAcc,NoLock,Preserve)
> + {
> + Offset(0x00), // 0x54, PMCR
> + , 8,
> + PMEE, 1, //PME_EN
> + , 6,
> + PMES, 1 //PME_STS
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If(LEqual(XHCI, 0)) //XHCI is not present. It means EHCI is there
> + {
> + Return (0xF)
> + } Else
> + {
> + Return (0x0)
> + }
> + }
> +
> + Method (_RMV, 0, NotSerialized)
> + {
> + Return (0x0)
> + }
> + //
> + // Create a dummy PR3 method to indicate to the PCI driver
> + // that the device is capable of D3 cold
> + //
> + Method(_PR3, 0x0, NotSerialized)
> + {
> + return (Package() {\_SB.USBC})
> + }
> +
> + } // end "EHCI Controller"
> +
> + //
> + // SMBus Controller - Device 31, Function 3
> + //
> + Device(SBUS)
> + {
> + Name(_ADR,0x001F0003)
> + Include("PchSmb.asl")
> + }
> +
> + Device(SEC0)
> + {
> + Name (_ADR, 0x001a0000) // Device 0x1a, Function 0
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> +
> +
> + OperationRegion (PMEB, PCI_Config, 0x84, 0x04) //PMECTRLSTATUS
> + Field (PMEB, WordAcc, NoLock, Preserve)
> + {
> + , 8,
> + PMEE, 1, //bit8 PMEENABLE
> + , 6,
> + PMES, 1 //bit15 PMESTATUS
> + }
> +
> + // Arg0 -- integer that contains the device wake capability control (0-
> disable 1- enable)
> + // Arg1 -- integer that contains target system state (0-4)
> + // Arg2 -- integer that contains the target device state
> + Method (_DSW, 3, NotSerialized) // _DSW: Device Sleep Wake
> + {
> + }
> +
> + Method (_CRS, 0, NotSerialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x1e000000, 0x2000000)
> + })
> +
> + If (LEqual(PAVP, 2))
> + {
> + Return (RBUF)
> + }
> + Return (ResourceTemplate() {})
> + }
> +
> + Method (_STA)
> + {
> + If (LNotEqual(PAVP, 0))
> + {
> + Return (0xF)
> + }
> + Return (0x0)
> + }
> + } // Device(SEC0)
> +
> +} // End scope (\_SB.PCI0)
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchAudio.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchAudio.asl
> new file mode 100644
> index 0000000000..4dd5e6f756
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchAudio.asl
> @@ -0,0 +1,36 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +//
> +// High Definition Audio - Device 27, Function 0
> +//
> +OperationRegion(HDAR, PCI_Config, 0x4C,0x10)
> +Field(HDAR,WordAcc,NoLock,Preserve)
> +{
> + Offset(0x00), // 0x4C, Dock Control Register
> + DCKA, 1, // Dock Attach
> + , 7,
> + Offset(0x01), // 04Dh, Dock Status Register
> + DCKM, 1, // Dock Mated
> + , 6,
> + DCKS, 1, // Docking Supported
> + Offset(0x08), // 0x54, Power Management Control and Status Register
> + , 8,
> + PMEE, 1, // PME_EN
> + , 6,
> + PMES, 1 // PME Status
> +}
> +
> +
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchEhci.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchEhci.asl
> new file mode 100644
> index 0000000000..c058cd0c3e
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchEhci.asl
> @@ -0,0 +1,269 @@
> +/*********************************************************
> ******************************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved *;
> +;* *;
> +;* ThSPDX-License-Identifier: BSD-2-Clause-Patent
> +;* *;
> +;* *;
> +;* *;
> +;*********************************************************
> ******************************/
> +
> +OperationRegion(PWKE,PCI_Config,0x62,0x04)
> +
> +Field(PWKE,DWordAcc,NoLock,Preserve)
> +{
> + , 1,
> + PWUC, 8 // Port Wake Up Capability Mask
> +}
> +
> +Method(_PSW,1)
> +{
> + If(Arg0)
> + {
> + Store(Ones,PWUC)
> + }
> + Else
> + {
> + Store(0,PWUC)
> + }
> +}
> +
> +// Leaves the USB ports on in S3/S4 to allow
> +// the ability to Wake from USB. Therefore, define
> +// the below control methods to state D2 entry during
> +// the given S-State.
> +
> +Method(_S3D,0)
> +{
> + Return(2)
> +}
> +
> +Method(_S4D,0)
> +{
> + Return(2)
> +}
> +
> +Device(HUBN)
> +{
> + Name(_ADR, Zero)
> + Device(PR01)
> + {
> + Name(_ADR, One)
> +
> + //
> + // There will have "Generic USB Hub" existed at Port 1 of each EHCI
> controller
> + // in Windows "Device Manager" while RMH is enabled, so need to add
> _UPC
> + // and _PLD to report OS that it's not user visible to pass WHQL: Single
> Computer
> + // Display Object test in Win7
> + //
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0x00, // Connector type - Type "A"
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> +
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0x30, 0x1C, 0x00, 0x00, // Panel Unknown, Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> +
> + Device(PR11)
> + {
> + Name(_ADR, One)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xE1, 0x1C, 0x00, 0x00, // Front Panel, Vertical Upper, Horz. Left,
> Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + }
> +
> + Device(PR12)
> + {
> + Name(_ADR, 0x02)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xE1, 0x1D, 0x00, 0x00, // Front Panel, Vertical Center, Horz. Left,
> Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + }
> +
> + Device(PR13)
> + {
> + Name(_ADR, 0x03)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xE1, 0x1D, 0x00, 0x00, // Front Panel, Vertical Center, Horz. Left,
> Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + }
> +
> + Device(PR14)
> + {
> + Name(_ADR, 0x04)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> +
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xE1, 0x1E, 0x00, 0x00, // Front Panel, Vertical Lower, Horz. Left,
> Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> +
> + // copy USB Sideband Deferring GPE Vector (HOST_ALERT#1) to DSM
> method
> + Include("UsbSbd.asl")
> + }
> +
> + Device(PR15)
> + {
> + Name(_ADR, 0x05)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xB1, 0x1E, 0x00, 0x00, // Panel Unknown, Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + // copy USB Sideband Deferring GPE Vector (HOST_ALERT#2) to DSM
> method
> + Include("UsbSbd.asl")
> + }
> +
> + Device(PR16)
> + {
> + Name(_ADR, 0x06)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xB1, 0x1E, 0x00, 0x00, // Panel Unknown, Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + // copy USB Sideband Deferring GPE Vector (HOST_ALERT#1) to DSM
> method
> + Include("UsbSbd.asl")
> + }
> +
> + Device(PR17)
> + {
> + Name(_ADR, 0x07)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xB1, 0x1E, 0x00, 0x00, // Panel Unknown, Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + // copy USB Sideband Deferring GPE Vector (HOST_ALERT#2) to DSM
> method
> + Include("UsbSbd.asl")
> + }
> +
> + Device(PR18)
> + {
> + Name(_ADR, 0x08)
> + Name(_UPC, Package()
> + {
> + 0xFF, // Port is connectable
> + 0xFF, // Proprietary connector
> + 0x00000000, // Reserved 0 - must be zero
> + 0x00000000
> + }) // Reserved 1 - must be zero
> + Name(_PLD, Package()
> + {
> + Buffer (0x10)
> + {
> + 0x81, 0x00, 0x00, 0x00, // Revision 1, Ignore color
> + 0x00, 0x00, 0x00, 0x00,
> + 0xB1, 0x1E, 0x00, 0x00, // Panel Unknown, Shape Unknown
> + 0x00, 0x00, 0x00, 0x00
> + }
> + })
> + }
> + } // End of PR01
> +} // End of HUBN
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchLpss.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchLpss.asl
> new file mode 100644
> index 0000000000..9510efd698
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchLpss.asl
> @@ -0,0 +1,1093 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +//
> +// LPIO1 DMA#1 (Synopsis GP DMA)
> +//
> +Device (GDM1)
> +{
> + Name (_HID, "INTL9C60")
> + Name (_DDN, "Intel(R) DMA Controller #1 - INTL9C60")
> + Name (_UID, 1)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00004000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {42} //
> DMA #1 IRQ
> + })
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(D10A, B0BA)
> + Store(D10L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(D10A, 0), LEqual(L10D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +}
> +
> +//
> +// LPIO1 DMA#2 (Synopsis GP DMA)
> +//
> +Device (GDM2)
> +{
> + Name (_HID, "INTL9C60")
> + Name (_DDN, "Intel(R) DMA Controller #2 - INTL9C60")
> + Name (_UID, 2)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00004000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {43} //
> DMA #2 IRQ
> + })
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(D20A, B0BA)
> + Store(D20L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(D20A, 0), LEqual(L20D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +}
> +
> +//
> +// LPIO1 PWM #1
> +//
> +Device(PWM1)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F09")
> + Name (_CID, "80860F09")
> + Name (_DDN, "Intel(R) PWM Controller #1 - 80860F08")
> + Name (_UID, 1)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + })
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(P10A, B0BA)
> + Store(P10L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(P10A, 0), LEqual(L11D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +}
> +
> +//
> +// LPIO1 PWM #2
> +//
> +Device(PWM2)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F09")
> + Name (_CID, "80860F09")
> + Name (_DDN, "Intel(R) PWM Controller #2 - 80860F09")
> + Name (_UID, 2)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + })
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(P20A, B0BA)
> + Store(P20L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(P20A, 0), LEqual(L12D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +}
> +
> +//
> +// LPIO1 HS-UART #1
> +//
> +Device(URT1)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F0A")
> + Name (_CID, "80860F0A")
> + Name (_DDN, "Intel(R) HS-UART Controller #1 - 80860F0A")
> + Name (_UID, 1)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {39} // HS-
> UART #1 IRQ
> +
> + FixedDMA(0x2, 0x2, Width32Bit, )
> + FixedDMA(0x3, 0x3, Width32Bit, )
> + })
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(U10A, B0BA)
> + Store(U10L, B0LN)
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(U10A, 0), LEqual(L13D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + OperationRegion (KEYS, SystemMemory, U11A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +}// Device (URT1)
> +
> +//
> +// LPIO1 HS-UART #2
> +//
> +Device(URT2)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F0A")
> + Name (_CID, "80860F0A")
> + Name (_DDN, "Intel(R) HS-UART Controller #2 - 80860F0C")
> + Name (_UID, 2)
> +
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {40} // HS-
> UART #2 IRQ
> +
> + FixedDMA(0x4, 0x4, Width32Bit, )
> + FixedDMA(0x5, 0x5, Width32Bit, )
> + })
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(U20A, B0BA)
> + Store(U20L, B0LN)
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(U20A, 0), LEqual(L14D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + OperationRegion (KEYS, SystemMemory, U21A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +}// Device (URT2)
> +
> +//
> +// LPIO1 SPI
> +//
> +Device(SPI1)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F0E")
> + Name (_CID, "80860F0E")
> + Name (_UID, "0") // Static bus number assignment
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (_DDN, "Intel(R) SPI Controller - 80860F0E")
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {41} // SPI
> IRQ
> +
> + FixedDMA(0x0, 0x0, Width32Bit, )
> + FixedDMA(0x1, 0x1, Width32Bit, )
> + })
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(SP0A, B0BA)
> + Store(SP0L, B0LN)
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(SP0A, 0), LEqual(L15D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + OperationRegion (KEYS, SystemMemory, SP1A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +}// Device (SPI1)
> +
> +//
> +// LPIO2 I2C #1
> +//
> +Device(I2C1)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (_DDN, "Intel(R) I2C Controller #1 - 80860F41")
> + Name (_UID, 1)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {32} // I2C
> #1 IRQ
> +
> + FixedDMA(0x10, 0x0, Width32Bit, )
> + FixedDMA(0x11, 0x1, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I10A, B0BA)
> + Store(I10L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I10A, 0), LEqual(L21D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> +
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, I11A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> +}
> +
> +//
> +// LPIO2 I2C #2
> +//
> +Device(I2C2)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (_DDN, "Intel(R) I2C Controller #2 - 80860F42")
> + Name (_UID, 2)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {33} // I2C
> #2 IRQ
> +
> + FixedDMA(0x12, 0x2, Width32Bit, )
> + FixedDMA(0x13, 0x3, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I20A, B0BA)
> + Store(I20L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I20A, 0), LEqual(L22D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> +
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, I21A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> +
> + //
> + // Realtek Audio Codec
> + //
> + Device (RTEK) //Audio Codec driver I2C
> + {
> + Name (_ADR, 0)
> + Name (_HID, "10EC5640")
> + Name (_CID, "10EC5640")
> + Name (_DDN, "RTEK Codec Controller " )
> + Name (_UID, 1)
> +
> +
> + Method(_CRS, 0x0, Serialized)
> + {
> + Name(SBUF,ResourceTemplate ()
> + {
> + I2CSerialBus(0x1C, //SlaveAddress: bus address
> + , //SlaveMode: default to ControllerInitiated
> + 400000, //ConnectionSpeed: in Hz
> + , //Addressing Mode: default to 7 bit
> + "\\_SB.I2C2", //ResourceSource: I2C bus controller name
> + , //ResourceSourceIndex: defaults to 0
> + , //ResourceUsage: Defaults to ResourceConsumer
> + , //Descriptor Name: creates name for offset of
> resource descriptor
> + ) //VendorData
> + GpioInt(Edge, ActiveHigh, ExclusiveAndWake, PullNone,
> 0,"\\_SB.GPO2") {4} // AUD_INT
> + })
> + Return (SBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> +
> + If (LEqual(LPEE, 2)) { // LPE enable/disable
> + If (LEqual(LPAD, 1))
> + {
> + Return(0xF)
> + }
> + }
> + Return(0)
> + }
> +
> + Method (_DIS, 0x0, NotSerialized)
> + {
> +
> + }
> + } // Device (RTEK)
> +} // Device (I2C2)
> +
> +//
> +// LPIO2 I2C #3
> +//
> +Device(I2C3)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + Name (_DDN, "Intel(R) I2C Controller #3 - 80860F43")
> + Name (_UID, 3)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {34} // I2C
> #3 IRQ
> +
> + FixedDMA(0x14, 0x4, Width32Bit, )
> + FixedDMA(0x15, 0x5, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I30A, B0BA)
> + Store(I30L, B0LN)
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I30A, 0), LEqual(L23D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> +
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, I31A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> +
> +}
> +
> +//
> +// LPIO2 I2C #4
> +//
> +Device(I2C4)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + Name (_DDN, "Intel(R) I2C Controller #4 - 80860F44")
> + Name (_UID, 4)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {35} // I2C
> #4 IRQ
> +
> + FixedDMA(0x16, 0x6, Width32Bit, )
> + FixedDMA(0x17, 0x7, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I40A, B0BA)
> + Store(I40L, B0LN)
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I40A, 0), LEqual(L24D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> +
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, I41A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> + PowerResource (CLK0, 0x00, 0x0000)
> + {
> + Method (_STA, 0, NotSerialized) // _STA: Status
> + {
> + Return (CKC0)
> + }
> +
> + Method (_ON, 0, NotSerialized) // _ON_: Power On
> + {
> + Store (One, CKC0)
> + Store (One, CKF0)
> + Sleep (0x20)
> + }
> +
> + Method (_OFF, 0, NotSerialized) // _OFF: Power Off
> + {
> + Store (0x02, CKC0)
> + }
> + }
> + PowerResource (CLK1, 0x00, 0x0000)
> + {
> + Method (_STA, 0, NotSerialized) // _STA: Status
> + {
> + Return (CKC1)
> + }
> +
> + Method (_ON, 0, NotSerialized) // _ON_: Power On
> + {
> + Store (One, CKC1)
> + Store (One, CKF1)
> + Sleep (0x20)
> + }
> +
> + Method (_OFF, 0, NotSerialized) // _OFF: Power Off
> + {
> + Store (0x02, CKC1)
> + }
> + }
> +}
> +
> +//
> +// LPIO2 I2C #5
> +//
> +Device(I2C5)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + Name (_DDN, "Intel(R) I2C Controller #5 - 80860F45")
> + Name (_UID, 5)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {36} // I2C
> #5 IRQ
> +
> + FixedDMA(0x18, 0x0, Width32Bit, )
> + FixedDMA(0x19, 0x1, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I50A, B0BA)
> + Store(I50L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I50A, 0), LEqual(L25D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, I51A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +}
> +
> +//
> +// LPIO2 I2C #6
> +//
> +Device(I2C6)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + Name (_DDN, "Intel(R) I2C Controller #6 - 80860F46")
> + Name (_UID, 6)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {37} // I2C
> #6 IRQ
> +
> + FixedDMA(0x1A, 0x02, Width32Bit, )
> + FixedDMA(0x1B, 0x03, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I60A, B0BA)
> + Store(I60L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I60A, 0), LEqual(L26D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, I61A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +}
> +
> +//
> +// LPIO2 I2C #7
> +//
> +Device(I2C7)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F41")
> + Name (_CID, "80860F41")
> + //Name (_CLS, Package (3) {0x0C, 0x80, 0x00})
> + Name (_DDN, "Intel(R) I2C Controller #7 - 80860F47")
> + Name (_UID, 7)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {38} // I2C
> #7 IRQ
> +
> + FixedDMA(0x1C, 0x4, Width32Bit, )
> + FixedDMA(0x1D, 0x5, Width32Bit, )
> + })
> +
> + Method (SSCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x200, 0x200, 0x06 })
> + Return (PKG)
> + }
> + Method (FMCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x55, 0x99, 0x06 })
> + Return (PKG)
> + }
> + Method (FPCN, 0x0, NotSerialized)
> + {
> + Name (PKG, Package(3) { 0x1b, 0x3a, 0x06 })
> + Return (PKG)
> + }
> +
> + Method (_HRV, 0x0, NotSerialized)
> + {
> + Return (SOCS)
> + }
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(I70A, B0BA)
> + Store(I70L, B0LN)
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(I70A, 0), LEqual(L27D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> +
> + OperationRegion (KEYS, SystemMemory, I71A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> +}
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchPcie.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchPcie.asl
> new file mode 100644
> index 0000000000..7b32ea2dae
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchPcie.asl
> @@ -0,0 +1,50 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +OperationRegion(PXCS,PCI_Config,0x40,0xC0)
> +Field(PXCS,AnyAcc, NoLock, Preserve)
> +{
> + Offset(0x10), // LCTL - Link Control Register
> + L0SE, 1, // 0, L0s Entry Enabled
> + , 7,
> + Offset(0x12), // LSTS - Link Status Register
> + , 13,
> + LASX, 1, // 0, Link Active Status
> + Offset(0x1A), // SLSTS[7:0] - Slot Status Register
> + ABPX, 1, // 0, Attention Button Pressed
> + , 2,
> + PDCX, 1, // 3, Presence Detect Changed
> + , 2,
> + PDSX, 1, // 6, Presence Detect State
> + , 1,
> + Offset(0x20), // RSTS - Root Status Register
> + , 16,
> + PSPX, 1, // 16, PME Status
> +}
> +
> +
> +Device(PXSX)
> +{
> + Name(_ADR, 0x00000000)
> +
> + // NOTE: Any PCIE Hot-Plug dependency for this port is
> + // specific to the CRB. Please modify the code based on
> + // your platform requirements.
> +
> + Name(_PRW, Package() {9,4})
> +}
> +
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchScc.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchScc.asl
> new file mode 100644
> index 0000000000..78a928a5da
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchScc.asl
> @@ -0,0 +1,610 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +Device (PEPD)
> +{
> + Name (_HID, "INT3396")
> + Name(_CID, 0x800dd041)
> + Name (_UID, 0x1)
> +
> + // Indicates if the platform PEP has loaded
> + Name(PEPP, Zero)
> +
> + // Devices score-boarded by the PEP, Rev0 format
> + Name (DEVS, Package() {0})
> +
> + // Devices score-boarded by the PEP, Rev1 format
> + Name(DEVX, Package()
> + {
> + Package () {"\\_SB.PCI0.XHC1", 0x1},
> + Package () {"\\_SB.PCI0.EHC1", 0x1},
> + Package () {"\\_SB.PCI0.GFX0", 0x1},
> + Package () {"\\_SB.PCI0.GFX0.ISP0", 0x1},
> + Package () {"\\_SB.PCI0.SEC0", 0x1},
> + Package () {"\\_SB.I2C1", 0x1},
> + Package () {"\\_SB.I2C2", 0x1},
> + Package () {"\\_SB.I2C3", 0x1},
> + Package () {"\\_SB.I2C4", 0x1},
> + Package () {"\\_SB.I2C5", 0x1},
> + Package () {"\\_SB.I2C6", 0x1},
> + Package () {"\\_SB.I2C7", 0x1},
> + Package () {"\\_SB.SDHA", 0x1},
> + Package () {"\\_SB.SDHB", 0x1},
> + Package () {"\\_SB.SDHC", 0x1},
> + Package () {"\\_SB.SPI1", 0x1},
> + Package () {"\\_SB.URT1", 0x1},
> + Package () {"\\_SB.URT2", 0x1},
> + })
> + // Crashdump device package
> + Name(CDMP, Package(2) {})
> + // Device dependency for uPEP
> + Name(DEVY, Package()
> + {
> + Package() {"\\_PR.CPU0", 0x1, Package() {Package() {0xFF, 0}}},
> + Package() {"\\_PR.CPU1", 0x1, Package() {Package() {0xFF, 0}}},
> + Package() {"\\_PR.CPU2", 0x1, Package() {Package() {0xFF, 0}}},
> + Package() {"\\_PR.CPU3", 0x1, Package() {Package() {0xFF, 0}}},
> + Package() {"\\_SB.I2C1", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.I2C2", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.I2C3", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.I2C4", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.I2C5", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.I2C6", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.I2C7", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.PCI0.GFX0", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.PCI0.SEC0", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.PCI0.XHC1", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.PCI0.GFX0.ISP0", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.LPEA", 0x1, Package() {Package() {0x0,3}, Package()
> {0x1,0}, Package() {0x2,3}, Package() {0x3,3}}},
> + Package() {"\\_SB.SDHA", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.SDHB", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.SDHC", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.SPI1", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.URT1", 0x1, Package() {Package() {0xFF,3}}},
> + Package() {"\\_SB.URT2", 0x1, Package() {Package() {0xFF,3}}}
> + })
> + // BCCD crashdump information
> + Name(BCCD, Package()
> + {
> + Package()
> + {
> + "\\_SB.SDHA",
> + Package()
> + {
> + Package() { Package() {0, 32, 0, 3, 0xFFFFFFFFFFFFFFFF}, Package()
> {0xFFFFFFFC, 0x0, 0x4}, 0}
> + }
> + }
> + })
> +
> + Method(_STA, 0x0, NotSerialized)
> + {
> + Return(0xf)
> + }
> +
> + Method(_DSM, 0x4, Serialized)
> + {
> + If(LEqual(Arg0,ToUUID("B8FEBFE0-BAF8-454b-AECD-49FB91137B21")))
> + {
> +
> + // Number of fn IDs supported
> + If(LEqual(Arg2, Zero))
> + {
> + Return(Buffer(One)
> + {
> + 0xf
> + })
> + }
> +
> + // Pep presence
> + If(LEqual(Arg2, One))
> + {
> + Store(0x1, PEPP)
> + Return(0xf)
> + }
> +
> + // Mitigation devices
> + If(LEqual(Arg2, 0x2))
> + {
> + If(LEqual(Arg1, 0x0))
> + {
> + // Rev0
> + Return(DEVS)
> + }
> + If(LEqual(Arg1, 0x1))
> + {
> + // Rev1
> + Return(DEVX)
> + }
> + }
> +
> + // Crashdump device data
> + If(LEqual(Arg2, 0x3))
> + {
> + Store("\\_SB.SDHA", Index(CDMP,0))
> + Store(EM1A, Index(CDMP,1))
> + Return(CDMP)
> + }
> + }
> + // New UUID for built-in uPEP
> + If(LEqual(Arg0,ToUUID("C4EB40A0-6CD2-11E2-BCFD-0800200C9A66")))
> + {
> +
> + // Number of fn IDs supported
> + If(LEqual(Arg2, Zero))
> + {
> + Return(Buffer(One)
> + {
> + 0x7
> + })
> + }
> + // LPI device dependencies
> + If(LEqual(Arg2, 0x1))
> + {
> + Return(DEVY)
> + }
> + // Crashdump device data
> + If(LEqual(Arg2, 0x2))
> + {
> + Store(EM1A, Local0)
> + Add(Local0, 0x84, Local0)
> + Store(Local0,
> Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(DerefOf(Index(BCCD,
> Zero, )), One, )), Zero, )), Zero, )), 0x4, ))
> + Return(BCCD)
> + }
> + }
> +
> + Return(One)
> + }
> +}
> +
> +//
> +// eMMC 4.41
> +//
> +Device(SDHA)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F14")
> + Name (_CID, "PNP0D40")
> + Name (_DDN, "Intel(R) eMMC Controller - 80860F14")
> + Name (_UID, 1)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> +
> + Name (RBF1, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {45} //
> eMMC 4.41 IRQ
> + })
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + // Update the Base address for BAR0 of eMMC 4.41
> + CreateDwordField(^RBF1, ^BAR0._BAS, B0B1)
> + CreateDwordField(^RBF1, ^BAR0._LEN, B0L1)
> + Store(eM0A, B0B1)
> + Store(eM0L, B0L1)
> + Return (RBF1)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + // SD1D>> 0:eMMC 4.41 enable 1:eMMC 4.41 disable
> + //
> + If (LAnd(LEqual(PCIM, 0), LEqual(SD1D, 0)))
> + {
> + Return (0xF)
> + }
> + Else
> + {
> + Return (0x0)
> + }
> + }
> +
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + //
> + // If not B1, still keep 2 ms w/a
> + //
> + If(LLess(SOCS, 0x03))
> + {
> + Sleep(2)
> + }
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + //
> + // If not B1, still keep 2 ms w/a
> + //
> + If(LLess(SOCS, 0x03))
> + {
> + Sleep(2)
> + }
> + }
> +
> + OperationRegion (KEYS, SystemMemory, eM1A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> + Method (_DIS, 0x0, NotSerialized)
> + {
> + //Adding dummy disable methods for device EMM0
> + }
> +
> + Device (EMMD)
> + {
> + Name (_ADR, 0x00000008) // Slot 0, Function 8
> + Method (_RMV, 0, NotSerialized)
> + {
> + Return (0x0)
> + }
> + }
> +}
> +
> +
> +//
> +// eMMC 4.5
> +//
> +Device(SDHD)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F14")
> + Name (_CID, "PNP0D40")
> + Name (_DDN, "Intel(R) eMMC Controller - 80860F14")
> + Name (_UID, 1)
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> +
> + Name (RBF1, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {44} //
> eMMC 4.5 IRQ
> + })
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBF1, ^BAR0._BAS, B0B1)
> + CreateDwordField(^RBF1, ^BAR0._LEN, B0L1)
> + Store(eM0A, B0B1)
> + Store(eM0L, B0L1)
> + Return (RBF1)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + // HSID>> 0:eMMC 4.5 enable 1:eMMC 4.5 disable
> + //
> + If (LAnd(LEqual(PCIM, 0), LEqual(HSID, 0)))
> + {
> + Return (0xF)
> + }
> + Else
> + {
> + Return (0x0)
> + }
> + }
> +
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + //
> + // If not B1, still keep 2 ms w/a
> + //
> + If(LLess(SOCS, 0x03))
> + {
> + Sleep(2)
> + }
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + //
> + // If not B1, still keep 2 ms w/a
> + //
> + If(LLess(SOCS, 0x03))
> + {
> + Sleep(2)
> + }
> + }
> +
> + OperationRegion (KEYS, SystemMemory, eM1A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> + Method (_DIS, 0x0, NotSerialized)
> + {
> + //Adding dummy disable methods for device EMM0
> + }
> +
> + Device (EM45)
> + {
> + Name (_ADR, 0x00000008) // Slot 0, Function 8
> + Method (_RMV, 0, NotSerialized)
> + {
> + Return (0x0)
> + }
> + }
> +}
> +
> +
> +//
> +// SDIO
> +//
> +Device(SDHB)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "INT33BB")
> + Name (_CID, "PNP0D40")
> + Name (_DDN, "Intel(R) SDIO Controller - 80860F15")
> + Name (_UID, 2)
> + Name (_HRV, 2)
> + Name(_DEP, Package(0x01)
> + {
> + PEPD
> + })
> + Name (PSTS, 0x0)
> +
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {46} //
> SDIO IRQ
> + })
> +
> + Method (_CRS, 0x0, NotSerialized)
> + {
> +
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(SI0A, B0BA)
> + Store(SI0L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + If (LLessEqual(STEP, 0x04))
> + {
> + //A stepping
> + Store(SDMD, _HRV)
> + }
> +
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(SI0A, 0), LEqual(SD2D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> + Method (_DIS, 0x0, NotSerialized)
> + {
> + //Adding dummy disable methods for device EMM0
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> +
> + if(LEqual(\_SB.SDHB.PSTS,0x0))
> + {
> + if(LEqual (\_SB.GPO2.AVBL, 1))
> + {
> + Store( 0x01, \_SB.GPO2.WFD3 ) // WL_WIFI_REQ_ON = 1 put the device
> to normal state
> + Store( 0x01, \_SB.SDHB.PSTS) // indicates that the device powered ON
> + }
> + }
> +
> +
> + }
> + OperationRegion (KEYS, SystemMemory, SI1A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> +
> + Device (BRCM)
> + {
> + Name (_ADR, 0x01) //SlotNumber + Function
> + Name (_DEP, Package() {\_SB.GPO2})
> +
> + Method (_RMV, 0, NotSerialized)
> + {
> + Return (0x0)
> + }
> + Name (_PRW, Package() {0, 0})
> + Name (_S4W, 2)
> +
> + Method (_CRS, 0, Serialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Interrupt (ResourceConsumer, Edge, ActiveHigh, ExclusiveAndWake, , , )
> {73}
> + })
> + Return (RBUF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + if(LEqual (\_SB.GPO2.AVBL, 1))
> + {
> + Store( 0x00, \_SB.GPO2.WFD3 ) // WL_WIFI_REQ_ON = 0 puts the
> device in reset state
> + Store( 0x00, \_SB.SDHB.PSTS) //Indicates that the device is powered off
> + }
> +
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + if(LEqual(\_SB.SDHB.PSTS,0x0))
> + {
> + if(LEqual (\_SB.GPO2.AVBL, 1))
> + {
> + Store( 0x01, \_SB.GPO2.WFD3 ) // WL_WIFI_REQ_ON = 1 put the
> device to normal state
> + Store( 0x01, \_SB.SDHB.PSTS) // indicates that the device powered
> ON
> + }
> + }
> + }
> + } // Device (BRCM)
> + //
> + // Secondary Broadcom WIFI function
> + //
> + Device(BRC2)
> + {
> + Name(_ADR, 0x2) // function 2
> + Name(_STA, 0xf)
> + //
> + // The device is not removable. This must be a method.
> + //
> + Method(_RMV, 0x0, NotSerialized)
> + {
> + Return(0x0)
> + }
> +
> + //
> + // Describe a vendor-defined connection between this device and the
> + // primary wifi device
> + //
> +
> + Method(_CRS)
> + {
> + Name(NAM, Buffer() {"\\_SB.SDHB.BRCM"})
> + Name(SPB, Buffer()
> + {
> + 0x8E, // SPB Descriptor
> + 0x18, 0x00, // Length including NAM above
> + 0x01, // +0x00 SPB Descriptor Revision
> + 0x00, // +0x01 Resource Source Index
> + 0xc0, // +0x02 Bus type - vendor defined
> + 0x02, // +0x03 Consumer + controller initiated
> + 0x00, 0x00, // +0x04 Type specific flags
> + 0x01, // +0x06 Type specific revision
> + 0x00, 0x00 // +0x07 type specific data length
> + // +0x09 - 0xf bytes for NULL-terminated NAM
> + // Length = 0x18
> + })
> +
> + Name(END, Buffer() {0x79, 0x00})
> + Concatenate(SPB, NAM, Local0)
> + Concatenate(Local0, END, Local1)
> + Return(Local1)
> + }
> + }
> +
> +}
> +
> +//
> +// SD Card
> +//
> +Device(SDHC)
> +{
> + Name (_ADR, 0)
> + Name (_HID, "80860F16")
> + Name (_CID, "PNP0D40")
> + Name (_DDN, "Intel(R) SD Card Controller - 80860F16")
> + Name (_UID, 3)
> + Name(_DEP, Package(0x01)
> + {
> + PEPD
> + })
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0)
> + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, , , ) {47} // SD
> Card IRQ
> + })
> + Method (_CRS, 0x0, NotSerialized)
> + {
> + CreateDwordField(^RBUF, ^BAR0._BAS, B0BA)
> + CreateDwordField(^RBUF, ^BAR0._LEN, B0LN)
> + Store(SD0A, B0BA)
> + Store(SD0L, B0LN)
> + Return (RBUF)
> + }
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // PCIM>> 0:ACPI mode 1:PCI mode
> + //
> + If (LEqual(PCIM, 1)) {
> + Return (0x0)
> + }
> +
> + If (LOr(LEqual(SD0A, 0), LEqual(SD3D, 1)))
> + {
> + Return (0x0)
> + }
> + Return (0xF)
> + }
> +
> + Method (_PS3, 0, NotSerialized)
> + {
> + OR(PSAT, 0x00000003, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + Method (_PS0, 0, NotSerialized)
> + {
> + And(PSAT, 0xfffffffC, PSAT)
> + OR(PSAT, 0X00000000, PSAT)
> + }
> + OperationRegion (KEYS, SystemMemory, SD1A, 0x100)
> + Field (KEYS, DWordAcc, NoLock, WriteAsZeros)
> + {
> + Offset (0x84),
> + PSAT, 32
> + }
> +
> + Device (CARD)
> + {
> + Name (_ADR, 0x00000008)
> + Method(_RMV, 0x0, NotSerialized)
> + {
> + // SDRM = 0 non-removable;
> + If (LEqual(SDRM, 0))
> + {
> + Return (0)
> + }
> +
> + Return (1)
> + }
> + }
> +
> +}
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchSmb.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchSmb.asl
> new file mode 100644
> index 0000000000..4de0c32927
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchSmb.asl
> @@ -0,0 +1,833 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +// Define various SMBus PCI Configuration Space Registers.
> +
> +OperationRegion(SMBP,PCI_Config,0x40,0xC0)
> +Field(SMBP,DWordAcc,NoLock,Preserve)
> +{
> + , 2,
> + I2CE, 1
> +}
> +
> +// SMBus Send Byte - This function will write a single byte of
> +// data to a specific Slave Device per SMBus Send Byte Protocol.
> +// Arg0 = Address
> +// Arg1 = Data
> +// Return: Success = 1
> +// Failure = 0
> +
> + Method(SSXB,2,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> +
> + // Step 1: Confirm the ICHx SMBus is ready to perform
> + // communication.
> +
> + If(STRT())
> + {
> + Return(0)
> + }
> +
> + // Step 2: Initiate a Send Byte.
> +
> + Store(0,I2CE) // Ensure SMbus Mode.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Arg0,TXSA) // Write Address in TXSA.
> + Store(Arg1,HCOM) // Data in HCOM.
> +
> + // Set the SMBus Host control register to 0x48.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 001 = Byte Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x48,HCON)
> +
> + // Step 3: Exit the Method correctly.
> +
> + If(COMP)
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others..
> + Return(1) // Return Success.
> + }
> +
> + Return(0)
> +}
> +
> +// SMBus Receive Byte - This function will write a single byte
> +// of data to a specific Slave Device per SMBus Receive Byte
> +// Protocol.
> +// Arg0 = Address
> +// Return: Success = Byte-Size Value
> +// Failure = Word-Size Value = FFFFh.
> +
> +Method(SRXB,1,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Step 1: Confirm the ICHx SMBus is ready to perform
> + // communication.
> +
> + If(STRT())
> + {
> + Return(0xFFFF)
> + }
> +
> + // Step 2: Initiate a Receive Byte.
> +
> + Store(0,I2CE) // Ensure SMbus Mode.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Or(Arg0,1),TXSA) // Read Address in TXSA.
> +
> + // Set the SMBus Host control register to 0x48.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 001 = Byte Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x44,HCON)
> +
> + // Step 3: Exit the Method correctly.
> +
> + If(COMP)
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others..
> + Return(DAT0) // Return Success.
> + }
> +
> + Return(0xFFFF) // Return Failure.
> +}
> +
> +// SMBus Write Byte - This function will write a single byte
> +// of data to a specific Slave Device per SMBus Write Byte
> +// Protocol.
> +// Arg0 = Address
> +// Arg1 = Command
> +// Arg2 = Data
> +// Return: Success = 1
> +// Failure = 0
> +
> +Method(SWRB,3,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Step 1: Confirm the ICHx SMBus is ready to perform communication.
> +
> + If(STRT())
> + {
> + Return(0)
> + }
> +
> + // Step 2: Initiate a Write Byte.
> +
> + Store(0,I2CE) // Ensure SMbus Mode.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Arg0,TXSA) // Write Address in TXSA.
> + Store(Arg1,HCOM) // Command in HCOM.
> + Store(Arg2,DAT0) // Data in DAT0.
> +
> + // Set the SMBus Host control register to 0x48.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 010 = Byte Data Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x48,HCON)
> +
> + // Step 3: Exit the Method correctly.
> +
> + If(COMP)
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others..
> + Return(1) // Return Success.
> + }
> +
> + Return(0) // Return Failure.
> +}
> +
> +// SMBus Read Byte - This function will read a single byte of data
> +// from a specific slave device per SMBus Read Byte Protocol.
> +// Arg0 = Address
> +// Arg1 = Command
> +// Return: Success = Byte-Size Value
> +// Failure = Word-Size Value
> +
> +Method(SRDB,2,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Step 1: Confirm the ICHx SMBus is ready to perform communication.
> +
> + If(STRT())
> + {
> + Return(0xFFFF)
> + }
> +
> + // Step 2: Initiate a Read Byte.
> +
> + Store(0,I2CE) // Ensure SMbus Mode.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Or(Arg0,1),TXSA) // Read Address in TXSA.
> + Store(Arg1,HCOM) // Command in HCOM.
> +
> + // Set the SMBus Host control register to 0x48.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 010 = Byte Data Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x48,HCON)
> +
> + // Step 3: Exit the Method correctly.
> +
> + If(COMP)
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others..
> + Return(DAT0) // Return Success.
> + }
> +
> + Return(0xFFFF) // Return Failure.
> +}
> +
> +// SMBus Write Word - This function will write a single word
> +// of data to a specific Slave Device per SMBus Write Word
> +// Protocol.
> +// Arg0 = Address
> +// Arg1 = Command
> +// Arg2 = Data (16 bits in size)
> +// Return: Success = 1
> +// Failure = 0
> +
> +Method(SWRW,3,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Step 1: Confirm the ICHx SMBus is ready to perform communication.
> +
> + If(STRT())
> + {
> + Return(0)
> + }
> +
> + // Step 2: Initiate a Write Word.
> +
> + Store(0,I2CE) // Ensure SMbus Mode.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Arg0,TXSA) // Write Address in TXSA.
> + Store(Arg1,HCOM) // Command in HCOM.
> + And(Arg2,0xFF,DAT1) // Low byte Data in DAT1.
> + And(ShiftRight(Arg2,8),0xFF,DAT0) // High byte Data in DAT0.
> +
> + // Set the SMBus Host control register to 0x4C.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 011 = Word Data Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x4C,HCON)
> +
> + // Step 3: Exit the Method correctly.
> +
> + If(COMP())
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others.
> + Return(1) // Return Success.
> + }
> +
> + Return(0) // Return Failure.
> +}
> +
> +// SMBus Read Word - This function will read a single byte of data
> +// from a specific slave device per SMBus Read Word Protocol.
> +// Arg0 = Address
> +// Arg1 = Command
> +// Return: Success = Word-Size Value
> +// Failure = Dword-Size Value
> +
> +Method(SRDW,2,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Step 1: Confirm the ICHx SMBus is ready to perform communication.
> +
> + If(STRT())
> + {
> + Return(0xFFFF)
> + }
> +
> + // Step 2: Initiate a Read Word.
> +
> + Store(0,I2CE) // Ensure SMbus Mode.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Or(Arg0,1),TXSA) // Read Address in TXSA.
> + Store(Arg1,HCOM) // Command in HCOM.
> +
> + // Set the SMBus Host control register to 0x4C.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 011 = Word Data Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x4C,HCON)
> +
> + // Step 3: Exit the Method correctly.
> +
> + If(COMP())
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others.
> + Return(Or(ShiftLeft(DAT0,8),DAT1)) // Return Success.
> + }
> +
> + Return(0xFFFFFFFF) // Return Failure.
> +}
> +
> +// SMBus Block Write - This function will write an entire block of data
> +// to a specific slave device per SMBus Block Write Protocol.
> +// Arg0 = Address
> +// Arg1 = Command
> +// Arg2 = Buffer of Data to Write
> +// Arg3 = 1 = I2C Block Write, 0 = SMBus Block Write
> +// Return: Success = 1
> +// Failure = 0
> +
> +Method(SBLW,4,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Step 1: Confirm the ICHx SMBus is ready to perform communication.
> +
> + If(STRT())
> + {
> + Return(0)
> + }
> +
> + // Step 2: Initiate a Block Write.
> +
> + Store(Arg3,I2CE) // Select the proper protocol.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Arg0,TXSA) // Write Address in TXSA.
> + Store(Arg1,HCOM) // Command in HCOM.
> + Store(Sizeof(Arg2),DAT0) // Count in DAT0.
> + Store(0,Local1) // Init Pointer to Buffer.
> + Store(DerefOf(Index(Arg2,0)),HBDR) // First Byte in HBD Register.
> +
> + // Set the SMBus Host control register to 0x48.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 101 = Block Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x54,HCON)
> +
> + // Step 3: Send the entire Block of Data.
> +
> + While(LGreater(Sizeof(Arg2),Local1))
> + {
> + // Wait up to 200ms for Host Status to get set.
> +
> + Store(4000,Local0) // 4000 * 50us = 200ms.
> +
> + While(LAnd(LNot(And(HSTS,0x80)),Local0))
> + {
> + Decrement(Local0) // Decrement Count.
> + Stall(50) // Delay = 50us.
> + }
> +
> + If(LNot(Local0)) // Timeout?
> + {
> + KILL() // Yes. Kill Communication.
> + Return(0) // Return failure.
> + }
> +
> + Store(0x80,HSTS) // Clear Host Status.
> + Increment(Local1) // Point to Next Byte.
> +
> + // Place next byte in HBDR if last byte has not been sent.
> +
> + If(LGreater(Sizeof(Arg2),Local1))
> + {
> + Store(DerefOf(Index(Arg2,Local1)),HBDR)
> + }
> + }
> +
> + // Step 4: Exit the Method correctly.
> +
> + If(COMP())
> + {
> + Or(HSTS,0xFF,HSTS) // Clear all status bits.
> + Return(1) // Return Success.
> + }
> +
> + Return(0) // Return Failure.
> +}
> +
> +// SMBus Block Read - This function will read a block of data from
> +// a specific slave device per SMBus Block Read Protocol.
> +// Arg0 = Address
> +// Arg1 = Command
> +// Arg2 = 1 = I2C Block Write, 0 = SMBus Block Write
> +// Return: Success = Data Buffer (First Byte = length)
> +// Failure = 0
> +
> +Method(SBLR,3,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + Name(TBUF, Buffer(256) {})
> +
> + // Step 1: Confirm the ICHx SMBus is ready to perform communication.
> +
> + If(STRT())
> + {
> + Return(0)
> + }
> +
> + // Step 2: Initiate a Block Read.
> +
> + Store(Arg2,I2CE) // Select the proper protocol.
> + Store(0xBF,HSTS) // Clear all but INUSE_STS.
> + Store(Or(Arg0,1),TXSA) // Read Address in TXSA.
> + Store(Arg1,HCOM) // Command in HCOM.
> +
> + // Set the SMBus Host control register to 0x48.
> + // Bit 7: = 0 = reserved
> + // Bit 6: = 1 = start
> + // Bit 5: = 0 = disregard, I2C related bit
> + // Bits 4:2: = 101 = Block Protocol
> + // Bit 1: = 0 = Normal Function
> + // Bit 0: = 0 = Disable interrupt generation
> +
> + Store(0x54,HCON)
> +
> + // Step 3: Wait up to 200ms to get the Data Count.
> +
> + Store(4000,Local0) // 4000 * 50us = 200ms.
> +
> + While(LAnd(LNot(And(HSTS,0x80)),Local0))
> + {
> + Decrement(Local0) // Decrement Count.
> + Stall(50) // Delay = 50us.
> + }
> +
> + If(LNot(Local0)) // Timeout?
> + {
> + KILL() // Yes. Kill Communication.
> + Return(0) // Return failure.
> + }
> +
> + Store(DAT0,Index(TBUF,0)) // Get the Data Count.
> + Store(0x80,HSTS) // Clear Host Status.
> + Store(1,Local1) // Local1 = Buffer Pointer.
> +
> + // Step 4: Get the Block Data and store it.
> +
> + While(LLess(Local1,DerefOf(Index(TBUF,0))))
> + {
> + // Wait up to 200ms for Host Status to get set.
> +
> + Store(4000,Local0) // 4000 * 50us = 200ms.
> +
> + While(LAnd(LNot(And(HSTS,0x80)),Local0))
> + {
> + Decrement(Local0) // Decrement Count.
> + Stall(50) // Delay = 50us.
> + }
> +
> + If(LNot(Local0)) // Timeout?
> + {
> + KILL() // Yes. Kill Communication.
> + Return(0) // Return failure.
> + }
> +
> + Store(HBDR,Index(TBUF,Local1)) // Place into Buffer.
> + Store(0x80,HSTS) // Clear Host Status.
> + Increment(Local1)
> + }
> +
> + // Step 5: Exit the Method correctly.
> +
> + If(COMP())
> + {
> + Or(HSTS,0xFF,HSTS) // Clear INUSE_STS and others.
> + Return(TBUF) // Return Success.
> + }
> +
> + Return(0) // Return Failure.
> +}
> +
> +
> +// SMBus Start Check
> +// Return: Success = 0
> +// Failure = 1
> +
> +Method(STRT,0,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Wait up to 200ms to confirm the SMBus Semaphore has been
> + // released (In Use Status = 0). Note that the Sleep time may take
> + // longer as the This function will yield the Processor such that it
> + // may perform different tasks during the delay.
> +
> + Store(200,Local0) // 200 * 1ms = 200ms.
> +
> + While(Local0)
> + {
> + If(And(HSTS,0x40)) // In Use Set?
> + {
> + Decrement(Local0) // Yes. Decrement Count.
> + Sleep(1) // Delay = 1ms.
> + If(LEqual(Local0,0)) // Count = 0?
> + {
> + Return(1) // Return failure.
> + }
> + }
> + Else
> + {
> + Store(0,Local0) // In Use Clear. Continue.
> + }
> + }
> +
> + // In Use Status = 0 during last read, which will make subsequent
> + // reads return In Use Status = 1 until software clears it. All
> + // software using ICHx SMBus should check this bit before initiating
> + // any SMBus communication.
> +
> + // Wait up to 200ms to confirm the Host Interface is
> + // not processing a command.
> +
> + Store(4000,Local0) // 4000 * 50us = 200ms.
> +
> + While(Local0)
> + {
> + If(And(HSTS,0x01)) // Host Busy Set?
> + {
> + Decrement(Local0) // Decrement Count.
> + Stall(50) // Delay = 50us.
> + If(LEqual(Local0,0)) // Count = 0?
> + {
> + KILL() // Yes. Kill Communication.
> + }
> + }
> + Else
> + {
> + Return(0)
> + }
> + }
> +
> + Return(1) // Timeout. Return failure.
> +}
> +
> +// SMBus Completion Check
> +// Return: Success = 1
> +// Failure = 0
> +
> +Method(COMP,0,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + // Wait for up to 200ms for the Completion Command
> + // Status to get set.
> +
> + Store(4000,Local0) // 4000 * 50us = 200ms.
> +
> + While(Local0)
> + {
> + If(And(HSTS,0x02)) // Completion Status Set?
> + {
> + Return(1) // Yes. We are done.
> + }
> + Else
> + {
> + Decrement(Local0) // Decrement Count.
> + Stall(50) // Delay 50us.
> + If(LEqual(Local0,0)) // Count = 0?
> + {
> + KILL() // Yes. Kill Communication.
> + }
> + }
> + }
> +
> + Return(0) // Timeout. Return Failure.
> +}
> +
> +// SMBus Kill Command
> +
> +Method(KILL,0,Serialized)
> +{
> + OperationRegion(SMPB,PCI_Config,0x20,4)
> + Field(SMPB,DWordAcc,NoLock,Preserve)
> + {
> + , 5,
> + SBAR, 11
> + }
> +
> + // Define various SMBus IO Mapped Registers.
> +
> + OperationRegion(SMBI,SystemIO,ShiftLeft(SBAR,5),0x10)
> + Field(SMBI,ByteAcc,NoLock,Preserve)
> + {
> + HSTS, 8, // 0 - Host Status Register
> + Offset(0x02),
> + HCON, 8, // 2 - Host Control
> + HCOM, 8, // 3 - Host Command
> + TXSA, 8, // 4 - Transmit Slave Address
> + DAT0, 8, // 5 - Host Data 0
> + DAT1, 8, // 6 - Host Data 1
> + HBDR, 8, // 7 - Host Block Data
> + PECR, 8, // 8 - Packer Error Check
> + RXSA, 8, // 9 - Receive Slave Address
> + SDAT, 16, // A - Slave Data
> + }
> + Or(HCON,0x02,HCON) // Yes. Send Kill command.
> + Or(HSTS,0xFF,HSTS) // Clear all status.
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchXhci.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchXhci.asl
> new file mode 100644
> index 0000000000..914209f668
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PchXhci.asl
> @@ -0,0 +1,379 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Haswell *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +//scope is \_SB.PCI0.XHC
> +Device(XHC1)
> +{
> + Name(_ADR, 0x00140000) //Device 20, Function 0
> +
> + //When it is in Host mode, USH core is connected to USB3 microAB(USB3
> P1 and USB2 P0)
> + Name (_DDN, "Baytrail XHCI controller (CCG core/Host only)" )
> +
> + Method(XDEP, 0)
> + {
> + If(LEqual(OSYS,2013))
> + {
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + }
> + }
> +
> + Name (_STR, Unicode ("Baytrail XHCI controller (CCG core/Host only)"))
> + Name(_PRW, Package() {0xD,4})
> +
> + Method(_PSW,1)
> + {
> + If (LAnd (PMES, PMEE)) {
> + Store (0, PMEE)
> + Store (1, PMES)
> + }
> + }
> +
> + OperationRegion (PMEB, PCI_Config, 0x74, 0x04) // Power Management
> Control/Status
> + Field (PMEB, WordAcc, NoLock, Preserve)
> + {
> + , 8,
> + PMEE, 1, //bit8 PME_En
> + , 6,
> + PMES, 1 //bit15 PME_Status
> + }
> +
> + Method(_STA, 0)
> + {
> + If(LNotEqual(XHCI, 0)) //NVS variable controls present of XHCI
> controller
> + {
> + Return (0xF)
> + } Else
> + {
> + Return (0x0)
> + }
> + }
> +
> + OperationRegion(XPRT,PCI_Config,0xD0,0x10)
> + Field(XPRT,DWordAcc,NoLock,Preserve) //usbx_top.doc.xml
> + {
> + PR2, 32, //bit[8:0] USB2HCSEL
> + PR2M, 32, //bit[8:0] USB2HCSELM
> + PR3, 32, //bit[3:0] USB3SSEN
> + PR3M, 32 //bit[3:0] USB3SSENM
> + }
> +
> + Device(RHUB)
> + {
> + Name(_ADR, Zero) //address 0 is reserved for root hub
> +
> + //
> + // Super Speed Ports - must match _UPC declarations of the
> coresponding Full Speed Ports.
> + // Paired with Port 1
> + Device(SSP1)
> + {
> + Name(_ADR, 0x07)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package()
> + {
> + 0xFF, // Port is connectable if non-zero
> + 0x06, // USB3 uAB connector
> + 0x00,
> + 0x00
> + })
> + Return(UPCP)
> + }
> +
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package() //pls check ACPI 5.0 section 6.1.8
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'011 visiable/docking/no lid bit[69:67]=b'001
> bottom panel bit[71:70]=b'01 Center bit[73:72]=b'01 Center
> + // bit[77:74]=6 Horizontal Trapezoid bit[78]=0 bit[86:79]=0
> bit[94:87]='0 no group info' bit[95]=0 not a bay
> + 0x4B, 0x19, 0x00, 0x00,
> + //127:96 -bit[96]=1 Ejectable bit[97]=1 OSPM Ejection required
> Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x03, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> + Return (PLDP)
> + }
> + }
> + //
> + // High Speed Ports
> + // pair port with port 7 (SS)
> + // The UPC declarations for LS/FS/HS and SS ports that are paired to
> form a USB3.0 compatible connector.
> + // A "pair" is defined by two ports that declare _PLDs with identical
> Panel, Vertical Position, Horizontal Postion, Shape, Group Orientation
> + // and Group Token
> + Device(HS01)
> + {
> + Name(_ADR, 0x01)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package() { 0xFF,0x06,0x00,0x00 })
> + Return(UPCP)
> + }
> +
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package() //pls check ACPI 5.0 section 6.1.8
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'011 visiable/docking/no lid bit[69:67]=b'001
> bottom panel bit[71:70]=b'01 Center bit[73:72]=b'01 Center
> + // bit[77:74]=6 Horizontal Trapezoid bit[78]=0 bit[86:79]=0
> bit[94:87]='0 no group info' bit[95]=0 not a bay
> + 0x4B, 0x19, 0x00, 0x00,
> + //127:96 -bit[96]=1 Ejectable bit[97]=1 OSPM Ejection required
> Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x03, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> + Return (PLDP)
> + }
> + }//end of HS01
> +
> + // USB2 Type-A/USB2 only
> + // EHCI debug capable
> + Device(HS02)
> + {
> + Name(_ADR, 0x02) // 0 is for root hub so physical port
> index starts from 1 (it is port1 in schematic)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package()
> + {
> + 0xFF, // connectable
> + 0xFF, //
> + 0x00,
> + 0x00
> + })
> +
> + Return(UPCP)
> + }
> +
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package()
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'011 visiable/docking/no lid bit[69:67]=b'001
> bottom panel bit[71:70]=b'01 Center bit[73:72]=b'00 Left
> + // bit[77:74]=2 Square bit[78]=0 bit[86:79]=0 bit[94:87]='0 no
> group info' bit[95]=0 not a bay
> + 0x4B, 0x08, 0x00, 0x00,
> + //127:96 -bit[96]=1 Ejectable bit[97]=1 OSPM Ejection required
> Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x03, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> +
> + Return (PLDP)
> + }
> + }//end of HS02
> + // high speed port 3
> + Device(HS03)
> + {
> + Name(_ADR, 0x03)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package()
> + {
> + 0xFF, // connectable
> + 0xFF,
> + 0x00,
> + 0x00
> + })
> +
> + Return(UPCP)
> + }
> +
> + Method(_RMV, 0) // for XHCICV debug purpose
> + {
> + Return(0x0)
> + }
> +
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package()
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'000 not Visible/no docking/no lid bit[69:67]=6
> (b'110) unknown(Vertical Position and Horizontal Position will be ignored)
> + // bit[71:70]=b'00 Vertical Position ignore bit[73:72]=b'00
> Horizontal Position ignore
> + // bit[77:74]=2 Square bit[78]=0 bit[86:79]=0 bit[94:87]='0 no
> group info' bit[95]=0 not a bay
> + 0x30, 0x08, 0x00, 0x00,
> + //127:96 -bit[96]=0 not Ejectable bit[97]=0 OSPM Ejection not
> required Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x00, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> + Return (PLDP)
> + }
> + }
> +
> + Device(HS04)
> + {
> + Name(_ADR, 0x04)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package()
> + {
> + 0xFF, //connectable
> + 0xFF, //Proprietary connector (FPC connector)
> + 0x00,
> + 0x00
> + })
> +
> + Return(UPCP)
> + }
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package()
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'000 not Visible/no docking/no lid bit[69:67]=6
> (b'110) unknown(Vertical Position and Horizontal Position will be ignored)
> + // bit[71:70]=b'00 Vertical Position ignore bit[73:72]=b'00
> Horizontal Position ignore
> + // bit[77:74]=2 Square bit[78]=0 bit[86:79]=0 bit[94:87]='0 no
> group info' bit[95]=0 not a bay
> + 0x30, 0x08, 0x00, 0x00,
> + //127:96 -bit[96]=0 not Ejectable bit[97]=0 OSPM Ejection not
> required Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x00, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> +
> + Return (PLDP)
> + }
> + }
> +
> +
> + Device(HSC1) // USB2 HSIC 01
> + {
> + Name(_ADR, 0x05)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package()
> + {
> + 0xFF, //connectable
> + 0xFF, //Proprietary connector (FPC connector)
> + 0x00,
> + 0x00
> + })
> +
> + Return(UPCP)
> + }
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package()
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'000 not Visible/no docking/no lid bit[69:67]=6
> (b'110) unknown(Vertical Position and Horizontal Position will be ignored)
> + // bit[71:70]=b'00 Vertical Position ignore bit[73:72]=b'00
> Horizontal Position ignore
> + // bit[77:74]=2 Square bit[78]=0 bit[86:79]=0 bit[94:87]='0 no
> group info' bit[95]=0 not a bay
> + 0x30, 0x08, 0x00, 0x00,
> + //127:96 -bit[96]=0 not Ejectable bit[97]=0 OSPM Ejection not
> required Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x00, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> + Return (PLDP)
> + }
> + }
> +
> + Device(HSC2) // USB2 HSIC 02
> + {
> + Name(_ADR, 0x06)
> +
> + Method(_UPC,0,Serialized)
> + {
> + Name(UPCP, Package()
> + {
> + 0xFF, //connectable
> + 0xFF, //Proprietary connector (FPC connector)
> + 0x00,
> + 0x00
> + })
> +
> + Return(UPCP)
> + }
> + Method(_PLD,0,Serialized)
> + {
> + Name(PLDP, Package()
> + {
> + Buffer(0x14)
> + {
> + //31:0 - Bit[6:0]=2 revision is 0x2, Bit[7]=1 Ignore Color Bit[31:8]=0
> RGB color is ignored
> + 0x82, 0x00, 0x00, 0x00,
> + //63:32 - Bit[47:32]=0 width: 0x0000 Bit[63:48]=0 Height:0x0000
> + 0x00, 0x00, 0x00, 0x00,
> + //95:64 - bit[66:64]=b'000 not Visible/no docking/no lid bit[69:67]=6
> (b'110) unknown(Vertical Position and Horizontal Position will be ignored)
> + // bit[71:70]=b'00 Vertical Position ignore bit[73:72]=b'00
> Horizontal Position ignore
> + // bit[77:74]=2 Square bit[78]=0 bit[86:79]=0 bit[94:87]='0 no
> group info' bit[95]=0 not a bay
> + 0x30, 0x08, 0x00, 0x00,
> + //127:96 -bit[96]=0 not Ejectable bit[97]=0 OSPM Ejection not
> required Bit[105:98]=0 no Cabinet Number
> + // bit[113:106]=0 no Card cage Number bit[114]=0 no reference
> shape Bit[118:115]=0 no rotation Bit[123:119]=0 no order
> + 0x00, 0x00, 0x00, 0x00,
> + //159:128 Vert. and Horiz. Offsets not supplied
> + 0xFF, 0xFF, 0xFF, 0xFF
> + }
> + })
> + Return (PLDP)
> + }
> + }
> + } //end of root hub
> +
> +} // end of XHC1
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PciTree.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PciTree.asl
> new file mode 100644
> index 0000000000..a64dbafc86
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/PciTree.asl
> @@ -0,0 +1,377 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Sandy Bridge *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +Scope(\_SB)
> +{
> +//RTC
> + Device(RTC) // RTC
> + {
> + Name(_HID,EISAID("PNP0B00"))
> +
> + Name(_CRS,ResourceTemplate()
> + {
> + IO(Decode16,0x70,0x70,0x01,0x08)
> + })
> +
> + Method(_STA,0,Serialized) {
> +
> + //
> + // Report RTC Battery is Prensent or Not Present.
> + //
> + If (LEqual(BATT, 1)) {
> + Return (0xF)
> + }
> + Return (0x0)
> + }
> + }
> +//RTC
> +
> + Device(HPET) // High Performance Event Timer
> + {
> + Name (_HID, EisaId ("PNP0103"))
> + Name (_UID, 0x00)
> + Method (_STA, 0, NotSerialized)
> + {
> + Return (0x0F)
> + }
> +
> + Method (_CRS, 0, Serialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite,
> + 0xFED00000, // Address Base
> + 0x00000400, // Address Length
> + )
> + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, )
> + {
> + 0x00000008, //0xB HPET-2
> + }
> + })
> + Return (RBUF)
> + }
> + }
> +//HPET
> +
> + Name(PR00, Package()
> + {
> +// SD Host #0 - eMMC
> + Package() {0x0010FFFF, 0, LNKA, 0 },
> +// SD Host #1 - SDIO
> + Package() {0x0011FFFF, 0, LNKB, 0 },
> +// SD Host #2 - SD Card
> + Package() {0x0012FFFF, 0, LNKC, 0 },
> +// SATA Controller
> + Package() {0x0013FFFF, 0, LNKD, 0 },
> +// xHCI Host
> + Package() {0x0014FFFF, 0, LNKE, 0 },
> +// Low Power Audio Engine
> + Package() {0x0015FFFF, 0, LNKF, 0 },
> +// USB OTG
> + Package() {0x0016FFFF, 0, LNKG, 0 },
> +// MIPI-HSI/eMMC4.5
> + Package() {0x0017FFFF, 0, LNKH, 0 },
> +// LPSS2 DMA
> +// LPSS2 I2C #4
> + Package() {0x0018FFFF, 0, LNKB, 0 },
> +// LPSS2 I2C #1
> +// LPSS2 I2C #5
> + Package() {0x0018FFFF, 2, LNKD, 0 },
> +// LPSS2 I2C #2
> +// LPSS2 I2C #6
> + Package() {0x0018FFFF, 3, LNKC, 0 },
> +// LPSS2 I2C #3
> +// LPSS2 I2C #7
> + Package() {0x0018FFFF, 1, LNKA, 0 },
> +// SeC
> + Package() {0x001AFFFF, 0, LNKF, 0 },
> +//
> +// High Definition Audio Controller
> + Package() {0x001BFFFF, 0, LNKG, 0 },
> +//
> +// EHCI Controller
> + Package() {0x001DFFFF, 0, LNKH, 0 },
> +// LPSS DMA
> + Package() {0x001EFFFF, 0, LNKD, 0 },
> +// LPSS I2C #0
> + Package() {0x001EFFFF, 3, LNKA, 0 },
> +// LPSS I2C #1
> + Package() {0x001EFFFF, 1, LNKB, 0 },
> +// LPSS PCM
> + Package() {0x001EFFFF, 2, LNKC, 0 },
> +// LPSS I2S
> +// LPSS HS-UART #0
> +// LPSS HS-UART #1
> +// LPSS SPI
> +// LPC Bridge
> +//
> +// SMBus Controller
> + Package() {0x001FFFFF, 1, LNKC, 0 },
> +//
> +// PCIE Root Port #1
> + Package() {0x001CFFFF, 0, LNKA, 0 },
> +// PCIE Root Port #2
> + Package() {0x001CFFFF, 1, LNKB, 0 },
> +// PCIE Root Port #3
> + Package() {0x001CFFFF, 2, LNKC, 0 },
> +// PCIE Root Port #4
> + Package() {0x001CFFFF, 3, LNKD, 0 },
> +
> +// Host Bridge
> +// Mobile IGFX
> + Package() {0x0002FFFF, 0, LNKA, 0 },
> + })
> +
> + Name(AR00, Package()
> + {
> +// SD Host #0 - eMMC
> + Package() {0x0010FFFF, 0, 0, 16 },
> +// SD Host #1 - SDIO
> + Package() {0x0011FFFF, 0, 0, 17 },
> +// SD Host #2 - SD Card
> + Package() {0x0012FFFF, 0, 0, 18 },
> +// SATA Controller
> + Package() {0x0013FFFF, 0, 0, 19 },
> +// xHCI Host
> + Package() {0x0014FFFF, 0, 0, 20 },
> +// Low Power Audio Engine
> + Package() {0x0015FFFF, 0, 0, 21 },
> +// USB OTG
> + Package() {0x0016FFFF, 0, 0, 22 },
> +//
> +// MIPI-HSI
> + Package() {0x0017FFFF, 0, 0, 23 },
> +//
> +// LPSS2 DMA
> +// LPSS2 I2C #4
> + Package() {0x0018FFFF, 0, 0, 17 },
> +// LPSS2 I2C #1
> +// LPSS2 I2C #5
> + Package() {0x0018FFFF, 2, 0, 19 },
> +// LPSS2 I2C #2
> +// LPSS2 I2C #6
> + Package() {0x0018FFFF, 3, 0, 18 },
> +// LPSS2 I2C #3
> +// LPSS2 I2C #7
> + Package() {0x0018FFFF, 1, 0, 16 },
> +
> +// SeC
> + Package() {0x001AFFFF, 0, 0, 21 },
> +//
> +// High Definition Audio Controller
> + Package() {0x001BFFFF, 0, 0, 22 },
> +//
> +// EHCI Controller
> + Package() {0x001DFFFF, 0, 0, 23 },
> +// LPSS DMA
> + Package() {0x001EFFFF, 0, 0, 19 },
> +// LPSS I2C #0
> + Package() {0x001EFFFF, 3, 0, 16 },
> +// LPSS I2C #1
> + Package() {0x001EFFFF, 1, 0, 17 },
> +// LPSS PCM
> + Package() {0x001EFFFF, 2, 0, 18 },
> +// LPSS I2S
> +// LPSS HS-UART #0
> +// LPSS HS-UART #1
> +// LPSS SPI
> +// LPC Bridge
> +//
> +// SMBus Controller
> + Package() {0x001FFFFF, 1, 0, 18 },
> +//
> +// PCIE Root Port #1
> + Package() {0x001CFFFF, 0, 0, 16 },
> +// PCIE Root Port #2
> + Package() {0x001CFFFF, 1, 0, 17 },
> +// PCIE Root Port #3
> + Package() {0x001CFFFF, 2, 0, 18 },
> +// PCIE Root Port #4
> + Package() {0x001CFFFF, 3, 0, 19 },
> +// Host Bridge
> +// Mobile IGFX
> + Package() {0x0002FFFF, 0, 0, 16 },
> + })
> +
> + Name(PR04, Package()
> + {
> +// PCIE Port #1 Slot
> + Package() {0x0000FFFF, 0, LNKA, 0 },
> + Package() {0x0000FFFF, 1, LNKB, 0 },
> + Package() {0x0000FFFF, 2, LNKC, 0 },
> + Package() {0x0000FFFF, 3, LNKD, 0 },
> + })
> +
> + Name(AR04, Package()
> + {
> +// PCIE Port #1 Slot
> + Package() {0x0000FFFF, 0, 0, 16 },
> + Package() {0x0000FFFF, 1, 0, 17 },
> + Package() {0x0000FFFF, 2, 0, 18 },
> + Package() {0x0000FFFF, 3, 0, 19 },
> + })
> +
> + Name(PR05, Package()
> + {
> +// PCIE Port #2 Slot
> + Package() {0x0000FFFF, 0, LNKB, 0 },
> + Package() {0x0000FFFF, 1, LNKC, 0 },
> + Package() {0x0000FFFF, 2, LNKD, 0 },
> + Package() {0x0000FFFF, 3, LNKA, 0 },
> + })
> +
> + Name(AR05, Package()
> + {
> +// PCIE Port #2 Slot
> + Package() {0x0000FFFF, 0, 0, 17 },
> + Package() {0x0000FFFF, 1, 0, 18 },
> + Package() {0x0000FFFF, 2, 0, 19 },
> + Package() {0x0000FFFF, 3, 0, 16 },
> + })
> +
> + Name(PR06, Package()
> + {
> +// PCIE Port #3 Slot
> + Package() {0x0000FFFF, 0, LNKC, 0 },
> + Package() {0x0000FFFF, 1, LNKD, 0 },
> + Package() {0x0000FFFF, 2, LNKA, 0 },
> + Package() {0x0000FFFF, 3, LNKB, 0 },
> + })
> +
> + Name(AR06, Package()
> + {
> +// PCIE Port #3 Slot
> + Package() {0x0000FFFF, 0, 0, 18 },
> + Package() {0x0000FFFF, 1, 0, 19 },
> + Package() {0x0000FFFF, 2, 0, 16 },
> + Package() {0x0000FFFF, 3, 0, 17 },
> + })
> +
> + Name(PR07, Package()
> + {
> +// PCIE Port #4 Slot
> + Package() {0x0000FFFF, 0, LNKD, 0 },
> + Package() {0x0000FFFF, 1, LNKA, 0 },
> + Package() {0x0000FFFF, 2, LNKB, 0 },
> + Package() {0x0000FFFF, 3, LNKC, 0 },
> + })
> +
> + Name(AR07, Package()
> + {
> +// PCIE Port #4 Slot
> + Package() {0x0000FFFF, 0, 0, 19 },
> + Package() {0x0000FFFF, 1, 0, 16 },
> + Package() {0x0000FFFF, 2, 0, 17 },
> + Package() {0x0000FFFF, 3, 0, 18 },
> + })
> +
> + Name(PR01, Package()
> + {
> +// PCI slot 1
> + Package() {0x0000FFFF, 0, LNKF, 0 },
> + Package() {0x0000FFFF, 1, LNKG, 0 },
> + Package() {0x0000FFFF, 2, LNKH, 0 },
> + Package() {0x0000FFFF, 3, LNKE, 0 },
> +// PCI slot 2
> + Package() {0x0001FFFF, 0, LNKG, 0 },
> + Package() {0x0001FFFF, 1, LNKF, 0 },
> + Package() {0x0001FFFF, 2, LNKE, 0 },
> + Package() {0x0001FFFF, 3, LNKH, 0 },
> +// PCI slot 3
> + Package() {0x0002FFFF, 0, LNKC, 0 },
> + Package() {0x0002FFFF, 1, LNKD, 0 },
> + Package() {0x0002FFFF, 2, LNKB, 0 },
> + Package() {0x0002FFFF, 3, LNKA, 0 },
> +// PCI slot 4
> + Package() {0x0003FFFF, 0, LNKD, 0 },
> + Package() {0x0003FFFF, 1, LNKC, 0 },
> + Package() {0x0003FFFF, 2, LNKF, 0 },
> + Package() {0x0003FFFF, 3, LNKG, 0 },
> + })
> +
> + Name(AR01, Package()
> + {
> +// PCI slot 1
> + Package() {0x0000FFFF, 0, 0, 21 },
> + Package() {0x0000FFFF, 1, 0, 22 },
> + Package() {0x0000FFFF, 2, 0, 23 },
> + Package() {0x0000FFFF, 3, 0, 20 },
> +// PCI slot 2
> + Package() {0x0001FFFF, 0, 0, 22 },
> + Package() {0x0001FFFF, 1, 0, 21 },
> + Package() {0x0001FFFF, 2, 0, 20 },
> + Package() {0x0001FFFF, 3, 0, 23 },
> +// PCI slot 3
> + Package() {0x0002FFFF, 0, 0, 18 },
> + Package() {0x0002FFFF, 1, 0, 19 },
> + Package() {0x0002FFFF, 2, 0, 17 },
> + Package() {0x0002FFFF, 3, 0, 16 },
> +// PCI slot 4
> + Package() {0x0003FFFF, 0, 0, 19 },
> + Package() {0x0003FFFF, 1, 0, 18 },
> + Package() {0x0003FFFF, 2, 0, 21 },
> + Package() {0x0003FFFF, 3, 0, 22 },
> + })
> +//---------------------------------------------------------------------------
> +// List of IRQ resource buffers compatible with _PRS return format.
> +//---------------------------------------------------------------------------
> +// Naming legend:
> +// RSxy, PRSy - name of the IRQ resource buffer to be returned by _PRS,
> "xy" - last two characters of IRQ Link name.
> +// Note. PRSy name is generated if IRQ Link name starts from "LNK".
> +// HLxy , LLxy - reference names, can be used to access bit mask of available
> IRQs. HL and LL stand for active High(Low) Level triggered Irq model.
> +//---------------------------------------------------------------------------
> + Name(PRSA, ResourceTemplate() // Link name: LNKA
> + {
> + IRQ(Level, ActiveLow, Shared, LLKA) {3,4,5,6,10,11,12,14,15}
> + })
> + Alias(PRSA,PRSB) // Link name: LNKB
> + Alias(PRSA,PRSC) // Link name: LNKC
> + Alias(PRSA,PRSD) // Link name: LNKD
> + Alias(PRSA,PRSE) // Link name: LNKE
> + Alias(PRSA,PRSF) // Link name: LNKF
> + Alias(PRSA,PRSG) // Link name: LNKG
> + Alias(PRSA,PRSH) // Link name: LNKH
> +//---------------------------------------------------------------------------
> +// Begin PCI tree object scope
> +//---------------------------------------------------------------------------
> +
> + Device(PCI0) // PCI Bridge "Host Bridge"
> + {
> + Name(_HID, EISAID("PNP0A08")) // Indicates PCI Express/PCI-X
> Mode2 host hierarchy
> + Name(_CID, EISAID("PNP0A03")) // To support legacy OS that doesn't
> understand the new HID
> + Name(_ADR, 0x00000000)
> + Method(^BN00, 0) { return(0x0000) } // Returns default Bus number for
> Peer PCI busses. Name can be overriden with control method placed directly
> under Device scope
> + Method(_BBN, 0) { return(BN00()) } // Bus number, optional for the Root
> PCI Bus
> + Name(_UID, 0x0000) // Unique Bus ID, optional
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> +
> + Method(_PRT,0)
> + {
> + If(PICM) {Return(AR00)} // APIC mode
> + Return (PR00) // PIC Mode
> + } // end _PRT
> +
> + include("HOST_BUS.ASL")
> + Device(LPCB) // LPC Bridge
> + {
> + Name(_ADR, 0x001F0000)
> + include("LpcB.asl")
> + } // end "LPC Bridge"
> +
> + } // end PCI0 Bridge "Host Bridge"
> +} // end _SB scope
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Platform.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Platform.asl
> new file mode 100644
> index 0000000000..784eb09f90
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Platform.asl
> @@ -0,0 +1,703 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +// Define the following External variables to prevent a WARNING when
> +// using ASL.EXE and an ERROR when using IASL.EXE.
> +
> +External(PDC0)
> +External(PDC1)
> +External(PDC2)
> +External(PDC3)
> +External(CFGD)
> +External(\_PR.CPU0._PPC, IntObj)
> +External(\_SB.PCI0.LPCB.TPM.PTS, MethodObj)
> +External(\_SB.STR3, DeviceObj)
> +External(\_SB.I2C1.BATC, DeviceObj)
> +External(\_SB.DPTF, DeviceObj)
> +External(\_SB.TCHG, DeviceObj)
> +External(\_SB.IAOE.PTSL)
> +External(\_SB.IAOE.WKRS)
> +
> +//
> +// Create a Global MUTEX.
> +//
> +Mutex(MUTX,0)
> +
> +
> +
> +// Port 80h Update:
> +// Update 8 bits of the 32-bit Port 80h.
> +//
> +// Arguments:
> +// Arg0: 0 = Write Port 80h, Bits 7:0 Only.
> +// 1 = Write Port 80h, Bits 15:8 Only.
> +// 2 = Write Port 80h, Bits 23:16 Only.
> +// 3 = Write Port 80h, Bits 31:24 Only.
> +// Arg1: 8-bit Value to write
> +//
> +// Return Value:
> +// None
> +
> +Method(P8XH,2,Serialized)
> +{
> + If(LEqual(Arg0,0)) // Write Port 80h, Bits 7:0.
> + {
> + Store(Or(And(P80D,0xFFFFFF00),Arg1),P80D)
> + }
> +
> + If(LEqual(Arg0,1)) // Write Port 80h, Bits 15:8.
> + {
> + Store(Or(And(P80D,0xFFFF00FF),ShiftLeft(Arg1,8)),P80D)
> + }
> +
> + If(LEqual(Arg0,2)) // Write Port 80h, Bits 23:16.
> + {
> + Store(Or(And(P80D,0xFF00FFFF),ShiftLeft(Arg1,16)),P80D)
> + }
> +
> + If(LEqual(Arg0,3)) // Write Port 80h, Bits 31:24.
> + {
> + Store(Or(And(P80D,0x00FFFFFF),ShiftLeft(Arg1,24)),P80D)
> + }
> +
> +}
> +
> +//
> +// Define SW SMI port as an ACPI Operating Region to use for generate SW
> SMI.
> +//
> +OperationRegion (SPRT, SystemIO, 0xB2, 2)
> +Field (SPRT, ByteAcc, Lock, Preserve)
> +{
> + SSMP, 8
> +}
> +
> +// The _PIC Control Method is optional for ACPI design. It allows the
> +// OS to inform the ASL code which interrupt controller is being used,
> +// the 8259 or APIC. The reference code in this document will address
> +// PCI IRQ Routing and resource allocation for both cases.
> +//
> +// The values passed into _PIC are:
> +// 0 = 8259
> +// 1 = IOAPIC
> +
> +Method(\_PIC,1)
> +{
> + Store(Arg0,GPIC)
> + Store(Arg0,PICM)
> +}
> +
> +OperationRegion(SWC0, SystemIO, 0x610, 0x0F)
> +Field(SWC0, ByteAcc, NoLock, Preserve)
> +{
> + G1S, 8, //SWC GPE1_STS
> + Offset(0x4),
> + G1E, 8,
> + Offset(0xA),
> + G1S2, 8, //SWC GPE1_STS_2
> + G1S3, 8 //SWC GPE1_STS_3
> +}
> +
> +OperationRegion (SWC1, SystemIO, \PMBS, 0x2C)
> +Field(SWC1, DWordAcc, NoLock, Preserve)
> +{
> + Offset(0x20),
> + G0S, 32, //GPE0_STS
> + Offset(0x28),
> + G0EN, 32 //GPE0_EN
> +}
> +
> +// Prepare to Sleep. The hook is called when the OS is about to
> +// enter a sleep state. The argument passed is the numeric value of
> +// the Sx state.
> +
> +Method(_PTS,1)
> +{
> + Store(0,P80D) // Zero out the entire Port 80h DWord.
> + P8XH(0,Arg0) // Output Sleep State to Port 80h, Byte 0.
> +
> + //clear the 3 SWC status bits
> + Store(Ones, G1S3)
> + Store(Ones, G1S2)
> + Store(1, G1S)
> +
> + //set SWC GPE1_EN
> + Store(1,G1E)
> +
> + //clear GPE0_STS
> + Store(Ones, G0S)
> +
> +
> + If(LEqual(Arg0,3)) // If S3 Suspend
> + {
> + //
> + // Disable Digital Thermal Sensor function when doing S3 suspend
> + //
> + If(CondRefOf(DTSE))
> + {
> + If(LGreaterEqual(DTSE, 0x01))
> + {
> + Store(30, DTSF) // DISABLE_UPDATE_DTS_EVERY_SMI
> + Store(0xD0, SSMP) // DTS SW SMI
> + }
> + }
> + }
> +}
> +
> +// Wake. This hook is called when the OS is about to wake from a
> +// sleep state. The argument passed is the numeric value of the
> +// sleep state the system is waking from.
> +Method(_WAK,1,Serialized)
> +{
> + P8XH(1,0xAB) // Beginning of _WAK.
> +
> + Notify(\_SB.PWRB,0x02)
> +
> + If(NEXP)
> + {
> + // Reinitialize the Native PCI Express after resume
> + If(And(OSCC,0x02))
> + {
> + \_SB.PCI0.NHPG()
> + }
> +
> + If(And(OSCC,0x04)) // PME control granted?
> + {
> + \_SB.PCI0.NPME()
> + }
> + }
> +
> + If(LOr(LEqual(Arg0,3), LEqual(Arg0,4))) // If S3 or S4 Resume
> + {
> +
> +
> + // If CMP is enabled, we may need to restore the C-State and/or
> + // P-State configuration, as it may have been saved before the
> + // configuration was finalized based on OS/driver support.
> + //
> + // CFGD[24] = Two or more cores enabled
> + //
> + If(And(CFGD,0x01000000))
> + {
> + //
> + // If CMP and the OSYS is WinXP SP1, we will enable C1-SMI if
> + // C-States are enabled.
> + //
> + // CFGD[7:4] = C4, C3, C2, C1 Capable/Enabled
> + //
> + //
> + }
> +
> + // Windows XP SP2 does not properly restore the P-State
> + // upon resume from S4 or S3 with degrade modes enabled.
> + // Use the existing _PPC methods to cycle the available
> + // P-States such that the processor ends up running at
> + // the proper P-State.
> + //
> + // Note: For S4, another possible W/A is to always boot
> + // the system in LFM.
> + //
> + If(LEqual(OSYS,2002))
> + {
> + If(And(CFGD,0x01))
> + {
> + If(LGreater(\_PR.CPU0._PPC,0))
> + {
> + Subtract(\_PR.CPU0._PPC,1,\_PR.CPU0._PPC)
> + PNOT()
> + Add(\_PR.CPU0._PPC,1,\_PR.CPU0._PPC)
> + PNOT()
> + }
> + Else
> + {
> + Add(\_PR.CPU0._PPC,1,\_PR.CPU0._PPC)
> + PNOT()
> + Subtract(\_PR.CPU0._PPC,1,\_PR.CPU0._PPC)
> + PNOT()
> + }
> + }
> + }
> + }
> + Return(Package() {0,0})
> +}
> +
> +// Power Notification:
> +// Perform all needed OS notifications during a
> +// Power Switch.
> +//
> +// Arguments:
> +// None
> +//
> +// Return Value:
> +// None
> +
> +Method(PNOT,0,Serialized)
> +{
> + // If MP enabled and driver support is present, notify all
> + // processors.
> +
> + If(MPEN)
> + {
> + If(And(PDC0,0x0008))
> + {
> + Notify(\_PR.CPU0,0x80) // Eval CPU0 _PPC.
> +
> + If(And(PDC0,0x0010))
> + {
> + Sleep(100)
> + Notify(\_PR.CPU0,0x81) // Eval _CST.
> + }
> + }
> +
> + If(And(PDC1,0x0008))
> + {
> + Notify(\_PR.CPU1,0x80) // Eval CPU1 _PPC.
> +
> + If(And(PDC1,0x0010))
> + {
> + Sleep(100)
> + Notify(\_PR.CPU1,0x81) // Eval _CST.
> + }
> + }
> +
> + If(And(PDC2,0x0008))
> + {
> + Notify(\_PR.CPU2,0x80) // Eval CPU2 _PPC.
> +
> + If(And(PDC2,0x0010))
> + {
> + Sleep(100)
> + Notify(\_PR.CPU2,0x81) // Eval _CST.
> + }
> + }
> +
> + If(And(PDC3,0x0008))
> + {
> + Notify(\_PR.CPU3,0x80) // Eval CPU3 _PPC.
> +
> + If(And(PDC3,0x0010))
> + {
> + Sleep(100)
> + Notify(\_PR.CPU3,0x81) // Eval _CST.
> + }
> + }
> + }
> + Else
> + {
> + Notify(\_PR.CPU0,0x80) // Eval _PPC.
> + Sleep(100)
> + Notify(\_PR.CPU0,0x81) // Eval _CST
> + }
> +}
> +
> +//
> +// System Bus
> +//
> +Scope(\_SB)
> +{
> + Name(CRTT, 110) // Processor critical temperature
> + Name(ACTT, 77) // Active temperature limit for processor participant
> + Name(GCR0, 70) // Critical temperature for Generic participant 0 in degree
> celsius
> + Name(GCR1, 70) // Critical temperature for Generic participant 1 in degree
> celsius
> + Name(GCR2, 70) // Critical temperature for Generic participant 2 in degree
> celsius
> + Name(GCR3, 70) // Critical temperature for Generic participant 3 in degree
> celsius
> + Name(GCR4, 70) // Critical temperature for Generic participant 4 in degree
> celsius
> + Name(GCR5, 70) // Critical temperature for Generic participant 5 in degree
> celsius
> + Name(GCR6, 70) // Critical temperature for Generic participant 6 in degree
> celsius
> + Name(PST0, 60) // Passive temperature limit for Generic Participant 0 in
> degree celsius
> + Name(PST1, 60) // Passive temperature limit for Generic Participant 1 in
> degree celsius
> + Name(PST2, 60) // Passive temperature limit for Generic Participant 2 in
> degree celsius
> + Name(PST3, 60) // Passive temperature limit for Generic Participant 3 in
> degree celsius
> + Name(PST4, 60) // Passive temperature limit for Generic Participant 4 in
> degree celsius
> + Name(PST5, 60) // Passive temperature limit for Generic Participant 5 in
> degree celsius
> + Name(PST6, 60) // Passive temperature limit for Generic Participant 6 in
> degree celsius
> + Name(LPMV, 3)
> + Name(PDBG, 0) // DPTF Super debug option
> + Name(PDPM, 1) // DPTF DPPM enable
> + Name(PDBP, 1) // DPTF DBPT enable (dynamic battery protection
> technology)
> + Name(DLPO, Package()
> + {
> + 0x1, // Revision
> + 0x1, // LPO Enable
> + 0x1, // LPO StartPState
> + 25, // LPO StepSize
> + 0x1, //
> + 0x1, //
> + })
> + Name(BRQD, 0x00) // This is used to determine if DPTF display participant
> requested Brightness level change
> + // or it is from Graphics driver. Value of 1 is for DPTF else it is 0
> +
> + Method(_INI,0)
> + {
> + // NVS has stale DTS data. Get and update the values
> + // with current temperatures. Note that this will also
> + // re-arm any AP Thermal Interrupts.
> + // Read temperature settings from global NVS
> + Store(DPCT, CRTT)
> + Store(Subtract(DPPT, 8), ACTT) // Active Trip point = Passive
> trip point - 8
> + Store(DGC0, GCR0)
> + Store(DGC0, GCR1)
> + Store(DGC1, GCR2)
> + Store(DGC1, GCR3)
> + Store(DGC1, GCR4)
> + Store(DGC2, GCR5)
> + Store(DGC2, GCR6)
> + Store(DGP0, PST0)
> + Store(DGP0, PST1)
> + Store(DGP1, PST2)
> + Store(DGP1, PST3)
> + Store(DGP1, PST4)
> + Store(DGP2, PST5)
> + Store(DGP2, PST6)
> + // Read Current low power mode setting from global NVS
> + Store(DLPM, LPMV)
> +
> +
> + // Update DPTF Super Debug option
> + Store(DDBG, PDBG)
> +
> +
> + // Update DPTF LPO Options
> + Store(LPOE, Index(DLPO,1))
> + Store(LPPS, Index(DLPO,2))
> + Store(LPST, Index(DLPO,3))
> + Store(LPPC, Index(DLPO,4))
> + Store(LPPF, Index(DLPO,5))
> + Store(DPME, PDPM)
> + }
> +
> + // Define a (Control Method) Power Button.
> + Device(PWRB)
> + {
> + Name(_HID,EISAID("PNP0C0C"))
> +
> + // GPI_SUS0 = GPE16 = Waketime SCI. The PRW isn't working when
> + // placed in any of the logical locations ( PS2K, PS2M),
> + // so a Power Button Device was created specifically
> + // for the WAKETIME_SCI PRW.
> +
> + Name(_PRW, Package() {16,4})
> + }
> +
> + Device(SLPB)
> + {
> + Name(_HID, EISAID("PNP0C0E"))
> + } // END SLPB
> +
> + Scope(PCI0)
> + {
> + Method(_INI,0)
> + {
> + // Determine the OS and store the value, where:
> + //
> + // OSYS = 2009 = Windows 7 and Windows Server 2008 R2.
> + // OSYS = 2012 = Windows 8 and Windows Server 2012.
> + //
> + // Assume Windows 7 at a minimum.
> +
> + Store(2009,OSYS)
> +
> + // Check for a specific OS which supports _OSI.
> +
> + If(CondRefOf(\_OSI,Local0))
> + {
> + // Linux returns _OSI = TRUE for numerous Windows
> + // strings so that it is fully compatible with
> + // BIOSes available in the market today. There are
> + // currently 2 known exceptions to this model:
> + // 1) Video Repost - Linux supports S3 without
> + // requireing a Driver, meaning a Video
> + // Repost will be required.
> + // 2) On-Screen Branding - a full CMT Logo
> + // is limited to the WIN2K and WINXP
> + // Operating Systems only.
> +
> + // Use OSYS for Windows Compatibility.
> + If(\_OSI("Windows 2009")) // Windows 7 or Windows Server 2008 R2
> + {
> + Store(2009,OSYS)
> + }
> + If(\_OSI("Windows 2012")) // Windows 8 or Windows Server 2012
> + {
> + Store(2012,OSYS)
> + }
> + If(\_OSI("Windows 2013")) //Windows Blue
> + {
> + Store(2013,OSYS)
> + }
> +
> + //
> + // If CMP is enabled, enable SMM C-State
> + // coordination. SMM C-State coordination
> + // will be disabled in _PDC if driver support
> + // for independent C-States deeper than C1
> + // is indicated.
> + }
> + }
> +
> + Method(NHPG,0,Serialized)
> + {
> +
> + }
> +
> + Method(NPME,0,Serialized)
> + {
> +
> + }
> + } // end Scope(PCI0)
> +
> + Device (GPED) //virtual GPIO device for ASL based AC/Battery/Expection
> notification
> + {
> + Name (_ADR, 0)
> + Name (_HID, "INT0002")
> + Name (_CID, "INT0002")
> + Name (_DDN, "Virtual GPIO controller" )
> + Name (_UID, 1)
> +
> + Method (_CRS, 0x0, Serialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) {0x9} //
> Was 9
> + })
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + Return(0x0)
> + }
> +
> + Method (_AEI, 0x0, Serialized)
> + {
> + Name(RBUF, ResourceTemplate()
> + {
> + GpioInt(Edge, ActiveHigh, ExclusiveAndWake, PullDown,,"\\_SB.GPED",)
> {2} //pin 2
> + })
> + Return(RBUF)
> + }
> +
> + Method(_E02) // _Exx method will be called when interrupt is raised
> + {
> + If (LEqual (PWBS, 1))
> + {
> + Store (1, PWBS) //Clear PowerButton Status
> + }
> + If (LEqual (PMEB, 1))
> + {
> + Store (1, PMEB) //Clear PME_B0_STS
> + }
> + If (LEqual (\_SB.PCI0.SATA.PMES, 1))
> + {
> + Store (1, \_SB.PCI0.SATA.PMES)
> + Notify (\_SB.PCI0.SATA, 0x02)
> + }
> + //
> + // eMMC 4.41
> + //
> + If (LAnd(LEqual (\_SB.PCI0.EM41.PMES, 1), LEqual(PCIM, 1)))
> + {
> + Store (1, \_SB.PCI0.EM41.PMES)
> + Notify (\_SB.PCI0.EM41, 0x02)
> + }
> +
> + //
> + // eMMC 4.5
> + //
> + If (LAnd(LEqual (\_SB.PCI0.EM45.PMES, 1), LEqual(PCIM, 1)))
> + {
> + Store (1, \_SB.PCI0.EM45.PMES)
> + Notify (\_SB.PCI0.EM45, 0x02)
> + }
> +
> + If (LEqual(HDAD, 0))
> + {
> + If (LEqual (\_SB.PCI0.HDEF.PMES, 1))
> + {
> + Store (1, \_SB.PCI0.HDEF.PMES)
> + Notify (\_SB.PCI0.HDEF, 0x02)
> + }
> + }
> +
> + If (LEqual (\_SB.PCI0.EHC1.PMES, 1))
> + {
> + Store (1, \_SB.PCI0.EHC1.PMES)
> + Notify (\_SB.PCI0.EHC1, 0x02)
> + }
> + If (LEqual (\_SB.PCI0.XHC1.PMES, 1))
> + {
> + Store (1, \_SB.PCI0.XHC1.PMES)
> + Notify (\_SB.PCI0.XHC1, 0x02)
> + }
> + If (LEqual (\_SB.PCI0.SEC0.PMES, 1))
> + {
> + Or (\_SB.PCI0.SEC0.PMES, Zero, \_SB.PCI0.SEC0.PMES)
> + Notify (\_SB.PCI0.SEC0, 0x02)
> + }
> + }
> + } // Device (GPED)
> +
> + //--------------------
> + // GPIO
> + //--------------------
> + Device (GPO0)
> + {
> + Name (_ADR, 0)
> + Name (_HID, "INT33FC")
> + Name (_CID, "INT33B2")
> + Name (_DDN, "ValleyView2 General Purpose Input/Output (GPIO)
> controller" )
> + Name (_UID, 1)
> + Method (_CRS, 0x0, Serialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x0FED0C000, 0x00001000)
> + Interrupt(ResourceConsumer, Level, ActiveLow, Shared, , , ) {49}
> +
> + })
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + //
> + // GPO driver will report present if any of below New IO bus exist
> + //
> + If (LOr(LEqual(L11D, 0), LEqual(L12D, 0))) // LPIO1 PWM #1 or #2 exist
> + { Return(0xF) }
> + If (LOr(LEqual(L13D, 0), LEqual(L14D, 0))) // LPIO1 HS-UART #1 or #2 exist
> + { Return(0xF) }
> + If (LOr(LEqual(L15D, 0), LEqual(SD1D, 0))) // LPIO1 SPI or SCC SDIO #1
> exist
> + { Return(0xF) }
> + If (LOr(LEqual(SD2D, 0), LEqual(SD3D, 0))) // SCC SDIO #2 or #3 exist
> + { Return(0xF) }
> + If (LOr(LEqual(L21D, 0), LEqual(L22D, 0))) // LPIO2 I2C #1 or #2 exist
> + { Return(0xF) }
> + If (LOr(LEqual(L23D, 0), LEqual(L24D, 0))) // LPIO2 I2C #3 or #4 exist
> + { Return(0xF) }
> + If (LOr(LEqual(L25D, 0), LEqual(L26D, 0))) // LPIO2 I2C #5 or #6 exist
> + { Return(0xF) }
> + If (LEqual(L27D, 0)) // LPIO2 I2C #7 exist
> + { Return(0xF) }
> +
> + Return(0x0)
> + }
> +
> + // Track status of GPIO OpRegion availability for this controller
> + Name(AVBL, 0)
> + Method(_REG,2)
> + {
> + If (Lequal(Arg0, 8))
> + {
> + Store(Arg1, ^AVBL)
> + }
> + }
> +
> + OperationRegion(GPOP, SystemIo, \GPBS, 0x50)
> + Field(GPOP, ByteAcc, NoLock, Preserve) {
> + Offset(0x28), // cfio_ioreg_SC_GP_LVL_63_32_ - [GPIO_BASE_ADDRESS]
> + 28h
> + , 21,
> + BTD3, 1, //This field is not used. Pin not defined in schematics. Closest
> is GPIO_S5_35 - COMBO_BT_WAKEUP
> + Offset(0x48), // cfio_ioreg_SC_GP_LVL_95_64_ - [GPIO_BASE_ADDRESS]
> + 48h
> + , 30,
> + SHD3, 1 //GPIO_S0_SC_95 - SENS_HUB_RST_N
> + }
> +
> +
> +
> + } // Device (GPO0)
> +
> + Device (GPO1)
> + {
> + Name (_ADR, 0)
> + Name (_HID, "INT33FC")
> + Name (_CID, "INT33B2")
> + Name (_DDN, "ValleyView2 GPNCORE controller" )
> + Name (_UID, 2)
> + Method (_CRS, 0x0, Serialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x0FED0D000, 0x00001000)
> + Interrupt(ResourceConsumer, Level, ActiveLow, Shared, , , ) {48}
> + })
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + Return(\_SB.GPO0._STA)
> + }
> + } // Device (GPO1)
> +
> + Device (GPO2)
> + {
> + Name (_ADR, 0)
> + Name (_HID, "INT33FC")
> + Name (_CID, "INT33B2")
> + Name (_DDN, "ValleyView2 GPSUS controller" )
> + Name (_UID, 3)
> + Method (_CRS, 0x0, Serialized)
> + {
> + Name (RBUF, ResourceTemplate ()
> + {
> + Memory32Fixed (ReadWrite, 0x0FED0E000, 0x00001000)
> + Interrupt(ResourceConsumer, Level, ActiveLow, Shared, , , ) {50}
> + })
> + Return (RBUF)
> + }
> +
> + Method (_STA, 0x0, NotSerialized)
> + {
> + Return(^^GPO0._STA)
> + }
> +
> + // Track status of GPIO OpRegion availability for this controller
> + Name(AVBL, 0)
> + Method(_REG,2)
> + {
> + If (Lequal(Arg0, 8))
> + {
> + Store(Arg1, ^AVBL)
> + }
> + }
> + //Manipulate GPIO line using GPIO operation regions.
> + Name (GMOD, ResourceTemplate () //One method of creating a
> Connection for OpRegion accesses in Field definitions
> + {
> + //is creating a named object that refers to the connection attributes
> + GpioIo (Exclusive, PullDefault, 0, 0, IoRestrictionOutputOnly,
> "\\_SB.GPO2") {21} //sus 21+128 BT+WLAN_ENABLE
> + })
> +
> + OperationRegion(GPOP, SystemIo, \GPBS, 0x100)
> + Field(GPOP, ByteAcc, NoLock, Preserve) {
> + Offset(0x88), // cfio_ioreg_SUS_GP_LVL_31_0_ -
> [GPIO_BASE_ADDRESS] + 88h
> + , 20,
> + WFD3, 1
> + }
> +
> +
> + } // Device (GPO2)
> + include ("PchScc.asl")
> + include ("PchLpss.asl")
> +
> + Scope(I2C7)
> + {
> +
> + } //End Scope(I2C7)
> +
> +} // end Scope(\_SB)
> +
> +Name(PICM, 0) // Global Name, returns current Interrupt controller mode;
> updated from _PIC control method
> +
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RTD3.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RTD3.asl
> new file mode 100644
> index 0000000000..2bf62e92a1
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RTD3.asl
> @@ -0,0 +1,197 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +DefinitionBlock (
> + "Rtd3.aml",
> + "SSDT",
> + 1,
> + "AcpiRef",
> + "Msg_Rtd3",
> + 0x1000
> +)
> +{
> + External(RTD3) //flag if RTD3 is enabled
> +
> + If(LEqual(RTD3,1))
> + {
> + Scope (\_SB)
> + {
> + Name(OSCI, 0) // \_SB._OSC DWORD2 input
> + Name(OSCO, 0) // \_SB._OSC DWORD2 output
> +
> + //Arg0 -- A buffer containing UUID
> + //Arg1 -- An Interger containing a Revision ID of the buffer format
> + //Arg2 -- An interger containing a count of entries in Arg3
> + //Arg3 -- A buffer containing a list of DWORD capacities
> + Method(_OSC, 4, NotSerialized)
> + {
> + // Check for proper UUID
> + If(LEqual(Arg0, ToUUID("0811B06E-4A27-44F9-8D60-3CBBC22E7B48")))
> + {
> + CreateDWordField(Arg3,0,CDW1) //bit1,2 is always clear
> + CreateDWordField(Arg3,4,CDW2) //Table 6-147 from ACPI spec
> +
> + Store(CDW2, OSCI) // Save DWord2
> + Or(OSCI, 0x4, OSCO) // Only allow _PR3 support
> +
> + If(LNotEqual(Arg1,One))
> + {
> + Or(CDW1,0x08,CDW1) // Unknown revision
> + }
> +
> + If(LNotEqual(OSCI, OSCO))
> + {
> + Or(CDW1,0x10,CDW1) // Capabilities bits were masked
> + }
> +
> + Store(OSCO, CDW2) // Replace DWord2
> + Return(Arg3)
> + } Else
> + {
> + Or(CDW1,4,CDW1) // Unrecognized UUID
> + Return(Arg3)
> + }
> + }// End _OSC
> + }
> + }//end of RTD3 condition
> +
> +
> + //USB RTD3 code
> + If(LEqual(RTD3,1))
> + {
> + Scope(\_SB.PCI0.EHC1.HUBN.PR01.PR13)
> + {
> + Name(_PR0, Package() {\PR34})
> + Name(_PR3, Package() {\PR34})
> +
> + Method(_S0W, 0)
> + {
> + If(And(\_SB.OSCO, 0x04)) // PMEs can be genrated from D3cold
> + {
> + Return(4) // OS comprehends D3cold, as described via
> \_SB._OSC
> + } Else
> + {
> + Return(3)
> + }
> + } // End _S0W
> + }
> +
> + Scope(\_SB.PCI0.EHC1.HUBN.PR01.PR14)
> + {
> + Name(_PR0, Package() {\PR34})
> + Name(_PR3, Package() {\PR34})
> +
> + Method(_S0W, 0)
> + {
> + If(And(\_SB.OSCO, 0x04))
> + {
> + Return(4)
> + } Else
> + {
> + Return(3)
> + }
> + } // End _S0W
> + }
> +
> +
> + Scope(\_SB.PCI0.EHC1.HUBN.PR01.PR15)
> + {
> + Name(_PR0, Package() {\PR56})
> + Name(_PR3, Package() {\PR56})
> +
> + Method(_S0W, 0)
> + {
> + If(And(\_SB.OSCO, 0x04))
> + {
> + Return(4)
> + } Else
> + {
> + Return(3)
> + }
> + } // End _S0W
> + }
> +
> + Scope(\_SB.PCI0.EHC1.HUBN.PR01.PR16)
> + {
> + Name(_PR0, Package() {\PR56})
> + Name(_PR3, Package() {\PR56})
> +
> + Method(_S0W, 0)
> + {
> + If(And(\_SB.OSCO, 0x04))
> + {
> + Return(4)
> + } Else
> + {
> + Return(3)
> + }
> + } // End _S0W
> + }
> +
> + Scope(\_SB.PCI0.XHC1) // XHCI host only controller
> + {
> +
> + Method(_PS0,0,Serialized) // set device into D0 state
> + {
> + }
> +
> + Method(_PS3,0,Serialized) // place device into D3H state
> + {
> + //write to PMCSR
> + }
> +
> + Method(_DSW, 3,Serialized) // enable or disable the device’s
> ability to wake a sleeping system.
> + {
> + }
> + }
> +
> + Scope(\_SB.PCI0.XHC1.RHUB.HS01)
> + {
> +
> + }
> +
> + Scope(\_SB.PCI0.XHC1.RHUB.SSP1)
> + {
> +
> + }
> +
> + Scope(\_SB.PCI0.XHC2) // OTG
> + {
> +
> + Method(_PS0,0,Serialized) // set device into D0 state
> + {
> + }
> +
> + Method(_PS3,0,Serialized) // place device into D3H state
> + {
> + //write to PMCSR
> + }
> +
> + Method(_DSW, 3,Serialized) // enable or disable the device’s
> ability to wake a sleeping system.
> + {
> + }
> + }
> +
> + Scope(\_SB.PCI0.XHC2.RHUB.HS01)
> + {
> +
> + }
> +
> + Scope(\_SB.PCI0.XHC2.RHUB.SSP1)
> + {
> +
> + }
> + } //If(LEqual(RTD3,1)) USB
> +
> +}//end of SSDT
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RhProxy.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RhProxy.asl
> new file mode 100644
> index 0000000000..d7e785f532
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/RhProxy.asl
> @@ -0,0 +1,160 @@
> +/** @file
> + SSDT for RhProxy Driver.
> +
> +Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +DefinitionBlock ("RHPX.aml", "SSDT", 1, "MSFT", "RHPROXY", 1)
> +{
> + Scope (\_SB)
> + {
> + //
> + // Test peripheral device node for MinnowBoardMax
> + //
> + Device(RHPX)
> + {
> + Name(_HID, "MSFT8000")
> + Name(_CID, "MSFT8000")
> + Name(_UID, 1)
> +
> + Name(_CRS, ResourceTemplate()
> + {
> + // Index 0
> + SPISerialBus( // Pin 5, 7, 9 , 11 of JP1 for SIO_SPI
> + 1, // Device selection
> + PolarityLow, // Device selection polarity
> + FourWireMode, // wiremode
> + 8, // databit len
> + ControllerInitiated, // slave mode
> + 8000000, // Connection speed
> + ClockPolarityLow, // Clock polarity
> + ClockPhaseSecond, // clock phase
> + "\\_SB.SPI1", // ResourceSource: SPI bus controller name
> + 0, // ResourceSourceIndex
> + ResourceConsumer, // Resource usage
> + JSPI, // DescriptorName: creates name for offset of
> resource descriptor
> + ) // Vendor Data
> +
> + // Index 1
> + I2CSerialBus( // Pin 13, 15 of JP1, for SIO_I2C5 (signal)
> + 0xFF, // SlaveAddress: bus address (TBD)
> + , // SlaveMode: default to ControllerInitiated
> + 400000, // ConnectionSpeed: in Hz
> + , // Addressing Mode: default to 7 bit
> + "\\_SB.I2C6", // ResourceSource: I2C bus controller name
> (For MinnowBoard Max, hardware I2C5(0-based) is reported as ACPI I2C6(1-
> based))
> + ,
> + ,
> + JI2C, // Descriptor Name: creates name for offset of
> resource descriptor
> + ) // VendorData
> +
> + // Index 2
> + UARTSerialBus( // Pin 17, 19 of JP1, for SIO_UART2
> + 115200, // InitialBaudRate: in bits ber second
> + , // BitsPerByte: default to 8 bits
> + , // StopBits: Defaults to one bit
> + 0xfc, // LinesInUse: 8 1-bit flags to declare line enabled
> + , // IsBigEndian: default to LittleEndian
> + , // Parity: Defaults to no parity
> + , // FlowControl: Defaults to no flow control
> + 32, // ReceiveBufferSize
> + 32, // TransmitBufferSize
> + "\\_SB.URT2", // ResourceSource: UART bus controller name
> + ,
> + ,
> + UAR2, // DescriptorName: creates name for offset of
> resource descriptor
> + )
> +
> + // Index 3
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO2",)
> {0} // Pin 21 of JP1 (GPIO_S5[00])
> + // Index 4
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO2",) {0}
> +
> + // Index 5
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO2",)
> {1} // Pin 23 of JP1 (GPIO_S5[01])
> + // Index 6
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO2",) {1}
> +
> + // Index 7
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO2",)
> {2} // Pin 25 of JP1 (GPIO_S5[02])
> + // Index 8
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO2",) {2}
> +
> + // Index 9
> + UARTSerialBus( // Pin 6, 8, 10, 12 of JP1, for SIO_UART1
> + 115200, // InitialBaudRate: in bits ber second
> + , // BitsPerByte: default to 8 bits
> + , // StopBits: Defaults to one bit
> + 0xfc, // LinesInUse: 8 1-bit flags to declare line enabled
> + , // IsBigEndian: default to LittleEndian
> + , // Parity: Defaults to no parity
> + FlowControlHardware, // FlowControl: Defaults to no flow
> control
> + 32, // ReceiveBufferSize
> + 32, // TransmitBufferSize
> + "\\_SB.URT1", // ResourceSource: UART bus controller name
> + ,
> + ,
> + UAR1, // DescriptorName: creates name for offset of
> resource descriptor
> + )
> +
> + // Index 10
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {62} // Pin 14 of JP1 (GPIO_SC[62])
> + // Index 11
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {62}
> +
> + // Index 12
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {63} // Pin 16 of JP1 (GPIO_SC[63])
> + // Index 13
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {63}
> +
> + // Index 14
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {65} // Pin 18 of JP1 (GPIO_SC[65])
> + // Index 15
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {65}
> +
> + // Index 16
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {64} // Pin 20 of JP1 (GPIO_SC[64])
> + // Index 17
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {64}
> +
> + // Index 18
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {94} // Pin 22 of JP1 (GPIO_SC[94])
> + // Index 19
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {94}
> +
> + // Index 20
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {95} // Pin 24 of JP1 (GPIO_SC[95])
> + // Index 21
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {95}
> +
> + // Index 22
> + GpioIo (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPO0",)
> {54} // Pin 26 of JP1 (GPIO_SC[54])
> + // Index 23
> + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone,
> 0,"\\_SB.GPO0",) {54}
> + })
> +
> + Name(_DSD, Package()
> + {
> + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
> + Package()
> + {
> + // SPI Mapping
> + Package(2) { "bus-SPI-SPI0", Package() { 0 }},
> +
> + // TODO: Intel will need to provide the right value for SPI0
> properties
> + Package(2) { "SPI0-MinClockInHz", 100000 },
> + Package(2) { "SPI0-MaxClockInHz", 15000000 },
> + // SupportedDataBitLengths takes a list of support data bit length
> + // Example : Package(2) { "SPI0-SupportedDataBitLengths",
> Package() { 8, 7, 16 }},
> + Package(2) { "SPI0-SupportedDataBitLengths", Package() { 4, 5, 6,
> 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
> 30, 31, 32 }},
> + // I2C Mapping
> + Package(2) { "bus-I2C-I2C5", Package() { 1 }},
> + // UART Mapping
> + Package(2) { "bus-UART-UART2", Package() { 2 }},
> + Package(2) { "bus-UART-UART1", Package() { 9 }},
> + }
> + })
> + }
> + }
> +}
> \ No newline at end of file
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/THERMAL.ASL
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/THERMAL.ASL
> new file mode 100644
> index 0000000000..6d9e9f3d69
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/THERMAL.ASL
> @@ -0,0 +1,137 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +// THERMAL.ASL represents a Thermal Zone to be used for testing on the
> +// Customer Reference Boards.
> +
> +External(\_SB.DPTF.CTOK, MethodObj)
> +
> +Scope(\_TZ)
> +{
> +
> + // Thermal Zone 1 = DTS Thermal Zone.
> +
> + ThermalZone(TZ01)
> + {
> + // Return the temperature at which the OS must perform a Critcal
> + // Shutdown.
> +
> + Method(_CRT,0,Serialized)
> + {
> + Return(Add(2732,Multiply(CRTT,10)))
> + }
> +
> + // Notifies ASL Code the current cooling mode.
> + // 0 - Active cooling
> + // 1 - Passive cooling
> +
> + Method(_SCP,1,Serialized)
> + {
> + Store(Arg0,CTYP)
> + }
> +
> + // _TMP (Temperature)
> + //
> + // Return the highest of the CPU temperatures to the OS.
> + //
> + // Arguments: (0)
> + // None
> + // Return Value:
> + // An Integer containing the current temperature of the thermal zone (in
> tenths of degrees Kelvin)
> + //
> + Method(_TMP,0,Serialized)
> + {
> + If(DTSE)
> + {
> + If(LGreater(DTS2, DTS1))
> + {
> + Store(DTS2,Local0)
> + } else
> + {
> + Store(DTS1,Local0)
> + }
> + If (LEqual(And(Local0, 0x80), 0)) {
> + Return(Add(2732,Multiply(Local0,10)))
> + } else {
> + Add(Subtract(255, Local0), 1, Local0)
> + Return(Subtract(2732,Multiply(Local0,10)))
> + }
> + //
> + // Else return a static value if both EC and DTS are unavailable.
> + //
> + } Else
> + {
> + Return(3000) // (3000-2732)/10 = 26.8 degree C
> + }
> + }
> +
> + // Return the Processor(s) used for Passive Cooling.
> +
> + Method(_PSL,0,Serialized)
> + {
> + If(LEqual(MPEN, 4))
> + {
> + // CMP - Throttling controls all four logical CPUs.
> + Return(Package() {\_PR.CPU0,\_PR.CPU1,\_PR.CPU2,\_PR.CPU3})
> + }
> +
> + If(MPEN)
> + {
> + // CMP - Throttling controls both CPUs.
> +
> + Return(Package() {\_PR.CPU0,\_PR.CPU1})
> + }
> +
> + Return(Package() {\_PR.CPU0})
> + }
> +
> + // Returns the temperature at which the OS initiates CPU throttling.
> +
> + Method(_PSV,0,Serialized)
> + {
> + Return(Add(2732,Multiply(PSVT,10)))
> + }
> +
> + // Returns TC1 value used in the passive cooling formula.
> +
> + Method(_TC1,0,Serialized)
> + {
> + Return(TC1V)
> + }
> +
> + // Returns TC2 value used in the passive cooling formula.
> +
> + Method(_TC2,0,Serialized)
> + {
> + Return(TC2V)
> + }
> +
> + // Returns the sampling period used in the passive cooling formula.
> +
> + Method(_TSP,0,Serialized)
> + {
> + Return(TSPV)
> + }
> +
> + // Returns Hot Temperature
> +
> + Method(_HOT,0,Serialized)
> + {
> + Subtract(CRTT, 5, Local0)
> + Return(Add(2732,Multiply(Local0,10)))
> + }
> + }
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/UsbSbd.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/UsbSbd.asl
> new file mode 100644
> index 0000000000..a4fb173862
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/UsbSbd.asl
> @@ -0,0 +1,93 @@
> +/*********************************************************
> ***************************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* MPG-MSAE *;
> +;* *;
> +;* Copyright (c) 1999 - 2014, Intel Corporation. *;
> +;* *;
> +;* ThSPDX-License-Identifier: BSD-2-Clause-Patent
> +;* *;
> +;* *;
> +;* This program has been developed by Intel Corporation. *;
> +;* Licensee has Intel's permission to incorporate this source code *;
> +;* into their product, royalty free. This source code may NOT be *;
> +;* redistributed to anyone without Intel's written permission. *;
> +;* *;
> +;* Intel specifically disclaims all warranties, express or *;
> +;* implied, and all liability, including consequential and other *;
> +;* indirect damages, for the use of this code, including liability *;
> +;* for infringement of any proprietary rights, and including the *;
> +;* warranties of merchantability and fitness for a particular *;
> +;* purpose. Intel does not assume any responsibility for any *;
> +;* errors which may appear in this code nor any responsibility to *;
> +;* update it. *;
> +;* *;
> +;* Version: See README.TXT *;
> +;* *;
> +;*********************************************************
> ***************************/
> +
> +//
> +// _DSM : Device Specific Method supporting USB Sideband Deferring
> function
> +//
> +// Arg0: UUID Unique function identifier
> +// Arg1: Integer Revision Level
> +// Arg2: Integer Function Index
> +// Arg3: Package Parameters
> +//
> +Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj,
> PkgObj})
> +{
> +
> + If (LEqual(Arg0, ToUUID ("A5FC708F-8775-4BA6-BD0C-BA90A1EC72F8")))
> + {
> + //
> + // Switch by function index
> + //
> + Switch (ToInteger(Arg2))
> + {
> + //
> + // Standard query - A bitmask of functions supported
> + // Supports function 0-2
> + //
> + Case (0)
> + {
> + if (LEqual(Arg1, 1)) // test Arg1 for the revision
> + {
> + Return (Buffer () {0x07})
> + }
> + else
> + {
> + Return (Buffer () {0})
> + }
> + }
> + //
> + // USB Sideband Deferring Support
> + // 0: USB Sideband Deferring not supported on this device
> + // 1: USB Sideband Deferring supported
> + //
> + Case (1)
> + {
> + if (LEqual(SDGV,0xFF)) // check for valid GPE vector
> + {
> + Return (0)
> + }
> + else
> + {
> + Return (1)
> + }
> + }
> + //
> + // GPE Vector
> + // Return the bit offset within the GPE block of the GPIO (HOST_ALERT)
> driven by this device
> + //
> + Case (2)
> + {
> + Return (SDGV)
> + }
> + }
> + }
> +
> + Return (0)
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Video.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Video.asl
> new file mode 100644
> index 0000000000..768b912aae
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Video.asl
> @@ -0,0 +1,34 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Baytrail *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +
> +
> +
> +// Brightness Notification:
> +// Generate a brightness related notification
> +// to the LFP if its populated.
> +//
> +// Arguments:
> +// Arg0: Notification value.
> +//
> +// Return Value:
> +// None
> +Method(BRTN,1,Serialized)
> +{
> + If(LEqual(And(DIDX,0x0F00),0x400))
> + {
> + Notify(\_SB.PCI0.GFX0.DD1F,Arg0)
> + }
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Vlv.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Vlv.asl
> new file mode 100644
> index 0000000000..32e1851303
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Vlv.asl
> @@ -0,0 +1,39 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + VLV.ASL
> +
> +Abstract:
> +
> + Baytrail PCI configuration space definition.
> +
> +--*/
> +Scope (\_SB.PCI0)
> +{
> +
> + Device(GFX0) // Mobile I.G.D
> + {
> + Name(_ADR, 0x00020000)
> +
> + Method(GDEP, 0)
> + {
> + If(LEqual(OSYS,2013))
> + {
> + Name(_DEP, Package(0x1)
> + {
> + PEPD
> + })
> + }
> + }
> +
> + include("INTELGFX.ASL")
> + include("INTELISPDev2.ASL")
> + } // end "Mobile I.G.D"
> +}//end scope
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Wsmt/Wsmt.aslc
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Wsmt/Wsmt.aslc
> new file mode 100644
> index 0000000000..35fa799123
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/Wsmt/Wsmt.aslc
> @@ -0,0 +1,54 @@
> +/*++
> + Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Wsmt.c
> +
> +Abstract:
> +
> + This file contains a structure definition for the Windows SMM Security
> + Mitigations Table (WSMT).
> +
> +++*/
> +
> +//
> +// Statements that include other files
> +//
> +#include "AcpiTablePlatform.h"
> +#include <IndustryStandard/WindowsSmmSecurityMitigationTable.h>
> +
> +//
> +// WSMT Table definition
> +//
> +EFI_ACPI_WSMT_TABLE WSMT = {
> + EFI_ACPI_WINDOWS_SMM_SECURITY_MITIGATION_TABLE_SIGNATURE,
> + sizeof (EFI_ACPI_WSMT_TABLE),
> + EFI_WSMT_TABLE_REVISION,
> + //
> + // Checksum will be updated at runtime
> + //
> + 0,
> + EFI_ACPI_OEM_ID, // OEMID is a 6 bytes long field
> + EFI_ACPI_OEM_TABLE_ID, // OEM table identification(8 bytes long)
> + EFI_ACPI_OEM_REVISION, // OEM revision
> + EFI_ACPI_CREATOR_ID, // ASL compiler vendor ID
> + EFI_ACPI_CREATOR_REVISION, // ASL compiler revision number
> + 0x00000000, // Protection flag
> +};
> +
> +VOID*
> +ReferenceAcpiTable (
> + VOID
> + )
> +{
> + //
> + // Reference the table being generated to prevent the optimizer from
> + // removing the data structure from the executable
> + //
> + return (VOID*)&WSMT;
> +}
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/token.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/token.asl
> new file mode 100644
> index 0000000000..f976cb84d3
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/token.asl
> @@ -0,0 +1,39 @@
> +/*********************************************************
> *****************;
> +;* *;
> +;* *;
> +;* Intel Corporation - ACPI Reference Code for the Sandy Bridge *;
> +;* Family of Customer Reference Boards. *;
> +;* *;
> +;* *;
> +;* Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved *;
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;* *;
> +;* *;
> +;*********************************************************
> *****************/
> +
> +Name(PMBS, 0x400) // ASL alias for ACPI I/O base address.
> +Name(SMIP, 0xb2) // I/O port to trigger SMI
> +Name(GPBS, 0x500) // GPIO Register Block address
> +Name(APCB, 0xfec00000) // Default I/O APIC(s) memory start address,
> 0x0FEC00000 - default, 0 - I/O APIC's disabled
> +Name(APCL, 0x1000) // I/O APIC(s) memory decoded range, 0x1000 -
> default, 0 - I/O APIC's not decoded
> +Name(PFDR, 0xfed03034) // PMC Function Disable Register
> +Name(PMCB, 0xfed03000) // PMC Base Address
> +Name(PCLK, 0xfed03060) // PMC Clock Control Register
> +Name(PUNB, 0xfed05000) // PUNIT Base Address
> +Name(IBAS, 0xfed08000) // ILB Base Address
> +Name(SRCB, 0xfed1c000) // RCBA (Root Complex Base Address)
> +Name(SRCL, 0x1000) // RCBA length
> +Name(HPTB, 0xfed00000) // Same as HPET_BASE_ADDRESS for ASL use
> +Name(PEBS, 0xe0000000) // PCIe Base
> +Name(PELN, 0x10000000) //
> +Name(FMBL, 0x1) // Platform Flavor - Mobile flavor for ASL code.
> +Name(FDTP, 0x2) // Platform Flavor - Desktop flavor for ASL code.
> +Name(SDGV, 0x1c) // UHCI Controller HOST_ALERT's bit offset within
> the GPE block. GPIO[0:15] corresponding to GPE[16:31]
> +Name(PEHP, 0x1) // _OSC: Pci Express Native Hot Plug Control
> +Name(SHPC, 0x0) // _OSC: Standard Hot Plug Controller (SHPC) Native Hot
> Plug control
> +Name(PEPM, 0x1) // _OSC: Pci Express Native Power Management Events
> control
> +Name(PEER, 0x1) // _OSC: Pci Express Advanced Error Reporting control
> +Name(PECS, 0x1) // _OSC: Pci Express Capability Structure control
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Guid/Vlv2DeviceRefCodePkg
> TokenSpace.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Guid/Vlv2DeviceRefCodePkg
> TokenSpace.h
> new file mode 100644
> index 0000000000..c7408b9308
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Guid/Vlv2DeviceRefCodePkg
> TokenSpace.h
> @@ -0,0 +1,24 @@
> +/*++
> +
> +Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + Vlv2DeviceRefCodeTokenSpace.h
> +
> +Abstract:
> +
> + Interface definition details for GUID.
> +
> +--*/
> +#ifndef __VLV2_REF_CODE__PKG_TOKEN_SPACE_GUID_H__
> +#define __VLV2_REF_CODE__PKG_TOKEN_SPACE_GUID_H__
> +
> +#define EFI_VLV_TOKEN_SPACE_GUID \
> + { 0xca452c68, 0xdf0c, 0x45c9, {0x82, 0xfb, 0xea, 0xe4, 0x2b, 0x31, 0x29,
> 0x46}}
> +extern EFI_GUID gEfiVLVTokenSpaceGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/PttPassThruPpi.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/PttPassThruPpi.h
> new file mode 100644
> index 0000000000..55646f4f3e
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/PttPassThruPpi.h
> @@ -0,0 +1,92 @@
> +/*++
> +
> + Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +--*/
> +
> +#ifndef _EFI_PTT_PASS_THRU_PPI_H
> +#define _EFI_PTT_PASS_THRU_PPI_H
> +
> +#define PTT_PASS_THRU_PPI_GUID \
> + { \
> + 0xc5068bac, 0xa7dc, 0x42f1, 0xae, 0x80, 0xca, 0xa2, 0x4b, 0xb4, 0x90, 0x4b
> \
> + }
> +// {C5068BAC-A7DC-42f1-AE80-CAA24BB4904B}
> +//static const GUID <<name>> =
> +//{ 0xc5068bac, 0xa7dc, 0x42f1, { 0xae, 0x80, 0xca, 0xa2, 0x4b, 0xb4, 0x90,
> 0x4b } };
> +
> +
> +
> +//#define EFI_PTT_PROTOCOL_GUID HECI_PROTOCOL_GUID
> +
> +typedef struct _PTT_PASS_THRU_PPI PTT_PASS_THRU_PPI;
> +
> +/**
> + This service enables the sending of commands to the TPM2.
> +
> + @param[in] InputParameterBlockSize Size of the TPM2 input parameter
> block.
> + @param[in] InputParameterBlock Pointer to the TPM2 input
> parameter block.
> + @param[in,out] OutputParameterBlockSize Size of the TPM2 output
> parameter block.
> + @param[in] OutputParameterBlock Pointer to the TPM2 output
> parameter block.
> +
> + @retval EFI_SUCCESS The command byte stream was successfully
> sent to the device and a response was successfully received.
> + @retval EFI_DEVICE_ERROR The command was not successfully sent to
> the device or a response was not successfully received from the device.
> + @retval EFI_BUFFER_TOO_SMALL The output parameter block is too
> small.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *TPM2_SUBMIT_COMMAND) (
> + IN PTT_PASS_THRU_PPI *This,
> + IN UINT32 InputParameterBlockSize,
> + IN UINT8 *InputParameterBlock,
> + IN OUT UINT32 *OutputParameterBlockSize,
> + IN UINT8 *OutputParameterBlock
> + );
> +
> +/**
> + This service requests use TPM2.
> +
> + @retval EFI_SUCCESS Get the control of TPM2 chip.
> + @retval EFI_NOT_FOUND TPM2 not found.
> + @retval EFI_DEVICE_ERROR Unexpected device behavior.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *TPM2_REQUEST_USE_TPM) (
> + IN PTT_PASS_THRU_PPI *This
> + );
> +
> +typedef struct {
> + EFI_GUID ProviderGuid;
> + TPM2_SUBMIT_COMMAND Tpm2SubmitCommand;
> + TPM2_REQUEST_USE_TPM Tpm2RequestUseTpm;
> +} PTT_TPM2_DEVICE_INTERFACE;
> +
> +
> +/**
> + This service register TPM2 device.
> +
> + @param Tpm2Device TPM2 device
> +
> + @retval EFI_SUCCESS This TPM2 device is registered successfully.
> + @retval EFI_UNSUPPORTED System does not support register this TPM2
> device.
> + @retval EFI_ALREADY_STARTED System already register this TPM2 device.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *TPM2_REGISTER_TPM2_DEVICE_LIB) (
> + IN PTT_PASS_THRU_PPI *This,
> + IN PTT_TPM2_DEVICE_INTERFACE *Tpm2Device
> + );
> +
> +typedef struct _PTT_PASS_THRU_PPI {
> + TPM2_SUBMIT_COMMAND Tpm2SubmitCommand;
> + TPM2_REQUEST_USE_TPM Tpm2RequestUseTpm;
> + TPM2_REGISTER_TPM2_DEVICE_LIB Tpm2RegisterTpm2DeviceLib;
> +} PTT_PASS_THRU_PPI;
> +
> +extern EFI_GUID gPttPassThruPpiGuid;
> +
> +#endif // _EFI_HECI_H
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/fTPMPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/fTPMPolicy.h
> new file mode 100644
> index 0000000000..8f3acfd005
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Ppi/fTPMPolicy.h
> @@ -0,0 +1,26 @@
> +/*++
> +
> + Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +--*/
> +
> +#ifndef _SEC_FTPM_POLICY_PPI_H_
> +#define _SEC_FTPM_POLICY_PPI_H_
> +
> +#define SEC_FTPM_POLICY_PPI_GUID \
> + { \
> + 0x4fd1ba49, 0x8f90, 0x471a, 0xa2, 0xc9, 0x17, 0x3c, 0x7a, 0x73, 0x2f, 0xd0
> \
> + }
> +
> +extern EFI_GUID gSeCfTPMPolicyPpiGuid;
> +
> +//
> +// PPI definition
> +//
> +typedef struct SEC_FTPM_POLICY_PPI {
> + BOOLEAN fTPMEnable;
> +} SEC_FTPM_POLICY_PPI;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/PttPassThru.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/PttPassThru.h
> new file mode 100644
> index 0000000000..2009a46816
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/PttPassThru.h
> @@ -0,0 +1,91 @@
> +/*++
> +
> + Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +--*/
> +
> +#ifndef _EFI_PTT_PASS_THRU_H
> +#define _EFI_PTT_PASS_THRU_H
> +
> +#define PTT_PASS_THRU_PROTOCOL_GUID \
> + { \
> + 0x73e2576, 0xf6c1, 0x4b91, 0x92, 0xa9, 0xd4, 0x67, 0x5d, 0xda, 0x34, 0xb1
> \
> + }
> +// {073E2576-F6C1-4b91-92A9-D4675DDA34B1}
> +//static const GUID <<name>> =
> +//{ 0x73e2576, 0xf6c1, 0x4b91, { 0x92, 0xa9, 0xd4, 0x67, 0x5d, 0xda, 0x34,
> 0xb1 } };
> +
> +
> +//#define EFI_PTT_PROTOCOL_GUID HECI_PROTOCOL_GUID
> +
> +typedef struct _PTT_PASS_THRU_PROTOCOL PTT_PASS_THRU_PROTOCOL;
> +
> +/**
> + This service enables the sending of commands to the TPM2.
> +
> + @param[in] InputParameterBlockSize Size of the TPM2 input parameter
> block.
> + @param[in] InputParameterBlock Pointer to the TPM2 input
> parameter block.
> + @param[in,out] OutputParameterBlockSize Size of the TPM2 output
> parameter block.
> + @param[in] OutputParameterBlock Pointer to the TPM2 output
> parameter block.
> +
> + @retval EFI_SUCCESS The command byte stream was successfully
> sent to the device and a response was successfully received.
> + @retval EFI_DEVICE_ERROR The command was not successfully sent to
> the device or a response was not successfully received from the device.
> + @retval EFI_BUFFER_TOO_SMALL The output parameter block is too
> small.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *TPM2_SUBMIT_COMMAND) (
> + IN PTT_PASS_THRU_PROTOCOL *This,
> + IN UINT32 InputParameterBlockSize,
> + IN UINT8 *InputParameterBlock,
> + IN OUT UINT32 *OutputParameterBlockSize,
> + IN UINT8 *OutputParameterBlock
> + );
> +
> +/**
> + This service requests use TPM2.
> +
> + @retval EFI_SUCCESS Get the control of TPM2 chip.
> + @retval EFI_NOT_FOUND TPM2 not found.
> + @retval EFI_DEVICE_ERROR Unexpected device behavior.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *TPM2_REQUEST_USE_TPM) (
> + IN PTT_PASS_THRU_PROTOCOL *This
> + );
> +
> +typedef struct {
> + EFI_GUID ProviderGuid;
> + TPM2_SUBMIT_COMMAND Tpm2SubmitCommand;
> + TPM2_REQUEST_USE_TPM Tpm2RequestUseTpm;
> +} PTT_TPM2_DEVICE_INTERFACE;
> +
> +
> +/**
> + This service register TPM2 device.
> +
> + @param Tpm2Device TPM2 device
> +
> + @retval EFI_SUCCESS This TPM2 device is registered successfully.
> + @retval EFI_UNSUPPORTED System does not support register this TPM2
> device.
> + @retval EFI_ALREADY_STARTED System already register this TPM2 device.
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *TPM2_REGISTER_TPM2_DEVICE_LIB) (
> + IN PTT_PASS_THRU_PROTOCOL *This,
> + IN PTT_TPM2_DEVICE_INTERFACE *Tpm2Device
> + );
> +
> +typedef struct _PTT_PASS_THRU_PROTOCOL {
> + TPM2_SUBMIT_COMMAND Tpm2SubmitCommand;
> + TPM2_REQUEST_USE_TPM Tpm2RequestUseTpm;
> + TPM2_REGISTER_TPM2_DEVICE_LIB Tpm2RegisterTpm2DeviceLib;
> +} PTT_PASS_THRU_PROTOCOL;
> +
> +extern EFI_GUID gPttPassThruProtocolGuid;
> +
> +#endif // _EFI_HECI_H
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Guid/P
> owerManagementAcpiTableStorage.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Guid/P
> owerManagementAcpiTableStorage.h
> new file mode 100644
> index 0000000000..eab1db0897
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Guid/P
> owerManagementAcpiTableStorage.h
> @@ -0,0 +1,27 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + PowerManagementAcpiTableStorage.h
> +
> +Abstract:
> +
> + GUID definition for the Power Management ACPI table storage file name
> +
> +--*/
> +
> +#ifndef _POWER_MANAGEMENT_ACPI_TABLE_STORAGE_H_
> +#define _POWER_MANAGEMENT_ACPI_TABLE_STORAGE_H_
> +
> +#define POWER_MANAGEMENT_ACPI_TABLE_STORAGE_GUID \
> + { 0x161be597, 0xe9c5, 0x49db, 0xae, 0x50, 0xc4, 0x62, 0xab, 0x54, 0xee,
> 0xda }
> +
> +extern EFI_GUID gPowerManagementAcpiTableStorageGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Ppi/Vlv
> Policy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Ppi/Vlv
> Policy.h
> new file mode 100644
> index 0000000000..0a8b267db1
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Ppi/Vlv
> Policy.h
> @@ -0,0 +1,104 @@
> +
> +/*++
> +
> +Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + VlvPolicy.h
> +
> +Abstract:
> +
> + Interface definition details between ValleyView MRC and platform drivers
> during PEI phase.
> +
> +--*/
> +
> +#ifndef _VLV_POLICY_PPI_H_
> +#define _VLV_POLICY_PPI_H_
> +
> +//
> +// MRC Policy provided by platform for PEI phase {7D84B2C2-22A1-4372-
> B12C-EBB232D3A6A3}
> +//
> +#define VLV_POLICY_PPI_GUID \
> + { \
> + 0x7D84B2C2, 0x22A1, 0x4372, 0xB1, 0x2C, 0xEB, 0xB2, 0x32, 0xD3, 0xA6,
> 0xA3 \
> + }
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gVlvPolicyPpiGuid;
> +
> +//
> +// PPI revision number
> +// Any backwards compatible changes to this PPI will result in an update in
> the revision number
> +// Major changes will require publication of a new PPI
> +//
> +#define MRC_PLATFORM_POLICY_PPI_REVISION 1
> +
> +#ifndef MAX_SOCKETS
> +#define MAX_SOCKETS 4
> +#endif
> +
> +#define S3_TIMING_DATA_LEN 9
> +#define S3_READ_TRAINING_DATA_LEN 16
> +#define S3_WRITE_TRAINING_DATA_LEN 12
> +
> +#ifndef S3_RESTORE_DATA_LEN
> +#define S3_RESTORE_DATA_LEN (S3_TIMING_DATA_LEN +
> S3_READ_TRAINING_DATA_LEN + S3_WRITE_TRAINING_DATA_LEN)
> +#endif // S3_RESTORE_DATA_LEN
> +#pragma pack(1)
> +//
> +// MRC Platform Data Structure
> +//
> +typedef struct {
> + UINT8 SpdAddressTable[MAX_SOCKETS];
> + UINT8 TSonDimmSmbusAddress[MAX_SOCKETS];
> +
> + UINT16 SmbusBar;
> + UINT32 IchRcba;
> + UINT32 WdbBaseAddress; // Write Data Buffer area (WC caching mode)
> + UINT32 WdbRegionSize;
> + UINT32 SmBusAddress;
> + UINT8 UserBd;
> + UINT8 PlatformType;
> + UINT8 FastBoot;
> + UINT8 DynSR;
> +} VLV_PLATFORM_DATA;
> +
> +
> +typedef struct {
> + UINT16 MmioSize;
> + UINT16 GttSize;
> + UINT8 IgdDvmt50PreAlloc;
> + UINT8 PrimaryDisplay;
> + UINT8 PAVPMode;
> + UINT8 ApertureSize;
> +} GT_CONFIGURATION;
> +
> +typedef struct {
> + UINT8 EccSupport;
> + UINT16 DdrFreqLimit;
> + UINT8 MaxTolud;
> +} MEMORY_CONFIGURATION;
> +
> +
> +//
> +// MRC Platform Policiy PPI
> +//
> +typedef struct _VLV_POLICY_PPI {
> + UINT8 Revision;
> + VLV_PLATFORM_DATA PlatformData;
> + GT_CONFIGURATION GtConfig;
> + MEMORY_CONFIGURATION MemConfig;
> + VOID *S3DataPtr; // was called MRC_PARAMS_SAVE_RESTORE
> + UINT8 ISPEn; //ISP (IUNIT) Device Enabled
> + UINT8 ISPPciDevConfig; //ISP (IUNIT) Device Config: 0->B0/D2/F0
> for Window OS, 1->B0D3/F0 for Linux OS
> +} VLV_POLICY_PPI;
> +
> +#pragma pack()
> +
> +#endif // _VLV_POLICY_PPI_H_
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Protoc
> ol/PpmPlatformPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Protoc
> ol/PpmPlatformPolicy.h
> new file mode 100644
> index 0000000000..ab6b9e80d3
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Protoc
> ol/PpmPlatformPolicy.h
> @@ -0,0 +1,132 @@
> +/**
> + Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +/*++
> +
> +Module Name:
> +
> + PpmPlatformPolicy.h
> +
> +Abstract:
> +
> + Interface definition details between PPM and platform drivers during DXE
> phase.
> +
> +--*/
> +#ifndef _PPM_PLATFORM_POLICY_H_
> +#define _PPM_PLATFORM_POLICY_H_
> +
> +//
> +// PPM policy provided by platform for DXE phase {DDABFEAC-EF63-452c-
> 8F39-ED7FAED8265E}
> +//
> +#define PPM_PLATFORM_POLICY_PROTOCOL_GUID \
> + {0xddabfeac, 0xef63, 0x452c, 0x8f, 0x39, 0xed, 0x7f, 0xae, 0xd8, 0x26, 0x5e}
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gPpmPlatformPolicyProtocolGuid;
> +
> +//
> +// Forward reference for ANSI C compatibility
> +//
> +typedef struct _PPM_PLATFORM_POLICY_PROTOCOL
> PPM_PLATFORM_POLICY_PROTOCOL;
> +
> +//
> +// Protocol revision number
> +// Any backwards compatible changes to this protocol will result in an
> update in the revision number
> +// Major changes will require publication of a new protocol
> +//
> +// Revision 1: Original version
> +// Revision 2: Added T-states field to the PPM_FUNCTION_ENABLES
> structure, Renamed unused fields - CxPopUpEnable, CxPopDownEnable,
> FastC4ExitEnable
> +// Revision 3: Extended VidCpuid to 32 bits for extended CPUID support
> (Penryn)
> +// Revision 4: Added support for extended C6 residency enabling
> +//
> +#define PPM_PLATFORM_POLICY_PROTOCOL_REVISION 1
> +#define PPM_PLATFORM_POLICY_PROTOCOL_REVISION_2 2
> +#define PPM_PLATFORM_POLICY_PROTOCOL_REVISION_3 3
> +#define PPM_PLATFORM_POLICY_PROTOCOL_REVISION_4 4
> +
> +//
> +// Define maximum number of custom VID states supported
> +//
> +#ifndef MAX_CUSTOM_VID_TABLE_STATES
> +#define MAX_CUSTOM_VID_TABLE_STATES 6
> +#endif
> +//
> +// Custom VID table
> +//
> +typedef struct {
> + UINT8 VidNumber;
> + UINT32 VidCpuid;
> + UINT16 VidMaxRatio;
> + UINT16 VidMaxVid;
> + UINT16 StateRatio[MAX_CUSTOM_VID_TABLE_STATES];
> + UINT16 StateVid[MAX_CUSTOM_VID_TABLE_STATES];
> +} PPM_CUSTOM_VID_TABLE;
> +
> +//
> +// PPM functional enables
> +//
> +typedef struct {
> + UINT8 EnableGv :1; // 0: Disabled; 1: Enabled
> + UINT8 EnableCx :1;
> + UINT8 EnableCxe :1;
> + UINT8 EnableC4 :1;
> + UINT8 EnableC6 :1;
> + UINT8 EnableC7 :1;
> + UINT8 EnableTm :1;
> + UINT8 Reserve00 :1;
> + UINT8 Reserve01 :1;
> + UINT8 EnableTurboMode :1;
> + UINT8 PowerLimit2 :1;
> + UINT8 EnableProcHot :1;
> + UINT8 Reserve02 :1;
> + UINT8 EnableCMP :1;
> + UINT8 TStatesEnable :1;
> + UINT8 Reserve03 :1;
> + UINT8 Reserve04 ;
> +
> +} PPM_FUNCTION_ENABLES;
> +
> +
> +//
> +// PPM Turbo settings
> +//
> +typedef struct _PPM_TURBO_SETTINGS {
> + UINT16 PowerLimit1;
> + UINT32 PowerLimit1Time;
> + UINT16 PowerLimit2;
> + UINT8 TurboPowerLimitLock;
> +} PPM_TURBO_SETTINGS;
> +
> +//
> +// Platform Policy
> +//
> +struct _PPM_PLATFORM_POLICY_PROTOCOL {
> + UINT8 Revision;
> + PPM_FUNCTION_ENABLES FunctionEnables;
> + PPM_CUSTOM_VID_TABLE CustomVidTable;
> + PPM_TURBO_SETTINGS TurboSettings;
> +
> + UINT8 Reserve00;
> + UINT8 Reserve01;
> + UINT8 Reserve02;
> + UINT8 Reserve03;
> + UINT8 Reserve04;
> + UINT8 Reserve05;
> + UINT8 Reserve06;
> +
> + UINT8 S3RestoreMsrSwSmiNumber;
> + UINT8 Reserve07;
> + UINT32 Reserve08;
> + UINT8 Reserve09;
> + //
> + // Primary and Secondary Plane Current Limits
> + //
> + UINT16 Reserve10;
> + UINT8 Reserve11;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Types.
> h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Types.
> h
> new file mode 100644
> index 0000000000..0df6a6d193
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/Include/Types.
> h
> @@ -0,0 +1,55 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Types.h
> +
> +Abstract:
> +
> + This file include all the external data types.
> +
> +--*/
> +
> +#ifndef _TYPES_H_
> +#define _TYPES_H_
> +
> +
> +
> +//
> +// Modifiers to abstract standard types to aid in debug of problems
> +//
> +#define CONST const
> +#define STATIC static
> +#define VOID void
> +#define VOLATILE volatile
> +
> +//
> +// Constants. They may exist in other build structures, so #ifndef them.
> +//
> +#ifndef TRUE
> +#define TRUE ((BOOLEAN) 1 == 1)
> +#endif
> +
> +#ifndef FALSE
> +#define FALSE ((BOOLEAN) 0 == 1)
> +#endif
> +
> +#ifndef NULL
> +#define NULL ((VOID *) 0)
> +#endif
> +
> +typedef UINT32 STATUS;
> +#define SUCCESS 0
> +#define FAILURE 0xFFFFFFFF
> +
> +#ifndef MRC_DEADLOOP
> +#define MRC_DEADLOOP() while (TRUE)
> +#endif
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/PowerManagementAcpiTables.inf
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/PowerManagementAcpiTables.inf
> new file mode 100644
> index 0000000000..021b95fa61
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/PowerManagementAcpiTables.inf
> @@ -0,0 +1,39 @@
> +#
> +#/*++
> +#
> +#Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#
> +#Module Name:
> +#
> +# PowerManagementAcpiTables.inf
> +#
> +#Abstract:
> +#
> +# Component description file for the ACPI tables
> +#
> +#--*/
> +
> +[defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = PowerManagementAcpiTables2
> + FILE_GUID = 161BE597-E9C5-49DB-AE50-C462AB54EEDA
> + MODULE_TYPE = USER_DEFINED
> + VERSION_STRING = 1.0
> + EDK_RELEASE_VERSION = 0x00020000
> + EFI_SPECIFICATION_VERSION = 0x00020000
> +
> +
> +[sources.common]
> + Ssdt/Cpu0Cst.asl
> + Ssdt/Cpu0Ist.asl
> + Ssdt/Cpu0Tst.asl
> + Ssdt/ApCst.asl
> + Ssdt/ApIst.asl
> + Ssdt/ApTst.asl
> + Ssdt/CpuPm.asl
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApCst.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApCst.asl
> new file mode 100644
> index 0000000000..6aa130b115
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApCst.asl
> @@ -0,0 +1,110 @@
> +/*-----------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +
> + Intel Silvermont Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2006 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: CPU1CST.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +
> +--------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, END user
> + preference, processor performance demand, and thermal conditions;
> and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +
> +-------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - IF the trap range and port definitions do not match those
> + specified by this reference code, this file must be modified IAW the
> + individual implmentation.
> +
> +--------------------------------------------------------------------------------
> +------------------------------------------------------------------------------*/
> +
> +
> +DefinitionBlock (
> + "APCST.aml",
> + "SSDT",
> + 1,
> + "PmRef",
> + "ApCst",
> + 0x3000
> + )
> +{
> +External(\_PR.CPU1, DeviceObj)
> +External(\_PR.CPU2, DeviceObj)
> +External(\_PR.CPU3, DeviceObj)
> +External(\_PR.CPU0._CST)
> +
> + Scope(\_PR.CPU1)
> + {
> + Method(_CST,0)
> + {
> + //
> + // Return P0's _CST object.
> + //
> + Return(\_PR.CPU0._CST)
> + }
> + }
> +
> + Scope(\_PR.CPU2)
> + {
> + Method(_CST,0)
> + {
> + //
> + // Return P0's _CST object.
> + //
> + Return(\_PR.CPU0._CST)
> + }
> + }
> +
> + Scope(\_PR.CPU3)
> + {
> + Method(_CST,0)
> + {
> + //
> + // Return P0's _CST object.
> + //
> + Return(\_PR.CPU0._CST)
> + }
> + }
> +} // End of Definition Block
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApIst.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApIst.asl
> new file mode 100644
> index 0000000000..ffffe9a8fc
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApIst.asl
> @@ -0,0 +1,166 @@
> +/*-----------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +
> + Intel Silvermont Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2006 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: APIST.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +
> +--------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, END user
> + preference, processor performance demand, and thermal conditions;
> and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +
> +-------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - IF the trap range and port definitions do not match those
> + specified by this reference code, this file must be modified IAW the
> + individual implmentation.
> +
> +--------------------------------------------------------------------------------
> +------------------------------------------------------------------------------*/
> +
> +
> +DefinitionBlock (
> + "APIST.aml",
> + "SSDT",
> + 1,
> + "PmRef",
> + "ApIst",
> + 0x3000
> + )
> +{
> + External(\_PR.CPU0._PSS, MethodObj)
> + External(\_PR.CPU0._PCT, MethodObj)
> + External(\_PR.CPU0._PPC, IntObj)
> + External(\_PR.CPU0._PSD, MethodObj)
> + External(\_PR.CPU1, DeviceObj)
> + External(\_PR.CPU2, DeviceObj)
> + External(\_PR.CPU3, DeviceObj)
> + External (CFGD)
> + External (PDC0)
> +
> + Scope(\_PR.CPU1)
> + {
> + Method(_PPC,0)
> + {
> + Return(\_PR.CPU0._PPC) // Return P0 _PPC value.
> + }
> +
> + Method(_PCT,0)
> + {
> + Return(\_PR.CPU0._PCT) // Return P0 _PCT.
> + }
> +
> + Method(_PSS,0)
> + {
> + //Return the same table as CPU0 for CMP cases.
> + Return(\_PR.CPU0._PSS)
> + }
> +
> + // The _PSD object provides information to the OSPM related
> + // to P-State coordination between processors in a multi-processor
> + // configurations.
> + //
> + Method(_PSD,0)
> + {
> + Return(\_PR.CPU0._PSD) // Return P0 _PSD.
> + }
> + }
> +
> + Scope(\_PR.CPU2)
> + {
> + Method(_PPC,0)
> + {
> + Return(\_PR.CPU0._PPC) // Return P0 _PPC value.
> + }
> +
> + Method(_PCT,0)
> + {
> + Return(\_PR.CPU0._PCT) // Return P0 _PCT.
> + }
> +
> + Method(_PSS,0)
> + {
> + //Return the same table as CPU0 for CMP cases.
> + Return(\_PR.CPU0._PSS)
> + }
> +
> + // The _PSD object provides information to the OSPM related
> + // to P-State coordination between processors in a multi-processor
> + // configurations.
> + //
> + Method(_PSD,0)
> + {
> + Return(\_PR.CPU0._PSD) // Return P0 _PSD.
> + }
> + }
> +
> + Scope(\_PR.CPU3)
> + {
> + Method(_PPC,0)
> + {
> + Return(\_PR.CPU0._PPC) // Return P0 _PPC value.
> + }
> +
> + Method(_PCT,0)
> + {
> + Return(\_PR.CPU0._PCT) // Return P0 _PCT.
> + }
> +
> + Method(_PSS,0)
> + {
> + //Return the same table as CPU0 for CMP cases.
> + Return(\_PR.CPU0._PSS)
> + }
> +
> + // The _PSD object provides information to the OSPM related
> + // to P-State coordination between processors in a multi-processor
> + // configurations.
> + //
> + Method(_PSD,0)
> + {
> + Return(\_PR.CPU0._PSD) // Return P0 _PSD.
> + }
> + }
> +} // End of Definition Block
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApTst.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApTst.asl
> new file mode 100644
> index 0000000000..760eb3c108
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/ApTst.asl
> @@ -0,0 +1,262 @@
> +/*-----------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +
> + Intel Platform Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2007 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: APTST.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +
> +--------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, END user
> + preference, processor performance demand, and thermal conditions;
> and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +
> +-------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - IF the trap range and port definitions do not match those
> + specified by this reference code, this file must be modified IAW the
> + individual implmentation.
> +
> +--------------------------------------------------------------------------------
> +------------------------------------------------------------------------------*/
> +
> +
> +DefinitionBlock(
> + "APTST.aml",
> + "SSDT",
> + 0x01,
> + "PmRef",
> + "ApTst",
> + 0x3000
> + )
> +{
> + External(\_PR.CPU1, DeviceObj)
> + External(\_PR.CPU2, DeviceObj)
> + External(\_PR.CPU3, DeviceObj)
> + External(\_PR.CPU0._PTC)
> + External(\_PR.CPU0._TSS)
> + External(PDC0)
> + External(CFGD)
> + External(MPEN)
> +
> + Scope(\_PR.CPU1)
> + {
> + Name(_TPC, 0) // All T-States are available
> +
> + //
> + // T-State Control/Status interface
> + //
> + Method(_PTC, 0)
> + {
> + Return(\_PR.CPU0._PTC)
> + }
> +
> + Method(_TSS, 0)
> + {
> + Return(\_PR.CPU0._TSS)
> + }
> +
> + //
> + // T-State Dependency
> + //
> + Method(_TSD, 0)
> + {
> + //
> + // IF four cores are supported/enabled && !(direct access to
> MSR)
> + // Report 4 processors and SW_ANY as the coordination
> + // IF two cores are supported/enabled && !(direct access to
> MSR)
> + // Report 2 processors and SW_ANY as the coordination type
> + // ELSE
> + // Report 1 processor and SW_ALL as the coordination type
> (domain 1)
> + //
> + // CFGD[23] = Four cores enabled
> + // CFGD[24] = Two or more cores enabled
> + // PDCx[2] = OSPM is capable of direct access to On
> + // Demand throttling MSR
> + //
> +
> + If(LNot(And(PDC0,4)))
> + {
> + Return(Package(){ // SW_ANY
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFD, // Coord Type- SW_ANY
> + MPEN // # processors.
> + }
> + })
> + }
> + Return(Package(){ // SW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 1, // Domain #.
> + 0xFC, // Coord Type- SW_ALL
> + 1 // # processors.
> + }
> + })
> + }
> + } // End of CPU1
> +
> + Scope(\_PR.CPU2)
> + {
> + Name(_TPC, 0) // All T-States are available
> +
> + //
> + // T-State Control/Status interface
> + //
> + Method(_PTC, 0)
> + {
> + Return(\_PR.CPU0._PTC)
> + }
> +
> + Method(_TSS, 0)
> + {
> + Return(\_PR.CPU0._TSS)
> + }
> +
> + //
> + // T-State Dependency
> + //
> + Method(_TSD, 0)
> + {
> + //
> + // IF four cores are supported/enabled && !(direct access to
> MSR)
> + // Report 4 processors and SW_ANY as the coordination
> + // IF two cores are supported/enabled && !(direct access to
> MSR)
> + // Report 2 processors and SW_ANY as the coordination type
> + // ELSE
> + // Report 1 processor and SW_ALL as the coordination type
> (domain 1)
> + //
> + // CFGD[23] = Four cores enabled
> + // CFGD[24] = Two or more cores enabled
> + // PDCx[2] = OSPM is capable of direct access to On
> + // Demand throttling MSR
> + //
> +
> + If(LNot(And(PDC0,4)))
> + {
> + Return(Package(){ // SW_ANY
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFD, // Coord Type- SW_ANY
> + MPEN // # processors.
> + }
> + })
> + }
> + Return(Package(){ // SW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 1, // Domain #.
> + 0xFC, // Coord Type- SW_ALL
> + 1 // # processors.
> + }
> + })
> + }
> + } // End of CPU2
> +
> + Scope(\_PR.CPU3)
> + {
> + Name(_TPC, 0) // All T-States are available
> +
> + //
> + // T-State Control/Status interface
> + //
> + Method(_PTC, 0)
> + {
> + Return(\_PR.CPU0._PTC)
> + }
> +
> + Method(_TSS, 0)
> + {
> + Return(\_PR.CPU0._TSS)
> + }
> +
> + //
> + // T-State Dependency
> + //
> + Method(_TSD, 0)
> + {
> + //
> + // IF four cores are supported/enabled && !(direct access to
> MSR)
> + // Report 4 processors and SW_ANY as the coordination
> + // IF two cores are supported/enabled && !(direct access to
> MSR)
> + // Report 2 processors and SW_ANY as the coordination type
> + // ELSE
> + // Report 1 processor and SW_ALL as the coordination type
> (domain 1)
> + //
> + // CFGD[23] = Four cores enabled
> + // CFGD[24] = Two or more cores enabled
> + // PDCx[2] = OSPM is capable of direct access to On
> + // Demand throttling MSR
> + //
> +
> + If(LNot(And(PDC0,4)))
> + {
> + Return(Package(){ // SW_ANY
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFD, // Coord Type- SW_ANY
> + MPEN // # processors.
> + }
> + })
> + }
> + Return(Package(){ // SW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 1, // Domain #.
> + 0xFC, // Coord Type- SW_ALL
> + 1 // # processors.
> + }
> + })
> + }
> + } // End of CPU3
> +} // End of Definition Block
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Cst.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Cst.asl
> new file mode 100644
> index 0000000000..76c774a44d
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Cst.asl
> @@ -0,0 +1,274 @@
> +
> +/*-----------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +
> + Intel Silvermont Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2006 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: CPU0CST.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +
> +--------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, END user
> + preference, processor performance demand, and thermal conditions; and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +
> +-------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - IF the trap range and port definitions do not match those
> + specified by this reference code, this file must be modified IAW the
> + individual implmentation.
> +
> +--------------------------------------------------------------------------------
> +------------------------------------------------------------------------------*/
> +
> +
> +DefinitionBlock (
> + "CPU0CST.aml",
> + "SSDT",
> + 1,
> + "PmRef",
> + "Cpu0Cst",
> + 0x3001
> + )
> +{
> + External(\_PR.CPU0, DeviceObj)
> + External(PWRS)
> + External(CFGD)
> + External(PDC0)
> +
> + Scope(\_PR.CPU0)
> + {
> + OperationRegion (DEB0, SystemIO, 0x80, 1) //DBG
> + Field (DEB0, ByteAcc,NoLock,Preserve) //DBG
> + { DBG8, 8,} //DBG
> +
> + Method (_CST, 0)
> + {
> + Store(0x60,DBG8) //DBG
> +
> + // IF CMP is supported, but independent C-States beyond C1 are
> + // not supported; return C1 Halt and rely on BIOS based software
> + // coordination
> + //
> + // CFGD[24] = CMP support
> + // PDCx[4] = 0 - OS does not support ind. C2/C3 in MP systems
> + //
> + // Note: SMI will be generated when both processor enter the
> + // Halt state.
> + //
> + If(LAnd(And(CFGD,0x01000000), LNot(And(PDC0,0x10))))
> + {
> + Store(0x61,DBG8) //DBG
> + Return(Package() {
> + 1,
> + Package()
> + { // C1 halt, but with BIOS coordination
> + ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
> + 1,
> + 157,
> + 1000
> + }
> + })
> + }
> +
> + // IF MWAIT extensions are supported, use them.
> + //
> + // IF C6 capable/enabled AND Battery
> + // Report MWAIT C1, C2, C6 w/ BM_STS avoidance
> + // ELSE IF C4 capable/enabled AND Battery
> + // Report MWAIT C1, C2, C4 w/ BM_STS avoidance
> + // ELSE IF C3 capable/enabled
> + // Report MWAIT C1, C2, C3 w/ BM_STS avoidance
> + // ELSE IF C2 capable/enabled
> + // Report MWAIT C1, C2
> + // ELSE
> + // Report MWAIT C1
> + //
> + // CFGD[21] = 1 - MWAIT extensions supported
> + // CFGD[13] = 1 - C7 Capable/Enabled
> + // CFGD[12] = 1 - C6S Capable/Enabled
> + // CFGD[11] = 1 - C6 Capable/Enabled
> + // CFGD[7] = 1 - C4 Capable/Enabled
> + // CFGD[5] = 1 - C3 Capable/Enabled
> + // PDCx[9] = 1 - OS supports MWAIT extensions
> + // PDCx[8] = 1 - OS supports MWAIT for C1
> + // (Inferred from PDCx[9] = 1.)
> + // PDCx[4] = 1 - OS supports independent C2/C3 in MP systems
> + // or
> + // NOT CMP (Inferred from previous check.)
> + //
> + If(LAnd(And(CFGD, 0x200000), And(PDC0,0x200)))
> + {
> + //
> + // <TODO> The implementor may wish to only report C1-C2
> + // when on AC power. In this case, the IF clause below can
> + // be modified to something like:
> + //
> + // "If(LAnd(And(CFGD,0x200), LNot(PWRS)))"
> + //
> + // Which uses the power state of the system (PWRS) to
> + // determine whether to allow deepers states.
> + //
> + // IF C7 supported AND on battery
> + // report MWAIT C1, C6, C7
> + //
> + // CFGD[13] = C7 Capable/Enabled
> + // CFGD[11] = C6 Capable/Enabled
> + //
> + If(LAnd(And(CFGD,0x2000),And(CFGD,0x40000000)))
> + {
> + Store(0x77,DBG8) //DBG
> + Return( Package()
> + {
> + 3,
> + Package()
> + { // C1, MWAIT
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x00, 1)},
> + 1,
> + 1,
> + 1000
> + },
> + Package()
> + {
> + // C6, MWAIT Extension with Incremental L2 Shrink
> + // ResourceTemplate(){Register(FFixedHW, 1, 2, 0x50, 1)},
> + // C6, MWAIT Extension with No L2 Shrink
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x51, 1)},
> + 2,
> + 500,
> + 10
> + },
> + Package()
> + {
> + // C7, MWAIT Extension with Full L2 Shrink
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x64, 1)},
> + 3,
> + 1500, //PnP setting, 1.5 ms for worst-case exit latency
> + 10
> + }
> + })
> + }
> +
> +
> + If(LAnd(And(CFGD,0x2000),LNot(And(CFGD,0x40000000))))
> + {
> + Store(0x67,DBG8) //DBG
> + Return( Package()
> + {
> + 3,
> + Package()
> + { // C1, MWAIT
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x00, 1)},
> + 1,
> + 1,
> + 1000
> + },
> + Package()
> + {
> + // C6, MWAIT Extension with Incremental L2 Shrink
> + // ResourceTemplate(){Register(FFixedHW, 1, 2, 0x50, 1)},
> + // C6 = C6NS, MWAIT Extension with No L2 Shrink
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x51, 1)},
> + 2,
> + 500,
> + 10
> + },
> + Package()
> + {
> +
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x52, 1)},
> + 3,
> + 1500, //PnP setting, 1.5 ms for worst-case exit latency
> + 10
> + }
> + })
> + }
> +
> + If(And(CFGD,0x800)) // Setup Max C-State = C6
> + {
> + Store(0x76,DBG8) //DBG
> + Return( Package()
> + {
> + 2,
> + Package()
> + { // C1, MWAIT
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x00, 1)},
> + 1,
> + 1,
> + 1000
> + },
> + Package()
> + {
> + // C6, MWAIT Extension with Incremental L2 Shrink
> + // ResourceTemplate(){Register(FFixedHW, 1, 2, 0x50, 1)},
> + // C6, MWAIT Extension with No L2 Shrink
> + ResourceTemplate(){Register(FFixedHW, 1, 2, 0x51, 1)},
> + 2,
> + 500,
> + 10
> + }
> + })
> + }
> + //
> + // IF no deeper C-States are supported; report MWAIT C1.
> + //
> + Store(0x71,DBG8) //DBG
> + Return(Package()
> + {
> + 1,
> + Package()
> + { // C1, MWAIT
> + ResourceTemplate () {Register(FFixedHW, 1, 2, 0x00, 1)},
> + 1,
> + 1,
> + 1000
> + }
> + })
> + }
> +
> +
> + }
> + }
> +}
> +
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Ist.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Ist.asl
> new file mode 100644
> index 0000000000..07bdb85602
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Ist.asl
> @@ -0,0 +1,260 @@
> +/*-----------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +
> + Intel Silvermont Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2006 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: CPU0IST.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +
> +--------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, END user
> + preference, processor performance demand, and thermal conditions; and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +
> +-------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - IF the trap range and port definitions do not match those
> + specified by this reference code, this file must be modified IAW the
> + individual implmentation.
> +
> +--------------------------------------------------------------------------------
> +------------------------------------------------------------------------------*/
> +
> +
> +DefinitionBlock (
> + "CPU0IST.aml",
> + "SSDT",
> + 0x01,
> + "PmRef",
> + "Cpu0Ist",
> + 0x3000
> + )
> +{
> + External (\_PR.CPU0, DeviceObj)
> + External (PDC0)
> + External (CFGD)
> +
> + Scope(\_PR.CPU0)
> + {
> + //OperationRegion (DEB0, SystemIO, 0x80, 1) //DBG
> + //Field (DEB0, ByteAcc,NoLock,Preserve) //DBG
> + //{ DBG8, 8,} //DBG
> +
> + Name(_PPC, 0) // Initialize as All States Available.
> +
> + // NOTE: For CMP systems; this table is not loaded unless
> + // the required driver support is present.
> + // So, we do not check for those cases here.
> + //
> + // CFGD[0] = GV3 Capable/Enabled
> + // PDCx[0] = OS Capable of Hardware P-State control
> + //
> + Method(_PCT,0)
> + {
> + If(LAnd(And(CFGD,0x0001), And(PDC0,0x0001)))
> + {
> + //Store(0xA0,DBG8) //DBG
> + Return(Package() // Native Mode
> + {
> + ResourceTemplate(){Register(FfixedHW, 0, 0, 0)},
> + ResourceTemplate(){Register(FfixedHW, 0, 0, 0)}
> + })
> + }
> + // @NOTE: IO Trap is not supported. Therefore should not expose any
> IO interface for _PCT
> + // For all other cases, report control through the
> + // SMI interface. (The port used for SMM control is fixed up
> + // by the initialization code.)
> + //
> + Return(Package() // SMM Mode
> + {
> + ResourceTemplate(){Register(FfixedHW, 0, 0, 0)},
> + ResourceTemplate(){Register(FfixedHW, 0, 0, 0)}
> + })
> + }
> +
> +
> + // NOTE: For CMP systems; this table is not loaded if MP
> + // driver support is not present or P-State are disabled.
> + //
> + Method(_PSS,0)
> + {
> + //
> + // Report NSPP if:
> + // (1) GV3 capable (Not checked, see above.)
> + // (2) Driver support direct hardware control
> + // (3) MP driver support present (Not checked, see above.)
> + // else;
> + // Report SPSS
> + //
> + // PDCx[0] = OS Capable of Hardware P-State control
> + //
> + If(And(PDC0,0x0001)){
> + //Store(0xB0,DBG8) //DBG
> + Return(NPSS)
> + }
> + //Store(0xBF,DBG8) //DBG
> + // Otherwise, report SMM mode
> + //
> + Return(SPSS)
> +
> + }
> +
> + Name(SPSS,Package()
> + {
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000}
> + })
> +
> + Name(NPSS,Package()
> + {
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000},
> + Package(){0x80000000, 0x80000000, 0x80000000, 0x80000000,
> 0x80000000, 0x80000000}
> + })
> +
> + // The _PSD object provides information to the OSPM related
> + // to P-State coordination between processors in a multi-processor
> + // configurations.
> + //
> + Method(_PSD,0)
> + {
> + //
> + // IF CMP is supported/enabled
> + // IF quad core processor
> + // IF PDC[11]
> + // Report 4 processors and HW_ALL as the coordination type
> + // ELSE
> + // Report 4 processors and SW_ALL as the coordination type
> + // ELSE
> + // IF PDC[11]
> + // Report 2 processors and HW_ALL as the coordination type
> + // ELSE
> + // Report 2 processors and SW_ALL as the coordination type
> + // ELSE
> + // Report 1 processor and SW_ALL as the coordination type
> + // (Domain 0)
> + //
> + // CFGD[24] = Two or more cores enabled
> + // CFGD[23] = Four cores enabled
> + // PDCx[11] = Hardware coordination with hardware feedback
> + //
> +
> + If(And(CFGD,0x1000000)) // CMP Enabled.
> + {
> + If(And(CFGD,0x800000)) // 2 or 4 process.
> + {
> + If(And(PDC0,0x0800))
> + {
> + Return(Package(){ // HW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFE, // Coord Type- HW_ALL.
> + 4 // # processors.
> + }
> + })
> + } // If(And(PDC0,0x0800))
> + Return(Package(){ // SW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFC, // Coord Type- SW_ALL.
> + 4 // # processors.
> + }
> + })
> + } else {
> + Return(Package(){ // HW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFE, // Coord Type- HW_ALL.
> + 2 // # processors.
> + }
> + })
> + }
> + } // If(And(CFGD,0x1000000)) // CMP Enabled.
> +
> + Return(Package(){ // SW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFC, // Coord Type- SW_ALL.
> + 1 // # processors.
> + }
> + })
> + } // Method(_PSD,0)
> + } // Scope(\_PR.CPU0)
> +} // End of Definition Block
> +
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Tst.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Tst.asl
> new file mode 100644
> index 0000000000..1d65b0dc0d
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/Cpu0Tst.asl
> @@ -0,0 +1,235 @@
> +/*-----------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +
> + Intel Silvermont Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2006 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: CPU0TST.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +
> +--------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, end user
> + preference, processor performance demand, and thermal conditions;
> and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +
> +-------------------------------------------------------------------------------
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - IF the trap range and port definitions do not match those
> + specified by this reference code, this file must be modified IAW the
> + individual implmentation.
> +
> +--------------------------------------------------------------------------------
> +------------------------------------------------------------------------------*/
> +
> +DefinitionBlock(
> + "CPU0TST.aml",
> + "SSDT",
> + 0x01,
> + "PmRef",
> + "Cpu0Tst",
> + 0x3000
> + )
> +{
> + External(\_PR.CPU0, DeviceObj)
> + External(PDC0)
> + External(CFGD)
> + External(_PSS)
> +
> + Scope(\_PR.CPU0)
> + {
> + Name(_TPC, 0) // All T-States are available
> +
> + //
> + // T-State Control/Status interface
> + //
> + Method(_PTC, 0)
> + {
> + //
> + // IF OSPM is capable of direct access to MSR
> + // Report MSR interface
> + // ELSE
> + // Report I/O interface
> + //
> + // PDCx[2] = OSPM is capable of direct access to On
> + // Demand throttling MSR
> + //
> + If(And(PDC0, 0x0004)) {
> + Return(Package() {
> + ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
> + ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
> + })
> + }
> +
> + }
> +
> + // _TSS package for I/O port based T-State control
> + // "Power" fields are replaced with real values by the first
> + // call of _TSS method.
> + //
> + Name(TSSI, Package() {
> + Package(){100, 1000, 0, 0x00, 0},
> + Package(){ 88, 875, 0, 0x0F, 0},
> + Package(){ 75, 750, 0, 0x0E, 0},
> + Package(){ 63, 625, 0, 0x0D, 0},
> + Package(){ 50, 500, 0, 0x0C, 0},
> + Package(){ 38, 375, 0, 0x0B, 0},
> + Package(){ 25, 250, 0, 0x0A, 0},
> + Package(){ 13, 125, 0, 0x09, 0}
> + })
> +
> + // _TSS package for MSR based T-State control
> + // "Power" fields are replaced with real values by the first
> + // call of _TSS method.
> + //
> + Name(TSSM, Package() {
> + Package(){100, 1000, 0, 0x00, 0},
> + Package(){ 88, 875, 0, 0x1E, 0},
> + Package(){ 75, 750, 0, 0x1C, 0},
> + Package(){ 63, 625, 0, 0x1A, 0},
> + Package(){ 50, 500, 0, 0x18, 0},
> + Package(){ 38, 375, 0, 0x16, 0},
> + Package(){ 25, 250, 0, 0x14, 0},
> + Package(){ 13, 125, 0, 0x12, 0}
> + })
> +
> + Name(TSSF, 0) // Flag for TSSI/TSSM initialization
> +
> + Method(_TSS, 0)
> + {
> + // Update "Power" fields of TSSI/TSSM with the LFM
> + // power data IF _PSS is available
> + //
> + IF (LAnd(LNot(TSSF),CondRefOf(_PSS)))
> + {
> + Store(_PSS, Local0)
> + Store(SizeOf(Local0), Local1) // _PSS size
> + Decrement(Local1) // Index of LFM
> + Store(DerefOf(Index(DerefOf(Index(Local0,Local1)),1)),
> Local2) // LFM Power
> +
> + Store(0, Local3)
> + While(LLess(Local3, SizeOf(TSSI)))
> + {
> + Store(Divide(Multiply(Local2, Subtract(8, Local3)), 8),
> + Local4) // Power for this TSSI/TSSM entry
> + Store(Local4,Index(DerefOf(Index(TSSI,Local3)),1))
> + Store(Local4,Index(DerefOf(Index(TSSM,Local3)),1))
> + Increment(Local3)
> + }
> + Store(Ones, TSSF) // TSSI/TSSM are updated
> + }
> + //
> + // IF OSPM is capable of direct access to MSR
> + // Report TSSM
> + // ELSE
> + // Report TSSI
> + //
> + If(And(PDC0, 0x0004))
> + {
> + Return(TSSM)
> + }
> + Return(TSSI)
> + }
> +
> + Method(_TDL, 0)
> + {
> + Store ("Cpu0: _TDL Called", Debug)
> + Name ( LFMI, 0)
> + Store (SizeOf(TSSM), LFMI)
> + Decrement(LFMI) // Index of LFM entry in TSSM
> + Return(LFMI)
> + }
> +
> + //
> + // T-State Dependency
> + //
> + Method(_TSD, 0)
> + {
> + //
> + // IF four cores are supported/enabled && !(direct access to MSR)
> + // Report 4 processors and SW_ANY as the coordination type
> + // ELSE IF two cores are supported/enabled && !(direct access to MSR)
> + // Report 2 processors and SW_ANY as the coordination type
> + // ELSE
> + // Report 1 processor and SW_ALL as the coordination type
> + //
> + // CFGD[23] = Four cores enabled
> + // CFGD[24] = Two or more cores enabled
> + // PDCx[2] = OSPM is capable of direct access to On
> + // Demand throttling MSR
> + //
> + If(LAnd(And(CFGD,0x0800000),LNot(And(PDC0,4))))
> + {
> + Return(Package(){ // SW_ANY
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFD, // Coord Type- SW_ANY
> + 4 // # processors.
> + }
> + })
> + }
> + If(LAnd(And(CFGD,0x1000000),LNot(And(PDC0,4))))
> + {
> + Return(Package(){ // SW_ANY
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFD, // Coord Type- SW_ANY
> + 2 // # processors.
> + }
> + })
> + }
> + Return(Package(){ // SW_ALL
> + Package(){
> + 5, // # entries.
> + 0, // Revision.
> + 0, // Domain #.
> + 0xFC, // Coord Type- SW_ALL
> + 1 // # processors.
> + }
> + })
> + }
> + }
> +} // End of Definition Block
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/CpuPm.asl
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/CpuPm.asl
> new file mode 100644
> index 0000000000..3d30965c9f
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManage
> ment/AcpiTables/Ssdt/CpuPm.asl
> @@ -0,0 +1,793 @@
> +/*-----------------------------------------------------------------------------
> +
> +
> + Intel Silvermont Processor Power Management BIOS Reference Code
> +
> + Copyright (c) 2006 - 2014, Intel Corporation
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + Filename: CPUPM.ASL
> +
> + Revision: Refer to Readme
> +
> + Date: Refer to Readme
> +-------------------------------------------------------------------------------
> +
> + This Processor Power Management BIOS Source Code is furnished under
> license
> + and may only be used or copied in accordance with the terms of the license.
> + The information in this document is furnished for informational use only, is
> + subject to change without notice, and should not be construed as a
> commitment
> + by Intel Corporation. Intel Corporation assumes no responsibility or liability
> + for any errors or inaccuracies that may appear in this document or any
> + software that may be provided in association with this document.
> +
> + Except as permitted by such license, no part of this document may be
> + reproduced, stored in a retrieval system, or transmitted in any form or by
> + any means without the express written consent of Intel Corporation.
> +
> + WARNING: You are authorized and licensed to install and use this BIOS
> code
> + ONLY on an IST PC. This utility may damage any system that does not
> + meet these requirements.
> +
> + An IST PC is a computer which
> + (1) Is capable of seamlessly and automatically transitioning among
> + multiple performance states (potentially operating at different
> + efficiency ratings) based upon power source changes, END user
> + preference, processor performance demand, and thermal conditions; and
> + (2) Includes an Intel Pentium II processors, Intel Pentium III
> + processor, Mobile Intel Pentium III Processor-M, Mobile Intel Pentium 4
> + Processor-M, Intel Pentium M Processor, or any other future Intel
> + processors that incorporates the capability to transition between
> + different performance states by altering some, or any combination of,
> + the following processor attributes: core voltage, core frequency, bus
> + frequency, number of processor cores available, or any other attribute
> + that changes the efficiency (instructions/unit time-power) at which the
> + processor operates.
> +-------------------------------------------------------------------------------
> +
> +NOTES:
> + (1) <TODO> - Except for the SSDT package, the objects in this ASL code
> + may be moved to the DSDT. It is kept separate in this reference package
> + for ease of distribution only.
> +------------------------------------------------------------------------------*/
> +
> +DefinitionBlock (
> + "CPUPM.aml",
> + "SSDT",
> + 0x01,
> + "PmRef",
> + "CpuPm",
> + 0x3000
> + )
> +{
> + External(\_PR.CPU0, DeviceObj)
> + External(\_PR.CPU1, DeviceObj)
> + External(\_PR.CPU2, DeviceObj)
> + External(\_PR.CPU3, DeviceObj)
> + External(SMIF)
> +
> + Scope(\)
> + {
> +
> + // Package of pointers to SSDT's
> + //
> + // First column is SSDT name, used for debug only.
> + // (First column must be EXACTLY eight characters.)
> + // Second column is physical address.
> + // Third column is table length.
> + //
> + // IF modifying this file, see warnings listed in ppminit.asm.
> + //
> + Name(SSDT,Package()
> + {
> + "CPU0IST ", 0x80000000, 0x80000000,
> + "APIST ", 0x80000000, 0x80000000,
> + "CPU0CST ", 0x80000000, 0x80000000,
> + "APCST ", 0x80000000, 0x80000000
> + })
> +
> + //
> + // Note: See PpmBiosInit in PPMINIT.ASM for a definition of
> + // the PpmFlags mirrored in CFGD.
> + //
> + Name(CFGD, 0x80000000)
> +
> + Name(\PDC0,0x80000000) // CPU0 _PDC Flags.
> + Name(\PDC1,0x80000000) // CPU1 _PDC Flags.
> + Name(\PDC2,0x80000000) // CPU2 _PDC Flags.
> + Name(\PDC3,0x80000000) // CPU3 _PDC Flags.
> + Name(\SDTL,0x00) // Loaded SSDT Flags.
> + }
> +
> + Scope(\_PR.CPU0)
> + {
> + //
> + // Define handles for opregions (used by load.)
> + //
> + Name(HI0,0) // Handle to CPU0IST
> + Name(HC0,0) // Handle to CPU0CST
> +
> + Method(_PDC,1)
> + {
> + //
> + // Check and extract the _PDC information.
> + //
> + Store(CPDC(Arg0), Local0)
> + //
> + // Save the capability information and load tables as needed.
> + //
> + GCAP(Local0)
> + //
> + // Return status.
> + //
> + //Return (Local0)
> + }
> +
> + Method(_OSC, 4)
> + {
> + //
> + // Check and extract the _OSC information.
> + //
> + Store(COSC(Arg0, Arg1, Arg2, Arg3), Local0)
> + //
> + // Save the capability information and load tables as needed.
> + //
> + GCAP(Local0)
> + //
> + // Return status.
> + //
> + Return (Local0)
> + }
> +
> + //
> + // Implement a generic Method to check _PDC information which may
> be called
> + // by any of the processor scopes. (The use of _PDC is deprecated in
> ACPI 3.
> + // in favor of _OSC. However, for backwards compatibility, _PDC may be
> + // implemented using _OSC as follows:)
> + //
> + Method(CPDC,1)
> + {
> + CreateDwordField (Arg0, 0, REVS)
> + CreateDwordField (Arg0, 4, SIZE)
> +
> + //
> + // Local0 = Number of bytes for Arg0
> + //
> + Store (SizeOf (Arg0), Local0)
> +
> + //
> + // Local1 = Number of Capabilities bytes in Arg0
> + //
> + Store (Subtract (Local0, 8), Local1)
> +
> + //
> + // TEMP = Temporary field holding Capability DWORDs
> + //
> + CreateField (Arg0, 64, Multiply (Local1, 8), TEMP)
> +
> + //
> + // Create the Status (STAT) buffer with the first DWORD = 0
> + // This is required as per ACPI 3.0 Spec which says the
> + // first DWORD is used to return errors defined by _OSC.
> + //
> + Name (STS0, Buffer () {0x00, 0x00, 0x00, 0x00})
> +
> + //
> + // Concatenate the _PDC capabilities bytes to the STS0 Buffer
> + // and store them in a local variable for calling OSC
> + //
> + Concatenate (STS0, TEMP, Local2)
> +
> + Return(COSC (ToUUID("4077A616-290C-47BE-9EBD-D87058713953"),
> REVS, SIZE, Local2))
> + }
> +
> + //
> + // Implement a generic Method to check _OSC information which may
> be called
> + // by any of the processor scopes.
> + //
> + Method(COSC, 4)
> + {
> + //
> + // Point to Status DWORD in the Arg3 buffer (STATUS)
> + //
> + CreateDWordField(Arg3, 0, STS0)
> + //
> + // Point to Caps DWORDs of the Arg3 buffer (CAPABILITIES)
> + //
> + CreateDwordField(Arg3, 4, CAP0)
> +
> + //
> + // _OSC needs to validate the UUID and Revision.
> + //
> + // IF Unrecognized UUID
> + // Return Unrecognized UUID _OSC Failure
> + // IF Unsupported Revision
> + // Return Unsupported Revision _OSC Failure
> + //
> + // STS0[0] = Reserved
> + // STS0[1] = _OSC Failure
> + // STS0[2] = Unrecognized UUID
> + // STS0[3] = Unsupported Revision
> + // STS0[4] = Capabilities masked
> + //
> + // Note: The comparison method used is necessary due to
> + // limitations of certain OSes which cannot perform direct
> + // buffer comparisons.
> + //
> + // Create a set of "Input" UUID fields.
> + //
> + CreateDwordField(Arg0, 0x0, IID0)
> + CreateDwordField(Arg0, 0x4, IID1)
> + CreateDwordField(Arg0, 0x8, IID2)
> + CreateDwordField(Arg0, 0xC, IID3)
> + //
> + // Create a set of "Expected" UUID fields.
> + //
> + Name(UID0, ToUUID("4077A616-290C-47BE-9EBD-D87058713953"))
> + CreateDwordField(UID0, 0x0, EID0)
> + CreateDwordField(UID0, 0x4, EID1)
> + CreateDwordField(UID0, 0x8, EID2)
> + CreateDwordField(UID0, 0xC, EID3)
> + //
> + // Verify the input UUID matches the expected UUID.
> + //
> + If(LNot(LAnd(LAnd(LEqual(IID0, EID0),LEqual(IID1,
> EID1)),LAnd(LEqual(IID2, EID2),LEqual(IID3, EID3)))))
> + {
> + //
> + // Return Unrecognized UUID _OSC Failure
> + //
> + Store (0x6, STS0)
> + Return (Arg3)
> + }
> +
> + If(LNot(LEqual(Arg1,1)))
> + {
> + //
> + // Return Unsupported Revision _OSC Failure
> + //
> + Store (0xA, STS0)
> + Return (Arg3)
> + }
> +
> + Return (Arg3)
> + }
> +
> + //
> + // Get the capability information and load appropriate tables as needed.
> + //
> + Method(GCAP, 1)
> + {
> +
> + // Point to Status DWORD in the Arg0 buffer (STATUS)
> + CreateDWordField(Arg0, 0, STS0)
> +
> + // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
> + CreateDwordField(Arg0, 4, CAP0)
> +
> + //
> + // If the UUID was unrecognized or the _OSC revision was
> unsupported,
> + // return without updating capabilities.
> + //
> + If(LOr(LEqual(STS0,0x6),LEqual(STS0,0xA)))
> + {
> + Return()
> + }
> +
> + //
> + // Check if this is a query (BIT0 of Status = 1).
> + // If so, mask off the bits we support and return.
> + //
> + if (And(STS0, 1))
> + {
> + And(CAP0, 0xBFF, CAP0)
> + Return()
> + }
> +
> + //
> + // Store result of PDC. (We clear out the MSB, which was just
> + // used as a placeholder for the compiler; and then "OR" the
> + // value in case we get multiple calls, each of which only
> + // reports partial support.)
> + //
> + Or(And(PDC0, 0x7FFFFFFF), CAP0, PDC0)
> +
> + //
> + // Check IF the IST SSDTs should be loaded.
> + //
> + // CFGD[0] = GV3 Capable/Enabled
> + //
> + If(And(CFGD,0x01))
> + {
> + //
> + // Load the IST SSDTs if:
> + // (1) CMP capable and enabled.
> + // (2) Driver supports P-States in MP configurations
> + // (3) Driver supports direct HW P-State control
> + // (4) SSDT is not already loaded
> + //
> + // CFGD[24] = Two or more cores enabled
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[0] = OS supports direct access of the perf MSR
> + // SDTL[0] = CPU0 IST SSDT Loaded
> + //
> + If(LAnd(LAnd(And(CFGD,0x01000000),LEqual(And(PDC0, 0x0009),
> 0x0009)),LNot(And(SDTL,0x01))))
> + {
> + //
> + // Flag the IST SSDT as loaded for CPU0
> + //
> + Or(SDTL, 0x01, SDTL)
> +
> +
> OperationRegion(IST0,SystemMemory,DeRefOf(Index(SSDT,1)),DeRefOf(In
> dex(SSDT,2)))
> + Load(IST0, HI0) // Dynamically load the CPU0IST SSDT
> + }
> + }
> +
> + //
> + // Check IF the CST SSDTs should be loaded.
> + //
> + // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
> + //
> + If(And(CFGD,0x82))
> + {
> + //
> + // Load the CST SSDTs if:
> + // (1) CMP capable/enabled
> + // (2) Driver supports multi-processor configurations
> + // (3) CPU0 CST ISDT is not already loaded
> + //
> + // CFGD[24] = Two or more cores enabled
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[4] = OS supports ind. C2/C3 in MP systems
> + // SDTL[1] = CPU0 CST SSDT Loaded
> + //
> +
> If(LAnd(LAnd(And(CFGD,0x01000000),And(PDC0,0x0018)),LNot(And(SDTL,0x
> 02))))
> + {
> + //
> + // Flag the CST SSDT as loaded for CPU0
> + //
> + Or(SDTL, 0x02, SDTL)
> +
> +
> OperationRegion(CST0,SystemMemory,DeRefOf(Index(SSDT,7)),DeRefOf(In
> dex(SSDT,8)))
> + Load(CST0, HC0) // Dynamically load the CPU0CST SSDT
> + }
> + }
> +
> + Return ()
> + }
> + }
> +
> +
> + Scope(\_PR.CPU1)
> + {
> + //
> + // Define handles for opregions (used by load.)
> + //
> + Name(HI1,0) // Handle to APIST
> + Name(HC1,0) // Handle to APCST
> +
> + Method(_PDC,1)
> + {
> + //
> + // Refer to \_PR.CPU0._PDC for description.
> + //
> + Store(\_PR.CPU0.CPDC(Arg0), Local0)
> + GCAP(Local0)
> + //Return (Local0)
> + }
> +
> + Method(_OSC, 4)
> + {
> + //
> + // Refer to \_PR.CPU0._OSC for description.
> + //
> + Store(\_PR.CPU0.COSC(Arg0, Arg1, Arg2, Arg3), Local0)
> + GCAP(Local0)
> + Return (Local0)
> + }
> +
> + //
> + // Get the capability information and load appropriate tables as needed.
> + //
> + Method(GCAP, 1)
> + {
> + //
> + // Point to Status DWORD in the Arg0 buffer (STATUS)
> + //
> + CreateDWordField(Arg0, 0, STS1)
> + //
> + // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
> + //
> + CreateDwordField(Arg0, 4, CAP1)
> + //
> + // If the UUID was unrecognized or the _OSC revision was
> unsupported,
> + // return without updating capabilities.
> + //
> + If(LOr(LEqual(STS1,0x6),LEqual(STS1,0xA)))
> + {
> + Return()
> + }
> +
> + //
> + // Check if this is a query (BIT0 of Status = 1).
> + // If so, mask off the bits we support and return.
> + //
> + if (And(STS1, 1))
> + {
> + And(CAP1, 0xBFF, CAP1)
> + Return()
> + }
> +
> + //
> + // Store result of PDC. (We clear out the MSB, which was just
> + // used as a placeholder for the compiler; and then "OR" the
> + // value in case we get multiple calls, each of which only
> + // reports partial support.)
> + //
> + Or(And(PDC1, 0x7FFFFFFF), CAP1, PDC1)
> +
> + //
> + // Attempt to dynamically load the IST SSDTs if:
> + // (1) Driver supports P-States in MP configurations
> + // (2) Driver supports direct HW P-State control
> + //
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[0] = OS supports direct access of the perf MSR
> + //
> + If(LEqual(And(PDC0, 0x0009), 0x0009))
> + {
> + APPT()
> + }
> +
> + //
> + // Load the CST SSDTs if:
> + // (1) Driver supports multi-processor configurations
> + //
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[4] = OS supports ind. C2/C3 in MP systems
> + //
> + If(And(PDC0,0x0018))
> + {
> + APCT()
> + }
> +
> + Return()
> + }
> +
> + //
> + // Dynamically load the CST SSDTs if:
> + // (1) C-States are enabled
> + // (2) SSDT is not already loaded
> + //
> + // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
> + // SDTL[5] = AP CST SSDT Loaded
> + //
> + Method(APCT,0)
> + {
> + If(LAnd(And(CFGD,0x82),LNot(And(SDTL,0x20))))
> + {
> + //
> + // Flag the CST SSDT as loaded for the AP's
> + //
> + Or(SDTL, 0x20, SDTL)
> + //
> + // Dynamically load the APCST SSDT
> + //
> +
> OperationRegion(CST1,SystemMemory,DeRefOf(Index(SSDT,10)),DeRefOf(I
> ndex(SSDT,11)))
> + Load(CST1, HC1)
> + }
> + }
> +
> + //
> + // Dynamically load the IST SSDTs if:
> + // (1) If GV3 capable and enabled
> + // (2) SSDT is not already loaded
> + //
> + // CFGD[0] = GV3 Capable/Enabled
> + // SDTL[4] = AP IST SSDT Loaded
> + //
> + Method(APPT,0)
> + {
> + If(LAnd(And(CFGD,0x01),LNot(And(SDTL,0x10))))
> + {
> + //
> + // Flag the IST SSDT as loaded for CPU0
> + //
> + Or(SDTL, 0x10, SDTL)
> +
> +
> OperationRegion(IST1,SystemMemory,DeRefOf(Index(SSDT,4)),DeRefOf(In
> dex(SSDT,5)))
> + Load(IST1, HI1) // Dynamically load the CPU1IST SSDT
> + }
> + }
> + } // End CPU1
> +
> + Scope(\_PR.CPU2)
> + {
> + //
> + // Define handles for opregions (used by load.)
> + //
> + Name(HI1,0) // Handle to APIST
> + Name(HC1,0) // Handle to APCST
> +
> + Method(_PDC,1)
> + {
> + //
> + // Refer to \_PR.CPU0._PDC for description.
> + //
> + Store(\_PR.CPU0.CPDC(Arg0), Local0)
> + GCAP(Local0)
> + //Return (Local0)
> + }
> +
> + Method(_OSC, 4)
> + {
> + //
> + // Refer to \_PR.CPU0._OSC for description.
> + //
> + Store(\_PR.CPU0.COSC(Arg0, Arg1, Arg2, Arg3), Local0)
> + GCAP(Local0)
> + Return (Local0)
> + }
> +
> + //
> + // Get the capability information and load appropriate tables as needed.
> + //
> + Method(GCAP, 1)
> + {
> + //
> + // Point to Status DWORD in the Arg0 buffer (STATUS)
> + //
> + CreateDWordField(Arg0, 0, STS1)
> + //
> + // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
> + //
> + CreateDwordField(Arg0, 4, CAP1)
> + //
> + // If the UUID was unrecognized or the _OSC revision was
> unsupported,
> + // return without updating capabilities.
> + //
> + If(LOr(LEqual(STS1,0x6),LEqual(STS1,0xA)))
> + {
> + Return()
> + }
> +
> + //
> + // Check if this is a query (BIT0 of Status = 1).
> + // If so, mask off the bits we support and return.
> + //
> + if (And(STS1, 1))
> + {
> + And(CAP1, 0xBFF, CAP1)
> + Return()
> + }
> +
> + //
> + // Store result of PDC. (We clear out the MSB, which was just
> + // used as a placeholder for the compiler; and then "OR" the
> + // value in case we get multiple calls, each of which only
> + // reports partial support.)
> + //
> + Or(And(PDC1, 0x7FFFFFFF), CAP1, PDC1)
> +
> + //
> + // Attempt to dynamically load the IST SSDTs if:
> + // (1) Driver supports P-States in MP configurations
> + // (2) Driver supports direct HW P-State control
> + //
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[0] = OS supports direct access of the perf MSR
> + //
> + If(LEqual(And(PDC0, 0x0009), 0x0009))
> + {
> + APPT()
> + }
> +
> + //
> + // Load the CST SSDTs if:
> + // (1) Driver supports multi-processor configurations
> + //
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[4] = OS supports ind. C2/C3 in MP systems
> + //
> + If(And(PDC0,0x0018))
> + {
> + APCT()
> + }
> +
> + Return()
> + }
> +
> + //
> + // Dynamically load the CST SSDTs if:
> + // (1) C-States are enabled
> + // (2) SSDT is not already loaded
> + //
> + // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
> + // SDTL[5] = AP CST SSDT Loaded
> + //
> + Method(APCT,0)
> + {
> + If(LAnd(And(CFGD,0x82),LNot(And(SDTL,0x20))))
> + {
> + //
> + // Flag the CST SSDT as loaded for the AP's
> + //
> + Or(SDTL, 0x20, SDTL)
> + //
> + // Dynamically load the APCST SSDT
> + //
> +
> OperationRegion(CST1,SystemMemory,DeRefOf(Index(SSDT,10)),DeRefOf(I
> ndex(SSDT,11)))
> + Load(CST1, HC1)
> + }
> + }
> +
> + //
> + // Dynamically load the IST SSDTs if:
> + // (1) If GV3 capable and enabled
> + // (2) SSDT is not already loaded
> + //
> + // CFGD[0] = GV3 Capable/Enabled
> + // SDTL[4] = AP IST SSDT Loaded
> + //
> + Method(APPT,0)
> + {
> + If(LAnd(And(CFGD,0x01),LNot(And(SDTL,0x10))))
> + {
> + //
> + // Flag the IST SSDT as loaded for CPU0
> + //
> + Or(SDTL, 0x10, SDTL)
> +
> +
> OperationRegion(IST1,SystemMemory,DeRefOf(Index(SSDT,4)),DeRefOf(In
> dex(SSDT,5)))
> + Load(IST1, HI1) // Dynamically load the CPU1IST SSDT
> + }
> + }
> + } // End CPU1
> +
> + Scope(\_PR.CPU3)
> + {
> + //
> + // Define handles for opregions (used by load.)
> + //
> + Name(HI1,0) // Handle to APIST
> + Name(HC1,0) // Handle to APCST
> +
> + Method(_PDC,1)
> + {
> + //
> + // Refer to \_PR.CPU0._PDC for description.
> + //
> + Store(\_PR.CPU0.CPDC(Arg0), Local0)
> + GCAP(Local0)
> + //Return (Local0)
> + }
> +
> + Method(_OSC, 4)
> + {
> + //
> + // Refer to \_PR.CPU0._OSC for description.
> + //
> + Store(\_PR.CPU0.COSC(Arg0, Arg1, Arg2, Arg3), Local0)
> + GCAP(Local0)
> + Return (Local0)
> + }
> +
> + //
> + // Get the capability information and load appropriate tables as needed.
> + //
> + Method(GCAP, 1)
> + {
> + //
> + // Point to Status DWORD in the Arg0 buffer (STATUS)
> + //
> + CreateDWordField(Arg0, 0, STS1)
> + //
> + // Point to Caps DWORDs of the Arg0 buffer (CAPABILITIES)
> + //
> + CreateDwordField(Arg0, 4, CAP1)
> + //
> + // If the UUID was unrecognized or the _OSC revision was
> unsupported,
> + // return without updating capabilities.
> + //
> + If(LOr(LEqual(STS1,0x6),LEqual(STS1,0xA)))
> + {
> + Return()
> + }
> +
> + //
> + // Check if this is a query (BIT0 of Status = 1).
> + // If so, mask off the bits we support and return.
> + //
> + if (And(STS1, 1))
> + {
> + And(CAP1, 0xBFF, CAP1)
> + Return()
> + }
> +
> + //
> + // Store result of PDC. (We clear out the MSB, which was just
> + // used as a placeholder for the compiler; and then "OR" the
> + // value in case we get multiple calls, each of which only
> + // reports partial support.)
> + //
> + Or(And(PDC1, 0x7FFFFFFF), CAP1, PDC1)
> +
> + //
> + // Attempt to dynamically load the IST SSDTs if:
> + // (1) Driver supports P-States in MP configurations
> + // (2) Driver supports direct HW P-State control
> + //
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[0] = OS supports direct access of the perf MSR
> + //
> + If(LEqual(And(PDC0, 0x0009), 0x0009))
> + {
> + APPT()
> + }
> +
> + //
> + // Load the CST SSDTs if:
> + // (1) Driver supports multi-processor configurations
> + //
> + // PDCx[3] = OS supports C1 and P-states in MP systems
> + // PDCx[4] = OS supports ind. C2/C3 in MP systems
> + //
> + If(And(PDC0,0x0018))
> + {
> + APCT()
> + }
> +
> + Return()
> + }
> +
> + //
> + // Dynamically load the CST SSDTs if:
> + // (1) C-States are enabled
> + // (2) SSDT is not already loaded
> + //
> + // CFGD[11,7,2,1] = C6, C4, C1E, C1 Capable/Enabled
> + // SDTL[5] = AP CST SSDT Loaded
> + //
> + Method(APCT,0)
> + {
> + If(LAnd(And(CFGD,0x82),LNot(And(SDTL,0x20))))
> + {
> + //
> + // Flag the CST SSDT as loaded for the AP's
> + //
> + Or(SDTL, 0x20, SDTL)
> + //
> + // Dynamically load the APCST SSDT
> + //
> +
> OperationRegion(CST1,SystemMemory,DeRefOf(Index(SSDT,10)),DeRefOf(I
> ndex(SSDT,11)))
> + Load(CST1, HC1)
> + }
> + }
> +
> + //
> + // Dynamically load the IST SSDTs if:
> + // (1) If GV3 capable and enabled
> + // (2) SSDT is not already loaded
> + //
> + // CFGD[0] = GV3 Capable/Enabled
> + // SDTL[4] = AP IST SSDT Loaded
> + //
> + Method(APPT,0)
> + {
> + If(LAnd(And(CFGD,0x01),LNot(And(SDTL,0x10))))
> + {
> + //
> + // Flag the IST SSDT as loaded for CPU0
> + //
> + Or(SDTL, 0x10, SDTL)
> +
> +
> OperationRegion(IST1,SystemMemory,DeRefOf(Index(SSDT,4)),DeRefOf(In
> dex(SSDT,5)))
> + Load(IST1, HI1) // Dynamically load the CPU1IST SSDT
> + }
> + }
> + } // End CPU3
> +} // End of Definition Block
> +
> +
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/PlatformBaseAddresses.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/PlatformBaseAddresses.h
> new file mode 100644
> index 0000000000..1d230fdecd
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/PlatformBaseAddresses.h
> @@ -0,0 +1,92 @@
> +/*++
> +
> + Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +
> +
> +Module Name:
> +
> + PlatformBaseAddresses.h
> +
> +Abstract:
> +
> +
> +
> +Revision History
> +
> +++*/
> +
> +
> +#ifndef _PLATFORM_BASE_ADDRESSES_H
> +#define _PLATFORM_BASE_ADDRESSES_H
> +
> +//
> +// Define some fixed platform device location information
> +//
> +
> +//
> +// Define platform base
> +//
> +
> +//
> +// SIO
> +//
> +#define SIO_BASE_ADDRESS 0x0680
> +#define SIO_MONITORING_BASE_ADDRESS 0x0290
> +#define SIO_BASE_MASK 0xFFF0
> +#define WINDBOND_ECIR_BASE_ADDRESS 0x0810
> +#define SIO_MAILBOX_BASE_ADDRESS 0x0360 // Used by EC
> controller
> +#define SIO_EC_CHANNEL2 0x62 // Used by EC controller for
> offset 0x62 and 0x66
> +
> +
> +//
> +// South Cluster
> +//
> +#define ACPI_BASE_ADDRESS 0x0400
> +#define GPIO_BASE_ADDRESS 0x0500
> +#define SMBUS_BUS_DEV_FUNC 0x1F0300
> +#define SMBUS_BASE_ADDRESS 0xEFA0 // SMBus IO Base
> Address
> +#define SPI_BASE_ADDRESS 0xFED01000 // SPI Memory Base
> Address
> +#define PMC_BASE_ADDRESS 0xFED03000 // PMC Memory Base
> Address
> +#define SMBM_BASE_ADDRESS 0xFED04000 // SMBus Memory
> Base Address
> +#define IO_BASE_ADDRESS 0xFED0C000 // IO Memory Base
> Address
> +#define ILB_BASE_ADDRESS 0xFED08000 // ILB Memory Base
> Address
> +#define HPET_BASE_ADDRESS 0xFED00000 // HPET Base Address
> +#define RCBA_BASE_ADDRESS 0xFED1C000 // Root Complex Base
> Address
> +#define MPHY_BASE_ADDRESS 0xFEF00000 // MPHY Memory Base
> Address
> +#define PUNIT_BASE_ADDRESS 0xFED05000 // PUnit Memory Base
> Address
> +
> +//
> +// GPIO GROUP OFFSET
> +//
> +#define GPIO_SCORE_OFFSET 0x0000
> +#define GPIO_NCORE_OFFSET 0x1000
> +#define GPIO_SSUS_OFFSET 0x2000
> +
> +//
> +// MCH/CPU
> +//
> +#define DMI_BASE_ADDRESS 0xFED18000 // 4K, similar to
> IIO_RCBA // modify from bearlake -- cchew10
> +#define EP_BASE_ADDRESS 0xFED19000
> +#define MC_MMIO_BASE 0xFED14000 // Base Address for MMIO
> registers
> +
> +//
> +// TPM
> +//
> +#define TPM_BASE_ADDRESS 0xFED40000 // Base address for TPM
> +
> +//
> +// Local and I/O APIC addresses.
> +//
> +#define IO_APIC_ADDRESS 0xFEC00000
> +#define IIO_IOAPIC_ADDRESS 0xFEC90000
> +#define LOCAL_APIC_ADDRESS 0xFEE00000
> +
> +
> +#endif
> +
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/Capsule.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/Capsule.h
> new file mode 100644
> index 0000000000..98485701af
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/Capsule.h
> @@ -0,0 +1,60 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Capsule.h
> +
> +Abstract:
> +
> + Capsule PPI definitions.
> +
> +--*/
> +//
> +//
> +#ifndef _PEI_CAPSULE_PPI_H_
> +#define _PEI_CAPSULE_PPI_H_
> +
> +#define PEI_CAPSULE_PPI_GUID \
> + { \
> + 0x3acf33ee, 0xd892, 0x40f4, 0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d
> \
> + }
> +
> +EFI_FORWARD_DECLARATION (PEI_CAPSULE_PPI);
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_CAPSULE_COALESCE) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN OUT VOID **MemoryBase,
> + IN OUT UINTN *MemSize
> + );
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_CAPSULE_CREATE_STATE) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN VOID *CapsuleBase, // returned from coalesce
> + IN UINTN CapsuleSize // returned from coalesce
> + );
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_CAPSULE_CHECK_CAPSULE_UPDATE) (
> + IN EFI_PEI_SERVICES **PeiServices
> + );
> +
> +typedef struct _PEI_CAPSULE_PPI {
> + PEI_CAPSULE_COALESCE Coalesce;
> + PEI_CAPSULE_CHECK_CAPSULE_UPDATE CheckCapsuleUpdate;
> + PEI_CAPSULE_CREATE_STATE CreateState;
> +} PEI_CAPSULE_PPI;
> +
> +extern EFI_GUID gPeiCapsulePpiGuid;
> +
> +#endif // #ifndef _PEI_CAPSULE_PPI_H_
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/PlatformMemoryRange.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/PlatformMemoryRange.h
> new file mode 100644
> index 0000000000..7378e2c9ca
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/PlatformMemoryRange.h
> @@ -0,0 +1,144 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PlatformMemoryRange.h
> +
> +Abstract:
> +
> + Platform Memory Range PPI as defined in EFI 2.0
> +
> + PPI for reserving special purpose memory ranges.
> +
> +--*/
> +//
> +//
> +#ifndef _PEI_PLATFORM_MEMORY_RANGE_H_
> +#define _PEI_PLATFORM_MEMORY_RANGE_H_
> +
> +#define PEI_PLATFORM_MEMORY_RANGE_PPI_GUID \
> + { \
> + 0x30eb2979, 0xb0f7, 0x4d60, 0xb2, 0xdc, 0x1a, 0x2c, 0x96, 0xce, 0xb1, 0xf4
> \
> + }
> +
> +typedef struct _PEI_PLATFORM_MEMORY_RANGE_PPI
> PEI_PLATFORM_MEMORY_RANGE_PPI ;
> +
> +#define PEI_MEMORY_RANGE_OPTION_ROM UINT32
> +
> +#define PEI_MR_OPTION_ROM_ALL 0xFFFFFFFF
> +#define PEI_MR_OPTION_ROM_NONE 0x00000000
> +#define PEI_MR_OPTION_ROM_C0000_16K 0x00000001
> +#define PEI_MR_OPTION_ROM_C4000_16K 0x00000002
> +#define PEI_MR_OPTION_ROM_C8000_16K 0x00000004
> +#define PEI_MR_OPTION_ROM_CC000_16K 0x00000008
> +#define PEI_MR_OPTION_ROM_D0000_16K 0x00000010
> +#define PEI_MR_OPTION_ROM_D4000_16K 0x00000020
> +#define PEI_MR_OPTION_ROM_D8000_16K 0x00000040
> +#define PEI_MR_OPTION_ROM_DC000_16K 0x00000080
> +#define PEI_MR_OPTION_ROM_E0000_16K 0x00000100
> +#define PEI_MR_OPTION_ROM_E4000_16K 0x00000200
> +#define PEI_MR_OPTION_ROM_E8000_16K 0x00000400
> +#define PEI_MR_OPTION_ROM_EC000_16K 0x00000800
> +#define PEI_MR_OPTION_ROM_F0000_16K 0x00001000
> +#define PEI_MR_OPTION_ROM_F4000_16K 0x00002000
> +#define PEI_MR_OPTION_ROM_F8000_16K 0x00004000
> +#define PEI_MR_OPTION_ROM_FC000_16K 0x00008000
> +
> +//
> +// SMRAM Memory Range
> +//
> +#define PEI_MEMORY_RANGE_SMRAM UINT32
> +#define PEI_MR_SMRAM_ALL 0xFFFFFFFF
> +#define PEI_MR_SMRAM_NONE 0x00000000
> +#define PEI_MR_SMRAM_CACHEABLE_MASK 0x80000000
> +#define PEI_MR_SMRAM_SEGTYPE_MASK 0x00FF0000
> +#define PEI_MR_SMRAM_ABSEG_MASK 0x00010000
> +#define PEI_MR_SMRAM_HSEG_MASK 0x00020000
> +#define PEI_MR_SMRAM_TSEG_MASK 0x00040000
> +//
> +// If adding additional entries, SMRAM Size
> +// is a multiple of 128KB.
> +//
> +#define PEI_MR_SMRAM_SIZE_MASK 0x0000FFFF
> +#define PEI_MR_SMRAM_SIZE_128K_MASK 0x00000001
> +#define PEI_MR_SMRAM_SIZE_256K_MASK 0x00000002
> +#define PEI_MR_SMRAM_SIZE_512K_MASK 0x00000004
> +#define PEI_MR_SMRAM_SIZE_1024K_MASK 0x00000008
> +#define PEI_MR_SMRAM_SIZE_2048K_MASK 0x00000010
> +#define PEI_MR_SMRAM_SIZE_4096K_MASK 0x00000020
> +#define PEI_MR_SMRAM_SIZE_8192K_MASK 0x00000040
> +
> +#define PEI_MR_SMRAM_ABSEG_128K_NOCACHE 0x00010001
> +#define PEI_MR_SMRAM_HSEG_128K_CACHE 0x80020001
> +#define PEI_MR_SMRAM_HSEG_128K_NOCACHE 0x00020001
> +#define PEI_MR_SMRAM_TSEG_128K_CACHE 0x80040001
> +#define PEI_MR_SMRAM_TSEG_128K_NOCACHE 0x00040001
> +#define PEI_MR_SMRAM_TSEG_256K_CACHE 0x80040002
> +#define PEI_MR_SMRAM_TSEG_256K_NOCACHE 0x00040002
> +#define PEI_MR_SMRAM_TSEG_512K_CACHE 0x80040004
> +#define PEI_MR_SMRAM_TSEG_512K_NOCACHE 0x00040004
> +#define PEI_MR_SMRAM_TSEG_1024K_CACHE 0x80040008
> +#define PEI_MR_SMRAM_TSEG_1024K_NOCACHE 0x00040008
> +
> +//
> +// Graphics Memory Range
> +//
> +#define PEI_MEMORY_RANGE_GRAPHICS_MEMORY UINT32
> +#define PEI_MR_GRAPHICS_MEMORY_ALL 0xFFFFFFFF
> +#define PEI_MR_GRAPHICS_MEMORY_NONE 0x00000000
> +#define PEI_MR_GRAPHICS_MEMORY_CACHEABLE 0x80000000
> +//
> +// If adding additional entries, Graphics Memory Size
> +// is a multiple of 512KB.
> +//
> +#define PEI_MR_GRAPHICS_MEMORY_SIZE_MASK 0x0000FFFF
> +#define PEI_MR_GRAPHICS_MEMORY_512K_NOCACHE 0x00000001
> +#define PEI_MR_GRAPHICS_MEMORY_512K_CACHE 0x80000001
> +#define PEI_MR_GRAPHICS_MEMORY_1M_NOCACHE 0x00000002
> +#define PEI_MR_GRAPHICS_MEMORY_1M_CACHE 0x80000002
> +#define PEI_MR_GRAPHICS_MEMORY_4M_NOCACHE 0x00000008
> +#define PEI_MR_GRAPHICS_MEMORY_4M_CACHE 0x80000008
> +#define PEI_MR_GRAPHICS_MEMORY_8M_NOCACHE 0x00000010
> +#define PEI_MR_GRAPHICS_MEMORY_8M_CACHE 0x80000010
> +#define PEI_MR_GRAPHICS_MEMORY_16M_NOCACHE 0x00000020
> +#define PEI_MR_GRAPHICS_MEMORY_16M_CACHE 0x80000020
> +#define PEI_MR_GRAPHICS_MEMORY_32M_NOCACHE 0x00000040
> +#define PEI_MR_GRAPHICS_MEMORY_32M_CACHE 0x80000040
> +#define PEI_MR_GRAPHICS_MEMORY_48M_NOCACHE 0x00000060
> +#define PEI_MR_GRAPHICS_MEMORY_48M_CACHE 0x80000060
> +#define PEI_MR_GRAPHICS_MEMORY_64M_NOCACHE 0x00000080
> +#define PEI_MR_GRAPHICS_MEMORY_64M_CACHE 0x80000080
> +#define PEI_MR_GRAPHICS_MEMORY_128M_NOCACHE 0x00000100
> +#define PEI_MR_GRAPHICS_MEMORY_128M_CACHE 0x80000100
> +#define PEI_MR_GRAPHICS_MEMORY_256M_NOCACHE 0x00000200
> +#define PEI_MR_GRAPHICS_MEMORY_256M_CACHE 0x80000200
> +//
> +// Pci Memory Hole
> +//
> +#define PEI_MEMORY_RANGE_PCI_MEMORY UINT32
> +#define PEI_MR_PCI_MEMORY_SIZE_512M_MASK 0x00000001
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_CHOOSE_RANGES) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_PLATFORM_MEMORY_RANGE_PPI * This,
> + IN OUT PEI_MEMORY_RANGE_OPTION_ROM * OptionRomMask,
> + IN OUT PEI_MEMORY_RANGE_SMRAM * SmramMask,
> + IN OUT PEI_MEMORY_RANGE_GRAPHICS_MEMORY *
> GraphicsMemoryMask,
> + IN OUT PEI_MEMORY_RANGE_PCI_MEMORY * PciMemoryMask
> + );
> +
> +struct _PEI_PLATFORM_MEMORY_RANGE_PPI {
> + PEI_CHOOSE_RANGES ChooseRanges;
> +};
> +
> +extern EFI_GUID gPeiPlatformMemoryRangePpiGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/PlatformMemorySize.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/PlatformMemorySize.h
> new file mode 100644
> index 0000000000..b19a178732
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/PlatformMemorySize.h
> @@ -0,0 +1,46 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + PlatformMemorySize.h
> +
> +Abstract:
> +
> + Platform Memory Size PPI as defined in Tiano
> +
> + PPI for describing the minimum platform memory size in order to
> successfully
> + pass control into DXE
> +
> +--*/
> +//
> +//
> +#ifndef _PEI_PLATFORM_MEMORY_SIZE_H_
> +#define _PEI_PLATFORM_MEMORY_SIZE_H_
> +
> +#define PEI_PLATFORM_MEMORY_SIZE_PPI_GUID \
> + { \
> + 0x9a7ef41e, 0xc140, 0x4bd1, 0xb8, 0x84, 0x1e, 0x11, 0x24, 0xb, 0x4c, 0xe6
> \
> + }
> +
> +EFI_FORWARD_DECLARATION (PEI_PLATFORM_MEMORY_SIZE_PPI);
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_GET_MINIMUM_PLATFORM_MEMORY_SIZE) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_PLATFORM_MEMORY_SIZE_PPI * This,
> + IN OUT UINT64 *MemorySize
> + );
> +
> +typedef struct _PEI_PLATFORM_MEMORY_SIZE_PPI {
> + PEI_GET_MINIMUM_PLATFORM_MEMORY_SIZE
> GetPlatformMemorySize;
> +} PEI_PLATFORM_MEMORY_SIZE_PPI;
> +
> +extern EFI_GUID gPeiPlatformMemorySizePpiGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/SmmAccess.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/SmmAccess.h
> new file mode 100644
> index 0000000000..dda3f8cabe
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/SmmAccess.h
> @@ -0,0 +1,165 @@
> +//
> +//
> +/*++
> +
> +Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + SmmAccess.h
> +
> +Abstract:
> +
> + SmmAccess PPI
> +
> + This code abstracts the PEI core to provide SmmAccess services.
> +
> +--*/
> +
> +#ifndef _PEI_SMM_ACCESS_PPI_H_
> +#define _PEI_SMM_ACCESS_PPI_H_
> +
> +#ifdef ECP_FLAG
> +#include "Guid/SmramMemoryReserve/SmramMemoryReserve.h"
> +#else
> +#include "Guid/SmramMemoryReserve.h"
> +#endif
> +
> +#define PEI_SMM_ACCESS_PPI_GUID \
> + { \
> + 0x268f33a9, 0xcccd, 0x48be, 0x88, 0x17, 0x86, 0x5, 0x3a, 0xc3, 0x2e, 0xd6 \
> + }
> +
> +typedef struct _PEI_SMM_ACCESS_PPI PEI_SMM_ACCESS_PPI;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_SMM_OPEN) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_SMM_ACCESS_PPI *This,
> + IN UINTN DescriptorIndex
> + )
> +/*++
> +
> + Routine Description:
> + This routine accepts a request to "open" a region of SMRAM. The
> + region could be legacy ABSEG, HSEG, or TSEG near top of physical memory.
> + The use of "open" means that the memory is visible from all PEIM
> + and SMM agents.
> +
> + Arguments:
> + PeiServices - General purpose services available to every PEIM.
> + This - Pointer to the SMM Access Interface.
> + DescriptorIndex - Region of SMRAM to Open.
> +
> + Returns:
> + EFI_SUCCESS - The region was successfully opened.
> + EFI_DEVICE_ERROR - The region could not be opened because locked
> by
> + chipset.
> + EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
> +--*/
> +;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_SMM_CLOSE) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_SMM_ACCESS_PPI *This,
> + IN UINTN DescriptorIndex
> + )
> +/*++
> +
> + Routine Description:
> + This routine accepts a request to "close" a region of SMRAM. The
> + region could be legacy AB or TSEG near top of physical memory.
> + The use of "close" means that the memory is only visible from SMM
> agents,
> + not from PEIM.
> +
> + Arguments:
> + PeiServices - General purpose services available to every PEIM.
> + This - Pointer to the SMM Access Interface.
> + DescriptorIndex - Region of SMRAM to Close.
> +
> + Returns:
> + EFI_SUCCESS - The region was successfully closed.
> + EFI_DEVICE_ERROR - The region could not be closed because locked by
> + chipset.
> + EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
> +
> +--*/
> +;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_SMM_LOCK) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_SMM_ACCESS_PPI *This,
> + IN UINTN DescriptorIndex
> + )
> +/*++
> +
> + Routine Description:
> + This routine accepts a request to "lock" SMRAM. The
> + region could be legacy AB or TSEG near top of physical memory.
> + The use of "lock" means that the memory can no longer be opened
> + to PEIM.
> +
> + Arguments:
> + PeiServices - General purpose services available to every PEIM.
> + This - Pointer to the SMM Access Interface.
> + DescriptorIndex - Region of SMRAM to Lock.
> +
> + Returns:
> + EFI_SUCCESS - The region was successfully locked.
> + EFI_DEVICE_ERROR - The region could not be locked because at least
> + one range is still open.
> + EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
> +
> +--*/
> +;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_SMM_CAPABILITIES) (
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_SMM_ACCESS_PPI *This,
> + IN OUT UINTN *SmramMapSize,
> + IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap
> + )
> +/*++
> +
> + Routine Description:
> + This routine services a user request to discover the SMRAM
> + capabilities of this platform. This will report the possible
> + ranges that are possible for SMRAM access, based upon the
> + memory controller capabilities.
> +
> + Arguments:
> + PeiServices - General purpose services available to every PEIM.
> + This - Pointer to the SMRAM Access Interface.
> + SmramMapSize - Pointer to the variable containing size of the
> + buffer to contain the description information.
> + SmramMap - Buffer containing the data describing the Smram
> + region descriptors.
> + Returns:
> + EFI_BUFFER_TOO_SMALL - The user did not provide a sufficient buffer.
> + EFI_SUCCESS - The user provided a sufficiently-sized buffer.
> +--*/
> +;
> +
> +struct _PEI_SMM_ACCESS_PPI {
> + PEI_SMM_OPEN Open;
> + PEI_SMM_CLOSE Close;
> + PEI_SMM_LOCK Lock;
> + PEI_SMM_CAPABILITIES GetCapabilities;
> + BOOLEAN LockState;
> + BOOLEAN OpenState;
> +};
> +
> +extern EFI_GUID gPeiSmmAccessPpiGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvMmioPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvMmioPolicy.h
> new file mode 100644
> index 0000000000..0d359e6062
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvMmioPolicy.h
> @@ -0,0 +1,39 @@
> +
> +/*++
> +
> +Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + VlvMmioPolicy.h
> +
> +Abstract:
> +
> + Interface definition details between ValleyView platform drivers during PEI
> phase.
> +
> +--*/
> +
> +#ifndef _VLV_MMIO_POLICY_PPI_H_
> +#define _VLV_MMIO_POLICY_PPI_H_
> +
> +#define VLV_MMIO_POLICY_PPI_GUID \
> + { \
> + 0xE767BF7F, 0x4DB6, 0x5B34, 0x10, 0x11, 0x4F, 0xBE, 0x4C, 0xA7, 0xAF,
> 0xD2 \
> + }
> +
> +extern EFI_GUID gVlvMmioPolicyPpiGuid;
> +
> +
> +//
> +// MRC Platform Policiy PPI
> +//
> +typedef struct _VLV_MMIO_POLICY_PPI {
> + UINT16 MmioSize;
> +} VLV_MMIO_POLICY_PPI;
> +
> +#pragma pack()
> +
> +#endif // _VLV_MMIO_POLICY_PPI_H_
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvPeiInit.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvPeiInit.h
> new file mode 100644
> index 0000000000..f9f8e816f5
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvPeiInit.h
> @@ -0,0 +1,35 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + VlvPeiInit.h
> +
> +Abstract:
> +
> + Interface definition between ValleyView MRC and VlvInitPeim driver..
> +
> +--*/
> +
> +#ifndef _VLV_PEI_INIT_H_
> +#define _VLV_PEI_INIT_H_
> +
> +//
> +// Define the VLV PEI Init PPI GUID
> +//
> +#define VLV_PEI_INIT_PPI_GUID \
> + { \
> + 0x9ea8911, 0xbe0d, 0x4230, 0xa0, 0x3, 0xed, 0xc6, 0x93, 0xb4, 0x8e, 0x11 \
> + }
> +
> +//
> +// Extern the GUID for PPI users.
> +//
> +extern EFI_GUID gVlvPeiInitPpiGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvPolicy.h
> new file mode 100644
> index 0000000000..07ebfe3fb1
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Ppi/VlvPolicy.h
> @@ -0,0 +1,106 @@
> +
> +/*++
> +
> +Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + VlvPolicy.h
> +
> +Abstract:
> +
> + Interface definition details between ValleyView MRC and platform drivers
> during PEI phase.
> +
> +--*/
> +
> +#ifndef _VLV_POLICY_PPI_H_
> +#define _VLV_POLICY_PPI_H_
> +
> +//
> +// MRC Policy provided by platform for PEI phase {7D84B2C2-22A1-4372-
> B12C-EBB232D3A6A3}
> +//
> +#define VLV_POLICY_PPI_GUID \
> + { \
> + 0x7D84B2C2, 0x22A1, 0x4372, 0xB1, 0x2C, 0xEB, 0xB2, 0x32, 0xD3, 0xA6,
> 0xA3 \
> + }
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gVlvPolicyPpiGuid;
> +
> +//
> +// PPI revision number
> +// Any backwards compatible changes to this PPI will result in an update in
> the revision number
> +// Major changes will require publication of a new PPI
> +//
> +#define MRC_PLATFORM_POLICY_PPI_REVISION 1
> +
> +#ifndef MAX_SOCKETS
> +#define MAX_SOCKETS 4
> +#endif
> +
> +#define S3_TIMING_DATA_LEN 9
> +#define S3_READ_TRAINING_DATA_LEN 16
> +#define S3_WRITE_TRAINING_DATA_LEN 12
> +
> +#ifndef S3_RESTORE_DATA_LEN
> +#define S3_RESTORE_DATA_LEN (S3_TIMING_DATA_LEN +
> S3_READ_TRAINING_DATA_LEN + S3_WRITE_TRAINING_DATA_LEN)
> +#endif // S3_RESTORE_DATA_LEN
> +#pragma pack(1)
> +//
> +// MRC Platform Data Structure
> +//
> +typedef struct {
> + UINT8 SpdAddressTable[MAX_SOCKETS];
> + UINT8 TSonDimmSmbusAddress[MAX_SOCKETS];
> +
> + UINT16 SmbusBar;
> + UINT32 IchRcba;
> + UINT32 WdbBaseAddress; // Write Data Buffer area (WC caching mode)
> + UINT32 WdbRegionSize;
> + UINT32 SmBusAddress;
> + UINT8 UserBd;
> + UINT8 PlatformType;
> + UINT8 FastBoot;
> + UINT8 DynSR;
> +} VLV_PLATFORM_DATA;
> +
> +
> +typedef struct {
> + UINT16 MmioSize;
> + UINT16 GttSize;
> + UINT8 IgdDvmt50PreAlloc;
> + UINT8 PrimaryDisplay;
> + UINT8 PAVPMode;
> + UINT8 ApertureSize;
> + UINT8 InternalGraphics;
> + UINT8 IgdTurboEn;
> +} GT_CONFIGURATION;
> +
> +typedef struct {
> + UINT8 EccSupport;
> + UINT16 DdrFreqLimit;
> + UINT8 MaxTolud;
> +} MEMORY_CONFIGURATION;
> +
> +
> +//
> +// MRC Platform Policiy PPI
> +//
> +typedef struct _VLV_POLICY_PPI {
> + UINT8 Revision;
> + VLV_PLATFORM_DATA PlatformData;
> + GT_CONFIGURATION GtConfig;
> + MEMORY_CONFIGURATION MemConfig;
> + VOID *S3DataPtr; // was called MRC_PARAMS_SAVE_RESTORE
> + UINT8 ISPEn; //ISP (IUNIT) Device Enabled
> + UINT8 ISPPciDevConfig; //ISP (IUNIT) Device Config: 0->B0/D2/F0
> for Window OS, 1->B0D3/F0 for Linux OS
> +} VLV_POLICY_PPI;
> +
> +#pragma pack()
> +
> +#endif // _VLV_POLICY_PPI_H_
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/IgdOpRegion.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/IgdOpRegion.h
> new file mode 100644
> index 0000000000..5cf15be3c7
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/IgdOpRegion.h
> @@ -0,0 +1,213 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + IgdOpRegion.h
> +
> +Abstract:
> +
> + This file is part of the IGD OpRegion Implementation. The IGD OpRegion is
> + an interface between system BIOS, ASL code, and Graphics drivers.
> +
> + Supporting Specifiction: IGD OpRegion/Software SCI SPEC
> +
> + Note: Data structures defined in this protocol are packed not naturally
> + aligned.
> +
> + GUID forms:
> + {CDC5DDDF-E79D-41ec-A9B0-6565490DB9D3}
> + (0xcdc5dddf, 0xe79d, 0x41ec, 0xa9, 0xb0, 0x65, 0x65, 0x49, 0xd, 0xb9,
> 0xd3);
> +
> + Acronyms:
> + NVS: ACPI Non Volatile Storage
> + OpRegion: ACPI Operational Region
> + VBT: Video BIOS Table (OEM customizable data)
> +
> +--*/
> +
> +#ifndef _IGD_OPREGION_PROTOCOL_H_
> +#define _IGD_OPREGION_PROTOCOL_H_
> +
> +//
> +// OpRegion / Software SCI protocol GUID
> +//
> +#define IGD_OPREGION_PROTOCOL_GUID \
> + { \
> + 0xcdc5dddf, 0xe79d, 0x41ec, 0xa9, 0xb0, 0x65, 0x65, 0x49, 0xd, 0xb9, 0xd3
> \
> + }
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gIgdOpRegionProtocolGuid;
> +
> +//
> +// Forward reference for pure ANSI compatability
> +//
> +typedef struct _IGD_OPREGION_PROTOCOL IGD_OPREGION_PROTOCOL;
> +
> +//
> +// Protocol data definitions
> +//
> +
> +//
> +// OpRegion structures:
> +// Sub-structures define the different parts of the OpRegion followed by
> the
> +// main structure representing the entire OpRegion.
> +//
> +// Note: These structures are packed to 1 byte offsets because the exact
> +// data location is requred by the supporting design specification due to
> +// the fact that the data is used by ASL and Graphics driver code compiled
> +// separatly.
> +//
> +
> +//
> +// OpRegion header (mailbox 0) structure and #defines.
> +//
> +#pragma pack (1)
> +typedef struct {
> + CHAR8 SIGN[0x10]; // 0 OpRegion signature
> + UINT32 SIZE; // 0x10 OpRegion size
> + UINT32 OVER; // 0x14 OpRegion structure version
> + UINT8 SVER[0x20]; // 0x18 System BIOS build version
> + UINT8 VVER[0x10]; // 0x38 Video BIOS build version
> + UINT8 GVER[0x10]; // 0x48 Graphic driver build version
> + UINT32 MBOX; // 0x58 Mailboxes supported
> + UINT32 DMOD; // 0x5C Driver Model
> + UINT32 PCON; // 0x60 Platform Configuration Info
> + CHAR8 GOPV[0x20]; // 0X64 GOP build version
> + UINT8 RSV[0x7C]; // Reserved
> +} OPREGION_HEADER;
> +#pragma pack ()
> +
> +//
> +// OpRegion mailbox 1 (public ACPI Methods).
> +//
> +#pragma pack (1)
> +typedef struct {
> + UINT32 DRDY; // 0 Driver readiness
> + UINT32 CSTS; // 4 Status
> + UINT32 CEVT; // 8 Current event
> + UINT8 RM11[0x14]; // 12 Reserved
> + UINT32 DIDL; // 32 Supported display devices list
> + UINT32 DDL2; // 8 Devices.
> + UINT32 DDL3;
> + UINT32 DDL4;
> + UINT32 DDL5;
> + UINT32 DDL6;
> + UINT32 DDL7;
> + UINT32 DDL8;
> + UINT32 CPDL; // 64 Currently present display devices list
> + UINT32 CPL2; // 8 Devices.
> + UINT32 CPL3;
> + UINT32 CPL4;
> + UINT32 CPL5;
> + UINT32 CPL6;
> + UINT32 CPL7;
> + UINT32 CPL8;
> + UINT32 CADL; // 96 Currently active display devices list
> + UINT32 CAL2; // 8 Devices.
> + UINT32 CAL3;
> + UINT32 CAL4;
> + UINT32 CAL5;
> + UINT32 CAL6;
> + UINT32 CAL7;
> + UINT32 CAL8;
> + UINT32 NADL; // 128 Next active device list
> + UINT32 NDL2; // 8 Devices.
> + UINT32 NDL3;
> + UINT32 NDL4;
> + UINT32 NDL5;
> + UINT32 NDL6;
> + UINT32 NDL7;
> + UINT32 NDL8;
> + UINT32 ASLP; // 160 ASL sleep timeout
> + UINT32 TIDX; // 164 Toggle table index
> + UINT32 CHPD; // 168 Current hot plug enable indicator
> + UINT32 CLID; // 172 Current lid state indicator
> + UINT32 CDCK; // 176 Current docking state indicator
> + UINT32 SXSW; // 180 Display Switch notification on Sx State resume
> + UINT32 EVTS; // 184 Events supported by ASL
> + UINT32 CNOT; // 188 Current OS Notification
> + UINT32 NRDY; // 192 Reasons for DRDY = 0
> + UINT8 RM12[0x3C]; // 196 Reserved
> +} OPREGION_MBOX1;
> +#pragma pack ()
> +
> +//
> +// OpRegion mailbox 2 (Software SCI Interface).
> +//
> +#pragma pack (1)
> +typedef struct {
> + UINT32 SCIC; // 0 Software SCI function number parameters
> + UINT32 PARM; // 4 Software SCI additional parameters
> + UINT32 DSLP; // 8 Driver sleep timeout
> + UINT8 RM21[0xF4]; // 12 Reserved
> +} OPREGION_MBOX2;
> +#pragma pack ()
> +
> +//
> +// OpRegion mailbox 3 (Power Conservation).
> +//
> +#pragma pack (1)
> +typedef struct {
> + UINT32 ARDY; // 0 Driver readiness
> + UINT32 ASLC; // 4 ASLE interrupt command / status
> + UINT32 TCHE; // 8 Technology enabled indicator
> + UINT32 ALSI; // 12 Current ALS illuminance reading
> + UINT32 BCLP; // 16 Backlight britness to set
> + UINT32 PFIT; // 20 Panel fitting Current State or Request
> + UINT32 CBLV; // 24 Brightness Current State
> + UINT16 BCLM[0x14]; // 28 Backlight Brightness Level Duty Cycle Mapping
> Table
> + UINT32 CPFM; // 68 Panel Fitting Current Mode
> + UINT32 EPFM; // 72 Enabled Panel Fitting Mode
> + UINT8 PLUT[0x4A]; // 76 Panel Look Up Table
> + UINT32 PFMB; // 150 PWM Frequency and Minimum Brightness
> + UINT32 CCDV; // 154 Color Correction Default Values
> + UINT32 PCFT; // 158 Power Conservation Features
> + UINT8 RM31[0x5E]; // 162 Reserved
> +} OPREGION_MBOX3;
> +#pragma pack ()
> +
> +//
> +// OpRegion mailbox 4 (VBT).
> +//
> +#pragma pack (1)
> +typedef struct {
> + UINT8 GVD1[0x1800]; // 6K Reserved
> +} OPREGION_VBT;
> +#pragma pack ()
> +
> +#pragma pack (1)
> +typedef struct {
> + UINT8 EDIDOVRD[0x400]; // 6K Edid overriding data
> +} OPREGION_MBOX5;
> +#pragma pack ()
> +//
> +// Entire OpRegion
> +//
> +#pragma pack (1)
> +typedef struct {
> + OPREGION_HEADER Header; // OpRegion header
> + OPREGION_MBOX1 MBox1; // Mailbox 1: Public ACPI Methods
> + OPREGION_MBOX2 MBox2; // Mailbox 2: Software SCI Inteface
> + OPREGION_MBOX3 MBox3; // Mailbox 3: Power Conservation
> + OPREGION_VBT VBT; // VBT: Video BIOS Table (OEM customizable
> data)
> + OPREGION_MBOX5 MBox5;
> +} IGD_OPREGION_STRUC;
> +#pragma pack ()
> +
> +//
> +// Protocol data structure definition
> +//
> +struct _IGD_OPREGION_PROTOCOL {
> + IGD_OPREGION_STRUC *OpRegion;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/MemInfo.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/MemInfo.h
> new file mode 100644
> index 0000000000..f5a51e03b0
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/MemInfo.h
> @@ -0,0 +1,83 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + MemInfo.h
> +
> +Abstract:
> +
> + This protocol provides the memory information data, such as
> + total physical memory size, memory frequency, memory size
> + of each dimm and rank.
> +
> + This protocol is EFI compatible.
> +
> +--*/
> +
> +#ifndef _MEM_INFO_PROTOCOL_H_
> +#define _MEM_INFO_PROTOCOL_H_
> +
> +//
> +// Define the protocol GUID
> +//
> +#define MEM_INFO_PROTOCOL_GUID \
> + { \
> + 0x6f20f7c8, 0xe5ef, 0x4f21, 0x8d, 0x19, 0xed, 0xc5, 0xf0, 0xc4, 0x96, 0xae \
> + }
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gMemInfoProtocolGuid;
> +
> +//
> +// Forward reference for ANSI C compatibility
> +//
> +typedef struct _MEM_INFO_PROTOCOL MEM_INFO_PROTOCOL;
> +
> +//
> +// Protocol definitions
> +//
> +
> +#define CH_NUM 2
> +#define DIMM_NUM 1
> +#define RANK_NUM 2
> +
> +#pragma pack(1)
> +typedef struct {
> + UINT32 memSize;
> + UINT8 ddrFreq;
> + UINT8 ddrType;
> + BOOLEAN EccSupport;
> + UINT16 dimmSize[CH_NUM * DIMM_NUM];
> + UINT8 reserved;
> + UINT16 reserved2;
> +} MEMORY_INFO_DATA;
> +#pragma pack()
> +
> +/*++
> +Data definition:
> +
> + memSize Total physical memory size
> + ddrFreq DDR Frequency
> + EccSupport ECC Support
> + dimmSize Dimm Size
> + DimmExist Dimm Present or not
> + RankInDimm No. of ranks in a dimm
> +
> +--*/
> +
> +//
> +// Protocol definition
> +//
> +struct _MEM_INFO_PROTOCOL {
> + MEMORY_INFO_DATA MemInfoData;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/PlatformGopPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/PlatformGopPolicy.h
> new file mode 100644
> index 0000000000..a862e505bc
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/PlatformGopPolicy.h
> @@ -0,0 +1,67 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +--*/
> +
> +/** @file
> +**/
> +
> +#ifndef _PLATFORM_GOP_POLICY_PROTOCOL_H_
> +#define _PLATFORM_GOP_POLICY_PROTOCOL_H_
> +
> +#define EFI_PLATFORM_GOP_POLICY_PROTOCOL_GUID \
> + { 0xec2e931b, 0x3281, 0x48a5, 0x81, 0x7, 0xdf, 0x8a, 0x8b, 0xed, 0x3c, 0x5d }
> +
> +#define EFI_BMP_IMAGE_GUID \
> + { 0x878AC2CC, 0x5343, 0x46F2, 0xB5, 0x63, 0x51, 0xF8, 0x9D, 0xAF, 0x56,
> 0xBA }
> +
> +#define PLATFORM_GOP_POLICY_PROTOCOL_REVISION_01 0x01
> +#define PLATFORM_GOP_POLICY_PROTOCOL_REVISION_02 x0222
> +
> +#pragma pack(1)
> +
> +typedef enum {
> + LidClosed,
> + LidOpen,
> + LidStatusMax
> +} LID_STATUS;
> +
> +typedef enum {
> + Docked,
> + UnDocked,
> + DockStatusMax
> +} DOCK_STATUS;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *GET_PLATFORM_LID_STATUS) (
> + OUT LID_STATUS *CurrentLidStatus
> + );
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *GET_VBT_DATA) (
> + OUT EFI_PHYSICAL_ADDRESS *VbtAddress,
> + OUT UINT32 *VbtSize
> + );
> +
> +#pragma pack()
> +
> +typedef struct _PLATFORM_GOP_POLICY_PROTOCOL {
> + UINT32 Revision;
> + GET_PLATFORM_LID_STATUS GetPlatformLidStatus;
> + GET_VBT_DATA GetVbtData;
> +} PLATFORM_GOP_POLICY_PROTOCOL;
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gPlatformGOPPolicyGuid;
> +
> +extern EFI_GUID gBmpImageGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/VlvPlatformPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/VlvPlatformPolicy.h
> new file mode 100644
> index 0000000000..93756c5dea
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Protocol/VlvPlatformPolicy.h
> @@ -0,0 +1,105 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + VlvPlatformPolicy.h
> +
> +Abstract:
> +
> + Interface definition details between MCH and platform drivers during DXE
> phase.
> +
> +--*/
> +
> +#ifndef _VLV_PLATFORM_POLICY_H_
> +#define _VLV_PLATFORM_POLICY_H_
> +
> +//
> +// VLV Policy provided by platform for DXE phase {5BAB88BA-E0E2-4674-
> B6AD-B812F6881CD6}
> +//
> +#define DXE_VLV_PLATFORM_POLICY_GUID \
> + {0x5bab88ba, 0xe0e2, 0x4674, 0xb6, 0xad, 0xb8, 0x12, 0xf6, 0x88, 0x1c,
> 0xd6}
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gDxeVlvPlatformPolicyGuid;
> +
> +//
> +// Protocol revision number
> +// Any backwards compatible changes to this protocol will result in an
> update in the revision number
> +// Major changes will require publication of a new protocol
> +//
> +#define DXE_VLV_PLATFORM_POLICY_PROTOCOL_REVISION 0
> +
> +
> +typedef struct {
> + UINT8 PFITStatus;
> + UINT8 IgdTheramlSupport;
> + UINT8 ALSEnabled;
> + UINT8 LidStatus;
> +} IGD_PANEL_FEATURES;
> +
> +typedef struct {
> + UINT8 Reserved00;
> + UINT8 Reserved01;
> + UINT16 Reserved02;
> + UINT16 Reserved03;
> + UINT16 Reserved04;
> + UINT16 Reserved05;
> + UINT16 Reserved06;
> + UINT16 Reserved07;
> + UINT16 Reserved08;
> + UINT16 Reserved09;
> + UINT16 Reserved0A;
> + UINT16 Reserved0B;
> + UINT16 Reserved0C;
> + UINT16 Reserved0D;
> + UINT8 Reserved0E;
> + UINT8 Reserved0F;
> + UINT32 Reserved10;
> + UINT32 Reserved11;
> + UINT32 Reserved12;
> + UINT32 Reserved13;
> + UINT32 Reserved14;
> + UINT8 Reserved15;
> + UINT8 Reserved16;
> +} DPTF_SETTINGS;
> +
> +//
> +// MCH DXE Platform Policiy
> ==================================================
> +//
> +
> +#define NO_AUDIO 0
> +#define HD_AUDIO 1
> +#define LPE_AUDIO 2
> +
> +typedef struct _DXE_VLV_PLATFORM_POLICY_PROTOCOL {
> + UINT8 Revision;
> + IGD_PANEL_FEATURES IgdPanelFeatures;
> + DPTF_SETTINGS Reserved;
> + UINT8 GraphicReserve00;
> + UINT8 GraphicsPerfAnalyzers;
> + UINT8 PwmReserved00;
> + UINT8 PwmReserved01;
> + UINT8 PmSupport;
> + UINT8 GraphicReserve01;
> + UINT8 GfxPause;
> + UINT8 GraphicsFreqReq;
> + UINT8 GraphicReserve03;
> + UINT8 GraphicReserve02;
> + UINT8 GraphicReserve04;
> + UINT8 PavpMode;
> + UINT8 GraphicReserve05;
> + UINT8 UlClockGating;
> + UINT8 IdleReserve;
> + UINT8 AudioTypeSupport;
> + UINT8 GraphicReserve06;
> +} DXE_VLV_PLATFORM_POLICY_PROTOCOL;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Valleyview.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Valleyview.h
> new file mode 100644
> index 0000000000..589e30b1a8
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/Valleyview.h
> @@ -0,0 +1,55 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Valleyview.h
> +
> +Abstract:
> +
> + This header file provides common definitions just for Valleyview-SOC using
> to avoid including extra module's file.
> +--*/
> +
> +#ifndef _MC_H_INCLUDED_
> +#define _MC_H_INCLUDED_
> +/*
> +< Extended Configuration Base Address.*/
> +#define EC_BASE 0xE0000000
> +
> +//
> +// DEVICE 0 (Memroy Controller Hub)
> +//
> +#define MC_BUS 0x00
> +#define MC_DEV 0x00
> +#define MC_DEV2 0x02
> +#define MC_FUN 0x00
> +// NC DEV 0 Vendor and Device IDs
> +#define MC_VID 0x8086
> +#define MC_DID_OFFSET 0x2 //Device Identification
> +#define MC_GGC_OFFSET 0x50 //GMCH Graphics Control Register
> +
> +//
> +// Device 2 Register Equates
> +//
> +#define IGD_BUS 0x00
> +#define IGD_DEV 0x02
> +#define IGD_FUN_0 0x00
> +#define IGD_FUN_1 0x01
> +#define IGD_DEV_FUN (IGD_DEV << 3)
> +#define IGD_BUS_DEV_FUN (MC_BUS << 8) + IGD_DEV_FUN
> +#define IGD_VID 0x8086
> +#define IGD_DID 0xA001
> +#define IGD_MGGC_OFFSET 0x0050 //GMCH Graphics Control Register
> 0x50
> +#define IGD_BSM_OFFSET 0x005C //Base of Stolen Memory
> +#define IGD_SWSCI_OFFSET 0x00E0 //Software SCI 0xE0 2
> +#define IGD_ASLE_OFFSET 0x00E4 //System Display Event Register
> 0xE4 4
> +#define IGD_ASLS_OFFSET 0x00FC // ASL Storage
> +#define IGD_DID_QS 0x0BE2 //RCOverride -a: Fix the DID error
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/VlvAccess.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/VlvAccess.h
> new file mode 100644
> index 0000000000..d471921edc
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/VlvAccess.h
> @@ -0,0 +1,254 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + vlvAccess.h
> +
> +Abstract:
> +
> + Macros to simplify and abstract the interface to PCI configuration.
> +
> +--*/
> +
> +#ifndef _VLVACCESS_H_INCLUDED_
> +#define _VLVACCESS_H_INCLUDED_
> +
> +#include "Valleyview.h"
> +#include "VlvCommonDefinitions.h"
> +#include <Library/IoLib.h>
> +
> +//
> +// Memory Mapped IO access macros used by MSG BUS LIBRARY
> +//
> +#define MmioAddress( BaseAddr, Register ) \
> + ( (UINTN)BaseAddr + \
> + (UINTN)(Register) \
> + )
> +
> +
> +//
> +// UINT32
> +//
> +
> +#define Mmio32Ptr( BaseAddr, Register ) \
> + ( (volatile UINT32 *)MmioAddress( BaseAddr, Register ) )
> +
> +#define Mmio32( BaseAddr, Register ) \
> + *Mmio32Ptr( BaseAddr, Register )
> +
> +#define Mmio32Or( BaseAddr, Register, OrData ) \
> + Mmio32( BaseAddr, Register ) = \
> + (UINT32) ( \
> + Mmio32( BaseAddr, Register ) | \
> + (UINT32)(OrData) \
> + )
> +
> +#define Mmio32And( BaseAddr, Register, AndData ) \
> + Mmio32( BaseAddr, Register ) = \
> + (UINT32) ( \
> + Mmio32( BaseAddr, Register ) & \
> + (UINT32)(AndData) \
> + )
> +
> +#define Mmio32AndThenOr( BaseAddr, Register, AndData, OrData ) \
> + Mmio32( BaseAddr, Register ) = \
> + (UINT32) ( \
> + ( Mmio32( BaseAddr, Register ) & \
> + (UINT32)(AndData) \
> + ) | \
> + (UINT32)(OrData) \
> + )
> +
> +//
> +// UINT16
> +//
> +
> +#define Mmio16Ptr( BaseAddr, Register ) \
> + ( (volatile UINT16 *)MmioAddress( BaseAddr, Register ) )
> +
> +#define Mmio16( BaseAddr, Register ) \
> + *Mmio16Ptr( BaseAddr, Register )
> +
> +#define Mmio16Or( BaseAddr, Register, OrData ) \
> + Mmio16( BaseAddr, Register ) = \
> + (UINT16) ( \
> + Mmio16( BaseAddr, Register ) | \
> + (UINT16)(OrData) \
> + )
> +
> +#define Mmio16And( BaseAddr, Register, AndData ) \
> + Mmio16( BaseAddr, Register ) = \
> + (UINT16) ( \
> + Mmio16( BaseAddr, Register ) & \
> + (UINT16)(AndData) \
> + )
> +
> +#define Mmio16AndThenOr( BaseAddr, Register, AndData, OrData ) \
> + Mmio16( BaseAddr, Register ) = \
> + (UINT16) ( \
> + ( Mmio16( BaseAddr, Register ) & \
> + (UINT16)(AndData) \
> + ) | \
> + (UINT16)(OrData) \
> + )
> +
> +//
> +// UINT8
> +//
> +
> +#define Mmio8Ptr( BaseAddr, Register ) \
> + ( (volatile UINT8 *)MmioAddress( BaseAddr, Register ) )
> +
> +#define Mmio8( BaseAddr, Register ) \
> + *Mmio8Ptr( BaseAddr, Register )
> +
> +#define Mmio8Or( BaseAddr, Register, OrData ) \
> + Mmio8( BaseAddr, Register ) = \
> + (UINT8) ( \
> + Mmio8( BaseAddr, Register ) | \
> + (UINT8)(OrData) \
> + )
> +
> +#define Mmio8And( BaseAddr, Register, AndData ) \
> + Mmio8( BaseAddr, Register ) = \
> + (UINT8) ( \
> + Mmio8( BaseAddr, Register ) & \
> + (UINT8)(AndData) \
> + )
> +
> +#define Mmio8AndThenOr( BaseAddr, Register, AndData, OrData ) \
> + Mmio8( BaseAddr, Register ) = \
> + (UINT8) ( \
> + ( Mmio8( BaseAddr, Register ) & \
> + (UINT8)(AndData) \
> + ) | \
> + (UINT8)(OrData) \
> + )
> +
> +//
> +// MSG BUS API
> +//
> +
> +#define MSG_BUS_ENABLED 0x000000F0
> +#define MSGBUS_MASKHI 0xFFFFFF00
> +#define MSGBUS_MASKLO 0x000000FF
> +
> +#define MESSAGE_BYTE_EN BIT4
> +#define MESSAGE_WORD_EN BIT4 | BIT5
> +#define MESSAGE_DWORD_EN BIT4 | BIT5 | BIT6 | BIT7
> +
> +#define SIDEBAND_OPCODE 0x78
> +#define MEMREAD_OPCODE 0x00000000
> +#define MEMWRITE_OPCODE 0x01000000
> +
> +
> +
> +/***************************/
> +//
> +// Memory mapped PCI IO
> +//
> +
> +#define PciCfgPtr(Bus, Device, Function, Register )\
> + (UINTN)(Bus << 20) + \
> + (UINTN)(Device << 15) + \
> + (UINTN)(Function << 12) + \
> + (UINTN)(Register)
> +
> +#define PciCfg32Read_CF8CFC(B,D,F,R) \
> +
> (UINT32)(IoOut32(0xCF8,(0x80000000|(B<<16)|(D<<11)|(F<<8)|(R))),IoIn32(
> 0xCFC))
> +
> +#define PciCfg32Write_CF8CFC(B,D,F,R,Data) \
> +
> (IoOut32(0xCF8,(0x80000000|(B<<16)|(D<<11)|(F<<8)|(R))),IoOut32(0xCFC,
> Data))
> +
> +#define PciCfg32Or_CF8CFC(B,D,F,R,O) \
> + PciCfg32Write_CF8CFC(B,D,F,R, \
> + (PciCfg32Read_CF8CFC(B,D,F,R) | (O)))
> +
> +#define PciCfg32And_CF8CFC(B,D,F,R,A) \
> + PciCfg32Write_CF8CFC(B,D,F,R, \
> + (PciCfg32Read_CF8CFC(B,D,F,R) & (A)))
> +
> +#define PciCfg32AndThenOr_CF8CFC(B,D,F,R,A,O) \
> + PciCfg32Write_CF8CFC(B,D,F,R, \
> + (PciCfg32Read_CF8CFC(B,D,F,R) & (A)) | (O))
> +
> +//
> +// Device 0, Function 0
> +//
> +#define McD0PciCfg64(Register) MmPci64 (0, MC_BUS,
> 0, 0, Register)
> +#define McD0PciCfg64Or(Register, OrData) MmPci64Or (0,
> MC_BUS, 0, 0, Register, OrData)
> +#define McD0PciCfg64And(Register, AndData) MmPci64And (0,
> MC_BUS, 0, 0, Register, AndData)
> +#define McD0PciCfg64AndThenOr(Register, AndData, OrData)
> MmPci64AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
> +
> +#define McD0PciCfg32(Register) MmPci32 (0, MC_BUS,
> 0, 0, Register)
> +#define McD0PciCfg32Or(Register, OrData) MmPci32Or (0,
> MC_BUS, 0, 0, Register, OrData)
> +#define McD0PciCfg32And(Register, AndData) MmPci32And (0,
> MC_BUS, 0, 0, Register, AndData)
> +#define McD0PciCfg32AndThenOr(Register, AndData, OrData)
> MmPci32AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
> +
> +#define McD0PciCfg16(Register) MmPci16 (0, MC_BUS,
> 0, 0, Register)
> +#define McD0PciCfg16Or(Register, OrData) MmPci16Or (0,
> MC_BUS, 0, 0, Register, OrData)
> +#define McD0PciCfg16And(Register, AndData) MmPci16And (0,
> MC_BUS, 0, 0, Register, AndData)
> +#define McD0PciCfg16AndThenOr(Register, AndData, OrData)
> MmPci16AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
> +
> +#define McD0PciCfg8(Register) MmPci8 (0, MC_BUS, 0,
> 0, Register)
> +#define McD0PciCfg8Or(Register, OrData) MmPci8Or (0,
> MC_BUS, 0, 0, Register, OrData)
> +#define McD0PciCfg8And(Register, AndData) MmPci8And (0,
> MC_BUS, 0, 0, Register, AndData)
> +#define McD0PciCfg8AndThenOr( Register, AndData, OrData )
> MmPci8AndThenOr (0, MC_BUS, 0, 0, Register, AndData, OrData)
> +
> +
> +//
> +// Device 2, Function 0
> +//
> +#define McD2PciCfg64(Register) MmPci64 (0, MC_BUS,
> 2, 0, Register)
> +#define McD2PciCfg64Or(Register, OrData) MmPci64Or (0,
> MC_BUS, 2, 0, Register, OrData)
> +#define McD2PciCfg64And(Register, AndData) MmPci64And (0,
> MC_BUS, 2, 0, Register, AndData)
> +#define McD2PciCfg64AndThenOr(Register, AndData, OrData)
> MmPci64AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
> +
> +#define McD2PciCfg32(Register) MmPci32 (0, MC_BUS,
> 2, 0, Register)
> +#define McD2PciCfg32Or(Register, OrData) MmPci32Or (0,
> MC_BUS, 2, 0, Register, OrData)
> +#define McD2PciCfg32And(Register, AndData) MmPci32And (0,
> MC_BUS, 2, 0, Register, AndData)
> +#define McD2PciCfg32AndThenOr(Register, AndData, OrData)
> MmPci32AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
> +
> +#define McD2PciCfg16(Register) MmPci16 (0, MC_BUS,
> 2, 0, Register)
> +#define McD2PciCfg16Or(Register, OrData) MmPci16Or (0,
> MC_BUS, 2, 0, Register, OrData)
> +#define McD2PciCfg16And(Register, AndData) MmPci16And (0,
> MC_BUS, 2, 0, Register, AndData)
> +#define McD2PciCfg16AndThenOr(Register, AndData, OrData)
> MmPci16AndThenOr (0, MC_BUS, 2, 0, Register, AndData, OrData)
> +
> +#define McD2PciCfg8(Register) MmPci8 (0, MC_BUS, 2,
> 0, Register)
> +#define McD2PciCfg8Or(Register, OrData) MmPci8Or (0,
> MC_BUS, 2, 0, Register, OrData)
> +#define McD2PciCfg8And(Register, AndData) MmPci8And (0,
> MC_BUS, 2, 0, Register, AndData)
> +
> +//
> +// IO
> +//
> +
> +#ifndef IoIn8
> +
> +#define IoIn8(Port) \
> + IoRead8(Port)
> +
> +#define IoIn16(Port) \
> + IoRead16(Port)
> +
> +#define IoIn32(Port) \
> + IoRead32(Port)
> +
> +#define IoOut8(Port, Data) \
> + IoWrite8(Port, Data)
> +
> +#define IoOut16(Port, Data) \
> + IoWrite16(Port, Data)
> +
> +#define IoOut32(Port, Data) \
> + IoWrite32(Port, Data)
> +
> +#endif
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/VlvCommonDefinitions.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/VlvCommonDefinitions.h
> new file mode 100644
> index 0000000000..4a521154d9
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Includ
> e/VlvCommonDefinitions.h
> @@ -0,0 +1,252 @@
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + VlvCommonDefinitions.h
> +
> +Abstract:
> +
> + Macros to simplify and abstract the interface to PCI configuration.
> +
> +--*/
> +
> +///
> +/// PCI CONFIGURATION MAP REGISTER OFFSETS
> +///
> +#ifndef PCI_VID
> +#define PCI_VID 0x0000 ///< Vendor ID Register
> +#define PCI_DID 0x0002 ///< Device ID Register
> +#define PCI_CMD 0x0004 ///< PCI Command Register
> +#define PCI_STS 0x0006 ///< PCI Status Register
> +#define PCI_RID 0x0008 ///< Revision ID Register
> +#define PCI_IFT 0x0009 ///< Interface Type
> +#define PCI_SCC 0x000A ///< Sub Class Code Register
> +#define PCI_BCC 0x000B ///< Base Class Code Register
> +#define PCI_CLS 0x000C ///< Cache Line Size
> +#define PCI_PMLT 0x000D ///< Primary Master Latency Timer
> +#define PCI_HDR 0x000E ///< Header Type Register
> +#define PCI_BIST 0x000F ///< Built in Self Test Register
> +#define PCI_BAR0 0x0010 ///< Base Address Register 0
> +#define PCI_BAR1 0x0014 ///< Base Address Register 1
> +#define PCI_BAR2 0x0018 ///< Base Address Register 2
> +#define PCI_PBUS 0x0018 ///< Primary Bus Number Register
> +#define PCI_SBUS 0x0019 ///< Secondary Bus Number Register
> +#define PCI_SUBUS 0x001A ///< Subordinate Bus Number Register
> +#define PCI_SMLT 0x001B ///< Secondary Master Latency Timer
> +#define PCI_BAR3 0x001C ///< Base Address Register 3
> +#define PCI_IOBASE 0x001C ///< I/O base Register
> +#define PCI_IOLIMIT 0x001D ///< I/O Limit Register
> +#define PCI_SECSTATUS 0x001E ///< Secondary Status Register
> +#define PCI_BAR4 0x0020 ///< Base Address Register 4
> +#define PCI_MEMBASE 0x0020 ///< Memory Base Register
> +#define PCI_MEMLIMIT 0x0022 ///< Memory Limit Register
> +#define PCI_BAR5 0x0024 ///< Base Address Register 5
> +#define PCI_PRE_MEMBASE 0x0024 ///< Prefetchable memory Base
> register
> +#define PCI_PRE_MEMLIMIT 0x0026 ///< Prefetchable memory Limit
> register
> +#define PCI_PRE_MEMBASE_U 0x0028 ///< Prefetchable memory base
> upper 32 bits
> +#define PCI_PRE_MEMLIMIT_U 0x002C ///< Prefetchable memory limit
> upper 32 bits
> +#define PCI_SVID 0x002C ///< Subsystem Vendor ID
> +#define PCI_SID 0x002E ///< Subsystem ID
> +#define PCI_IOBASE_U 0x0030 ///< I/O base Upper Register
> +#define PCI_IOLIMIT_U 0x0032 ///< I/O Limit Upper Register
> +#define PCI_CAPP 0x0034 ///< Capabilities Pointer
> +#define PCI_EROM 0x0038 ///< Expansion ROM Base Address
> +#define PCI_INTLINE 0x003C ///< Interrupt Line Register
> +#define PCI_INTPIN 0x003D ///< Interrupt Pin Register
> +#define PCI_MAXGNT 0x003E ///< Max Grant Register
> +#define PCI_BRIDGE_CNTL 0x003E ///< Bridge Control Register
> +#define PCI_MAXLAT 0x003F ///< Max Latency Register
> +#endif
> +//
> +// Bit Difinitions
> +//
> +#ifndef BIT0
> +#define BIT0 0x0001
> +#define BIT1 0x0002
> +#define BIT2 0x0004
> +#define BIT3 0x0008
> +#define BIT4 0x0010
> +#define BIT5 0x0020
> +#define BIT6 0x0040
> +#define BIT7 0x0080
> +#define BIT8 0x0100
> +#define BIT9 0x0200
> +#define BIT10 0x0400
> +#define BIT11 0x0800
> +#define BIT12 0x1000
> +#define BIT13 0x2000
> +#define BIT14 0x4000
> +#define BIT15 0x8000
> +#define BIT16 0x00010000
> +#define BIT17 0x00020000
> +#define BIT18 0x00040000
> +#define BIT19 0x00080000
> +#define BIT20 0x00100000
> +#define BIT21 0x00200000
> +#define BIT22 0x00400000
> +#define BIT23 0x00800000
> +#define BIT24 0x01000000
> +#define BIT25 0x02000000
> +#define BIT26 0x04000000
> +#define BIT27 0x08000000
> +#define BIT28 0x10000000
> +#define BIT29 0x20000000
> +#define BIT30 0x40000000
> +#define BIT31 0x80000000
> +#endif
> +
> +#ifndef _PCIACCESS_H_INCLUDED_
> +#define _PCIACCESS_H_INCLUDED_
> +#ifndef PCI_EXPRESS_BASE_ADDRESS
> + #define PCI_EXPRESS_BASE_ADDRESS 0xE0000000
> +#endif
> +
> +#ifndef MmPciAddress
> +#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
> + ( (UINTN)PCI_EXPRESS_BASE_ADDRESS + \
> + (UINTN)(Bus << 20) + \
> + (UINTN)(Device << 15) + \
> + (UINTN)(Function << 12) + \
> + (UINTN)(Register) \
> + )
> +#endif
> +
> +//
> +// UINT64
> +//
> +#define MmPci64Ptr( Segment, Bus, Device, Function, Register ) \
> + ( (volatile UINT64 *)MmPciAddress( Segment, Bus, Device, Function,
> Register ) )
> +
> +#define MmPci64( Segment, Bus, Device, Function, Register ) \
> + *MmPci64Ptr( Segment, Bus, Device, Function, Register )
> +
> +#define MmPci64Or( Segment, Bus, Device, Function, Register, OrData ) \
> + MmPci64( Segment, Bus, Device, Function, Register ) = \
> + (UINT64) ( \
> + MmPci64( Segment, Bus, Device, Function, Register ) | \
> + (UINT64)(OrData) \
> + )
> +
> +#define MmPci64And( Segment, Bus, Device, Function, Register, AndData )
> \
> + MmPci64( Segment, Bus, Device, Function, Register ) = \
> + (UINT64) ( \
> + MmPci64( Segment, Bus, Device, Function, Register ) & \
> + (UINT64)(AndData) \
> + )
> +
> +#define MmPci64AndThenOr( Segment, Bus, Device, Function, Register,
> AndData, OrData ) \
> + MmPci64( Segment, Bus, Device, Function, Register ) = \
> + (UINT64) ( \
> + ( MmPci64( Segment, Bus, Device, Function, Register ) & \
> + (UINT64)(AndData) \
> + ) | \
> + (UINT64)(OrData) \
> + )
> +
> +//
> +// UINT32
> +//
> +
> +#define MmPci32Ptr( Segment, Bus, Device, Function, Register ) \
> + ( (volatile UINT32 *) MmPciAddress( Segment, Bus, Device, Function,
> Register ) )
> +
> +#define MmPci32( Segment, Bus, Device, Function, Register ) \
> + *MmPci32Ptr( Segment, Bus, Device, Function, Register )
> +
> +#define MmPci32Or( Segment, Bus, Device, Function, Register, OrData ) \
> + MmPci32( Segment, Bus, Device, Function, Register ) = \
> + (UINT32) ( \
> + MmPci32( Segment, Bus, Device, Function, Register ) | \
> + (UINT32)(OrData) \
> + )
> +
> +#define MmPci32And( Segment, Bus, Device, Function, Register, AndData )
> \
> + MmPci32( Segment, Bus, Device, Function, Register ) = \
> + (UINT32) ( \
> + MmPci32( Segment, Bus, Device, Function, Register ) & \
> + (UINT32)(AndData) \
> + )
> +
> +#define MmPci32AndThenOr( Segment, Bus, Device, Function, Register,
> AndData, OrData ) \
> + MmPci32( Segment, Bus, Device, Function, Register ) = \
> + (UINT32) ( \
> + ( MmPci32( Segment, Bus, Device, Function, Register ) & \
> + (UINT32)(AndData) \
> + ) | \
> + (UINT32)(OrData) \
> + )
> +
> +//
> +// UINT16
> +//
> +
> +#define MmPci16Ptr( Segment, Bus, Device, Function, Register ) \
> + ( (volatile UINT16 *)MmPciAddress( Segment, Bus, Device, Function,
> Register ) )
> +
> +#define MmPci16( Segment, Bus, Device, Function, Register ) \
> + *MmPci16Ptr( Segment, Bus, Device, Function, Register )
> +
> +#define MmPci16Or( Segment, Bus, Device, Function, Register, OrData ) \
> + MmPci16( Segment, Bus, Device, Function, Register ) = \
> + (UINT16) ( \
> + MmPci16( Segment, Bus, Device, Function, Register ) | \
> + (UINT16)(OrData) \
> + )
> +
> +#define MmPci16And( Segment, Bus, Device, Function, Register, AndData )
> \
> + MmPci16( Segment, Bus, Device, Function, Register ) = \
> + (UINT16) ( \
> + MmPci16( Segment, Bus, Device, Function, Register ) & \
> + (UINT16)(AndData) \
> + )
> +
> +#define MmPci16AndThenOr( Segment, Bus, Device, Function, Register,
> AndData, OrData ) \
> + MmPci16( Segment, Bus, Device, Function, Register ) = \
> + (UINT16) ( \
> + ( MmPci16( Segment, Bus, Device, Function, Register ) & \
> + (UINT16)(AndData) \
> + ) | \
> + (UINT16)(OrData) \
> + )
> +
> +//
> +// UINT8
> +//
> +
> +#define MmPci8Ptr( Segment, Bus, Device, Function, Register ) \
> + ( (volatile UINT8 *)MmPciAddress( Segment, Bus, Device, Function,
> Register ) )
> +
> +#define MmPci8( Segment, Bus, Device, Function, Register ) \
> + *MmPci8Ptr( Segment, Bus, Device, Function, Register )
> +
> +#define MmPci8Or( Segment, Bus, Device, Function, Register, OrData ) \
> + MmPci8( Segment, Bus, Device, Function, Register ) = \
> + (UINT8) ( \
> + MmPci8( Segment, Bus, Device, Function, Register ) | \
> + (UINT8)(OrData) \
> + )
> +
> +#define MmPci8And( Segment, Bus, Device, Function, Register, AndData ) \
> + MmPci8( Segment, Bus, Device, Function, Register ) = \
> + (UINT8) ( \
> + MmPci8( Segment, Bus, Device, Function, Register ) & \
> + (UINT8)(AndData) \
> + )
> +
> +#define MmPci8AndThenOr( Segment, Bus, Device, Function, Register,
> AndData, OrData ) \
> + MmPci8( Segment, Bus, Device, Function, Register ) = \
> + (UINT8) ( \
> + ( MmPci8( Segment, Bus, Device, Function, Register ) & \
> + (UINT8)(AndData) \
> + ) | \
> + (UINT8)(OrData) \
> + )
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/PchInitVar.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/PchInitVar.h
> new file mode 100644
> index 0000000000..aa5de5f4fd
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/PchInitVar.h
> @@ -0,0 +1,48 @@
> +/*++
> +
> +Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PchInitVar.h
> +
> +Abstract:
> +
> + This file defines variable shared between PCH Init DXE driver and PCH
> + Init S3 Resume PEIM.
> +
> +--*/
> +#ifndef _PCH_INIT_VAR_H_
> +#define _PCH_INIT_VAR_H_
> +
> +#include <Protocol/PchPlatformPolicy.h>
> +//
> +// Define the PCH Init Var GUID
> +//
> +#define PCH_INIT_VARIABLE_GUID {0xe6c2f70a, 0xb604, 0x4877,{0x85,
> 0xba, 0xde, 0xec, 0x89, 0xe1, 0x17, 0xeb}}
> +//
> +// Extern the GUID for PPI users.
> +//
> +extern EFI_GUID gPchInitVariableGuid;
> +
> +#define PCH_INIT_VARIABLE_NAME L"PchInit"
> +
> +//
> +// Define the Pch Init Variable structure
> +//
> +typedef struct {
> + UINT32 StorePosition;
> + UINT32 ExecutePosition;
> +} PCH_S3_PARAMETER_HEADER;
> +
> +#pragma pack(1)
> +typedef struct _PCH_INIT_VARIABLE {
> + PCH_S3_PARAMETER_HEADER *PchS3Parameter;
> +} PCH_INIT_VARIABLE;
> +#pragma pack()
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/SataControllerGuid.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/SataControllerGuid.h
> new file mode 100644
> index 0000000000..42643ec770
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/SataControllerGuid.h
> @@ -0,0 +1,34 @@
> +/*++
> +
> +Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + SataControllerGuid.h
> +
> +Abstract:
> +
> + GUID for use in describing SataController
> +
> +--*/
> +#ifndef _SERIAL_ATA_CONTROLLER_GUID_H_
> +#define _SERIAL_ATA_CONTROLLER_GUID_H_
> +
> +#ifdef ECP_FLAG
> +#define PCH_SATA_CONTROLLER_DRIVER_GUID \
> + { \
> + 0xbb929da9, 0x68f7, 0x4035, 0xb2, 0x2c, 0xa3, 0xbb, 0x3f, 0x23, 0xda, 0x55
> \
> + }
> +#else
> +#define PCH_SATA_CONTROLLER_DRIVER_GUID \
> + {\
> + 0xbb929da9, 0x68f7, 0x4035, 0xb2, 0x2c, 0xa3, 0xbb, 0x3f, 0x23, 0xda, 0x55
> \}
> +
> +#endif
> +
> +extern EFI_GUID gSataControllerDriverGuid;
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/SmbusArpMap.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/SmbusArpMap.h
> new file mode 100644
> index 0000000000..98c2f38443
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/SmbusArpMap.h
> @@ -0,0 +1,30 @@
> +//
> +//
> +/*++
> +
> +Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + SmbusArpMap.h
> +
> +Abstract:
> +
> + GUID for use in describing SMBus devices that were ARPed during PEI.
> +
> +--*/
> +#ifndef _EFI_SMBUS_ARP_MAP_GUID_H_
> +#define _EFI_SMBUS_ARP_MAP_GUID_H_
> +
> +#define EFI_SMBUS_ARP_MAP_GUID \
> + { \
> + 0x707be83e, 0x0bf6, 0x40a5, 0xbe, 0x64, 0x34, 0xc0, 0x3a, 0xa0, 0xb8,
> 0xe2 \
> + }
> +
> +extern EFI_GUID gEfiSmbusArpMapGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/Vlv2Variable.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/Vlv2Variable.h
> new file mode 100644
> index 0000000000..c67ae129a1
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Guid/Vlv2Variable.h
> @@ -0,0 +1,28 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Vlv2Variable.h
> +
> +Abstract:
> +
> + GUID used to define ValleyView2 variable.
> +
> +--*/
> +
> +#ifndef _VLV2_VARIABLE_GUID_H_
> +#define _VLV2_VARIABLE_GUID_H_
> +
> +#define EFI_VLV2_VARIABLE \
> + { \
> + 0x10ba6bbe, 0xa97e, 0x41c3, {0x9a, 0x07, 0x60, 0x7a, 0xd9, 0xbd, 0x60,
> 0xe5 } \
> + }
> +extern EFI_GUID gEfiVlv2VariableGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/CeAta.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/CeAta.h
> new file mode 100644
> index 0000000000..8cfbd74f7b
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/CeAta.h
> @@ -0,0 +1,126 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +--*/
> +
> +
> +/*++
> +
> +Module Name:
> +
> + CEATA.h
> +
> +Abstract:
> +
> + Header file for chipset CE-AT spec.
> +
> +--*/
> +
> +#ifndef _CE_ATA_H
> +#define _CE_ATA_H
> +
> +#pragma pack(1)
> +
> +
> +#define DATA_UNIT_SIZE 512
> +
> +
> +#define CMD60 60
> +#define CMD61 61
> +
> +
> +#define RW_MULTIPLE_REGISTER CMD60
> +#define RW_MULTIPLE_BLOCK CMD61
> +
> +
> +#define CE_ATA_SIG_CE 0xCE
> +#define CE_ATA_SIG_AA 0xAA
> +
> +
> +#define Reg_Features_Exp 01
> +#define Reg_SectorCount_Exp 02
> +#define Reg_LBALow_Exp 03
> +#define Reg_LBAMid_Exp 04
> +#define Reg_LBAHigh_Exp 05
> +#define Reg_Control 06
> +#define Reg_Features_Error 09
> +#define Reg_SectorCount 10
> +#define Reg_LBALow 11
> +#define Reg_LBAMid 12
> +#define Reg_LBAHigh 13
> +#define Reg_Device_Head 14
> +#define Reg_Command_Status 15
> +
> +#define Reg_scrTempC 0x80
> +#define Reg_scrTempMaxP 0x84
> +#define Reg_scrTempMinP 0x88
> +#define Reg_scrStatus 0x8C
> +#define Reg_scrReallocsA 0x90
> +#define Reg_scrERetractsA 0x94
> +#define Reg_scrCapabilities 0x98
> +#define Reg_scrControl 0xC0
> +
> +
> +
> +typedef struct {
> + UINT8 Reserved0;
> + UINT8 Features_Exp;
> + UINT8 SectorCount_Exp;
> + UINT8 LBALow_Exp;
> + UINT8 LBAMid_Exp;
> + UINT8 LBAHigh_Exp;
> + UINT8 Control;
> + UINT8 Reserved1[2];
> + UINT8 Features_Error;
> + UINT8 SectorCount;
> + UINT8 LBALow;
> + UINT8 LBAMid;
> + UINT8 LBAHigh;
> + UINT8 Device_Head;
> + UINT8 Command_Status;
> +} TASK_FILE;
> +
> +
> +//
> +//Reduced ATA command set
> +//
> +#define IDENTIFY_DEVICE 0xEC
> +#define READ_DMA_EXT 0x25
> +#define WRITE_DMA_EXT 0x35
> +#define STANDBY_IMMEDIATE 0xE0
> +#define FLUSH_CACHE_EXT 0xEA
> +
> +
> +
> +typedef struct {
> + UINT16 Reserved0[10];
> + UINT16 SerialNumber[10];
> + UINT16 Reserved1[3];
> + UINT16 FirmwareRevision[4];
> + UINT16 ModelNumber[20];
> + UINT16 Reserved2[33];
> + UINT16 MajorVersion;
> + UINT16 Reserved3[19];
> + UINT16 MaximumLBA[4];
> + UINT16 Reserved4[2];
> + UINT16 Sectorsize;
> + UINT16 Reserved5;
> + UINT16 DeviceGUID[4];
> + UINT16 Reserved6[94];
> + UINT16 Features;
> + UINT16 MaxWritesPerAddress;
> + UINT16 Reserved7[47];
> + UINT16 IntegrityWord;
> +} IDENTIFY_DEVICE_DATA;
> +
> +
> +
> +
> +
> +#pragma pack()
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/Mmc.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/Mmc.h
> new file mode 100644
> index 0000000000..fd2706eb89
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/Mmc.h
> @@ -0,0 +1,349 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +--*/
> +
> +
> +/*++
> +
> +Module Name:
> +
> + MMC.h
> +
> +Abstract:
> +
> + Header file for Industry MMC 4.2 spec.
> +
> +--*/
> +
> +#ifndef _MMC_H
> +#define _MMC_H
> +
> +#pragma pack(1)
> +//
> +//Command definition
> +//
> +
> +#define CMD0 0
> +#define CMD1 1
> +#define CMD2 2
> +#define CMD3 3
> +#define CMD4 4
> +#define CMD6 6
> +#define CMD7 7
> +#define CMD8 8
> +#define CMD9 9
> +#define CMD10 10
> +#define CMD11 11
> +#define CMD12 12
> +#define CMD13 13
> +#define CMD14 14
> +#define CMD15 15
> +#define CMD16 16
> +#define CMD17 17
> +#define CMD18 18
> +#define CMD19 19
> +#define CMD20 20
> +#define CMD23 23
> +#define CMD24 24
> +#define CMD25 25
> +#define CMD26 26
> +#define CMD27 27
> +#define CMD28 28
> +#define CMD29 29
> +#define CMD30 30
> +#define CMD35 35
> +#define CMD36 36
> +#define CMD38 38
> +#define CMD39 39
> +#define CMD40 40
> +#define CMD42 42
> +#define CMD55 55
> +#define CMD56 56
> +
> +
> +
> +#define GO_IDLE_STATE CMD0
> +#define SEND_OP_COND CMD1
> +#define ALL_SEND_CID CMD2
> +#define SET_RELATIVE_ADDR CMD3
> +#define SET_DSR CMD4
> +#define SWITCH CMD6
> +#define SELECT_DESELECT_CARD CMD7
> +#define SEND_EXT_CSD CMD8
> +#define SEND_CSD CMD9
> +#define SEND_CID CMD10
> +#define READ_DAT_UNTIL_STOP CMD11
> +#define STOP_TRANSMISSION CMD12
> +#define SEND_STATUS CMD13
> +#define BUSTEST_R CMD14
> +#define GO_INACTIVE_STATE CMD15
> +#define SET_BLOCKLEN CMD16
> +#define READ_SINGLE_BLOCK CMD17
> +#define READ_MULTIPLE_BLOCK CMD18
> +#define BUSTEST_W CMD19
> +#define WRITE_DAT_UNTIL_STOP CMD20
> +#define SET_BLOCK_COUNT CMD23
> +#define WRITE_BLOCK CMD24
> +#define WRITE_MULTIPLE_BLOCK CMD25
> +#define PROGRAM_CID CMD26
> +#define PROGRAM_CSD CMD27
> +#define SET_WRITE_PROT CMD28
> +#define CLR_WRITE_PROT CMD29
> +#define SEND_WRITE_PROT CMD30
> +#define ERASE_GROUP_START CMD35
> +#define ERASE_GROUP_END CMD36
> +#define ERASE CMD38
> +#define FAST_IO CMD39
> +#define GO_IRQ_STATE CMD40
> +#define LOCK_UNLOCK CMD42
> +#define APP_CMD CMD55
> +#define GEN_CMD CMD56
> +
> +#define B_PERM_WP_DIS 0x10
> +#define B_PWR_WP_EN 0x01
> +#define US_PERM_WP_DIS 0x10
> +#define US_PWR_WP_EN 0x01
> +
> +#define FREQUENCY_OD (400 * 1000)
> +#define FREQUENCY_MMC_PP (26 * 1000 * 1000)
> +#define FREQUENCY_MMC_PP_HIGH (52 * 1000 * 1000)
> +
> +#define DEFAULT_DSR_VALUE 0x404
> +
> +//
> +//Registers definition
> +//
> +
> +typedef struct {
> + UINT32 Reserved0: 7; // 0
> + UINT32 V170_V195: 1; // 1.70V - 1.95V
> + UINT32 V200_V260: 7; // 2.00V - 2.60V
> + UINT32 V270_V360: 9; // 2.70V - 3.60V
> + UINT32 Reserved1: 5; // 0
> + UINT32 AccessMode: 2; // 00b (byte mode), 10b (sector mode)
> + UINT32 Busy: 1; // This bit is set to LOW if the card has not finished the
> power up routine
> +} OCR;
> +
> +
> +typedef struct {
> + UINT8 NotUsed: 1; // 1
> + UINT8 CRC: 7; // CRC7 checksum
> + UINT8 MDT; // Manufacturing date
> + UINT32 PSN; // Product serial number
> + UINT8 PRV; // Product revision
> + UINT8 PNM[6]; // Product name
> + UINT16 OID; // OEM/Application ID
> + UINT8 MID; // Manufacturer ID
> +} CID;
> +
> +
> +typedef struct {
> + UINT8 NotUsed: 1; // 1 [0:0]
> + UINT8 CRC: 7; // CRC [7:1]
> + UINT8 ECC: 2; // ECC code [9:8]
> + UINT8 FILE_FORMAT: 2; // File format [11:10]
> + UINT8 TMP_WRITE_PROTECT: 1; // Temporary write protection [12:12]
> + UINT8 PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13]
> + UINT8 COPY: 1; // Copy flag (OTP) [14:14]
> + UINT8 FILE_FORMAT_GRP: 1; // File format group [15:15]
> + UINT16 CONTENT_PROT_APP: 1; // Content protection application [16:16]
> + UINT16 Reserved0: 4; // 0 [20:17]
> + UINT16 WRITE_BL_PARTIAL: 1; // Partial blocks for write allowed [21:21]
> + UINT16 WRITE_BL_LEN: 4; // Max. write data block length [25:22]
> + UINT16 R2W_FACTOR: 3; // Write speed factor [28:26]
> + UINT16 DEFAULT_ECC: 2; // Manufacturer default ECC [30:29]
> + UINT16 WP_GRP_ENABLE: 1; // Write protect group enable [31:31]
> + UINT32 WP_GRP_SIZE: 5; // Write protect group size [36:32]
> + UINT32 ERASE_GRP_MULT: 5; // Erase group size multiplier [41:37]
> + UINT32 ERASE_GRP_SIZE: 5; // Erase group size [46:42]
> + UINT32 C_SIZE_MULT: 3; // Device size multiplier [49:47]
> + UINT32 VDD_W_CURR_MAX: 3; // Max. write current @ VDD max
> [52:50]
> + UINT32 VDD_W_CURR_MIN: 3; // Max. write current @ VDD min [55:53]
> + UINT32 VDD_R_CURR_MAX: 3; // Max. read current @ VDD max [58:56]
> + UINT32 VDD_R_CURR_MIN: 3; // Max. read current @ VDD min [61:59]
> + UINT32 C_SIZELow2: 2;// Device size [73:62]
> + UINT32 C_SIZEHigh10: 10;// Device size [73:62]
> + UINT32 Reserved1: 2; // 0 [75:74]
> + UINT32 DSR_IMP: 1; // DSR implemented [76:76]
> + UINT32 READ_BLK_MISALIGN: 1; // Read block misalignment [77:77]
> + UINT32 WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78]
> + UINT32 READ_BL_PARTIAL: 1; // Partial blocks for read allowed [79:79]
> + UINT32 READ_BL_LEN: 4; // Max. read data block length [83:80]
> + UINT32 CCC: 12;// Card command classes [95:84]
> + UINT8 TRAN_SPEED ; // Max. bus clock frequency [103:96]
> + UINT8 NSAC ; // Data read access-time 2 in CLK cycles (NSAC*100)
> [111:104]
> + UINT8 TAAC ; // Data read access-time 1 [119:112]
> + UINT8 Reserved2: 2; // 0 [121:120]
> + UINT8 SPEC_VERS: 4; // System specification version [125:122]
> + UINT8 CSD_STRUCTURE: 2; // CSD structure [127:126]
> +} CSD;
> +
> +typedef struct {
> + UINT8 Reserved133_0[134]; // [133:0] 0
> + UINT8 SEC_BAD_BLOCK_MGMNT; // [134] Bad Block Management
> mode
> + UINT8 Reserved135; // [135] 0
> + UINT8 ENH_START_ADDR[4]; // [139:136] Enhanced User Data Start
> Address
> + UINT8 ENH_SIZE_MULT[3]; // [142:140] Enhanced User Data Start Size
> + UINT8 GP_SIZE_MULT_1[3]; // [145:143] GPP1 Size
> + UINT8 GP_SIZE_MULT_2[3]; // [148:146] GPP2 Size
> + UINT8 GP_SIZE_MULT_3[3]; // [151:149] GPP3 Size
> + UINT8 GP_SIZE_MULT_4[3]; // [154:152] GPP4 Size
> + UINT8 PARTITION_SETTING_COMPLETED; // [155] Partitioning Setting
> + UINT8 PARTITIONS_ATTRIBUTES; // [156] Partitions attributes
> + UINT8 MAX_ENH_SIZE_MULT[3]; // [159:157] GPP4 Start Size
> + UINT8 PARTITIONING_SUPPORT; // [160] Partitioning Support
> + UINT8 HPI_MGMT; // [161] HPI management
> + UINT8 RST_n_FUNCTION; // [162] H/W reset function
> + UINT8 BKOPS_EN; // [163] Enable background operations
> handshake
> + UINT8 BKOPS_START; // [164] Manually start background operations
> + UINT8 Reserved165; // [165] 0
> + UINT8 WR_REL_PARAM; // [166] Write reliability parameter register
> + UINT8 WR_REL_SET; // [167] Write reliability setting register
> + UINT8 RPMB_SIZE_MULT; // [168] RPMB Size
> + UINT8 FW_CONFIG; // [169] FW configuration
> + UINT8 Reserved170; // [170] 0
> + UINT8 USER_WP; // [171] User area write protection
> + UINT8 Reserved172; // [172] 0
> + UINT8 BOOT_WP; // [173] Boot area write protection
> + UINT8 Reserved174; // [174] 0
> + UINT8 ERASE_GROUP_DEF; // [175] High density erase group
> definition
> + UINT8 Reserved176; // [176] 0
> + UINT8 BOOT_BUS_WIDTH; // [177] Boot bus width
> + UINT8 BOOT_CONFIG_PROT; // [178] Boot config protection
> + UINT8 PARTITION_CONFIG; // [179] Partition config
> + UINT8 Reserved180; // [180] 0
> + UINT8 ERASED_MEM_CONT; // [181] Erased Memory Content
> + UINT8 Reserved182; // [182] 0
> + UINT8 BUS_WIDTH; // [183] Bus Width Mode
> + UINT8 Reserved184; // [184] 0
> + UINT8 HS_TIMING; // [185] High Speed Interface Timing
> + UINT8 Reserved186; // [186] 0
> + UINT8 POWER_CLASS; // [187] Power Class
> + UINT8 Reserved188; // [188] 0
> + UINT8 CMD_SET_REV; // [189] Command Set Revision
> + UINT8 Reserved190; // [190] 0
> + UINT8 CMD_SET; // [191] Command Set
> + UINT8 EXT_CSD_REV; // [192] Extended CSD Revision
> + UINT8 Reserved193; // [193] 0
> + UINT8 CSD_STRUCTURE; // [194] CSD Structure Version
> + UINT8 Reserved195; // [195] 0
> + UINT8 CARD_TYPE; // [196] Card Type
> + UINT8 Reserved197; // [197] 0
> + UINT8 OUT_OF_INTERRUPT_TIME; // [198] Out-of-interrupt busy timing
> + UINT8 PARTITION_SWITCH_TIME; // [199] Partition switching timing
> + UINT8 PWR_CL_52_195; // [200] Power Class for 52MHz @ 1.95V
> + UINT8 PWR_CL_26_195; // [201] Power Class for 26MHz @ 1.95V
> + UINT8 PWR_CL_52_360; // [202] Power Class for 52MHz @ 3.6V
> + UINT8 PWR_CL_26_360; // [203] Power Class for 26MHz @ 3.6V
> + UINT8 Reserved204; // [204] 0
> + UINT8 MIN_PERF_R_4_26; // [205] Minimum Read Performance for
> 4bit @26MHz
> + UINT8 MIN_PERF_W_4_26; // [206] Minimum Write Performance for
> 4bit @26MHz
> + UINT8 MIN_PERF_R_8_26_4_52; // [207] Minimum Read Performance
> for 8bit @26MHz/4bit @52MHz
> + UINT8 MIN_PERF_W_8_26_4_52; // [208] Minimum Write Performance
> for 8bit @26MHz/4bit @52MHz
> + UINT8 MIN_PERF_R_8_52; // [209] Minimum Read Performance for
> 8bit @52MHz
> + UINT8 MIN_PERF_W_8_52; // [210] Minimum Write Performance for
> 8bit @52MHz
> + UINT8 Reserved211; // [211] 0
> + UINT8 SEC_COUNT[4]; // [215:212] Sector Count
> + UINT8 Reserved216; // [216] 0
> + UINT8 S_A_TIMEOUT; // [217] Sleep/awake timeout
> + UINT8 Reserved218; // [218] 0
> + UINT8 S_C_VCCQ; // [219] Sleep current (VCCQ)
> + UINT8 S_C_VCC; // [220] Sleep current (VCC)
> + UINT8 HC_WP_GRP_SIZE; // [221] High-capacity write protect group
> size
> + UINT8 REL_WR_SEC_C; // [222] Reliable write sector count
> + UINT8 ERASE_TIMEOUT_MULT; // [223] High-capacity erase timeout
> + UINT8 HC_ERASE_GRP_SIZE; // [224] High-capacity erase unit size
> + UINT8 ACC_SIZE; // [225] Access size
> + UINT8 BOOT_SIZE_MULTI; // [226] Boot partition size
> + UINT8 Reserved227; // [227] 0
> + UINT8 BOOT_INFO; // [228] Boot information
> + UINT8 SEC_TRIM_MULT; // [229] Secure TRIM Multiplier
> + UINT8 SEC_ERASE_MULT; // [230] Secure Erase Multiplier
> + UINT8 SEC_FEATURE_SUPPORT; // [231] Secure Feature support
> + UINT8 TRIM_MULT; // [232] TRIM Multiplier
> + UINT8 Reserved233; // [233] 0
> + UINT8 MIN_PERF_DDR_R_8_52; // [234] Min Read Performance for 8-bit
> @ 52MHz
> + UINT8 MIN_PERF_DDR_W_8_52; // [235] Min Write Performance for 8-
> bit @ 52MHz
> + UINT8 Reserved237_236[2]; // [237:236] 0
> + UINT8 PWR_CL_DDR_52_195; // [238] Power class for 52MHz, DDR at
> 1.95V
> + UINT8 PWR_CL_DDR_52_360; // [239] Power class for 52MHz, DDR at
> 3.6V
> + UINT8 Reserved240; // [240] 0
> + UINT8 INI_TIMEOUT_AP; // [241] 1st initialization time after
> partitioning
> + UINT8 CORRECTLY_PRG_SECTORS_NUM[4]; // [245:242] Number of
> correctly programmed sectors
> + UINT8 BKOPS_STATUS; // [246] Background operations status
> + UINT8 Reserved501_247[255]; // [501:247] 0
> + UINT8 BKOPS_SUPPORT; // [502] Background operations support
> + UINT8 HPI_FEATURES; // [503] HPI features
> + UINT8 S_CMD_SET; // [504] Sector Count
> + UINT8 Reserved511_505[7]; // [511:505] Sector Count
> +} EXT_CSD;
> +
> +
> +//
> +//Card Status definition
> +//
> +typedef struct {
> + UINT32 Reserved0: 2; //Reserved for Manufacturer Test Mode
> + UINT32 Reserved1: 2; //Reserved for Application Specific commands
> + UINT32 Reserved2: 1; //
> + UINT32 SAPP_CMD: 1; //
> + UINT32 Reserved3: 1; //Reserved
> + UINT32 SWITCH_ERROR: 1; //
> + UINT32 READY_FOR_DATA: 1; //
> + UINT32 CURRENT_STATE: 4; //
> + UINT32 ERASE_RESET: 1; //
> + UINT32 Reserved4: 1; //Reserved
> + UINT32 WP_ERASE_SKIP: 1; //
> + UINT32 CID_CSD_OVERWRITE: 1; //
> + UINT32 OVERRUN: 1; //
> + UINT32 UNDERRUN: 1; //
> + UINT32 ERROR: 1; //
> + UINT32 CC_ERROR: 1; //
> + UINT32 CARD_ECC_FAILED: 1; //
> + UINT32 ILLEGAL_COMMAND: 1; //
> + UINT32 COM_CRC_ERROR: 1; //
> + UINT32 LOCK_UNLOCK_FAILED: 1; //
> + UINT32 CARD_IS_LOCKED: 1; //
> + UINT32 WP_VIOLATION: 1; //
> + UINT32 ERASE_PARAM: 1; //
> + UINT32 ERASE_SEQ_ERROR: 1; //
> + UINT32 BLOCK_LEN_ERROR: 1; //
> + UINT32 ADDRESS_MISALIGN: 1; //
> + UINT32 ADDRESS_OUT_OF_RANGE:1; //
> +} CARD_STATUS;
> +
> +typedef struct {
> + UINT32 CmdSet: 3;
> + UINT32 Reserved0: 5;
> + UINT32 Value: 8;
> + UINT32 Index: 8;
> + UINT32 Access: 2;
> + UINT32 Reserved1: 6;
> +} SWITCH_ARGUMENT;
> +
> +#define CommandSet_Mode 0
> +#define SetBits_Mode 1
> +#define ClearBits_Mode 2
> +#define WriteByte_Mode 3
> +
> +
> +#define Idle_STATE 0
> +#define Ready_STATE 1
> +#define Ident_STATE 2
> +#define Stby_STATE 3
> +#define Tran_STATE 4
> +#define Data_STATE 5
> +#define Rcv_STATE 6
> +#define Prg_STATE 7
> +#define Dis_STATE 8
> +#define Btst_STATE 9
> +
> +
> +
> +#pragma pack()
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/SdCard.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/SdCard.h
> new file mode 100644
> index 0000000000..62bd6e0823
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/IndustryStandard/SdCard.h
> @@ -0,0 +1,157 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +--*/
> +
> +
> +/*++
> +Module Name:
> +
> + SDCard.h
> +
> +Abstract:
> +
> + Header file for Industry SD Card 2.0 spec.
> +
> +--*/
> +
> +#ifndef _SD_CARD_H
> +#define _SD_CARD_H
> +
> +#include "Mmc.h"
> +
> +#pragma pack(1)
> +
> +#define CHECK_PATTERN 0xAA
> +
> +#define ACMD6 6
> +#define ACMD13 13
> +#define ACMD23 23
> +#define ACMD41 41
> +#define ACMD42 42
> +#define ACMD51 51
> +
> +
> +#define SWITCH_FUNC CMD6
> +#define SEND_IF_COND CMD8
> +
> +
> +#define SET_BUS_WIDTH ACMD6
> +#define SD_STATUS ACMD13
> +#define SET_WR_BLK_ERASE_COUNT ACMD23
> +#define SD_SEND_OP_COND ACMD41
> +#define SET_CLR_CARD_DETECT ACMD42
> +#define SEND_SCR ACMD51
> +
> +
> +
> +#define SD_BUS_WIDTH_1 0
> +#define SD_BUS_WIDTH_4 2
> +
> +
> +
> +#define FREQUENCY_SD_PP (25 * 1000 * 1000)
> +#define FREQUENCY_SD_PP_HIGH (50 * 1000 * 1000)
> +
> +
> +#define SD_SPEC_10 0
> +#define SD_SPEC_11 1
> +#define SD_SPEC_20 2
> +
> +
> +#define VOLTAGE_27_36 0x1
> +
> +typedef struct {
> + UINT8 NotUsed: 1; // 1 [0:0]
> + UINT8 CRC: 7; // CRC [7:1]
> + UINT8 ECC: 2; // ECC code [9:8]
> + UINT8 FILE_FORMAT: 2; // File format [11:10]
> + UINT8 TMP_WRITE_PROTECT: 1; // Temporary write protection [12:12]
> + UINT8 PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13]
> + UINT8 COPY: 1; // Copy flag (OTP) [14:14]
> + UINT8 FILE_FORMAT_GRP: 1; // File format group [15:15]
> + UINT16 Reserved0: 5; // 0 [20:16]
> + UINT16 WRITE_BL_PARTIAL: 1; // Partial blocks for write allowed [21:21]
> + UINT16 WRITE_BL_LEN: 4; // Max. write data block length [25:22]
> + UINT16 R2W_FACTOR: 3; // Write speed factor [28:26]
> + UINT16 DEFAULT_ECC: 2; // Manufacturer default ECC [30:29]
> + UINT16 WP_GRP_ENABLE: 1; // Write protect group enable [31:31]
> + UINT16 WP_GRP_SIZE: 7; // Write protect group size [38:32]
> + UINT16 SECTOR_SIZE: 7; // Erase sector size [45:39]
> + UINT16 ERASE_BLK_EN: 1; // Erase single block enable [46:46]
> + UINT16 Reserved1: 1; // 0 [47:47]
> +
> + UINT32 C_SIZE: 22; // Device size [69:48]
> + UINT32 Reserved2: 6; // 0 [75:70]
> + UINT32 DSR_IMP: 1; // DSR implemented [76:76]
> + UINT32 READ_BLK_MISALIGN: 1; // Read block misalignment [77:77]
> + UINT32 WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78]
> + UINT32 READ_BL_PARTIAL: 1; // Partial blocks for read allowed [79:79]
> +
> + UINT16 READ_BL_LEN: 4; // Max. read data block length [83:80]
> + UINT16 CCC: 12; // Card command classes [95:84]
> + UINT8 TRAN_SPEED ; // Max. bus clock frequency [103:96]
> + UINT8 NSAC ; // Data read access-time 2 in CLK cycles (NSAC*100)
> [111:104]
> + UINT8 TAAC ; // Data read access-time 1 [119:112]
> + UINT8 Reserved3: 6; // 0 [125:120]
> + UINT8 CSD_STRUCTURE: 2; // CSD structure [127:126]
> +} CSD_SDV2;
> +
> +typedef struct {
> + UINT32 Reserved0;
> + UINT32 Reserved1: 16;
> + UINT32 SD_BUS_WIDTH: 4;
> + UINT32 SD_SECURITY: 3;
> + UINT32 DATA_STAT_AFTER_ERASE: 1;
> + UINT32 SD_SPEC: 4;
> + UINT32 SCR_STRUCT: 4;
> +} SCR;
> +
> +
> +typedef struct {
> + UINT8 Reserved0[50];
> + UINT8 ERASE_OFFSET: 2;
> + UINT8 ERASE_TIMEOUT: 6;
> + UINT16 ERASE_SIZE;
> + UINT8 Reserved1: 4;
> + UINT8 AU_SIZE: 4;
> + UINT8 PERFORMANCE_MOVE;
> + UINT8 SPEED_CLASS;
> + UINT32 SIZE_OF_PROTECTED_AREA;
> + UINT32 SD_CARD_TYPE: 16;
> + UINT32 Reserved2: 13;
> + UINT32 SECURED_MODE: 1;
> + UINT32 DAT_BUS_WIDTH: 2;
> +} SD_STATUS_REG;
> +
> +
> +
> +typedef struct {
> + UINT8 Reserved0[34];
> + UINT16 Group1BusyStatus;
> + UINT16 Group2BusyStatus;
> + UINT16 Group3BusyStatus;
> + UINT16 Group4BusyStatus;
> + UINT16 Group5BusyStatus;
> + UINT16 Group6BusyStatus;
> + UINT8 DataStructureVersion;
> + UINT8 Group21Status;
> + UINT8 Group43Status;
> + UINT8 Group65Status;
> + UINT16 Group1Function;
> + UINT16 Group2Function;
> + UINT16 Group3Function;
> + UINT16 Group4Function;
> + UINT16 Group5Function;
> + UINT16 Group6Function;
> + UINT16 MaxCurrent;
> +} SWITCH_STATUS;
> +
> +
> +#pragma pack()
> +#endif
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Library/I2CLib.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Library/I2CLib.h
> new file mode 100644
> index 0000000000..7df5ff2fef
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Library/I2CLib.h
> @@ -0,0 +1,169 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + I2CRegs.h
> +
> +Abstract:
> +
> + Register Definitions for I2C Driver/PEIM.
> +
> +--*/
> +#include <Uefi.h>
> +#include <Library/IoLib.h>
> +
> +#ifndef I2C_REGS_A0_H
> +#define I2C_REGS_A0_H
> +
> +//
> +// FIFO write workaround value.
> +//
> +#define FIFO_WRITE_DELAY 2
> +
> +//
> +// MMIO Register Definitions
> +//
> +#define R_IC_CON ( 0x00) // I2C Control
> +#define B_IC_RESTART_EN BIT5
> +#define B_IC_SLAVE_DISABLE BIT6
> +#define V_SPEED_STANDARD 0x02
> +#define V_SPEED_FAST 0x04
> +#define V_SPEED_HIGH 0x06
> +#define B_MASTER_MODE BIT0
> +
> +#define R_IC_TAR ( 0x04) // I2C Target Address
> +#define IC_TAR_10BITADDR_MASTER BIT12
> +
> +#define R_IC_SAR ( 0x08) // I2C Slave Address
> +#define R_IC_HS_MADDR ( 0x0C) // I2C HS MasterMode Code
> Address
> +#define R_IC_DATA_CMD ( 0x10) // I2C Rx/Tx Data Buffer and
> Command
> +
> +#define B_READ_CMD BIT8 // 1 = read, 0 = write
> +#define B_CMD_STOP BIT9 // 1 = STOP
> +#define B_CMD_RESTART BIT10 // 1 = IC_RESTART_EN
> +
> +#define V_WRITE_CMD_MASK ( 0xFF)
> +
> +#define R_IC_SS_SCL_HCNT ( 0x14) // Standard Speed I2C Clock
> SCL High Count
> +#define R_IC_SS_SCL_LCNT ( 0x18) // Standard Speed I2C Clock
> SCL Low Count
> +#define R_IC_FS_SCL_HCNT ( 0x1C) // Full Speed I2C Clock SCL
> High Count
> +#define R_IC_FS_SCL_LCNT ( 0x20) // Full Speed I2C Clock SCL
> Low Count
> +#define R_IC_HS_SCL_HCNT ( 0x24) // High Speed I2C Clock SCL
> High Count
> +#define R_IC_HS_SCL_LCNT ( 0x28) // High Speed I2C Clock SCL
> Low Count
> +#define R_IC_INTR_STAT ( 0x2C) // I2C Inetrrupt Status
> +#define R_IC_INTR_MASK ( 0x30) // I2C Interrupt Mask
> +#define I2C_INTR_GEN_CALL BIT11 // General call received
> +#define I2C_INTR_START_DET BIT10
> +#define I2C_INTR_STOP_DET BIT9
> +#define I2C_INTR_ACTIVITY BIT8
> +#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
> +#define I2C_INTR_TX_EMPTY BIT4
> +#define I2C_INTR_TX_OVER BIT3
> +#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over
> threshold
> +#define I2C_INTR_RX_OVER BIT1
> +#define I2C_INTR_RX_UNDER BIT0
> +#define R_IC_RAW_INTR_STAT ( 0x34) // I2C Raw Interrupt Status
> +#define R_IC_RX_TL ( 0x38) // I2C Receive FIFO Threshold
> +#define R_IC_TX_TL ( 0x3C) // I2C Transmit FIFO Threshold
> +#define R_IC_CLR_INTR ( 0x40) // Clear Combined and Individual
> Interrupts
> +#define R_IC_CLR_RX_UNDER ( 0x44) // Clear RX_UNDER
> Interrupt
> +#define R_IC_CLR_RX_OVER ( 0x48) // Clear RX_OVERinterrupt
> +#define R_IC_CLR_TX_OVER ( 0x4C) // Clear TX_OVER interrupt
> +#define R_IC_CLR_RD_REQ ( 0x50) // Clear RD_REQ interrupt
> +#define R_IC_CLR_TX_ABRT ( 0x54) // Clear TX_ABRT interrupt
> +#define R_IC_CLR_RX_DONE ( 0x58) // Clear RX_DONE interrupt
> +#define R_IC_CLR_ACTIVITY ( 0x5C) // Clear ACTIVITY interrupt
> +#define R_IC_CLR_STOP_DET ( 0x60) // Clear STOP_DET interrupt
> +#define R_IC_CLR_START_DET ( 0x64) // Clear START_DET
> interrupt
> +#define R_IC_CLR_GEN_CALL ( 0x68) // Clear GEN_CALL interrupt
> +#define R_IC_ENABLE ( 0x6C) // I2C Enable
> +#define R_IC_STATUS ( 0x70) // I2C Status
> +
> +#define R_IC_SDA_HOLD ( 0x7C) // I2C
> IC_DEFAULT_SDA_HOLD//16bits
> +
> +#define STAT_MST_ACTIVITY BIT5 // Master FSM Activity Status.
> +#define STAT_RFF BIT4 // RX FIFO is completely full
> +#define STAT_RFNE BIT3 // RX FIFO is not empty
> +#define STAT_TFE BIT2 // TX FIFO is completely empty
> +#define STAT_TFNF BIT1 // TX FIFO is not full
> +
> +#define R_IC_TXFLR ( 0x74) // Transmit FIFO Level Register
> +#define R_IC_RXFLR ( 0x78) // Receive FIFO Level Register
> +#define R_IC_TX_ABRT_SOURCE ( 0x80) // I2C Transmit Abort
> Status Register
> +#define R_IC_SLV_DATA_NACK_ONLY ( 0x84) // Generate
> SLV_DATA_NACK Register
> +#define R_IC_DMA_CR ( 0x88) // DMA Control Register
> +#define R_IC_DMA_TDLR ( 0x8C) // DMA Transmit Data Level
> +#define R_IC_DMA_RDLR ( 0x90) // DMA Receive Data Level
> +#define R_IC_SDA_SETUP ( 0x94) // I2C SDA Setup Register
> +#define R_IC_ACK_GENERAL_CALL ( 0x98) // I2C ACK General Call
> Register
> +#define R_IC_ENABLE_STATUS ( 0x9C) // I2C Enable Status
> Register
> +#define R_IC_COMP_PARAM ( 0xF4) // Component Parameter
> Register
> +#define R_IC_COMP_VERSION ( 0xF8) // Component Version ID
> +#define R_IC_COMP_TYPE ( 0xFC) // Component Type
> +
> +#define R_IC_CLK_GATE ( 0xC0) // Clock Gate
> +
> +#define I2C_SS_SCL_HCNT_VALUE_100M 0x1DD
> +#define I2C_SS_SCL_LCNT_VALUE_100M 0x1E4
> +#define I2C_FS_SCL_HCNT_VALUE_100M 0x54
> +#define I2C_FS_SCL_LCNT_VALUE_100M 0x9a
> +#define I2C_HS_SCL_HCNT_VALUE_100M 0x7
> +#define I2C_HS_SCL_LCNT_VALUE_100M 0xE
> +
> +#define IC_TAR_10BITADDR_MASTER BIT12
> +#define FIFO_SIZE 32
> +#define R_IC_INTR_STAT ( 0x2C) // I2c Inetrrupt Status
> +#define R_IC_INTR_MASK ( 0x30) // I2c Interrupt Mask
> +#define I2C_INTR_GEN_CALL BIT11 // General call received
> +#define I2C_INTR_START_DET BIT10
> +#define I2C_INTR_STOP_DET BIT9
> +#define I2C_INTR_ACTIVITY BIT8
> +#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
> +#define I2C_INTR_TX_EMPTY BIT4
> +#define I2C_INTR_TX_OVER BIT3
> +#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over
> threshold
> +#define I2C_INTR_RX_OVER BIT1
> +#define I2C_INTR_RX_UNDER BIT0
> +
> +EFI_STATUS ProgramPciLpssI2C (
> + IN UINT8 BusNo
> + );
> +EFI_STATUS ByteReadI2C_Basic(
> + IN UINT8 BusNo,
> + IN UINT8 SlaveAddress,
> + IN UINTN ReadBytes,
> + OUT UINT8 *ReadBuffer,
> + IN UINT8 Start,
> + IN UINT8 End
> + );
> +EFI_STATUS ByteWriteI2C_Basic(
> + IN UINT8 BusNo,
> + IN UINT8 SlaveAddress,
> + IN UINTN WriteBytes,
> + IN UINT8 *WriteBuffer,
> + IN UINT8 Start,
> + IN UINT8 End
> + );
> +
> +EFI_STATUS ByteReadI2C(
> + IN UINT8 BusNo,
> + IN UINT8 SlaveAddress,
> + IN UINT8 Offset,
> + IN UINTN ReadBytes,
> + OUT UINT8 *ReadBuffer
> + );
> +EFI_STATUS ByteWriteI2C(
> + IN UINT8 BusNo,
> + IN UINT8 SlaveAddress,
> + IN UINT8 Offset,
> + IN UINTN WriteBytes,
> + IN UINT8 *WriteBuffer
> + );
> +
> +#endif // I2C_REGS_A0_H
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Library/PchPlatformLib.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Library/PchPlatformLib.h
> new file mode 100644
> index 0000000000..f6593324a9
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Library/PchPlatformLib.h
> @@ -0,0 +1,115 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> + @file
> + PchPlatformLib.h
> +
> + @brief
> + Header file for PchPlatform Lib.
> +
> +**/
> +#ifndef _PCH_PLATFORM_LIB_H_
> +#define _PCH_PLATFORM_LIB_H_
> +
> +///
> +/// Timeout value used when Sending / Receiving messages.
> +/// NOTE: this must cover the longest possible wait time
> +/// between message being sent and response being available.
> +/// e.g. Virtual function readiness might take some time.
> +///
> +VOID
> +EFIAPI
> +PchPmTimerStall (
> + IN UINTN Microseconds
> + )
> +/**
> +
> + @brief
> + Delay for at least the request number of microseconds.
> + This function would be called by runtime driver, please do not use any
> MMIO marco here.
> +
> + @param[in] Microseconds Number of microseconds to delay.
> +
> + @retval NONE
> +
> +**/
> +;
> +
> +BOOLEAN
> +EFIAPI
> +PchIsSpiDescriptorMode (
> + IN UINTN SpiBase
> + )
> +/**
> +
> + @brief
> + Check whether SPI is in descriptor mode
> +
> + @param[in] SpiBase The PCH Spi Base Address
> +
> + @retval TRUE SPI is in descriptor mode
> + @retval FALSE SPI is not in descriptor mode
> +
> +**/
> +;
> +
> +PCH_STEPPING
> +EFIAPI
> +PchStepping (
> + VOID
> + )
> +/**
> +
> + @brief
> + Return Pch stepping type
> +
> + @param[in] None
> +
> + @retval PCH_STEPPING Pch stepping type
> +
> +**/
> +;
> +
> +BOOLEAN
> +IsPchSupported (
> + VOID
> + )
> +/**
> +
> + @brief
> + Determine if PCH is supported
> +
> + @param[in] None
> +
> + @retval TRUE PCH is supported
> + @retval FALSE PCH is not supported
> +
> +**/
> +;
> +
> +VOID
> +EFIAPI
> +PchAlternateAccessMode (
> + IN UINTN IlbBase,
> + IN BOOLEAN AmeCtrl
> + )
> +/**
> +
> + This function can be called to enable/disable Alternate Access Mode
> +
> + @param[in] IlbBase The PCH ILB Base Address
> + @param[in] AmeCtrl If TRUE, enable Alternate Access Mode.
> + If FALSE, disable Alternate Access Mode.
> +
> + @retval NONE
> +
> +**/
> +;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchAccess.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchAccess.h
> new file mode 100644
> index 0000000000..d7988c55be
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchAccess.h
> @@ -0,0 +1,471 @@
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchAccess.h
> +
> + @brief
> + Macros that simplify accessing PCH devices's PCI registers.
> +
> + ** NOTE ** these macros assume the PCH device is on BUS 0
> +
> +**/
> +#ifndef _PCH_ACCESS_H_
> +#define _PCH_ACCESS_H_
> +
> +#include "PchRegs.h"
> +#include "PchCommonDefinitions.h"
> +
> +#ifndef STALL_ONE_MICRO_SECOND
> +#define STALL_ONE_MICRO_SECOND 1
> +#endif
> +#ifndef STALL_ONE_SECOND
> +#define STALL_ONE_SECOND 1000000
> +#endif
> +
> +///
> +/// Memory Mapped PCI Access macros
> +///
> +///
> +/// PCI Device MM Base
> +///
> +#ifndef MmPciAddress
> +#define MmPciAddress(Segment, Bus, Device, Function, Register) \
> + ((UINTN) PatchPcdGet64 (PcdPciExpressBaseAddress) + \
> + (UINTN) (Bus << 20) + \
> + (UINTN) (Device << 15) + \
> + (UINTN) (Function << 12) + \
> + (UINTN) (Register) \
> + )
> +#endif
> +///
> +/// Pch Controller PCI access macros
> +///
> +#define PCH_RCRB_BASE ( \
> + MmioRead32 (MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + PCI_FUNCTION_NUMBER_PCH_LPC), \
> + R_PCH_LPC_RCBA)) & B_PCH_LPC_RCBA_BAR \
> + )
> +
> +///
> +/// Device 0x1b, Function 0
> +///
> +#define PchAzaliaPciCfg32(Register) \
> + MmioRead32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register) \
> + )
> +
> +#define PchAzaliaPciCfg32Or(Register, OrData) \
> + MmioOr32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchAzaliaPciCfg32And(Register, AndData) \
> + MmioAnd32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchAzaliaPciCfg32AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchAzaliaPciCfg16(Register) \
> + MmioRead16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register) \
> + )
> +
> +#define PchAzaliaPciCfg16Or(Register, OrData) \
> + MmioOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchAzaliaPciCfg16And(Register, AndData) \
> + MmioAnd16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchAzaliaPciCfg16AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +#define PchAzaliaPciCfg8(Register) MmioRead8 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_AZALIA, 0,
> Register))
> +
> +#define PchAzaliaPciCfg8Or(Register, OrData) \
> + MmioOr8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchAzaliaPciCfg8And(Register, AndData) \
> + MmioAnd8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchAzaliaPciCfg8AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_AZALIA, \
> + 0, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +///
> +/// Device 0x1f, Function 0
> +///
> +#define PchLpcPciCfg32(Register) MmioRead32 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, 0,
> Register))
> +
> +#define PchLpcMmioOr32 (Register, OrData) \
> + MmioOr32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchLpcPciCfg32And(Register, AndData) \
> + MmioAnd32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchLpcPciCfg32AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +#define PchLpcPciCfg16(Register) MmioRead16 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, 0,
> Register))
> +
> +#define PchLpcPciCfg16Or(Register, OrData) \
> + MmioOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchLpcPciCfg16And(Register, AndData) \
> + MmioAndThenOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchLpcPciCfg16AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +#define PchLpcPciCfg8(Register) MmioRead8 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, 0,
> Register))
> +
> +#define PchLpcPciCfg8Or(Register, OrData) \
> + MmioOr8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchLpcPciCfg8And(Register, AndData) \
> + MmioAnd8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchLpcPciCfg8AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_LPC, \
> + 0, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +
> +///
> +/// SATA device 0x13, Function 0
> +///
> +#define PchSataPciCfg32(Register) MmioRead32 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_SATA,
> PCI_FUNCTION_NUMBER_PCH_SATA, Register))
> +
> +#define PchSataPciCfg32Or(Register, OrData) \
> + MmioOr32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchSataPciCfg32And(Register, AndData) \
> + MmioAnd32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchSataPciCfg32AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr32 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +#define PchSataPciCfg16(Register) MmioRead16 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_SATA,
> PCI_FUNCTION_NUMBER_PCH_SATA, Register))
> +
> +#define PchSataPciCfg16Or(Register, OrData) \
> + MmioOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchSataPciCfg16And(Register, AndData) \
> + MmioAndThenOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchSataPciCfg16AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr16 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +#define PchSataPciCfg8(Register) MmioRead8 (MmPciAddress (0,
> DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_SATA,
> PCI_FUNCTION_NUMBER_PCH_SATA, Register))
> +
> +#define PchSataPciCfg8Or(Register, OrData) \
> + MmioOr8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + OrData \
> + )
> +
> +#define PchSataPciCfg8And(Register, AndData) \
> + MmioAnd8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + AndData \
> + )
> +
> +#define PchSataPciCfg8AndThenOr(Register, AndData, OrData) \
> + MmioAndThenOr8 ( \
> + MmPciAddress (0, \
> + DEFAULT_PCI_BUS_NUMBER_PCH, \
> + PCI_DEVICE_NUMBER_PCH_SATA, \
> + PCI_FUNCTION_NUMBER_PCH_SATA, \
> + Register), \
> + AndData, \
> + OrData \
> + )
> +
> +
> +///
> +/// Root Complex Register Block
> +///
> +#define PchMmRcrb32(Register) MmioRead32
> (PCH_RCRB_BASE + Register)
> +
> +#define PchMmRcrb32Or(Register, OrData) MmioOr32
> (PCH_RCRB_BASE + Register, OrData)
> +
> +#define PchMmRcrb32And(Register, AndData) MmioAnd32
> (PCH_RCRB_BASE + Register, AndData)
> +
> +#define PchMmRcrb32AndThenOr(Register, AndData, OrData)
> MmioAndThenOr32 (PCH_RCRB_BASE + Register, AndData, OrData)
> +
> +#define PchMmRcrb16(Register) MmioRead16
> (PCH_RCRB_BASE + Register)
> +
> +#define PchMmRcrb16Or(Register, OrData) MmioOr16
> (PCH_RCRB_BASE + Register, OrData)
> +
> +#define PchMmRcrb16And(Register, AndData) MmioAnd16
> (PCH_RCRB_BASE + Register, AndData)
> +
> +#define PchMmRcrb16AndThenOr(Register, AndData, OrData)
> MmioAndThenOr16 (PCH_RCRB_BASE + Register, AndData, OrData)
> +
> +#define PchMmRcrb8(Register) MmioRead8 (PCH_RCRB_BASE
> + Register)
> +
> +#define PchMmRcrb8Or(Register, OrData) MmioOr8
> (PCH_RCRB_BASE + Register, OrData)
> +
> +#define PchMmRcrb8And(Register, AndData) MmioAnd8
> (PCH_RCRB_BASE + Register, AndData)
> +
> +#define PchMmRcrb8AndThenOr(Register, AndData, OrData)
> MmioAndThenOr8 (PCH_RCRB_BASE + Register, AndData, OrData)
> +
> +
> +///
> +/// Message Bus
> +///
> +
> +///
> +/// Message Bus Registers
> +///
> +#define MC_MCR 0x000000D0 // Cunit Message Control Register
> +#define MC_MDR 0x000000D4 // Cunit Message Data Register
> +#define MC_MCRX 0x000000D8 // Cunit Message Control Register
> Extension
> +
> +///
> +/// Message Bus API
> +///
> +#define MSG_BUS_ENABLED 0x000000F0
> +#define MSGBUS_MASKHI 0xFFFFFF00
> +#define MSGBUS_MASKLO 0x000000FF
> +#define MESSAGE_DWORD_EN BIT4 | BIT5 | BIT6 | BIT7
> +
> +#define PchMsgBusRead32(PortId, Register, Dbuff, ReadOpCode,
> WriteOpCode) \
> +{ \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((ReadOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> + (Dbuff) = MmioRead32 ((UINTN) (PatchPcdGet64
> (PcdPciExpressBaseAddress) + MC_MDR)); \
> +}
> +
> +#define PchMsgBusAnd32(PortId, Register, Dbuff, AndData, ReadOpCode,
> WriteOpCode) \
> +{ \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((ReadOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> + (Dbuff) = MmioRead32 ((UINTN) (PatchPcdGet64
> (PcdPciExpressBaseAddress) + MC_MDR)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MDR ), (UINT32) (Dbuff & AndData)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((WriteOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> +}
> +
> +#define PchMsgBusOr32(PortId, Register, Dbuff, OrData, ReadOpCode,
> WriteOpCode) \
> +{ \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((ReadOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> + (Dbuff) = MmioRead32 ((UINTN) (PatchPcdGet64
> (PcdPciExpressBaseAddress) + MC_MDR)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MDR ), (UINT32) (Dbuff | OrData)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((WriteOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> +}
> +
> +#define PchMsgBusAndThenOr32(PortId, Register, Dbuff, AndData, OrData,
> ReadOpCode, WriteOpCode) \
> +{ \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((ReadOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> + (Dbuff) = MmioRead32 ((UINTN) (PatchPcdGet64
> (PcdPciExpressBaseAddress) + MC_MDR)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCRX), (UINT32) (Register & MSGBUS_MASKHI)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MDR ), (UINT32) ((Dbuff & AndData) | OrData)); \
> + MmioWrite32 ((UINTN) (PatchPcdGet64 (PcdPciExpressBaseAddress) +
> MC_MCR ), (UINT32) ((WriteOpCode << 24) | (PortId << 16) | ((Register &
> MSGBUS_MASKLO) << 8) | MESSAGE_DWORD_EN)); \
> +}
> +
> +typedef struct _PCH_MSG_BUS_TABLE_STRUCT {
> + UINT32 PortId;
> + UINT32 Address;
> + UINT32 AndMask;
> + UINT32 OrMask;
> + UINT32 ReadOpCode;
> + UINT32 WriteOpCode;
> +} PCH_MSG_BUS_TABLE_STRUCT_TABLE_STRUCT;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchCommonDefinitions.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchCommonDefinitions.h
> new file mode 100644
> index 0000000000..c12f0d2195
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchCommonDefinitions.h
> @@ -0,0 +1,210 @@
> +/*++
> +
> +Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PchCommonDefinitions.h
> +
> +Abstract:
> +
> + This header file provides common definitions for PCH
> +
> +--*/
> +#ifndef _PCH_COMMON_DEFINITIONS_H_
> +#define _PCH_COMMON_DEFINITIONS_H_
> +
> +//
> +// MMIO access macros
> +//
> +#define PchMmioAddress(BaseAddr, Register) ((UINTN) BaseAddr +
> (UINTN) (Register))
> +
> +//
> +// 32 bit MMIO access
> +//
> +#define PchMmio32Ptr(BaseAddr, Register) ((volatile UINT32 *)
> PchMmioAddress (BaseAddr, Register))
> +
> +#define PchMmio32(BaseAddr, Register) *PchMmio32Ptr (BaseAddr,
> Register)
> +
> +#define PchMmio32Or(BaseAddr, Register, OrData) \
> + PchMmio32 (BaseAddr, Register) = (UINT32) \
> + (PchMmio32 (BaseAddr, Register) | (UINT32) (OrData))
> +
> +#define PchMmio32And(BaseAddr, Register, AndData) \
> + PchMmio32 (BaseAddr, Register) = (UINT32) \
> + (PchMmio32 (BaseAddr, Register) & (UINT32) (AndData))
> +
> +#define PchMmio32AndThenOr(BaseAddr, Register, AndData, OrData) \
> + PchMmio32 (BaseAddr, Register) = (UINT32) \
> + ((PchMmio32 (BaseAddr, Register) & (UINT32) (AndData)) | (UINT32)
> (OrData))
> +
> +//
> +// 16 bit MMIO access
> +//
> +#define PchMmio16Ptr(BaseAddr, Register) ((volatile UINT16 *)
> PchMmioAddress (BaseAddr, Register))
> +
> +#define PchMmio16(BaseAddr, Register) *PchMmio16Ptr (BaseAddr,
> Register)
> +
> +#define PchMmio16Or(BaseAddr, Register, OrData) \
> + PchMmio16 (BaseAddr, Register) = (UINT16) \
> + (PchMmio16 (BaseAddr, Register) | (UINT16) (OrData))
> +
> +#define PchMmio16And(BaseAddr, Register, AndData) \
> + PchMmio16 (BaseAddr, Register) = (UINT16) \
> + (PchMmio16 (BaseAddr, Register) & (UINT16) (AndData))
> +
> +#define PchMmio16AndThenOr(BaseAddr, Register, AndData, OrData) \
> + PchMmio16 (BaseAddr, Register) = (UINT16) \
> + ((PchMmio16 (BaseAddr, Register) & (UINT16) (AndData)) | (UINT16)
> (OrData))
> +
> +//
> +// 8 bit MMIO access
> +//
> +#define PchMmio8Ptr(BaseAddr, Register) ((volatile UINT8 *)
> PchMmioAddress (BaseAddr, Register))
> +
> +#define PchMmio8(BaseAddr, Register) *PchMmio8Ptr (BaseAddr,
> Register)
> +
> +#define PchMmio8Or(BaseAddr, Register, OrData) \
> + PchMmio8 (BaseAddr, Register) = (UINT8) \
> + (PchMmio8 (BaseAddr, Register) | (UINT8) (OrData))
> +
> +#define PchMmio8And(BaseAddr, Register, AndData) \
> + PchMmio8 (BaseAddr, Register) = (UINT8) \
> + (PchMmio8 (BaseAddr, Register) & (UINT8) (AndData))
> +
> +#define PchMmio8AndThenOr(BaseAddr, Register, AndData, OrData) \
> + PchMmio8 (BaseAddr, Register) = (UINT8) \
> + ((PchMmio8 (BaseAddr, Register) & (UINT8) (AndData)) | (UINT8)
> (OrData))
> +
> +//
> +// Memory Mapped PCI Access macros
> +//
> +#define PCH_PCI_EXPRESS_BASE_ADDRESS 0xE0000000
> +//
> +// PCI Device MM Base
> +//
> +#define PchPciDeviceMmBase(Bus, Device, Function) \
> + ( \
> + (UINTN) PCH_PCI_EXPRESS_BASE_ADDRESS + (UINTN) (Bus << 20) +
> (UINTN) (Device << 15) + (UINTN) \
> + (Function << 12) \
> + )
> +
> +//
> +// PCI Device MM Address
> +//
> +#define PchPciDeviceMmAddress(Segment, Bus, Device, Function, Register)
> \
> + ( \
> + (UINTN) PCH_PCI_EXPRESS_BASE_ADDRESS + (UINTN) (Bus << 20) +
> (UINTN) (Device << 15) + (UINTN) \
> + (Function << 12) + (UINTN) (Register) \
> + )
> +
> +//
> +// 32 bit PCI access
> +//
> +#define PchMmPci32Ptr(Segment, Bus, Device, Function, Register) \
> + ((volatile UINT32 *) PchPciDeviceMmAddress (Segment, Bus, Device,
> Function, Register))
> +
> +#define PchMmPci32(Segment, Bus, Device, Function, Register)
> *PchMmPci32Ptr (Segment, Bus, Device, Function, Register)
> +
> +#define PchMmPci32Or(Segment, Bus, Device, Function, Register, OrData) \
> + PchMmPci32 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT32) (PchMmPci32 (Segment, Bus, Device, Function, Register) |
> (UINT32) (OrData))
> +
> +#define PchMmPci32And(Segment, Bus, Device, Function, Register,
> AndData) \
> + PchMmPci32 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT32) (PchMmPci32 (Segment, Bus, Device, Function, Register) &
> (UINT32) (AndData))
> +
> +#define PchMmPci32AndThenOr(Segment, Bus, Device, Function, Register,
> AndData, OrData) \
> + PchMmPci32 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT32) ((PchMmPci32 (Segment, Bus, Device, Function, Register) &
> (UINT32) (AndData)) | (UINT32) (OrData))
> +
> +//
> +// 16 bit PCI access
> +//
> +#define PchMmPci16Ptr(Segment, Bus, Device, Function, Register) \
> + ((volatile UINT16 *) PchPciDeviceMmAddress (Segment, Bus, Device,
> Function, Register))
> +
> +#define PchMmPci16(Segment, Bus, Device, Function, Register)
> *PchMmPci16Ptr (Segment, Bus, Device, Function, Register)
> +
> +#define PchMmPci16Or(Segment, Bus, Device, Function, Register, OrData) \
> + PchMmPci16 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT16) (PchMmPci16 (Segment, Bus, Device, Function, Register) |
> (UINT16) (OrData))
> +
> +#define PchMmPci16And(Segment, Bus, Device, Function, Register,
> AndData) \
> + PchMmPci16 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT16) (PchMmPci16 (Segment, Bus, Device, Function, Register) &
> (UINT16) (AndData))
> +
> +#define PchMmPci16AndThenOr(Segment, Bus, Device, Function, Register,
> AndData, OrData) \
> + PchMmPci16 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT16) ((PchMmPci16 (Segment, Bus, Device, Function, Register) &
> (UINT16) (AndData)) | (UINT16) (OrData))
> +
> +//
> +// 8 bit PCI access
> +//
> +#define PchMmPci8Ptr(Segment, Bus, Device, Function, Register) \
> + ((volatile UINT8 *) PchPciDeviceMmAddress (Segment, Bus, Device,
> Function, Register))
> +
> +#define PchMmPci8(Segment, Bus, Device, Function, Register)
> *PchMmPci8Ptr (Segment, Bus, Device, Function, Register)
> +
> +#define PchMmPci8Or(Segment, Bus, Device, Function, Register, OrData) \
> + PchMmPci8 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT8) (PchMmPci8 (Segment, Bus, Device, Function, Register) |
> (UINT8) (OrData))
> +
> +#define PchMmPci8And(Segment, Bus, Device, Function, Register, AndData)
> \
> + PchMmPci8 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT8) (PchMmPci8 (Segment, Bus, Device, Function, Register) &
> (UINT8) (AndData))
> +
> +#define PchMmPci8AndThenOr(Segment, Bus, Device, Function, Register,
> AndData, OrData) \
> + PchMmPci8 ( \
> + Segment, \
> + Bus, \
> + Device, \
> + Function, \
> + Register \
> + ) = (UINT8) ((PchMmPci8 (Segment, Bus, Device, Function, Register) &
> (UINT8) (AndData)) | (UINT8) (OrData))
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs.h
> new file mode 100644
> index 0000000000..3314b9dcf7
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs.h
> @@ -0,0 +1,205 @@
> +/**
> +
> +Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegs.h
> +
> + @brief
> + Register names for VLV SC.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_H_
> +#define _PCH_REGS_H_
> +
> +///
> +/// Bit Definitions. BUGBUG: drive these definitions to code base. Should
> not need
> +/// to be part of chipset modules
> +///
> +#ifndef BIT0
> +#define BIT0 0x0001
> +#define BIT1 0x0002
> +#define BIT2 0x0004
> +#define BIT3 0x0008
> +#define BIT4 0x0010
> +#define BIT5 0x0020
> +#define BIT6 0x0040
> +#define BIT7 0x0080
> +#define BIT8 0x0100
> +#define BIT9 0x0200
> +#define BIT10 0x0400
> +#define BIT11 0x0800
> +#define BIT12 0x1000
> +#define BIT13 0x2000
> +#define BIT14 0x4000
> +#define BIT15 0x8000
> +#define BIT16 0x00010000
> +#define BIT17 0x00020000
> +#define BIT18 0x00040000
> +#define BIT19 0x00080000
> +#define BIT20 0x00100000
> +#define BIT21 0x00200000
> +#define BIT22 0x00400000
> +#define BIT23 0x00800000
> +#define BIT24 0x01000000
> +#define BIT25 0x02000000
> +#define BIT26 0x04000000
> +#define BIT27 0x08000000
> +#define BIT28 0x10000000
> +#define BIT29 0x20000000
> +#define BIT30 0x40000000
> +#define BIT31 0x80000000
> +#define BIT32 0x100000000
> +#define BIT33 0x200000000
> +#define BIT34 0x400000000
> +#define BIT35 0x800000000
> +#define BIT36 0x1000000000
> +#define BIT37 0x2000000000
> +#define BIT38 0x4000000000
> +#define BIT39 0x8000000000
> +#define BIT40 0x10000000000
> +#define BIT41 0x20000000000
> +#define BIT42 0x40000000000
> +#define BIT43 0x80000000000
> +#define BIT44 0x100000000000
> +#define BIT45 0x200000000000
> +#define BIT46 0x400000000000
> +#define BIT47 0x800000000000
> +#define BIT48 0x1000000000000
> +#define BIT49 0x2000000000000
> +#define BIT50 0x4000000000000
> +#define BIT51 0x8000000000000
> +#define BIT52 0x10000000000000
> +#define BIT53 0x20000000000000
> +#define BIT54 0x40000000000000
> +#define BIT55 0x80000000000000
> +#define BIT56 0x100000000000000
> +#define BIT57 0x200000000000000
> +#define BIT58 0x400000000000000
> +#define BIT59 0x800000000000000
> +#define BIT60 0x1000000000000000
> +#define BIT61 0x2000000000000000
> +#define BIT62 0x4000000000000000
> +#define BIT63 0x8000000000000000
> +#endif
> +///
> +/// The default PCH PCI bus number
> +///
> +#define DEFAULT_PCI_BUS_NUMBER_PCH 0
> +
> +///
> +/// Default Vendor ID and Subsystem ID
> +///
> +#define V_PCH_INTEL_VENDOR_ID 0x8086
> +#define V_PCH_DEFAULT_SID 0x7270
> +#define V_PCH_DEFAULT_SVID_SID (V_PCH_INTEL_VENDOR_ID +
> (V_PCH_DEFAULT_SID << 16))
> +
> +///
> +/// Include device register definitions
> +///
> +#include "PchRegs/PchRegsHda.h"
> +#include "PchRegs/PchRegsLpss.h"
> +#include "PchRegs/PchRegsPcie.h"
> +#include "PchRegs/PchRegsPcu.h"
> +#include "PchRegs/PchRegsRcrb.h"
> +#include "PchRegs/PchRegsSata.h"
> +#include "PchRegs/PchRegsScc.h"
> +#include "PchRegs/PchRegsSmbus.h"
> +#include "PchRegs/PchRegsSpi.h"
> +#include "PchRegs/PchRegsUsb.h"
> +//#include "PchRegs/PchRegsLpe.h"
> +
> +///
> +/// Device IDS that are PCH Server specific
> +///
> +#define IS_PCH_DEVICE_ID(DeviceId) \
> + ( \
> + (DeviceId == V_PCH_LPC_DEVICE_ID_0) || \
> + (DeviceId == V_PCH_LPC_DEVICE_ID_1) || \
> + (DeviceId == V_PCH_LPC_DEVICE_ID_2) || \
> + (DeviceId == V_PCH_LPC_DEVICE_ID_3) \
> + )
> +
> +#define IS_PCH_VLV_LPC_DEVICE_ID(DeviceId) \
> + ( \
> + IS_PCH_DEVICE_ID (DeviceId) \
> + )
> +
> +#define IS_PCH_VLV_SATA_DEVICE_ID(DeviceId) \
> + ( \
> + IS_PCH_VLV_SATA_AHCI_DEVICE_ID (DeviceId) || \
> + IS_PCH_VLV_SATA_MODE_DEVICE_ID (DeviceId) || \
> + IS_PCH_VLV_SATA_RAID_DEVICE_ID (DeviceId) \
> + )
> +
> +#define IS_PCH_VLV_SATA_AHCI_DEVICE_ID(DeviceId) \
> + ( \
> + (DeviceId == V_PCH_SATA_DEVICE_ID_D_AHCI) || \
> + (DeviceId == V_PCH_SATA_DEVICE_ID_M_AHCI) \
> + )
> +
> +#define IS_PCH_VLV_SATA_RAID_DEVICE_ID(DeviceId) \
> + ( \
> + (DeviceId == V_PCH_SATA_DEVICE_ID_D_RAID) || \
> + (DeviceId == V_PCH_SATA_DEVICE_ID_M_RAID) \
> + )
> +
> +#define IS_PCH_VLV_SATA_MODE_DEVICE_ID(DeviceId) \
> + ( \
> + (DeviceId == V_PCH_SATA_DEVICE_ID_D_IDE) || \
> + (DeviceId == V_PCH_SATA_DEVICE_ID_M_IDE) \
> + )
> +#define IS_PCH_VLV_USB_DEVICE_ID(DeviceId) \
> + ( \
> + (DeviceId == V_PCH_USB_DEVICE_ID_0) || \
> + (DeviceId == V_PCH_USB_DEVICE_ID_1) \
> + )
> +#define IS_PCH_VLV_PCIE_DEVICE_ID(DeviceId) \
> + ( \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_0) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_1) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_2) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_3) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_4) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_5) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_6) || \
> + (DeviceId == V_PCH_PCIE_DEVICE_ID_7) \
> + )
> +
> +///
> +/// Any device ID that is Valleyview SC
> +///
> +#define IS_PCH_VLV_DEVICE_ID(DeviceId) \
> + ( \
> + IS_PCH_VLV_LPC_DEVICE_ID (DeviceId) || \
> + IS_PCH_VLV_SATA_DEVICE_ID (DeviceId) || \
> + IS_PCH_VLV_USB_DEVICE_ID (DeviceId) || \
> + IS_PCH_VLV_PCIE_DEVICE_ID (DeviceId) || \
> + (DeviceId) == V_PCH_SMBUS_DEVICE_ID || \
> + (DeviceId) == V_PCH_HDA_DEVICE_ID_0 || \
> + (DeviceId) == V_PCH_HDA_DEVICE_ID_1 \
> + )
> +
> +#define IS_SUPPORTED_DEVICE_ID(DeviceId) IS_PCH_VLV_DEVICE_ID
> (DeviceId)
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsHda.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsHda.h
> new file mode 100644
> index 0000000000..b25a79a4d1
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsHda.h
> @@ -0,0 +1,50 @@
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsHda.h
> +
> + @brief
> + Register names for PCH High Definition Audio device.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_HDA_H_
> +#define _PCH_REGS_HDA_H_
> +
> +///
> +/// Azalia Controller Registers (D27:F0)
> +///
> +#define PCI_DEVICE_NUMBER_PCH_AZALIA 27
> +#define PCI_FUNCTION_NUMBER_PCH_AZALIA 0
> +
> +#define R_PCH_HDA_PCS 0x54 // Power Management Control
> and Status
> +#define B_PCH_HDA_PCS_DATA 0xFF000000 // Data, does not
> apply
> +#define B_PCH_HDA_PCS_CCE BIT23 // Bus Power Control Enable,
> does not apply
> +#define B_PCH_HDA_PCS_PMES BIT15 // PME Status
> +#define B_PCH_HDA_PCS_PMEE BIT8 // PME Enable
> +#define B_PCH_HDA_PCS_PS (BIT1 | BIT0) // Power State - D0/D3
> Hot
> +#define V_PCH_HDA_PCS_PS0 0x00
> +#define V_PCH_HDA_PCS_PS3 0x03
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsLpss.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsLpss.h
> new file mode 100644
> index 0000000000..a5d0d49cdb
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsLpss.h
> @@ -0,0 +1,486 @@
> +/*++
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PchRegsLpss.h
> +
> +Abstract:
> +
> + Register names for VLV Low Input Output (LPSS) module.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +--*/
> +#ifndef _PCH_REGS_LPSS_H_
> +#define _PCH_REGS_LPSS_H_
> +
> +
> +//
> +// Low Power Input Output (LPSS) Module Registers
> +//
> +
> +//
> +// LPSS DMAC Modules
> +// PCI Config Space Registers
> +//
> +#define PCI_DEVICE_NUMBER_PCH_LPSS_DMAC0 30
> +#define PCI_DEVICE_NUMBER_PCH_LPSS_DMAC1 24
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_DMAC 0
> +
> +#define R_PCH_LPSS_DMAC_DEVVENDID 0x00 // Device ID &
> Vendor ID
> +#define B_PCH_LPSS_DMAC_DEVVENDID_DID 0xFFFF0000 // Device
> ID
> +#define B_PCH_LPSS_DMAC_DEVVENDID_VID 0x0000FFFF // Vendor
> ID
> +
> +#define R_PCH_LPSS_DMAC_STSCMD 0x04 // Status & Command
> +#define B_PCH_LPSS_DMAC_STSCMD_RMA BIT29 // RMA
> +#define B_PCH_LPSS_DMAC_STSCMD_RCA BIT28 // RCA
> +#define B_PCH_LPSS_DMAC_STSCMD_CAPLIST BIT20 // Capability List
> +#define B_PCH_LPSS_DMAC_STSCMD_INTRSTS BIT19 // Interrupt
> Status
> +#define B_PCH_LPSS_DMAC_STSCMD_INTRDIS BIT10 // Interrupt
> Disable
> +#define B_PCH_LPSS_DMAC_STSCMD_SERREN BIT8 // SERR# Enable
> +#define B_PCH_LPSS_DMAC_STSCMD_BME BIT2 // Bus Master
> Enable
> +#define B_PCH_LPSS_DMAC_STSCMD_MSE BIT1 // Memory Space
> Enable
> +
> +#define R_PCH_LPSS_DMAC_REVCC 0x08 // Revision ID & Class
> Code
> +#define B_PCH_LPSS_DMAC_REVCC_CC 0xFFFFFF00 // Class Code
> +#define B_PCH_LPSS_DMAC_REVCC_RID 0x000000FF // Revision ID
> +
> +#define R_PCH_LPSS_DMAC_CLHB 0x0C
> +#define B_PCH_LPSS_DMAC_CLHB_MULFNDEV BIT23
> +#define B_PCH_LPSS_DMAC_CLHB_HT 0x007F0000 // Header Type
> +#define B_PCH_LPSS_DMAC_CLHB_LT 0x0000FF00 // Latency
> Timer
> +#define B_PCH_LPSS_DMAC_CLHB_CLS 0x000000FF // Cache Line
> Size
> +
> +#define R_PCH_LPSS_DMAC_BAR 0x10 // BAR
> +#define B_PCH_LPSS_DMAC_BAR_BA 0xFFFFC000 // Base
> Address
> +#define V_PCH_LPSS_DMAC_BAR_SIZE 0x4000
> +#define N_PCH_LPSS_DMAC_BAR_ALIGNMENT 14
> +#define B_PCH_LPSS_DMAC_BAR_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_DMAC_BAR_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_DMAC_BAR_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_DMAC_BAR_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_DMAC_BAR1 0x14 // BAR 1
> +#define B_PCH_LPSS_DMAC_BAR1_BA 0xFFFFF000 // Base
> Address
> +#define B_PCH_LPSS_DMAC_BAR1_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_DMAC_BAR1_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_DMAC_BAR1_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_DMAC_BAR1_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_DMAC_SSID 0x2C // Sub System ID
> +#define B_PCH_LPSS_DMAC_SSID_SID 0xFFFF0000 // Sub System
> ID
> +#define B_PCH_LPSS_DMAC_SSID_SVID 0x0000FFFF // Sub System
> Vendor ID
> +
> +#define R_PCH_LPSS_DMAC_ERBAR 0x30 // Expansion ROM BAR
> +#define B_PCH_LPSS_DMAC_ERBAR_BA 0xFFFFFFFF // Expansion
> ROM Base Address
> +
> +#define R_PCH_LPSS_DMAC_CAPPTR 0x34 // Capability Pointer
> +#define B_PCH_LPSS_DMAC_CAPPTR_CPPWR 0xFF // Capability
> Pointer Power
> +
> +#define R_PCH_LPSS_DMAC_INTR 0x3C // Interrupt
> +#define B_PCH_LPSS_DMAC_INTR_ML 0xFF000000 // Max Latency
> +#define B_PCH_LPSS_DMAC_INTR_MG 0x00FF0000
> +#define B_PCH_LPSS_DMAC_INTR_IP 0x00000F00 // Interrupt Pin
> +#define B_PCH_LPSS_DMAC_INTR_IL 0x000000FF // Interrupt Line
> +
> +#define R_PCH_LPSS_DMAC_PCAPID 0x80 // Power Capability ID
> +#define B_PCH_LPSS_DMAC_PCAPID_PS 0xF8000000 // PME
> Support
> +#define B_PCH_LPSS_DMAC_PCAPID_VS 0x00070000 // Version
> +#define B_PCH_LPSS_DMAC_PCAPID_NC 0x0000FF00 // Next
> Capability
> +#define B_PCH_LPSS_DMAC_PCAPID_PC 0x000000FF // Power
> Capability
> +
> +#define R_PCH_LPSS_DMAC_PCS 0x84 // PME Control Status
> +#define B_PCH_LPSS_DMAC_PCS_PMESTS BIT15 // PME Status
> +#define B_PCH_LPSS_DMAC_PCS_PMEEN BIT8 // PME Enable
> +#define B_PCH_LPSS_DMAC_PCS_NSS BIT3 // No Soft Reset
> +#define B_PCH_LPSS_DMAC_PCS_PS (BIT1 | BIT0) // Power State
> +
> +#define R_PCH_LPSS_DMAC_MANID 0xF8 // Manufacturer ID
> +#define B_PCH_LPSS_DMAC_MANID_MANID 0xFFFFFFFF //
> Manufacturer ID
> +
> +
> +//
> +// LPSS I2C Module
> +// PCI Config Space Registers
> +//
> +#define PCI_DEVICE_NUMBER_PCH_LPSS_I2C 24
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C0 1
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C1 2
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C2 3
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C3 4
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C4 5
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C5 6
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_I2C6 7
> +
> +#define R_PCH_LPSS_I2C_DEVVENDID 0x00 // Device ID & Vendor
> ID
> +#define B_PCH_LPSS_I2C_DEVVENDID_DID 0xFFFF0000 // Device ID
> +#define B_PCH_LPSS_I2C_DEVVENDID_VID 0x0000FFFF // Vendor ID
> +
> +#define R_PCH_LPSS_I2C_STSCMD 0x04 // Status & Command
> +#define B_PCH_LPSS_I2C_STSCMD_RMA BIT29 // RMA
> +#define B_PCH_LPSS_I2C_STSCMD_RCA BIT28 // RCA
> +#define B_PCH_LPSS_I2C_STSCMD_CAPLIST BIT20 // Capability List
> +#define B_PCH_LPSS_I2C_STSCMD_INTRSTS BIT19 // Interrupt Status
> +#define B_PCH_LPSS_I2C_STSCMD_INTRDIS BIT10 // Interrupt
> Disable
> +#define B_PCH_LPSS_I2C_STSCMD_SERREN BIT8 // SERR# Enable
> +#define B_PCH_LPSS_I2C_STSCMD_BME BIT2 // Bus Master Enable
> +#define B_PCH_LPSS_I2C_STSCMD_MSE BIT1 // Memory Space
> Enable
> +
> +#define R_PCH_LPSS_I2C_REVCC 0x08 // Revision ID & Class
> Code
> +#define B_PCH_LPSS_I2C_REVCC_CC 0xFFFFFF00 // Class Code
> +#define B_PCH_LPSS_I2C_REVCC_RID 0x000000FF // Revision ID
> +
> +#define R_PCH_LPSS_I2C_CLHB 0x0C
> +#define B_PCH_LPSS_I2C_CLHB_MULFNDEV BIT23
> +#define B_PCH_LPSS_I2C_CLHB_HT 0x007F0000 // Header Type
> +#define B_PCH_LPSS_I2C_CLHB_LT 0x0000FF00 // Latency Timer
> +#define B_PCH_LPSS_I2C_CLHB_CLS 0x000000FF // Cache Line Size
> +
> +#define R_PCH_LPSS_I2C_BAR 0x10 // BAR
> +#define B_PCH_LPSS_I2C_BAR_BA 0xFFFFF000 // Base Address
> +#define V_PCH_LPSS_I2C_BAR_SIZE 0x1000
> +#define N_PCH_LPSS_I2C_BAR_ALIGNMENT 12
> +#define B_PCH_LPSS_I2C_BAR_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_I2C_BAR_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_I2C_BAR_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_I2C_BAR_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_I2C_BAR1 0x14 // BAR 1
> +#define B_PCH_LPSS_I2C_BAR1_BA 0xFFFFF000 // Base Address
> +#define B_PCH_LPSS_I2C_BAR1_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_I2C_BAR1_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_I2C_BAR1_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_I2C_BAR1_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_I2C_SSID 0x2C // Sub System ID
> +#define B_PCH_LPSS_I2C_SSID_SID 0xFFFF0000 // Sub System ID
> +#define B_PCH_LPSS_I2C_SSID_SVID 0x0000FFFF // Sub System
> Vendor ID
> +
> +#define R_PCH_LPSS_I2C_ERBAR 0x30 // Expansion ROM BAR
> +#define B_PCH_LPSS_I2C_ERBAR_BA 0xFFFFFFFF // Expansion
> ROM Base Address
> +
> +#define R_PCH_LPSS_I2C_CAPPTR 0x34 // Capability Pointer
> +#define B_PCH_LPSS_I2C_CAPPTR_CPPWR 0xFF // Capability
> Pointer Power
> +
> +#define R_PCH_LPSS_I2C_INTR 0x3C // Interrupt
> +#define B_PCH_LPSS_I2C_INTR_ML 0xFF000000 // Max Latency
> +#define B_PCH_LPSS_I2C_INTR_MG 0x00FF0000
> +#define B_PCH_LPSS_I2C_INTR_IP 0x00000F00 // Interrupt Pin
> +#define B_PCH_LPSS_I2C_INTR_IL 0x000000FF // Interrupt Line
> +
> +#define R_PCH_LPSS_I2C_PCAPID 0x80 // Power Capability ID
> +#define B_PCH_LPSS_I2C_PCAPID_PS 0xF8000000 // PME Support
> +#define B_PCH_LPSS_I2C_PCAPID_VS 0x00070000 // Version
> +#define B_PCH_LPSS_I2C_PCAPID_NC 0x0000FF00 // Next
> Capability
> +#define B_PCH_LPSS_I2C_PCAPID_PC 0x000000FF // Power
> Capability
> +
> +#define R_PCH_LPSS_I2C_PCS 0x84 // PME Control Status
> +#define B_PCH_LPSS_I2C_PCS_PMESTS BIT15 // PME Status
> +#define B_PCH_LPSS_I2C_PCS_PMEEN BIT8 // PME Enable
> +#define B_PCH_LPSS_I2C_PCS_NSS BIT3 // No Soft Reset
> +#define B_PCH_LPSS_I2C_PCS_PS (BIT1 | BIT0) // Power State
> +
> +#define R_PCH_LPSS_I2C_MANID 0xF8 // Manufacturer ID
> +#define B_PCH_LPSS_I2C_MANID_MANID 0xFFFFFFFF //
> Manufacturer ID
> +
> +//
> +// LPSS I2C Module
> +// Memory Space Registers
> +//
> +#define R_PCH_LPSS_I2C_MEM_RESETS 0x804 // Software Reset
> +#define B_PCH_LPSS_I2C_MEM_RESETS_FUNC BIT1 // Function Clock
> Domain Reset
> +#define B_PCH_LPSS_I2C_MEM_RESETS_APB BIT0 // APB Domain
> Reset
> +
> +//
> +// LPSS PWM Modules
> +// PCI Config Space Registers
> +//
> +#define PCI_DEVICE_NUMBER_PCH_LPSS_PWM 30
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_PWM0 1
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_PWM1 2
> +
> +#define R_PCH_LPSS_PWM_DEVVENDID 0x00 // Device ID &
> Vendor ID
> +#define B_PCH_LPSS_PWM_DEVVENDID_DID 0xFFFF0000 // Device
> ID
> +#define B_PCH_LPSS_PWM_DEVVENDID_VID 0x0000FFFF // Vendor
> ID
> +
> +#define R_PCH_LPSS_PWM_STSCMD 0x04 // Status & Command
> +#define B_PCH_LPSS_PWM_STSCMD_RMA BIT29 // RMA
> +#define B_PCH_LPSS_PWM_STSCMD_RCA BIT28 // RCA
> +#define B_PCH_LPSS_PWM_STSCMD_CAPLIST BIT20 // Capability List
> +#define B_PCH_LPSS_PWM_STSCMD_INTRSTS BIT19 // Interrupt
> Status
> +#define B_PCH_LPSS_PWM_STSCMD_INTRDIS BIT10 // Interrupt
> Disable
> +#define B_PCH_LPSS_PWM_STSCMD_SERREN BIT8 // SERR# Enable
> +#define B_PCH_LPSS_PWM_STSCMD_BME BIT2 // Bus Master
> Enable
> +#define B_PCH_LPSS_PWM_STSCMD_MSE BIT1 // Memory Space
> Enable
> +
> +#define R_PCH_LPSS_PWM_REVCC 0x08 // Revision ID & Class
> Code
> +#define B_PCH_LPSS_PWM_REVCC_CC 0xFFFFFF00 // Class Code
> +#define B_PCH_LPSS_PWM_REVCC_RID 0x000000FF // Revision ID
> +
> +#define R_PCH_LPSS_PWM_CLHB 0x0C
> +#define B_PCH_LPSS_PWM_CLHB_MULFNDEV BIT23
> +#define B_PCH_LPSS_PWM_CLHB_HT 0x007F0000 // Header Type
> +#define B_PCH_LPSS_PWM_CLHB_LT 0x0000FF00 // Latency
> Timer
> +#define B_PCH_LPSS_PWM_CLHB_CLS 0x000000FF // Cache Line
> Size
> +
> +#define R_PCH_LPSS_PWM_BAR 0x10 // BAR
> +#define B_PCH_LPSS_PWM_BAR_BA 0xFFFFF000 // Base Address
> +#define V_PCH_LPSS_PWM_BAR_SIZE 0x1000
> +#define N_PCH_LPSS_PWM_BAR_ALIGNMENT 12
> +#define B_PCH_LPSS_PWM_BAR_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_PWM_BAR_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_PWM_BAR_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_PWM_BAR_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_PWM_BAR1 0x14 // BAR 1
> +#define B_PCH_LPSS_PWM_BAR1_BA 0xFFFFF000 // Base
> Address
> +#define B_PCH_LPSS_PWM_BAR1_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_PWM_BAR1_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_PWM_BAR1_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_PWM_BAR1_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_PWM_SSID 0x2C // Sub System ID
> +#define B_PCH_LPSS_PWM_SSID_SID 0xFFFF0000 // Sub System
> ID
> +#define B_PCH_LPSS_PWM_SSID_SVID 0x0000FFFF // Sub System
> Vendor ID
> +
> +#define R_PCH_LPSS_PWM_ERBAR 0x30 // Expansion ROM BAR
> +#define B_PCH_LPSS_PWM_ERBAR_BA 0xFFFFFFFF // Expansion
> ROM Base Address
> +
> +#define R_PCH_LPSS_PWM_CAPPTR 0x34 // Capability Pointer
> +#define B_PCH_LPSS_PWM_CAPPTR_CPPWR 0xFF // Capability
> Pointer Power
> +
> +#define R_PCH_LPSS_PWM_INTR 0x3C // Interrupt
> +#define B_PCH_LPSS_PWM_INTR_ML 0xFF000000 // Max Latency
> +#define B_PCH_LPSS_PWM_INTR_MG 0x00FF0000
> +#define B_PCH_LPSS_PWM_INTR_IP 0x00000F00 // Interrupt Pin
> +#define B_PCH_LPSS_PWM_INTR_IL 0x000000FF // Interrupt Line
> +
> +#define R_PCH_LPSS_PWM_PCAPID 0x80 // Power Capability ID
> +#define B_PCH_LPSS_PWM_PCAPID_PS 0xF8000000 // PME
> Support
> +#define B_PCH_LPSS_PWM_PCAPID_VS 0x00070000 // Version
> +#define B_PCH_LPSS_PWM_PCAPID_NC 0x0000FF00 // Next
> Capability
> +#define B_PCH_LPSS_PWM_PCAPID_PC 0x000000FF // Power
> Capability
> +
> +#define R_PCH_LPSS_PWM_PCS 0x84 // PME Control Status
> +#define B_PCH_LPSS_PWM_PCS_PMESTS BIT15 // PME Status
> +#define B_PCH_LPSS_PWM_PCS_PMEEN BIT8 // PME Enable
> +#define B_PCH_LPSS_PWM_PCS_NSS BIT3 // No Soft Reset
> +#define B_PCH_LPSS_PWM_PCS_PS (BIT1 | BIT0) // Power State
> +
> +#define R_PCH_LPSS_PWM_MANID 0xF8 // Manufacturer ID
> +#define B_PCH_LPSS_PWM_MANID_MANID 0xFFFFFFFF //
> Manufacturer ID
> +
> +//
> +// LPSS PWM Module
> +// Memory Space Registers
> +//
> +#define R_PCH_LPSS_PWM_MEM_RESETS 0x804 // Software Reset
> +#define B_PCH_LPSS_PWM_MEM_RESETS_FUNC BIT1 // Function
> Clock Domain Reset
> +#define B_PCH_LPSS_PWM_MEM_RESETS_APB BIT0 // APB Domain
> Reset
> +
> +//
> +// LPSS HSUART Modules
> +// PCI Config Space Registers
> +//
> +#define PCI_DEVICE_NUMBER_PCH_LPSS_HSUART 30
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_HSUART0 3
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_HSUART1 4
> +
> +#define R_PCH_LPSS_HSUART_DEVVENDID 0x00 // Device ID &
> Vendor ID
> +#define B_PCH_LPSS_HSUART_DEVVENDID_DID 0xFFFF0000 // Device
> ID
> +#define B_PCH_LPSS_HSUART_DEVVENDID_VID 0x0000FFFF //
> Vendor ID
> +
> +#define R_PCH_LPSS_HSUART_STSCMD 0x04 // Status &
> Command
> +#define B_PCH_LPSS_HSUART_STSCMD_RMA BIT29 // RMA
> +#define B_PCH_LPSS_HSUART_STSCMD_RCA BIT28 // RCA
> +#define B_PCH_LPSS_HSUART_STSCMD_CAPLIST BIT20 // Capability
> List
> +#define B_PCH_LPSS_HSUART_STSCMD_INTRSTS BIT19 // Interrupt
> Status
> +#define B_PCH_LPSS_HSUART_STSCMD_INTRDIS BIT10 // Interrupt
> Disable
> +#define B_PCH_LPSS_HSUART_STSCMD_SERREN BIT8 // SERR# Enable
> +#define B_PCH_LPSS_HSUART_STSCMD_BME BIT2 // Bus Master
> Enable
> +#define B_PCH_LPSS_HSUART_STSCMD_MSE BIT1 // Memory Space
> Enable
> +
> +#define R_PCH_LPSS_HSUART_REVCC 0x08 // Revision ID & Class
> Code
> +#define B_PCH_LPSS_HSUART_REVCC_CC 0xFFFFFF00 // Class Code
> +#define B_PCH_LPSS_HSUART_REVCC_RID 0x000000FF // Revision
> ID
> +
> +#define R_PCH_LPSS_HSUART_CLHB 0x0C
> +#define B_PCH_LPSS_HSUART_CLHB_MULFNDEV BIT23
> +#define B_PCH_LPSS_HSUART_CLHB_HT 0x007F0000 // Header
> Type
> +#define B_PCH_LPSS_HSUART_CLHB_LT 0x0000FF00 // Latency
> Timer
> +#define B_PCH_LPSS_HSUART_CLHB_CLS 0x000000FF // Cache Line
> Size
> +
> +#define R_PCH_LPSS_HSUART_BAR 0x10 // BAR
> +#define B_PCH_LPSS_HSUART_BAR_BA 0xFFFFF000 // Base
> Address
> +#define V_PCH_LPSS_HSUART_BAR_SIZE 0x1000
> +#define N_PCH_LPSS_HSUART_BAR_ALIGNMENT 12
> +#define B_PCH_LPSS_HSUART_BAR_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_HSUART_BAR_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_HSUART_BAR_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_HSUART_BAR_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_HSUART_BAR1 0x14 // BAR 1
> +#define B_PCH_LPSS_HSUART_BAR1_BA 0xFFFFF000 // Base
> Address
> +#define B_PCH_LPSS_HSUART_BAR1_SI 0x00000FF0 // Size
> Indicator
> +#define B_PCH_LPSS_HSUART_BAR1_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_HSUART_BAR1_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_HSUART_BAR1_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_HSUART_SSID 0x2C // Sub System ID
> +#define B_PCH_LPSS_HSUART_SSID_SID 0xFFFF0000 // Sub System
> ID
> +#define B_PCH_LPSS_HSUART_SSID_SVID 0x0000FFFF // Sub System
> Vendor ID
> +
> +#define R_PCH_LPSS_HSUART_ERBAR 0x30 // Expansion ROM
> BAR
> +#define B_PCH_LPSS_HSUART_ERBAR_BA 0xFFFFFFFF // Expansion
> ROM Base Address
> +
> +#define R_PCH_LPSS_HSUART_CAPPTR 0x34 // Capability Pointer
> +#define B_PCH_LPSS_HSUART_CAPPTR_CPPWR 0xFF // Capability
> Pointer Power
> +
> +#define R_PCH_LPSS_HSUART_INTR 0x3C // Interrupt
> +#define B_PCH_LPSS_HSUART_INTR_ML 0xFF000000 // Max
> Latency
> +#define B_PCH_LPSS_HSUART_INTR_MG 0x00FF0000
> +#define B_PCH_LPSS_HSUART_INTR_IP 0x00000F00 // Interrupt Pin
> +#define B_PCH_LPSS_HSUART_INTR_IL 0x000000FF // Interrupt
> Line
> +
> +#define R_PCH_LPSS_HSUART_PCAPID 0x80 // Power Capability ID
> +#define B_PCH_LPSS_HSUART_PCAPID_PS 0xF8000000 // PME
> Support
> +#define B_PCH_LPSS_HSUART_PCAPID_VS 0x00070000 // Version
> +#define B_PCH_LPSS_HSUART_PCAPID_NC 0x0000FF00 // Next
> Capability
> +#define B_PCH_LPSS_HSUART_PCAPID_PC 0x000000FF // Power
> Capability
> +
> +#define R_PCH_LPSS_HSUART_PCS 0x84 // PME Control Status
> +#define B_PCH_LPSS_HSUART_PCS_PMESTS BIT15 // PME Status
> +#define B_PCH_LPSS_HSUART_PCS_PMEEN BIT8 // PME Enable
> +#define B_PCH_LPSS_HSUART_PCS_NSS BIT3 // No Soft Reset
> +#define B_PCH_LPSS_HSUART_PCS_PS (BIT1 | BIT0) // Power State
> +
> +#define R_PCH_LPSS_HSUART_MANID 0xF8 // Manufacturer ID
> +#define B_PCH_LPSS_HSUART_MANID_MANID 0xFFFFFFFF //
> Manufacturer ID
> +
> +//
> +// LPSS HSUART Module
> +// Memory Space Registers
> +//
> +#define R_PCH_LPSS_HSUART_MEM_PCP 0x800 // Private Clock
> Parameters
> +#define B_PCH_LPSS_HSUART_MEM_PCP_CLKUPDATE BIT31 // Clock
> Divider Update
> +#define B_PCH_LPSS_HSUART_MEM_PCP_NVAL 0x7FFF0000 // N
> value for the M over N divider
> +#define B_PCH_LPSS_HSUART_MEM_PCP_MVAL 0x0000FFFE // M
> value for the M over N divider
> +#define B_PCH_LPSS_HSUART_MEM_PCP_CLKEN BIT0 // Clock Enable
> +
> +#define R_PCH_LPSS_HSUART_MEM_RESETS 0x804 // Software
> Reset
> +#define B_PCH_LPSS_HSUART_MEM_RESETS_FUNC BIT1 // Function
> Clock Domain Reset
> +#define B_PCH_LPSS_HSUART_MEM_RESETS_APB BIT0 // APB
> Domain Reset
> +
> +//
> +// LPSS SPI Module
> +// PCI Config Space Registers
> +//
> +#define PCI_DEVICE_NUMBER_PCH_LPSS_SPI 30
> +#define PCI_FUNCTION_NUMBER_PCH_LPSS_SPI 5
> +
> +#define R_PCH_LPSS_SPI_DEVVENDID 0x00 // Device ID & Vendor
> ID
> +#define B_PCH_LPSS_SPI_DEVVENDID_DID 0xFFFF0000 // Device ID
> +#define B_PCH_LPSS_SPI_DEVVENDID_VID 0x0000FFFF // Vendor ID
> +
> +#define R_PCH_LPSS_SPI_STSCMD 0x04 // Status & Command
> +#define B_PCH_LPSS_SPI_STSCMD_RMA BIT29 // RMA
> +#define B_PCH_LPSS_SPI_STSCMD_RCA BIT28 // RCA
> +#define B_PCH_LPSS_SPI_STSCMD_CAPLIST BIT20 // Capability List
> +#define B_PCH_LPSS_SPI_STSCMD_INTRSTS BIT19 // Interrupt Status
> +#define B_PCH_LPSS_SPI_STSCMD_INTRDIS BIT10 // Interrupt
> Disable
> +#define B_PCH_LPSS_SPI_STSCMD_SERREN BIT8 // SERR# Enable
> +#define B_PCH_LPSS_SPI_STSCMD_BME BIT2 // Bus Master Enable
> +#define B_PCH_LPSS_SPI_STSCMD_MSE BIT1 // Memory Space
> Enable
> +
> +#define R_PCH_LPSS_SPI_REVCC 0x08 // Revision ID & Class
> Code
> +#define B_PCH_LPSS_SPI_REVCC_CC 0xFFFFFF00 // Class Code
> +#define B_PCH_LPSS_SPI_REVCC_RID 0x000000FF // Revision ID
> +
> +#define R_PCH_LPSS_SPI_CLHB 0x0C
> +#define B_PCH_LPSS_SPI_CLHB_MULFNDEV BIT23
> +#define B_PCH_LPSS_SPI_CLHB_HT 0x007F0000 // Header Type
> +#define B_PCH_LPSS_SPI_CLHB_LT 0x0000FF00 // Latency Timer
> +#define B_PCH_LPSS_SPI_CLHB_CLS 0x000000FF // Cache Line Size
> +
> +#define R_PCH_LPSS_SPI_BAR 0x10 // BAR
> +#define B_PCH_LPSS_SPI_BAR_BA 0xFFFFF000 // Base Address
> +#define V_PCH_LPSS_SPI_BAR_SIZE 0x1000
> +#define N_PCH_LPSS_SPI_BAR_ALIGNMENT 12
> +#define B_PCH_LPSS_SPI_BAR_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_SPI_BAR_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_SPI_BAR_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_SPI_BAR_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_SPI_BAR1 0x14 // BAR 1
> +#define B_PCH_LPSS_SPI_BAR1_BA 0xFFFFF000 // Base Address
> +#define B_PCH_LPSS_SPI_BAR1_SI 0x00000FF0 // Size Indicator
> +#define B_PCH_LPSS_SPI_BAR1_PF BIT3 // Prefetchable
> +#define B_PCH_LPSS_SPI_BAR1_TYPE (BIT2 | BIT1) // Type
> +#define B_PCH_LPSS_SPI_BAR1_MS BIT0 // Message Space
> +
> +#define R_PCH_LPSS_SPI_SSID 0x2C // Sub System ID
> +#define B_PCH_LPSS_SPI_SSID_SID 0xFFFF0000 // Sub System ID
> +#define B_PCH_LPSS_SPI_SSID_SVID 0x0000FFFF // Sub System
> Vendor ID
> +
> +#define R_PCH_LPSS_SPI_ERBAR 0x30 // Expansion ROM BAR
> +#define B_PCH_LPSS_SPI_ERBAR_BA 0xFFFFFFFF // Expansion
> ROM Base Address
> +
> +#define R_PCH_LPSS_SPI_CAPPTR 0x34 // Capability Pointer
> +#define B_PCH_LPSS_SPI_CAPPTR_CPPWR 0xFF // Capability
> Pointer Power
> +
> +#define R_PCH_LPSS_SPI_INTR 0x3C // Interrupt
> +#define B_PCH_LPSS_SPI_INTR_ML 0xFF000000 // Max Latency
> +#define B_PCH_LPSS_SPI_INTR_MG 0x00FF0000
> +#define B_PCH_LPSS_SPI_INTR_IP 0x00000F00 // Interrupt Pin
> +#define B_PCH_LPSS_SPI_INTR_IL 0x000000FF // Interrupt Line
> +
> +#define R_PCH_LPSS_SPI_PCAPID 0x80 // Power Capability ID
> +#define B_PCH_LPSS_SPI_PCAPID_PS 0xF8000000 // PME Support
> +#define B_PCH_LPSS_SPI_PCAPID_VS 0x00070000 // Version
> +#define B_PCH_LPSS_SPI_PCAPID_NC 0x0000FF00 // Next
> Capability
> +#define B_PCH_LPSS_SPI_PCAPID_PC 0x000000FF // Power
> Capability
> +
> +#define R_PCH_LPSS_SPI_PCS 0x84 // PME Control Status
> +#define B_PCH_LPSS_SPI_PCS_PMESTS BIT15 // PME Status
> +#define B_PCH_LPSS_SPI_PCS_PMEEN BIT8 // PME Enable
> +#define B_PCH_LPSS_SPI_PCS_NSS BIT3 // No Soft Reset
> +#define B_PCH_LPSS_SPI_PCS_PS (BIT1 | BIT0) // Power State
> +
> +#define R_PCH_LPSS_SPI_MANID 0xF8 // Manufacturer ID
> +#define B_PCH_LPSS_SPI_MANID_MANID 0xFFFFFFFF //
> Manufacturer ID
> +
> +//
> +// LPSS SPI Module
> +// Memory Space Registers
> +//
> +#define R_PCH_LPSS_SPI_MEM_PCP 0x400 // Private Clock
> Parameters
> +#define B_PCH_LPSS_SPI_MEM_PCP_CLKUPDATE BIT31 // Clock
> Divider Update
> +#define B_PCH_LPSS_SPI_MEM_PCP_NVAL 0x7FFF0000 // N value
> for the M over N divider
> +#define B_PCH_LPSS_SPI_MEM_PCP_MVAL 0x0000FFFE // M value
> for the M over N divider
> +#define B_PCH_LPSS_SPI_MEM_PCP_CLKEN BIT0 // Clock Enable
> +
> +#define R_PCH_LPSS_SPI_MEM_RESETS 0x404 // Software Reset
> +#define B_PCH_LPSS_SPI_MEM_RESETS_FUNC BIT1 // Function Clock
> Domain Reset
> +#define B_PCH_LPSS_SPI_MEM_RESETS_APB BIT0 // APB Domain
> Reset
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsPcie.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsPcie.h
> new file mode 100644
> index 0000000000..8b1ae403c9
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsPcie.h
> @@ -0,0 +1,83 @@
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsPcie.h
> +
> + @brief
> + Register names for VLV PCI-E root port devices
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +--*/
> +#ifndef _PCH_REGS_PCIE_H_
> +#define _PCH_REGS_PCIE_H_
> +
> +#define PCH_PCIE_MAX_ROOT_PORTS 4
> +
> +///
> +/// VLV PCI Express Root Ports (D28:F0~F3)
> +///
> +#define PCI_DEVICE_NUMBER_PCH_PCIE_ROOT_PORTS 28
> +#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_1 0
> +#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_2 1
> +#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_3 2
> +#define PCI_FUNCTION_NUMBER_PCH_PCIE_ROOT_PORT_4 3
> +
> +#define R_PCH_PCIE_ID 0x00 // Identifiers
> +#define B_PCH_PCIE_ID_DID 0xFFFF0000 // Device ID
> +#define V_PCH_PCIE_DEVICE_ID_0 0x0F48 // PCIE Root Port
> #1
> +#define V_PCH_PCIE_DEVICE_ID_1 0x0F4A // PCIE Root Port
> #2
> +#define V_PCH_PCIE_DEVICE_ID_2 0x0F4C // PCIE Root Port
> #3
> +#define V_PCH_PCIE_DEVICE_ID_3 0x0F4E // PCIE Root Port
> #4
> +#define B_PCH_PCIE_ID_VID 0x0000FFFF // Vendor ID
> +#define V_PCH_PCIE_VENDOR_ID
> V_PCH_INTEL_VENDOR_ID
> +
> +
> +#define R_PCH_PCIE_BNUM_SLT 0x18 // Bus Numbers;
> Secondary Latency Timer
> +#define B_PCH_PCIE_BNUM_SLT_SLT 0xFF000000 //
> Secondary Latency Timer
> +#define B_PCH_PCIE_BNUM_SLT_SBBN 0x00FF0000 //
> Subordinate Bus Number
> +#define B_PCH_PCIE_BNUM_SLT_SCBN 0x0000FF00 //
> Secondary Bus Number
> +#define B_PCH_PCIE_BNUM_SLT_PBN 0x000000FF // Primary
> Bus Number
> +#define R_PCH_PCIE_CAPP 0x34 // Capabilities List
> Pointer
> +#define B_PCH_PCIE_CAPP 0xFF // Capabilities Pointer
> +
> +#define R_PCH_PCIE_SLCTL_SLSTS 0x58 // Slot Control; Slot
> Status
> +#define S_PCH_PCIE_SLCTL_SLSTS 4
> +#define B_PCH_PCIE_SLCTL_SLSTS_DLLSC BIT24 // Data Link
> Layer State Changed
> +#define B_PCH_PCIE_SLCTL_SLSTS_PDS BIT22 // Presence
> Detect State
> +#define B_PCH_PCIE_SLCTL_SLSTS_MS BIT21 // MRL Sensor
> State
> +#define B_PCH_PCIE_SLCTL_SLSTS_PDC BIT19 // Presence
> Detect Changed
> +#define B_PCH_PCIE_SLCTL_SLSTS_MSC BIT18 // MRL Sensor
> Changed
> +#define B_PCH_PCIE_SLCTL_SLSTS_PFD BIT17 // Power Fault
> Detected
> +#define B_PCH_PCIE_SLCTL_SLSTS_DLLSCE BIT12 // Data Link
> Layer State Changed Enable
> +#define B_PCH_PCIE_SLCTL_SLSTS_PCC BIT10 // Power
> Controller Control
> +#define B_PCH_PCIE_SLCTL_SLSTS_HPE BIT5 // Hot Plug
> Interrupt Enable
> +#define B_PCH_PCIE_SLCTL_SLSTS_CCE BIT4 // Command
> Completed Interrupt Enable
> +#define B_PCH_PCIE_SLCTL_SLSTS_PDE BIT3 // Presence
> Detect Changed Enable
> +
> +#define R_PCH_PCIE_SVID 0x94 // Subsystem Vendor IDs
> +#define S_PCH_PCIE_SVID 4
> +#define B_PCH_PCIE_SVID_SID 0xFFFF0000 // Subsystem
> Identifier
> +#define B_PCH_PCIE_SVID_SVID 0x0000FFFF // Subsystem
> Vendor Identifier
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsPcu.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsPcu.h
> new file mode 100644
> index 0000000000..456c033bc6
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsPcu.h
> @@ -0,0 +1,1201 @@
> +/*++
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PchRegsPcu.h
> +
> +Abstract:
> +
> + Register names for VLV PCU device.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +--*/
> +#ifndef _PCH_REGS_LPC_H_
> +#define _PCH_REGS_LPC_H_
> +
> +//
> +// VLV PCU Registers (D31:F0)
> +//
> +#define PCI_DEVICE_NUMBER_PCH_LPC 31
> +#define PCI_FUNCTION_NUMBER_PCH_LPC 0
> +
> +// Silicon Steppings
> +typedef enum {
> + PchA0 = 0,
> + PchA1 = 1,
> + PchB0 = 2,
> + PchB1 = 3,
> + PchB2 = 4,
> + PchB3 = 5,
> + PchC0 = 6,
> + PchD0 = 7,
> + PchSteppingMax
> +} PCH_STEPPING;
> +
> +#define R_PCH_LPC_REG_ID 0x00 // Identifiers Register
> +#define B_PCH_LPC_DEVICE_ID 0xFFFF0000 // Device
> Identification
> +#define B_PCH_LPC_VENDOR_ID 0x0000FFFF // Vendor
> Identification
> +#define V_PCH_LPC_VENDOR_ID V_PCH_INTEL_VENDOR_ID //
> Vendor ID for Intel
> +//
> +// General VLV PCU Device ID
> +//
> +#define V_PCH_LPC_DEVICE_ID_0 0x0F1C
> +#define V_PCH_LPC_DEVICE_ID_1 0x0F1D
> +#define V_PCH_LPC_DEVICE_ID_2 0x0F1E
> +#define V_PCH_LPC_DEVICE_ID_3 0x0F1F
> +
> +#define R_PCH_LPC_COMMAND 0x04 // Command
> +#define B_PCH_LPC_COMMAND_ID BIT10 // Interrupt Disable
> +#define B_PCH_LPC_COMMAND_FBE BIT9 // Fast Back to Back
> Enable
> +#define B_PCH_LPC_COMMAND_SERR_EN BIT8 // SERR# Enable
> +#define B_PCH_LPC_COMMAND_WCC BIT7 // Wait Cycle Control
> +#define B_PCH_LPC_COMMAND_PER BIT6 // Parity Error
> Response Enable
> +#define B_PCH_LPC_COMMAND_VPS BIT5 // VGA Palette Snoop
> +#define B_PCH_LPC_COMMAND_MWIE BIT4 // Memory Write
> and Invalidate Enable
> +#define B_PCH_LPC_COMMAND_SCE BIT3 // Special Cycle
> Enable
> +#define B_PCH_LPC_COMMAND_BME BIT2 // Bus Master Enable
> +#define B_PCH_LPC_COMMAND_MSE BIT1 // Memory Space
> Enable
> +#define B_PCH_LPC_COMMAND_IOSE BIT0 // I/O Space Enable
> +
> +#define R_PCH_LPC_DEV_STS 0x06 // Status
> +#define B_PCH_LPC_DEV_STS_DPE BIT15 // Detected Parity Error
> +#define B_PCH_LPC_DEV_STS_SSE BIT14 // Signaled System Error
> +#define B_PCH_LPC_DEV_STS_RMA BIT13 // Received Master
> Abort
> +#define B_PCH_LPC_DEV_STS_RTA BIT12 // Received Target
> Abort
> +#define B_PCH_LPC_DEV_STS_STA BIT11 // Signaled Target Abort
> +#define B_PCH_LPC_DEV_STS_DEVT_STS (BIT10 | BIT9) // DEVSEL#
> Timing Status
> +#define B_PCH_LPC_DEV_STS_MDPED BIT8 // Data Parity Error
> +#define B_PCH_LPC_DEV_STS_FB2B BIT7 // Fast Back to Back
> Capable
> +#define B_PCH_LPC_DEV_STS_66MHZ_CAP BIT5 // 66 MHz capable
> +#define B_PCH_LPC_DEV_STS_CAP_LIST BIT4 // Capabilities List
> +#define B_PCH_LPC_DEV_STS_INT_STS BIT3 // Interrupt Status
> +
> +#define R_PCH_LPC_RID_CC 0x08 // Revision ID & Class Code
> +#define B_PCH_LPC_RID_CC_BCC 0xFF000000 // Base Class Code
> +#define B_PCH_LPC_RID_CC_SCC 0x00FF0000 // Sub-Class Code
> +#define B_PCH_LPC_RID_CC_PI 0x0000FF00 // Programming
> Interface
> +#define B_PCH_LPC_RID_CC_RID 0x000000FF // Revision ID
> +
> +// Silicon Steppings
> +
> +#define V_PCH_LPC_RID_0 0x01 // A0 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_1 0x02 // A0 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_2 0x03 // A1 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_3 0x04 // A1 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_4 0x05 // B0 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_5 0x06 // B0 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_6 0x07 // B1 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_7 0x08 // B1 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_8 0x09 // B2 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_9 0x0A // B2 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_A 0x0B // B3 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_B 0x0C // B3 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_C 0x0D // C0 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_D 0x0E // C0 Stepping (25 x 27)
> +#define V_PCH_LPC_RID_E 0x10 // D0 Stepping (17 x 17)
> +#define V_PCH_LPC_RID_F 0x11 // D0 Stepping (25 x 27)
> +
> +#define R_PCH_LPC_MLT 0x0D // Master Latency Timer
> +#define B_PCH_LPC_MLT_MLC 0xF8 // Master Latency Count
> +
> +#define R_PCH_LPC_HEADTYP 0x0E // Header Type
> +#define B_PCH_LPC_HEADTYP_MFD BIT7 // Multi-function
> Device
> +#define B_PCH_LPC_HEADTYP_HT 0x7F // Header Type
> +
> +#define R_PCH_LPC_SS 0x2C // Subsystem ID & Vendor ID
> +#define B_PCH_LPC_SS_SSID 0xFFFF0000 // Subsystem ID
> +#define B_PCH_LPC_SS_SSVID 0x0000FFFF // Subsystem
> Vendor ID
> +
> +#define R_PCH_LPC_CAP_LIST 0x34 // Capability List
> +#define B_PCH_LPC_CAP_LIST_CP 0xFF // Capability Pointer
> +
> +#define R_PCH_LPC_ACPI_BASE 0x40 // ABASE, 16bit
> +#define B_PCH_LPC_ACPI_BASE_BAR 0x0000FF80 // Base Address,
> 128 Bytes
> +#define B_PCH_LPC_ACPI_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_ACPI_BASE_MEMI BIT0 // Memory Space
> Indication
> +
> +#define R_PCH_LPC_PMC_BASE 0x44 // PBASE, 32bit, 512 Bytes
> +#define B_PCH_LPC_PMC_BASE_BAR 0xFFFFFE00 // Base Address
> +#define B_PCH_LPC_PMC_BASE_PREF BIT3 // Prefetchable
> +#define B_PCH_LPC_PMC_BASE_ADDRNG BIT2 // Address Range
> +#define B_PCH_LPC_PMC_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_PMC_BASE_MEMI BIT0 // Memory Space
> Indication
> +
> +#define R_PCH_LPC_GPIO_BASE 0x48 // GBASE, 16bit
> +#define B_PCH_LPC_GPIO_BASE_BAR 0xFF00 // Base Address, 256
> Bytes
> +#define B_PCH_LPC_GPIO_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_GPIO_BASE_MEMI BIT0 // Memory Space
> Indication
> +
> +#define R_PCH_LPC_IO_BASE 0x4C // IOBASE, 32bit
> +#define B_PCH_LPC_IO_BASE_BAR 0xFFFFC000 // Base Address,
> 16 KiloBytes
> +#define B_PCH_LPC_IO_BASE_PREF BIT3 // Prefetchable
> +#define B_PCH_LPC_IO_BASE_ADDRNG BIT2 // Address Range
> +#define B_PCH_LPC_IO_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_IO_BASE_MEMI BIT0 // Memory Space
> Indication
> +
> +#define R_PCH_LPC_ILB_BASE 0x50 // IBASE, 32bit
> +#define B_PCH_LPC_ILB_BASE_BAR 0xFFFFFE00 // Base Address,
> 512 bytes
> +#define B_PCH_LPC_ILB_BASE_PREF BIT3 // Prefetchable
> +#define B_PCH_LPC_ILB_BASE_ADDRNG BIT2 // Address Range
> +#define B_PCH_LPC_ILB_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_ILB_BASE_MEMI BIT0 // Memory Space
> Indication
> +
> +#define R_PCH_LPC_SPI_BASE 0x54 // SBASE, 32bit
> +#define B_PCH_LPC_SPI_BASE_BAR 0xFFFFFE00 // Base Address,
> 512 bytes
> +#define B_PCH_LPC_SPI_BASE_PREF BIT3 // Prefetchable
> +#define B_PCH_LPC_SPI_BASE_ADDRNG BIT2 // Address Range
> +#define B_PCH_LPC_SPI_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_SPI_BASE_MEMI BIT0 // Memory Space
> Indicator
> +
> +#define R_PCH_LPC_MPHY_BASE 0x58 // MPBASE, 32bit
> +#define B_PCH_LPC_MPHY_BASE_BAR 0xFFF00000 // Base
> Address, 1 MegaByte
> +#define B_PCH_LPC_MPHY_BASE_PREF BIT3 // Prefetchable
> +#define B_PCH_LPC_MPHY_BASE_ADDRNG BIT2 // Address Range
> +#define B_PCH_LPC_MPHY_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_MPHY_BASE_MEMI BIT0 // Memory Space
> Indicator
> +
> +#define R_PCH_LPC_PUNIT_BASE 0x5C // PUBASE, 32bit
> +#define B_PCH_LPC_PUNIT_BASE_BAR 0xFFFFF800 // Base
> Address, 2K bytes
> +#define B_PCH_LPC_PUNIT_BASE_PREF BIT3 // Prefetchable
> +#define B_PCH_LPC_PUNIT_BASE_ADDRNG BIT2 // Address Range
> +#define B_PCH_LPC_PUNIT_BASE_EN BIT1 // Enable Bit
> +#define B_PCH_LPC_PUNIT_BASE_MEMI BIT0 // Memory Space
> Indicator
> +
> +#define R_PCH_LPC_UART_CTRL 0x80 // UART Control
> +#define B_PCH_LPC_UART_CTRL_COM1_EN BIT0 // COM1 Enable
> +
> +#define R_PCH_LPC_FWH_BIOS_DEC 0xD8 // BIOS Decode Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_EF8 BIT15 // F8-FF Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_EF0 BIT14 // F0-F8 Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_EE8 BIT13 // E8-EF Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_EE0 BIT12 // E0-E8 Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_ED8 BIT11 // D8-DF Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_ED0 BIT10 // D0-D8 Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_EC8 BIT9 // C8-CF Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_EC0 BIT8 // C0-C8 Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_LFE BIT7 // Legacy F Segment
> Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_LEE BIT6 // Legacy E Segment
> Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_E70 BIT3 // 70-7F Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_E60 BIT2 // 60-6F Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_E50 BIT1 // 50-5F Enable
> +#define B_PCH_LPC_FWH_BIOS_DEC_E40 BIT0 // 40-4F Enable
> +
> +#define R_PCH_LPC_FDCAP 0xE0 // Feature Detection
> Capability ID
> +#define B_PCH_LPC_FDCAP_NEXT 0xFF00 // Next Capability
> +#define B_PCH_LPC_FDCAP_CAPID 0x00FF // Capability ID
> +
> +#define R_PCH_LPC_FDLEN 0xE2 // Feature Detection
> Capability Length
> +#define B_PCH_LPC_FDLEN_CAPLEN 0xFF // Capability Length
> +
> +#define R_PCH_LPC_FDVER 0xE3 // Feature Detection
> Capability Version
> +#define B_PCH_LPC_FDVER_VSCID 0xF0 // Vendor Specific
> Capability ID
> +#define B_PCH_LPC_FDVER_CAPVER 0x0F // Capability Version
> +
> +#define R_PCH_LPC_FVECTIDX 0xE4 // Feature Vector Index
> +
> +#define R_PCH_LPC_FVECTD 0xE8 // Feature Vector Data
> +
> +#define R_PCH_LPC_RCBA 0xF0 // RCBA, 32bit
> +#define B_PCH_LPC_RCBA_BAR 0xFFFFFC00 // Base Address, 1
> KiloByte
> +#define B_PCH_LPC_RCBA_EN BIT0 // Enable Bit
> +
> +#define R_PCH_LPC_ULT_OBS 0xF4 // ULT Observability
> +#define B_PCH_LPC_ULT_OBS_WNUM 0x3FF000 // Reserved
> Wafer Number
> +#define B_PCH_LPC_ULT_OBS_XLOC 0xFC0 // Reserved X Loc
> +#define B_PCH_LPC_ULT_OBS_YLOC 0x3F // Reserved Y Loc
> +
> +#define R_PCH_LPC_MAN_ID 0xF8 // Manufacturer ID
> +#define B_PCH_LPC_MAN_ID_DPID 0xF000000 // Dot Portion of
> Process ID
> +#define B_PCH_LPC_MAN_ID_MSID 0xFF0000 // Manufacturing
> Stepping Identifier
> +#define B_PCH_LPC_MAN_ID_MID 0xFF00 // Manufacturing
> Identifier
> +#define B_PCH_LPC_MAN_ID_PPID 0xFF // Process Portion of
> Process ID
> +
> +#define R_PCH_LPC_CGC 0xFC // Clock Gating Control
> +#define B_PCH_LPC_CGC_SBLCG BIT9 // IOSF-SB Local Clock
> Gating Disable
> +#define B_PCH_LPC_CGC_SBTCG BIT8 // IOSF-SB Trunk Clock
> Gating (Request) Disable
> +#define B_PCH_LPC_CGC_PRILCG BIT1 // IOSF-PRI Local Clock
> Gating Disable
> +#define B_PCH_LPC_CGC_PRITCG BIT0 // IOSF-PRI Trunk Clock
> Gating (Request) Disable
> +
> +//
> +// iLB Memory Space Registers (IBASE)
> +//
> +#define R_PCH_ILB_ACPI_CNT 0x00 // ACPI Control
> +#define B_PCH_ILB_ACPI_CNT_SCI_IRQ_SEL (BIT2 | BIT1 | BIT0) // SCI
> IRQ Select
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_9 0 // IRQ9
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_10 BIT0 // IRQ10
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_11 BIT1 // IRQ11
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_20 BIT2 // IRQ20 (Only if
> APIC enabled)
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_21 (BIT2 | BIT0) // IRQ21
> (Only if APIC enabled)
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_22 (BIT2 | BIT1) // IRQ22
> (Only if APIC enabled)
> +#define V_PCH_ILB_ACPI_CNT_SCI_IRQ_23 (BIT2 | BIT1 | BIT0) //
> IRQ23 (Only if APIC enabled)
> +
> +#define R_PCH_ILB_MC 0x04 // Miscellaneous Control
> +#define B_PCH_ILB_MC_DRTC BIT3 // Disable RTC
> +#define B_PCH_ILB_MC_D8259 BIT2 // Disable 8259
> +#define B_PCH_ILB_MC_D8254 BIT1 // Disable 8254
> +#define B_PCH_ILB_MC_AME BIT0 // Alternate Access Mode
> Enable
> +
> +#define R_PCH_ILB_PIRQA_ROUT 0x08 // PIRQA Routing Control
> +#define R_PCH_ILB_PIRQB_ROUT 0x09 // PIRQB Routing Control
> +#define R_PCH_ILB_PIRQC_ROUT 0x0A // PIRQC Routing Control
> +#define R_PCH_ILB_PIRQD_ROUT 0x0B // PIRQD Routing Control
> +#define R_PCH_ILB_PIRQE_ROUT 0x0C // PIRQE Routing Control
> +#define R_PCH_ILB_PIRQF_ROUT 0x0D // PIRQF Routing Control
> +#define R_PCH_ILB_PIRQG_ROUT 0x0E // PIRQG Routing Control
> +#define R_PCH_ILB_PIRQH_ROUT 0x0F // PIRQH Routing Control
> +//
> +// Bit values are the same for R_PCH_ILB_PIRQA_ROUT to
> R_PCH_ILB_PIRQH_ROUT
> +//
> +#define B_PCH_ILB_PIRQX_ROUT_IRQEN BIT7 // Interrupt Routing
> Enable
> +#define B_PCH_ILB_PIRQX_ROUT 0x0F // IRQ Routing
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_3 0x03 // Route to IRQ3
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_4 0x04 // Route to IRQ4
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_5 0x05 // Route to IRQ5
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_6 0x06 // Route to IRQ6
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_7 0x07 // Route to IRQ7
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_9 0x09 // Route to IRQ9
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_10 0x0A // Route to IRQ10
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_11 0x0B // Route to IRQ11
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_12 0x0C // Route to IRQ12
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_14 0x0E // Route to IRQ14
> +#define V_PCH_ILB_PIRQX_ROUT_IRQ_15 0x0F // Route to IRQ15
> +
> +#define R_PCH_ILB_SERIRQ_CNT 0x10 // Serial IRQ Control
> +#define B_PCH_ILB_SERIRQ_CNT_SIRQMD BIT7 // Mode
> +
> +#define R_PCH_ILB_ULKMC 0x14 // USB Legacy Keyboard /
> Mouse Control
> +#define B_PCH_ILB_ULKMC_TRAPBY64W BIT11 // SMI Caused by
> Port 64 Write
> +#define B_PCH_ILB_ULKMC_TRAPBY64R BIT10 // SMI Caused by
> Port 64 Read
> +#define B_PCH_ILB_ULKMC_TRAPBY60W BIT9 // SMI Caused by
> Port 60 Write
> +#define B_PCH_ILB_ULKMC_TRAPBY60R BIT8 // SMI Caused by
> Port 60 Read
> +#define B_PCH_ILB_ULKMC_64WEN BIT3 // SMI on Port 64
> Writes Enable
> +#define B_PCH_ILB_ULKMC_64REN BIT2 // SMI on Port 64 Reads
> Enable
> +#define B_PCH_ILB_ULKMC_60WEN BIT1 // SMI on Port 60
> Writes Enable
> +#define B_PCH_ILB_ULKMC_60REN BIT0 // SMI on Port 60 Reads
> Enable
> +
> +#define R_PCH_ILB_FWH_BIOS_SEL 0x18 // FWH ID Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_F8 0xF0000000 // F8-FF ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_F0 0x0F000000 // F0-F7 ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_E8 0x00F00000 // E8-EF ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_E0 0x000F0000 // E0-E7 ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_D8 0x0000F000 // D8-DF ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_D0 0x00000F00 // D0-D7 ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_C8 0x000000F0 // C8-CF ID
> Select
> +#define B_PCH_ILB_FWH_BIOS_SEL_C0 0x0000000F // C0-C7 ID
> Select
> +
> +#define R_PCH_ILB_BIOS_CNTL 0x1C // BIOS Control
> +#define S_PCH_ILB_BIOS_CNTL 4
> +#define B_PCH_ILB_BIOS_CNTL_PFE BIT8 // Prefetch Enable
> +#define B_PCH_ILB_BIOS_CNTL_LE BIT1 // Lock Enable
> +#define N_PCH_ILB_BIOS_CNTL_LE 1
> +#define B_PCH_ILB_BIOS_CNTL_WP BIT0 // Write Protect
> +
> +#define R_PCH_ILB_D0IR 0x20 // Device 0 Interrupt Route
> +#define R_PCH_ILB_D1IR 0x22 // Device 1 Interrupt Route
> +#define R_PCH_ILB_D2IR 0x24 // Device 2 Interrupt Route
> +#define R_PCH_ILB_D3IR 0x26 // Device 3 Interrupt Route
> +#define R_PCH_ILB_D4IR 0x28 // Device 4 Interrupt Route
> +#define R_PCH_ILB_D5IR 0x2A // Device 5 Interrupt Route
> +#define R_PCH_ILB_D6IR 0x2C // Device 6 Interrupt Route
> +#define R_PCH_ILB_D7IR 0x2E // Device 7 Interrupt Route
> +#define R_PCH_ILB_D8IR 0x30 // Device 8 Interrupt Route
> +#define R_PCH_ILB_D9IR 0x32 // Device 9 Interrupt Route
> +#define R_PCH_ILB_D10IR 0x34 // Device 10 Interrupt Route
> +#define R_PCH_ILB_D11IR 0x36 // Device 11 Interrupt Route
> +#define R_PCH_ILB_D12IR 0x38 // Device 12 Interrupt Route
> +#define R_PCH_ILB_D13IR 0x3A // Device 13 Interrupt Route
> +#define R_PCH_ILB_D14IR 0x3C // Device 14 Interrupt Route
> +#define R_PCH_ILB_D15IR 0x3E // Device 15 Interrupt Route
> +#define R_PCH_ILB_D16IR 0x40 // Device 16 Interrupt Route
> +#define R_PCH_ILB_D17IR 0x42 // Device 17 Interrupt Route
> +#define R_PCH_ILB_D18IR 0x44 // Device 18 Interrupt Route
> +#define R_PCH_ILB_D19IR 0x46 // Device 19 Interrupt Route
> +#define R_PCH_ILB_D20IR 0x48 // Device 20 Interrupt Route
> +#define R_PCH_ILB_D21IR 0x4A // Device 21 Interrupt Route
> +#define R_PCH_ILB_D22IR 0x4C // Device 22 Interrupt Route
> +#define R_PCH_ILB_D23IR 0x4E // Device 23 Interrupt Route
> +#define R_PCH_ILB_D24IR 0x50 // Device 24 Interrupt Route
> +#define R_PCH_ILB_D25IR 0x52 // Device 25 Interrupt Route
> +#define R_PCH_ILB_D26IR 0x54 // Device 26 Interrupt Route
> +#define R_PCH_ILB_D27IR 0x56 // Device 27 Interrupt Route
> +#define R_PCH_ILB_D28IR 0x58 // Device 28 Interrupt Route
> +#define R_PCH_ILB_D29IR 0x5A // Device 29 Interrupt Route
> +#define R_PCH_ILB_D30IR 0x5C // Device 30 Interrupt Route
> +#define R_PCH_ILB_D31IR 0x5E // Device 31 Interrupt Route
> +
> +#define B_PCH_ILB_DXXIR_IDR_MASK (BIT14 | BIT13 | BIT12) //
> INTD Mask
> +#define V_PCH_ILB_DXXIR_IDR_PIRQA 0 // INTD
> Mapping to IRQ A
> +#define V_PCH_ILB_DXXIR_IDR_PIRQB BIT12 // INTD
> Mapping to IRQ B
> +#define V_PCH_ILB_DXXIR_IDR_PIRQC BIT13 // INTD
> Mapping to IRQ C
> +#define V_PCH_ILB_DXXIR_IDR_PIRQD (BIT13 | BIT12) // INTD
> Mapping to IRQ D
> +#define V_PCH_ILB_DXXIR_IDR_PIRQE BIT14 // INTD
> Mapping to IRQ E
> +#define V_PCH_ILB_DXXIR_IDR_PIRQF (BIT14 | BIT12) // INTD
> Mapping to IRQ F
> +#define V_PCH_ILB_DXXIR_IDR_PIRQG (BIT14 | BIT13) // INTD
> Mapping to IRQ G
> +#define V_PCH_ILB_DXXIR_IDR_PIRQH (BIT14 | BIT13 | BIT12) //
> INTD Mapping to IRQ H
> +
> +#define B_PCH_ILB_DXXIR_ICR_MASK (BIT10 | BIT9 | BIT8) // INTC
> Mask
> +#define V_PCH_ILB_DXXIR_ICR_PIRQA 0 // INTC Mapping
> to IRQ A
> +#define V_PCH_ILB_DXXIR_ICR_PIRQB BIT8 // INTC
> Mapping to IRQ B
> +#define V_PCH_ILB_DXXIR_ICR_PIRQC BIT9 // INTC
> Mapping to IRQ C
> +#define V_PCH_ILB_DXXIR_ICR_PIRQD (BIT9 | BIT8) // INTC
> Mapping to IRQ D
> +#define V_PCH_ILB_DXXIR_ICR_PIRQE BIT10 // INTC
> Mapping to IRQ E
> +#define V_PCH_ILB_DXXIR_ICR_PIRQF (BIT10 | BIT8) // INTC
> Mapping to IRQ F
> +#define V_PCH_ILB_DXXIR_ICR_PIRQG (BIT10 | BIT9) // INTC
> Mapping to IRQ G
> +#define V_PCH_ILB_DXXIR_ICR_PIRQH (BIT10 | BIT9 | BIT8) // INTC
> Mapping to IRQ H
> +
> +#define B_PCH_ILB_DXXIR_IBR_MASK (BIT6 | BIT5 | BIT4) // INTB
> Mask
> +#define V_PCH_ILB_DXXIR_IBR_PIRQA 0 // INTB Mapping
> to IRQ A
> +#define V_PCH_ILB_DXXIR_IBR_PIRQB BIT4 // INTB
> Mapping to IRQ B
> +#define V_PCH_ILB_DXXIR_IBR_PIRQC BIT5 // INTB
> Mapping to IRQ C
> +#define V_PCH_ILB_DXXIR_IBR_PIRQD (BIT5 | BIT4) // INTB
> Mapping to IRQ D
> +#define V_PCH_ILB_DXXIR_IBR_PIRQE BIT6 // INTB
> Mapping to IRQ E
> +#define V_PCH_ILB_DXXIR_IBR_PIRQF (BIT6 | BIT4) // INTB
> Mapping to IRQ F
> +#define V_PCH_ILB_DXXIR_IBR_PIRQG (BIT6 | BIT5) // INTB
> Mapping to IRQ G
> +#define V_PCH_ILB_DXXIR_IBR_PIRQH (BIT6 | BIT5 | BIT4) // INTB
> Mapping to IRQ H
> +
> +#define B_PCH_ILB_DXXIR_IAR_MASK (BIT2 | BIT1 | BIT0) // INTA
> Mask
> +#define V_PCH_ILB_DXXIR_IAR_PIRQA 0 // INTA Mapping
> to IRQ A
> +#define V_PCH_ILB_DXXIR_IAR_PIRQB BIT0 // INTA
> Mapping to IRQ B
> +#define V_PCH_ILB_DXXIR_IAR_PIRQC BIT1 // INTA
> Mapping to IRQ C
> +#define V_PCH_ILB_DXXIR_IAR_PIRQD (BIT1 | BIT0) // INTA
> Mapping to IRQ D
> +#define V_PCH_ILB_DXXIR_IAR_PIRQE BIT2 // INTA
> Mapping to IRQ E
> +#define V_PCH_ILB_DXXIR_IAR_PIRQF (BIT2 | BIT0) // INTA
> Mapping to IRQ F
> +#define V_PCH_ILB_DXXIR_IAR_PIRQG (BIT2 | BIT1) // INTA
> Mapping to IRQ G
> +#define V_PCH_ILB_DXXIR_IAR_PIRQH (BIT2 | BIT1 | BIT0) // INTA
> Mapping to IRQ H
> +
> +#define R_PCH_ILB_OIC 0x60 // Other Interrupt Controller
> +#define B_PCH_ILB_OIC_SIRQEN BIT12 // Serial IRQ Enable
> +#define B_PCH_ILB_OIC_AEN BIT8 // APIC Enable
> +
> +#define R_PCH_ILB_RTC_CONF 0x64 // RTC Control
> +#define B_PCH_ILB_RTC_CONF_UCMOS_LOCK BIT1 // Upper 128
> Byte Lock
> +#define B_PCH_ILB_RTC_CONF_LCMOS_LOCK BIT0 // Lower 128
> Byte Lock
> +
> +#define R_PCH_ILB_RTM 0x68 // RTC Test Mode
> +#define B_PCH_ILB_RTM_RTM1 (BIT2 | BIT1 | BIT0)
> +
> +#define R_PCH_ILB_BCS 0x6C // BIOS Control Status
> +#define B_PCH_ILB_BCS_SMIWPEN BIT1 // SMI WPD Enable
> +#define B_PCH_ILB_BCS_SMIWPST BIT0 // SMI WPD Status
> +
> +#define R_PCH_ILB_LE 0x70 // LE
> +#define B_PCH_ILB_LE_IRQ12C BIT1 // IRQ12 Cause
> +#define B_PCH_ILB_LE_IRQ1C BIT0 // IRQ1 Cause
> +
> +#define R_PCH_ILB_RTCC 0x74 // RTC HIP Configuration
> +#define B_PCH_ILB_RTCC_RTCB4 BIT6 // RTC Bias Resistor 4,
> Adds 480 Kohm
> +#define B_PCH_ILB_RTCC_RTCB3 BIT5 // RTC Bias Resistor 3,
> Adds 240 Kohm
> +#define B_PCH_ILB_RTCC_RTCB2 BIT4 // RTC Bias Resistor 2,
> Adds 120 Kohm
> +#define B_PCH_ILB_RTCC_RTCB1 BIT3 // RTC Bias Resistor 1,
> Adds 60 Kohm
> +#define B_PCH_ILB_RTCC_RTCB0 BIT2 // RTC Bias Resistor 0,
> Adds 30 Kohm
> +#define B_PCH_ILB_RTCC_DSWEN BIT1 // Deep Sleep Well
> Enable
> +#define B_PCH_ILB_RTCC_FEN BIT0 // Enable the Fast Oscillator
> Bypass Mode
> +
> +#define R_PCH_ILB_DEF0 0x78 // Defeature Register 0
> +#define B_PCH_ILB_DEF0_SHRTSYNC BIT22 // Short Sync Abort
> Defeature
> +#define B_PCH_ILB_DEF0_SDD BIT21 // Sub Decode Disable
> +
> +#define R_PCH_ILB_DEF1 0x7C // Defeature Register 1
> +#define B_PCH_ILB_DEF1_TPMPF BIT10 //
> usb2leg_chknbit_TPM_PF
> +#define B_PCH_ILB_DEF1_HPETDEF BIT8 // usb2leg_chknbit_hpet
> +#define B_PCH_ILB_DEF1_ECWS BIT6 // 8254 Early CW Select
> +#define B_PCH_ILB_DEF1_FOF BIT5 // 8254 Freeze on first on
> 1st rd wr11
> +#define B_PCH_ILB_DEF1_FOAR BIT4 // 8254
> Freeze_On_AnyRead
> +#define B_PCH_ILB_DEF1_LMOO BIT3 // 8259
> L2L0_Match_On_OCW2
> +#define B_PCH_ILB_DEF1_DFP BIT2 // 8259
> Disable_Freeze_Priority
> +#define B_PCH_ILB_DEF1_EETI BIT1 // 8259
> Extend_EdgeTrig_IRQ
> +#define B_PCH_ILB_DEF1_DSAEOI BIT0 // 8259
> Disable_Slave_AEOI
> +
> +#define R_PCH_ILB_GNMI 0x80 // NMI Register
> +#define S_PCH_ILB_GNMI 4
> +#define B_PCH_ILB_GNMI_NMI2SMIEN BIT6 // NMI to SMI Enable
> +#define N_PCH_ILB_GNMI_NMI2SMIEN 6
> +#define B_PCH_ILB_GNMI_NMI2SMIST BIT5 // NMI to SMI Status
> +#define N_PCH_ILB_GNMI_NMI2SMIST 5
> +#define B_PCH_ILB_GNMI_NMIN BIT4 // NMI NOW
> +#define B_PCH_ILB_GNMI_NMINS BIT3 // NMI NOW Status
> +#define B_PCH_ILB_GNMI_GNMIED BIT2 // GPIO NMI Edge
> Detection
> +#define B_PCH_ILB_GNMI_GNMIE BIT1 // GPIO NMI Enable
> +#define B_PCH_ILB_GNMI_GNMIS BIT0 // GPIO NMI Status
> +
> +#define R_PCH_ILB_LPCC 0x84 // LPC Control
> +#define B_PCH_ILB_LPCC_LPCCLK_SLC BIT8 // iLPCCLK Mux Select
> +#define B_PCH_ILB_LPCC_LPCCLK_FORCE_OFF BIT3
> +#define B_PCH_ILB_LPCC_CLKRUN_EN BIT2 // LPC CLKRUN
> Protocol Enable
> +#define B_PCH_ILB_LPCC_LPCCLK1EN BIT1 // Clock 1 Enable
> +#define B_PCH_ILB_LPCC_LPCCLK0EN BIT0 // Clock 0 Enable
> +
> +#define R_PCH_ILB_IRQE 0x88 // IRQ Enable Control
> +#define B_PCH_ILB_IRQE_IRQ4TO7EN (BIT7 | BIT6 | BIT5 | BIT4) //
> IRQ4 - IRQ7 Enable
> +#define B_PCH_ILB_IRQE_UARTIRQEN_IRQ3 BIT3 // UART IRQ3
> Enable
> +
> +//
> +// ACPI and Legacy I/O Registers (ABASE)
> +//
> +#define R_PCH_ACPI_PM1_STS 0x00 // Power Management 1
> Status
> +#define S_PCH_ACPI_PM1_STS 2
> +#define B_PCH_ACPI_PM1_STS_WAK BIT15 // Wake Status
> +#define B_PCH_ACPI_PM1_STS_WAK_PCIE0 BIT14 // PCI Express 0
> Wake Status
> +#define B_PCH_ACPI_PM1_STS_USB_CLKLESS BIT13 // USB Clockless
> Status
> +#define B_PCH_ACPI_PM1_STS_PRBTNOR BIT11 // Power Button
> Override Status
> +#define B_PCH_ACPI_PM1_STS_RTC BIT10 // RTC Status
> +#define B_PCH_ACPI_PM1_STS_PWRBTN BIT8 // Power Button
> Status
> +#define B_PCH_ACPI_PM1_STS_GBL BIT5 // Global Status
> +#define B_PCH_ACPI_PM1_STS_WAK_PCIE3 BIT4 // PCI Express 3
> Wake Status
> +#define B_PCH_ACPI_PM1_STS_WAK_PCIE2 BIT3 // PCI Express 2
> Wake Status
> +#define B_PCH_ACPI_PM1_STS_WAK_PCIE1 BIT2 // PCI Express 1
> Wake Status
> +#define B_PCH_ACPI_PM1_STS_TMROF BIT0 // Timer Overflow
> Status
> +#define N_PCH_ACPI_PM1_STS_WAK 15
> +#define N_PCH_ACPI_PM1_STS_PRBTNOR 11
> +#define N_PCH_ACPI_PM1_STS_RTC 10
> +#define N_PCH_ACPI_PM1_STS_PWRBTN 8
> +#define N_PCH_ACPI_PM1_STS_GBL 5
> +#define N_PCH_ACPI_PM1_STS_TMROF 0
> +
> +#define R_PCH_ACPI_PM1_EN 0x02 // Power Management 1
> Enables
> +#define S_PCH_ACPI_PM1_EN 2
> +#define B_PCH_ACPI_PM1_WAK_DIS_PCIE0 BIT14 // PCI Express 0
> Disable
> +#define B_PCH_ACPI_PM1_EN_USB_CLKLESS BIT13 // USB Clockless
> Enable Bit
> +#define B_PCH_ACPI_PM1_EN_RTC BIT10 // RTC Alarm Enable Bit
> +#define B_PCH_ACPI_PM1_EN_PWRBTN BIT8 // Power Button
> Enable Bit
> +#define B_PCH_ACPI_PM1_EN_GBL BIT5 // Global Enable Bit
> +#define B_PCH_ACPI_PM1_WAK_DIS_PCIE3 BIT4 // PCI Express 3
> Disable
> +#define B_PCH_ACPI_PM1_WAK_DIS_PCIE2 BIT3 // PCI Express 2
> Disable
> +#define B_PCH_ACPI_PM1_WAK_DIS_PCIE1 BIT2 // PCI Express 1
> Disable
> +#define B_PCH_ACPI_PM1_EN_TMROF BIT0 // Timer Overflow
> Interrupt Enable Bit
> +#define N_PCH_ACPI_PM1_EN_RTC 10
> +#define N_PCH_ACPI_PM1_EN_PWRBTN 8
> +#define N_PCH_ACPI_PM1_EN_GBL 5
> +#define N_PCH_ACPI_PM1_EN_TMROF 0
> +
> +#define R_PCH_ACPI_PM1_CNT 0x04 // Power Management 1
> Control
> +#define S_PCH_ACPI_PM1_CNT 4
> +#define B_PCH_ACPI_PM1_CNT_SLP_EN BIT13 // Sleep enable
> +#define B_PCH_ACPI_PM1_CNT_SLP_TYP (BIT12 | BIT11 | BIT10) //
> Sleep Type
> +#define V_PCH_ACPI_PM1_CNT_S0 0x00000000 // ON (S0)
> +#define V_PCH_ACPI_PM1_CNT_S1 0x00000400 // Puts CPU in S1
> state (S1)
> +#define V_PCH_ACPI_PM1_CNT_S3 0x00001400 // Suspend-to-
> RAM (S3)
> +#define V_PCH_ACPI_PM1_CNT_S4 0x00001800 // Suspend-to-
> Disk (S4)
> +#define V_PCH_ACPI_PM1_CNT_S5 0x00001C00 // Soft Off (S5)
> +#define B_PCH_ACPI_PM1_CNT_GBL_RLS BIT2
> +#define B_PCH_ACPI_PM1_CNT_BM_RLD BIT1 // Treated as
> Scratchpad Bit
> +#define B_PCH_ACPI_PM1_CNT_SCI_EN BIT0 // SCI Enable
> +
> +#define R_PCH_ACPI_PM1_TMR 0x08 // Power Management 1
> Timer
> +#define B_PCH_ACPI_PM1_TMR_VAL 0xFFFFFF // The timer value
> mask
> +#define V_PCH_ACPI_PM1_TMR_MAX_VAL 0x1000000 // The timer
> is 24 bit overflow
> +#define V_PCH_ACPI_PM1_TMR_FREQUENCY 3579545 // Timer
> Frequency
> +#define V_PCH_ACPI_PM1_TMR_NUM_BITS 24 // Programmed to
> 24 not 32
> +#define V_PCH_ACPI_PM1_TMR_MAX_BITS 32
> +
> +#define R_PCH_ACPI_GPE0a_STS 0x20 // General Purpose Event
> 0a Status
> +#define S_PCH_ACPI_GPE0a_STS 4
> +#define B_PCH_ACPI_GPE0a_STS_CORE_GPIO 0xFF000000 // CORE
> GPIO Status
> +#define B_PCH_ACPI_GPE0a_STS_SUS_GPIO 0x00FF0000 // SUS
> GPIO Status
> +#define B_PCH_ACPI_GPE0a_STS_PME_B0 BIT13 // Power
> Management Event Bus 0 Status
> +#define B_PCH_ACPI_GPE0a_STS_BATLOW BIT10 // Battery Low
> Status
> +#define B_PCH_ACPI_GPE0a_STS_PCI_EXP BIT9 // PCI Express
> Status
> +#define B_PCH_ACPI_GPE0a_STS_GUNIT_SCI BIT5 // GUNIT SCI
> Status
> +#define B_PCH_ACPI_GPE0a_STS_PUNIT_SCI BIT4 // PUNIT SCI
> Status
> +#define B_PCH_ACPI_GPE0a_STS_SWGPE BIT2 // Software GPE
> Status
> +#define B_PCH_ACPI_GPE0a_STS_HOT_PLUG BIT1 // Hot Plug Status
> +#define N_PCH_ACPI_GPE0a_STS_PME_B0 13
> +#define N_PCH_ACPI_GPE0a_STS_BATLOW 10
> +#define N_PCH_ACPI_GPE0a_STS_PCI_EXP 9
> +#define N_PCH_ACPI_GPE0a_STS_GUNIT_SCI 5
> +#define N_PCH_ACPI_GPE0a_STS_PUNIT_SCI 4
> +#define N_PCH_ACPI_GPE0a_STS_SWGPE 2
> +#define N_PCH_ACPI_GPE0a_STS_HOT_PLUG 1
> +
> +#define R_PCH_ACPI_GPE0a_EN 0x28 // General Purpose Event
> 0a Enables
> +#define S_PCH_ACPI_GPE0a_EN 4
> +#define B_PCH_ACPI_GPE0a_EN_CORE_GPIO 0xFF000000 // CORE
> GPIO Enable
> +#define B_PCH_ACPI_GPE0a_EN_SUS_GPIO 0x00FF0000 // SUS GPIO
> Enable
> +#define B_PCH_ACPI_GPE0a_EN_PME_B0 BIT13 // Power
> Management Event Bus 0 Enable
> +#define B_PCH_ACPI_GPE0a_EN_BATLOW BIT10 // Battery Low
> Enable
> +#define B_PCH_ACPI_GPE0a_EN_PCI_EXP BIT9 // PCI Express
> Enable
> +#define B_PCH_ACPI_GPE0a_EN_SWGPE BIT2 // Software GPE
> Enable
> +#define B_PCH_ACPI_GPE0a_EN_HOT_PLUG BIT1 // Hot Plug Enable
> +#define N_PCH_ACPI_GPE0a_EN_PME_B0 13
> +#define N_PCH_ACPI_GPE0a_EN_BATLOW 10
> +#define N_PCH_ACPI_GPE0a_EN_PCI_EXP 9
> +#define N_PCH_ACPI_GPE0a_EN_SWGPE 2
> +#define N_PCH_ACPI_GPE0a_EN_HOT_PLUG 1
> +
> +#define R_PCH_SMI_EN 0x30 // SMI Control and Enable
> +#define S_PCH_SMI_EN 4
> +#define B_PCH_SMI_EN_LEGACY_USB3 BIT31 // Legacy USB 3
> Enable
> +#define B_PCH_SMI_EN_INTEL_USB2 BIT18 // Intel USB 2 Enable
> +#define B_PCH_SMI_EN_LEGACY_USB2 BIT17 // Legacy USB 2
> Enable
> +#define B_PCH_SMI_EN_PERIODIC BIT14 // Periodic Enable
> +#define B_PCH_SMI_EN_TCO BIT13 // TCO Enable
> +#define B_PCH_SMI_EN_BIOS_RLS BIT7 // BIOS RLS
> +#define B_PCH_SMI_EN_SWSMI_TMR BIT6 // Software SMI
> Timer Enable
> +#define B_PCH_SMI_EN_APMC BIT5 // APMC Enable
> +#define B_PCH_SMI_EN_ON_SLP_EN BIT4 // SMI On Sleep
> Enable
> +#define B_PCH_SMI_EN_BIOS BIT2 // BIOS Enable
> +#define B_PCH_SMI_EN_EOS BIT1 // End of SMI
> +#define B_PCH_SMI_EN_GBL_SMI BIT0 // Global SMI Enable
> +#define N_PCH_SMI_EN_LEGACY_USB3 31
> +#define N_PCH_SMI_EN_GPIO_UNLOCK 27
> +#define N_PCH_SMI_EN_INTEL_USB2 18
> +#define N_PCH_SMI_EN_LEGACY_USB2 17
> +#define N_PCH_SMI_EN_PERIODIC 14
> +#define N_PCH_SMI_EN_TCO 13
> +#define N_PCH_SMI_EN_BIOS_RLS 7
> +#define N_PCH_SMI_EN_SWSMI_TMR 6
> +#define N_PCH_SMI_EN_APMC 5
> +#define N_PCH_SMI_EN_ON_SLP_EN 4
> +#define N_PCH_SMI_EN_BIOS 2
> +#define N_PCH_SMI_EN_EOS 1
> +#define N_PCH_SMI_EN_GBL_SMI 0
> +
> +#define R_PCH_SMI_STS 0x34 // SMI Status Register
> +#define S_PCH_SMI_STS 4
> +#define B_PCH_SMI_STS_LEGACY_USB3 BIT31 // Legacy USB 3
> Status
> +#define B_PCH_SMI_STS_GUNIT_SMI BIT29 // GUNIT SMI Status
> +#define B_PCH_SMI_STS_PUNIT_SMI BIT28 // PUNIT SMI Status
> +#define B_PCH_SMI_STS_SPI BIT26 // SPI SMI Status
> +#define B_PCH_SMI_STS_PCI_EXP BIT20 // PCI Express SMI
> Status
> +#define B_PCH_SMI_STS_INTEL_USB2 BIT18 // Intel USB 2 Status
> +#define B_PCH_SMI_STS_LEGACY_USB2 BIT17 // Legacy USB 2
> Status
> +#define N_PCH_SMI_STS_TCO 13
> +#define B_PCH_SMI_STS_SMBUS BIT16 // SMBUS SMI Status
> +#define B_PCH_SMI_STS_ILB BIT15 // ILB SMI Status
> +#define B_PCH_SMI_STS_PERIODIC BIT14 // Periodic Status
> +#define B_PCH_SMI_STS_TCO BIT13 // TCO Status
> +#define B_PCH_SMI_STS_GPE0 BIT9 // GPE0 Status
> +#define B_PCH_SMI_STS_PM1_STS_REG BIT8 // PM1 Status
> Register
> +#define B_PCH_SMI_STS_SWSMI_TMR BIT6 // Software SMI
> Timer Status
> +#define B_PCH_SMI_STS_APM BIT5 // APM Status
> +#define B_PCH_SMI_STS_ON_SLP_EN BIT4 // SMI On Sleep
> Enable Status
> +#define B_PCH_SMI_STS_BIOS BIT2 // BIOS Status
> +#define N_PCH_SMI_STS_LEGACY_USB3 31
> +#define N_PCH_SMI_STS_SPI 26
> +#define N_PCH_SMI_STS_PCI_EXP 20
> +#define N_PCH_SMI_STS_INTEL_USB2 18
> +#define N_PCH_SMI_STS_LEGACY_USB2 17
> +#define N_PCH_SMI_STS_SMBUS 16
> +#define N_PCH_SMI_STS_ILB 15
> +#define N_PCH_SMI_STS_PERIODIC 14
> +#define N_PCH_SMI_STS_TCO 13
> +#define N_PCH_SMI_STS_GPE0 9
> +#define N_PCH_SMI_STS_PM1_STS_REG 8
> +#define N_PCH_SMI_STS_SWSMI_TMR 6
> +#define N_PCH_SMI_STS_APM 5
> +#define N_PCH_SMI_STS_ON_SLP_EN 4
> +#define N_PCH_SMI_STS_BIOS 2
> +
> +#define R_PCH_ALT_GP_SMI_EN 0x38 // Alternate GPI SMI
> Enable
> +#define S_PCH_ALT_GP_SMI_EN 2
> +#define B_PCH_ALT_GP_SMI_EN_CORE_GPIO 0xFF00 // SUS GPIO
> SMI Enable
> +#define B_PCH_ALT_GP_SMI_EN_SUS_GPIO 0x00FF // CORE GPIO
> SMI Enable
> +
> +#define R_PCH_ALT_GP_SMI_STS 0x3A // Alternate GPI SMI
> Status
> +#define S_PCH_ALT_GP_SMI_STS 2
> +#define B_PCH_ALT_GP_SMI_STS_CORE_GPIO 0xFF00 // SUS GPIO
> SMI Status
> +#define B_PCH_ALT_GP_SMI_STS_SUS_GPIO 0x00FF // CORE GPIO
> SMI Status
> +
> +#define R_PCH_UPRWC 0x3C // USB Per-Port Registers
> Write Control
> +#define S_PCH_UPRWC 2
> +#define B_PCH_UPRWC_WR_EN_SMI_STS BIT8 // Write Enable
> Status
> +#define B_PCH_UPRWC_WR_EN BIT1 // USB Per-Port Registers
> Write Enable
> +#define B_PCH_UPRWC_WR_EN_SMI_EN BIT0 // Write Enable SMI
> Enable
> +
> +#define R_PCH_ACPI_GPE_CNTL 0x40 // General Purpose Event
> Control
> +#define B_PCH_ACPI_GPE_CNTL_SWGPE_CTRL BIT17 // Software GPE
> Control
> +#define B_PCH_ACPI_GPE_CNTL_PCIE3_SCI_EN BIT3
> +#define B_PCH_ACPI_GPE_CNTL_PCIE2_SCI_EN BIT2
> +#define B_PCH_ACPI_GPE_CNTL_PCIE1_SCI_EN BIT1
> +#define B_PCH_ACPI_GPE_CNTL_PCIE0_SCI_EN BIT0
> +
> +#define R_PCH_ACPI_PM2_CNT 0x50 // PM2a Control Block
> +#define B_PCH_ACPI_PM2_CNT_ARB_DIS BIT0 // Scratchpad Bit
> +
> +#define R_PCH_TCO_RLD 0x60 // TCO Reload
> +#define B_PCH_TCO_RLD_VAL 0x3FF // TCO Timer Count Value
> +
> +#define R_PCH_TCO_STS 0x64 // TCO Timer Status
> +#define S_PCH_TCO_STS 4
> +#define B_PCH_TCO_STS_SECOND_TO BIT17 // Second Timeout
> Status
> +#define B_PCH_TCO_STS_TIMEOUT BIT3 // Timeout
> +#define N_PCH_TCO_STS_TIMEOUT 3
> +
> +#define R_PCH_TCO_CNT 0x68 // TCO Control
> +#define S_PCH_TCO_CNT 2
> +#define B_PCH_TCO_CNT_OS_POLICY (BIT21 | BIT20) // OS Policy
> +#define B_PCH_TCO_CNT_LOCK BIT12 // TCO Enable Lock
> +#define B_PCH_TCO_CNT_TMR_HLT BIT11 // TCO Timer Halt
> +
> +#define R_PCH_TCO_TMR 0x70 // TCO Timer
> +#define B_PCH_TCO_TMR_TCO_TRLD 0x3FF0000
> +
> +//
> +// PMC Memory Space Registers (PBASE)
> +//
> +#define R_PCH_PMC_PRSTS 0x00 // Power and Reset Status
> +#define B_PCH_PMC_PRSTS_PRODID 0xFF000000 // Power
> Management Controller Product ID
> +#define B_PCH_PMC_PRSTS_REVID 0x00FF0000 // Power
> Management Controller Revision ID
> +#define B_PCH_PMC_PRSTS_PM_WD_TMR BIT15 // PMC
> Watchdog Timer Status
> +#define B_PCH_PMC_PRSTS_CODE_COPIED_STS BIT11 // Patch
> Copied Over Status
> +#define B_PCH_PMC_PRSTS_CODE_LOAD_TO BIT9 // Patch Load
> Timeout Status
> +#define B_PCH_PMC_PRSTS_OP_STS BIT8 // PMC Operational
> Status
> +#define B_PCH_PMC_PRSTS_SEC_GBLRST_STS BIT7 // SEC Global
> Reset Status
> +#define B_PCH_PMC_PRSTS_SEC_WD_TMR_STS BIT6 // SEC
> Watchdog Timer Status
> +#define B_PCH_PMC_PRSTS_WOL_OVR_WK_STS BIT5 // Wake On
> LAN Override Wake Status
> +#define B_PCH_PMC_PRSTS_HOST_WAKE_STS BIT4 // PMC Host
> Wake Status
> +
> +#define R_PCH_PMC_PM_CFG 0x08 // Power Management
> Configuration
> +#define B_PCH_PMC_PM_CFG_SPS BIT5 // Shutdown Policy
> Select
> +#define B_PCH_PMC_PM_CFG_NO_REBOOT BIT4 // No Reboot
> Strap
> +#define B_PCH_PMC_PM_CFG_SX_ENT_TO_EN BIT3 // S1 / 3 / 4 / 5
> Entry Timeout Enable
> +#define B_PCH_PMC_PM_CFG_TIMING_T581 (BIT1 | BIT0) // Timing
> t581
> +
> +#define R_PCH_PMC_PM_STS 0x0C // Power Management
> Status
> +#define B_PCH_PMC_PM_STS_PMC_MSG_FULL BIT24 // PMC
> Message Full Status
> +#define B_PCH_PMC_PM_STS_PMC_MSG_4_FULL BIT23 // PMC 4
> Message Full Status
> +#define B_PCH_PMC_PM_STS_PMC_MSG_3_FULL BIT22 // PMC 3
> Message Full Status
> +#define B_PCH_PMC_PM_STS_PMC_MSG_2_FULL BIT21 // PMC 2
> Message Full Status
> +#define B_PCH_PMC_PM_STS_PMC_MSG_1_FULL BIT20 // PMC 1
> Message Full Status
> +#define B_PCH_PMC_PM_STS_CODE_REQ BIT8 // Patch Request
> Status
> +#define B_PCH_PMC_PM_STS_HPR_ENT_TO BIT2 // Host partition
> Reset Entry Timeout Status
> +#define B_PCH_PMC_PM_STS_SX_ENT_TO BIT1 // S3 / 4 / 5 Entry
> Timeout Status
> +
> +#define R_PCH_PMC_MTPMC 0x10 // Message to PMC
> +
> +#define R_PCH_PMC_GEN_PMCON_1 0x20 // General PM
> Configuration 1
> +#define B_PCH_PMC_GEN_PMCON_UART_EN BIT24 // UART Debug
> Port Enable
> +#define B_PCH_PMC_GEN_PMCON_DRAM_INIT BIT23 // DRAM
> Initialization Scratchpad Bit
> +#define B_PCH_PMC_GEN_PMCON_MEM_SR BIT21 // Memory
> Placed in Self-Refresh
> +#define B_PCH_PMC_GEN_PMCON_SRS BIT20 // System Reset
> Status
> +#define B_PCH_PMC_GEN_PMCON_CTS BIT19 // CPU Thermal
> Trip Status
> +#define B_PCH_PMC_GEN_PMCON_MIN_SLP_S4 BIT18 // Minimum
> SLP_S4# Assertion Width Violation Status
> +#define B_PCH_PMC_GEN_PMCON_PWROK_FLR BIT16 // PWROK
> Failure
> +#define B_PCH_PMC_GEN_PMCON_PME_B0_S5_DIS BIT15 // PME B0
> S5 Disable
> +#define B_PCH_PMC_GEN_PMCON_SUS_PWR_FLR BIT14 // SUS Well
> Power Failure
> +#define B_PCH_PMC_GEN_PMCON_WOL_ENABLE_OVERRIDE BIT13 //
> WOL Enable Override
> +#define B_PCH_PMC_GEN_PMCON_DISABLE_SX_STRETCH BIT12 //
> Disable SLP_X Scretching After SUS Well Power Up
> +#define B_PCH_PMC_GEN_PMCON_SLP_S3_MAW (BIT11 | BIT10) //
> SLP_S3# Minimum Assertion Width
> +#define V_PCH_PMC_GEN_PMCON_SLP_S3_MAW_60US 0x000 // 60
> micro seconds
> +#define V_PCH_PMC_GEN_PMCON_SLP_S3_MAW_1MS 0x400 // 1 milli
> second
> +#define V_PCH_PMC_GEN_PMCON_SLP_S3_MAW_50MS 0x800 // 50
> milli seconds
> +#define V_PCH_PMC_GEN_PMCON_SLP_S3_MAW_2S 0xC00 // 2
> seconds
> +#define B_PCH_PMC_GEN_PMCON_GEN_RST_STS BIT9 // General
> Reset Status
> +#define B_PCH_PMC_GEN_PMCON_RTC_RESERVED BIT8 // RTC
> Reserved
> +#define B_PCH_PMC_GEN_PMCON_SWSMI_RTSL (BIT7 | BIT6) //
> SWSMI Rate Select
> +#define V_PCH_PMC_GEN_PMCON_SWSMI_RTSL_64MS 0xC0 // 64ms
> +/- 4ms
> +#define V_PCH_PMC_GEN_PMCON_SWSMI_RTSL_32MS 0x80 // 32ms
> +/- 4ms
> +#define V_PCH_PMC_GEN_PMCON_SWSMI_RTSL_16MS 0x40 // 16ms
> +/- 4ms
> +#define V_PCH_PMC_GEN_PMCON_SWSMI_RTSL_1_5MS 0x00 //
> 1.5ms +/- 0.6ms
> +#define B_PCH_PMC_GEN_PMCON_SLP_S4_MAW (BIT5 | BIT4) //
> SLP_S4# Minimum Assertion Width
> +#define V_PCH_PMC_GEN_PMCON_SLP_S4_MAW_1S 0x30 // 1
> second
> +#define V_PCH_PMC_GEN_PMCON_SLP_S4_MAW_2S 0x20 // 2
> seconds
> +#define V_PCH_PMC_GEN_PMCON_SLP_S4_MAW_3S 0x10 // 3
> seconds
> +#define V_PCH_PMC_GEN_PMCON_SLP_S4_MAW_4S 0x00 // 4
> seconds
> +#define B_PCH_PMC_GEN_PMCON_SLP_S4_ASE BIT3 // SLP_S4#
> Assertion Scretch Enable
> +#define B_PCH_PMC_GEN_PMCON_RTC_PWR_STS BIT2 // RTC
> Power Status
> +#define B_PCH_PMC_GEN_PMCON_AFTERG3_EN BIT0 // After G3
> State Enable
> +
> +#define R_PCH_PMC_GEN_PMCON_2 0x24 // General PM
> Configuration 2
> +#define B_PCH_PMC_GEN_PMCON_LOCK_S4_STRET_LD BIT18 // SLP_S3
> / SLP_S4 Stretching Policy Lock-Down
> +#define B_PCH_PMC_GEN_PMCON_BIOS_PCI_EXP_EN BIT10 // BIOS
> PCI Express Enable
> +#define B_PCH_PMC_GEN_PMCON_PWRBTN_LVL BIT9 // Power
> Button Level
> +#define B_PCH_PMC_GEN_PMCON_SMI_LOCK BIT4 // SMI Lock
> +#define B_PCH_PMC_GEN_PMCON_PER_SMI_SEL (BIT1 | BIT0) //
> Period SMI Select
> +#define V_PCH_PMC_GEN_PMCON_PER_SMI_64S 0x0000 // 64
> seconds
> +#define V_PCH_PMC_GEN_PMCON_PER_SMI_32S 0x0001 // 32
> seconds
> +#define V_PCH_PMC_GEN_PMCON_PER_SMI_16S 0x0002 // 16
> seconds
> +#define V_PCH_PMC_GEN_PMCON_PER_SMI_8S 0x0003 // 8
> seconds
> +
> +#define R_PCH_PMC_MFPMC 0x28 // Message from PMC
> +
> +#define R_PCH_PMC_SEC_STS 0x2C // SEC Status
> +#define B_PCH_PMC_SEC_STS_SEC (BIT3 | BIT2 | BIT1 | BIT0) //
> SEC Exclusion Cause
> +
> +#define R_PCH_PMC_CRID 0x30 // Configured Revision ID
> +#define B_PCH_PMC_CRID_RID_SEL (BIT1 | BIT0) // Revision ID
> Select
> +
> +#define R_PCH_PMC_FUNC_DIS 0x34 // Function Disable
> Register
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7 BIT31 // LPSS2 I2C #7
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6 BIT30 // LPSS2 I2C #6
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5 BIT29 // LPSS2 I2C #5
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4 BIT28 // LPSS2 I2C #4
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3 BIT27 // LPSS2 I2C #3
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2 BIT26 // LPSS2 I2C #2
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1 BIT25 // LPSS2 I2C #1
> +#define B_PCH_PMC_FUNC_DIS_LPSS2_FUNC0 BIT24 // LPSS2 DMA
> Disable
> +#define B_PCH_PMC_FUNC_DIS_PCI_EX_FUNC3 BIT23 // PCI Express
> Function 3 Disable
> +#define B_PCH_PMC_FUNC_DIS_PCI_EX_FUNC2 BIT22 // PCI Express
> Function 2 Disable
> +#define B_PCH_PMC_FUNC_DIS_PCI_EX_FUNC1 BIT21 // PCI Express
> Function 1 Disable
> +#define B_PCH_PMC_FUNC_DIS_PCI_EX_FUNC0 BIT20 // PCI Express
> Function 0 Disable
> +#define N_PCH_PMC_FUNC_DIS_PCI_EX_FUNC0 20
> +#define B_PCH_PMC_FUNC_DIS_SEC BIT19 // SEC Disable
> +#define B_PCH_PMC_FUNC_DIS_USB BIT18 // USB Disable
> +#define B_PCH_PMC_FUNC_DIS_SATA BIT17 // SATA Disable
> +#define B_PCH_PMC_FUNC_DIS_USH BIT15 // USH (USB3)
> Disable
> +#define B_PCH_PMC_FUNC_DIS_OTG BIT14 // USB OTG Disable
> +#define B_PCH_PMC_FUNC_DIS_LPE BIT13 // LPE Disable
> +#define B_PCH_PMC_FUNC_DIS_AZALIA BIT12 // Azalia Disable
> +#define B_PCH_PMC_FUNC_DIS_MIPI BIT11 // MIPI-HSI Disable
> +#define B_PCH_PMC_FUNC_DIS_SDIO4 BIT11 // SCC SDIO #4
> (Device 23, eMMC4.5) Disable
> +#define B_PCH_PMC_FUNC_DIS_SDIO3 BIT10 // SCC SDIO #3
> (Device 18, SD Card) Disable
> +#define B_PCH_PMC_FUNC_DIS_SDIO2 BIT9 // SCC SDIO #2
> (Device 17, SDIO) Disable
> +#define B_PCH_PMC_FUNC_DIS_SDIO1 BIT8 // SCC SDIO #1
> (Device 16, eMMC) Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC7 BIT7 // LPSS1 Spare
> #2 Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC6 BIT6 // LPSS1 Spare
> #1 Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC5 BIT5 // LPSS1 SPI
> Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC4 BIT4 // LPSS1 HS-
> UART #2 Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC3 BIT3 // LPSS1 HS-
> UART #1 Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC2 BIT2 // LPSS1 PWM
> #2 Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC1 BIT1 // LPSS1 PWM
> #1 Disable
> +#define B_PCH_PMC_FUNC_DIS_LPSS1_FUNC0 BIT0 // LPSS1 DMA
> Disable
> +
> +#define R_PCH_PMC_FUNC_DIS2 0x38 // Function Disable 2
> Register
> +#define B_PCH_PMC_FUNC_DIS2_USH_SS_PHY BIT2 // USH Super
> Speed PHY Disable
> +#define B_PCH_PMC_FUNC_DIS2_OTG_SS_PHY BIT1 // OTG Super
> Speed PHY Disable
> +#define B_PCH_PMC_FUNC_DIS2_SMBUS BIT0 // SMBus Disable
> +
> +#define R_PCH_PMC_PMIR 0x48 // Extended Test Mode
> Register (ETR)
> +#define B_PCH_PMC_PMIR_CF9LOCK BIT31 // CF9h Lockdown
> +#define B_PCH_PMC_PMIR_LTR_DEF BIT22 // LTR Default
> +#define B_PCH_PMC_PMIR_IGNORE_HPET BIT21 // Ignore HPET
> Disable Check Before Going to S0i2
> +#define B_PCH_PMC_PMIR_CF9GR BIT20 // CF9h Global Reset
> +
> +#define R_PCH_PMC_VLT 0x50 // Voltage Detect Register
> +#define B_PCH_PMC_VLT_FUSES 0xFF // Voltage Detect Fuses
> +
> +#define R_PCH_PMC_GPI_ROUT 0x58 // GPI Rout
> +#define B_PCH_PMC_GPI_ROUT_0 (BIT1 | BIT0)
> +#define B_PCH_PMC_GPI_ROUT_1 (BIT3 | BIT2)
> +#define B_PCH_PMC_GPI_ROUT_2 (BIT5 | BIT4)
> +#define B_PCH_PMC_GPI_ROUT_3 (BIT7 | BIT6)
> +#define B_PCH_PMC_GPI_ROUT_4 (BIT9 | BIT8)
> +#define B_PCH_PMC_GPI_ROUT_5 (BIT11 | BIT10)
> +#define B_PCH_PMC_GPI_ROUT_6 (BIT13 | BIT12)
> +#define B_PCH_PMC_GPI_ROUT_7 (BIT15 | BIT14)
> +#define B_PCH_PMC_GPI_ROUT_8 (BIT17 | BIT16)
> +#define B_PCH_PMC_GPI_ROUT_9 (BIT19 | BIT18)
> +#define B_PCH_PMC_GPI_ROUT_10 (BIT21 | BIT20)
> +#define B_PCH_PMC_GPI_ROUT_11 (BIT23 | BIT22)
> +#define B_PCH_PMC_GPI_ROUT_12 (BIT25 | BIT24)
> +#define B_PCH_PMC_GPI_ROUT_13 (BIT27 | BIT26)
> +#define B_PCH_PMC_GPI_ROUT_14 (BIT29 | BIT28)
> +#define B_PCH_PMC_GPI_ROUT_15 (BIT31 | BIT30)
> +
> +#define R_PCH_PMC_PCC0 0x60 // Platform Clock Control 0
> +#define B_PCH_PMC_PCC0_CLK_FREQ BIT2 // Clock Frequency
> +#define B_PCH_PMC_PCC0_CLK_CTL (BIT1 | BIT0) // Clock Gating
> +
> +#define R_PCH_PMC_PCC1 0x64 // Platform Clock Control 1
> +#define B_PCH_PMC_PCC1_CLK_FREQ BIT2 // Clock Frequency
> +#define B_PCH_PMC_PCC1_CLK_CTL (BIT1 | BIT0) // Clock Gating
> +
> +#define R_PCH_PMC_PCC2 0x68 // Platform Clock Control 2
> +#define B_PCH_PMC_PCC2_CLK_FREQ BIT2 // Clock Frequency
> +#define B_PCH_PMC_PCC2_CLK_CTL (BIT1 | BIT0) // Clock Gating
> +
> +#define R_PCH_PMC_PCC3 0x6C // Platform Clock Control 3
> +#define B_PCH_PMC_PCC3_CLK_FREQ BIT2 // Clock Frequency
> +#define B_PCH_PMC_PCC3_CLK_CTL (BIT1 | BIT0) // Clock Gating
> +
> +#define R_PCH_PMC_PCC4 0x70 // Platform Clock Control 4
> +#define B_PCH_PMC_PCC4_CLK_FREQ BIT2 // Clock Frequency
> +#define B_PCH_PMC_PCC4_CLK_CTL (BIT1 | BIT0) // Clock Gating
> +
> +#define R_PCH_PMC_PCC5 0x74 // Platform Clock Control 5
> +#define B_PCH_PMC_PCC5_CLK_FREQ BIT2 // Clock Frequency
> +#define B_PCH_PMC_PCC5_CLK_CTL (BIT1 | BIT0) // Clock Gating
> +
> +#define R_PCH_PMC_S0IR_TMR 0x80 // S0I Ready Residency
> Timer
> +#define B_PCH_PMC_S0IR_TMR_RTIME 0xFFFFFFFF // Time Spent
> in S0I Ready State
> +
> +#define R_PCH_PMC_S0I1_TMR 0x84 // S0I1 Ready Residency
> Timer
> +#define B_PCH_PMC_S0I1_TMR_RTIME 0xFFFFFFFF // Time Spent
> in S0I1 Ready State
> +
> +#define R_PCH_PMC_S0I2_TMR 0x88 // S0I2 Ready Residency
> Timer
> +#define B_PCH_PMC_S0I2_TMR_RTIME 0xFFFFFFFF // Time Spent
> in S0I2 Ready State
> +
> +#define R_PCH_PMC_S0I3_TMR 0x8C // S0I3 Ready Residency
> Timer
> +#define B_PCH_PMC_S0I3_TMR_RTIME 0xFFFFFFFF // Time Spent
> in S0I3 Ready State
> +
> +#define R_PCH_PMC_S0_TMR 0x90 // S0 Residency Timer
> +#define B_PCH_PMC_S0_TMR_RTIME 0xFFFFFFFF // Time Spent
> in S0 State
> +
> +#define R_PCH_PMC_PSS 0x98 // Power Island Power Status
> +#define B_PCH_PMC_PSS_PG_STS 0x3FFFF // Power Gate Status
> of All Power Islands
> +#define B_PCH_PMC_PSS_PG_STS_USB_SUS BIT17 // USB SUS
> +#define B_PCH_PMC_PSS_PG_STS_USB BIT16 // USB
> +#define B_PCH_PMC_PSS_PG_STS_OTG_VCCACLK BIT15 // OTG
> VCCACLK
> +#define B_PCH_PMC_PSS_PG_STS_OTG VCCA BIT14 // OTG VCCA
> +#define B_PCH_PMC_PSS_PG_STS_OTG_VCCS BIT13 // OTG VCCS
> +#define B_PCH_PMC_PSS_PG_STS_OTG_CTL BIT12 // OTG Control
> +#define B_PCH_PMC_PSS_PG_STS_USH_VCCA BIT11 // USH VCCA
> +#define B_PCH_PMC_PSS_PG_STS_USH_VCCS BIT10 // USH VCCS
> +#define B_PCH_PMC_PSS_PG_STS_USH_SUS BIT9 // USH SUS
> +#define B_PCH_PMC_PSS_PG_STS_USH_CTL BIT8 // USH Control
> +#define B_PCH_PMC_PSS_PG_STS_DFX BIT7 // DFX
> +#define B_PCH_PMC_PSS_PG_STS_LPE BIT6 // LPE Audio
> +#define B_PCH_PMC_PSS_PG_STS_LPSS BIT5 // LPSS
> +#define B_PCH_PMC_PSS_PG_STS_PCIE BIT4 // PCIe
> +#define B_PCH_PMC_PSS_PG_STS_HDA BIT2 // HDA
> +#define B_PCH_PMC_PSS_PG_STS_SATA BIT1 // SATA
> +
> +#define R_PCH_PMC_D3_STS_0 0xA0 // D3 Status 0
> +#define B_PCH_PMC_D3_STS_0_LPSS1F7 BIT31 // LPSS 1 Function 7
> +#define B_PCH_PMC_D3_STS_0_LPSS1F6 BIT30 // LPSS 1 Function 6
> +#define B_PCH_PMC_D3_STS_0_LPSS1F5 BIT29 // LPSS 1 Function 5
> +#define B_PCH_PMC_D3_STS_0_LPSS1F4 BIT28 // LPSS 1 Function 4
> +#define B_PCH_PMC_D3_STS_0_LPSS1F3 BIT27 // LPSS 1 Function 3
> +#define B_PCH_PMC_D3_STS_0_LPSS1F2 BIT26 // LPSS 1 Function 2
> +#define B_PCH_PMC_D3_STS_0_LPSS1F1 BIT25 // LPSS 1 Function 1
> +#define B_PCH_PMC_D3_STS_0_LPSS1F0 BIT24 // LPSS 1 Function 0
> +#define B_PCH_PMC_D3_STS_0_PCIEF3 BIT23 // PCIe Function 3
> +#define B_PCH_PMC_D3_STS_0_PCIEF2 BIT22 // PCIe Function 2
> +#define B_PCH_PMC_D3_STS_0_PCIEF1 BIT21 // PCIe Function 1
> +#define B_PCH_PMC_D3_STS_0_PCIEF0 BIT20 // PCIe Function 0
> +#define B_PCH_PMC_D3_STS_0_USB BIT18 // USB
> +#define B_PCH_PMC_D3_STS_0_SATA BIT17 // SATA
> +#define B_PCH_PMC_D3_STS_0_USH BIT15 // USH
> +#define B_PCH_PMC_D3_STS_0_OTG BIT14 // OTG
> +#define B_PCH_PMC_D3_STS_0_LPE BIT13 // LPE
> +#define B_PCH_PMC_D3_STS_0_HDA BIT12 // HDA
> +#define B_PCH_PMC_D3_STS_0_MIPI BIT11 // MIPI-HSI
> +#define B_PCH_PMC_D3_STS_0_SCCF2 BIT10 // SCC Function 2
> +#define B_PCH_PMC_D3_STS_0_SCCF1 BIT9 // SCC Function 1
> +#define B_PCH_PMC_D3_STS_0_SCCF0 BIT8 // SCC Function 0
> +#define B_PCH_PMC_D3_STS_0_LPSS0F7 BIT7 // LPSS 0 Function 7
> +#define B_PCH_PMC_D3_STS_0_LPSS0F6 BIT6 // LPSS 0 Function 6
> +#define B_PCH_PMC_D3_STS_0_LPSS0F5 BIT5 // LPSS 0 Function 5
> +#define B_PCH_PMC_D3_STS_0_LPSS0F4 BIT4 // LPSS 0 Function 4
> +#define B_PCH_PMC_D3_STS_0_LPSS0F3 BIT3 // LPSS 0 Function 3
> +#define B_PCH_PMC_D3_STS_0_LPSS0F2 BIT2 // LPSS 0 Function 2
> +#define B_PCH_PMC_D3_STS_0_LPSS0F1 BIT1 // LPSS 0 Function 1
> +#define B_PCH_PMC_D3_STS_0_LPSS0F0 BIT0 // LPSS 0 Function 0
> +
> +#define R_PCH_PMC_D3_STS_1 0xA4 // D3 Status 1
> +#define B_PCH_PMC_D3_STS_1_DFX BIT3 // DFX
> +#define B_PCH_PMC_D3_STS_1_OTG_SS BIT2 // OTG SS
> +#define B_PCH_PMC_D3_STS_1_USH_SS BIT1 // USH SS
> +#define B_PCH_PMC_D3_STS_1_SMB BIT0 // SMBus
> +#define R_PCH_PMC_D3_STDBY_STS_0 0xA8 // D3 Standby Status
> 0
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F7 BIT31 // LPSS 1
> Function 7
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F6 BIT30 // LPSS 1
> Function 6
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F5 BIT29 // LPSS 1
> Function 5
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F4 BIT28 // LPSS 1
> Function 4
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F3 BIT27 // LPSS 1
> Function 3
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F2 BIT26 // LPSS 1
> Function 2
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F1 BIT25 // LPSS 1
> Function 1
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS1F0 BIT24 // LPSS 1
> Function 0
> +#define B_PCH_PMC_D3_STDBY_STS_0_PCIEF3 BIT23 // PCIe Function
> 3
> +#define B_PCH_PMC_D3_STDBY_STS_0_PCIEF2 BIT22 // PCIe Function
> 2
> +#define B_PCH_PMC_D3_STDBY_STS_0_PCIEF1 BIT21 // PCIe Function
> 1
> +#define B_PCH_PMC_D3_STDBY_STS_0_PCIEF0 BIT20 // PCIe Function
> 0
> +#define B_PCH_PMC_D3_STDBY_STS_0_USB BIT18 // USB
> +#define B_PCH_PMC_D3_STDBY_STS_0_SATA BIT17 // SATA
> +#define B_PCH_PMC_D3_STDBY_STS_0_USH BIT15 // USH
> +#define B_PCH_PMC_D3_STDBY_STS_0_OTG BIT14 // OTG
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPE BIT13 // LPE
> +#define B_PCH_PMC_D3_STDBY_STS_0_HDA BIT12 // HDA
> +#define B_PCH_PMC_D3_STDBY_STS_0_MIPI BIT11 // MIPI-HSI
> +#define B_PCH_PMC_D3_STDBY_STS_0_SCCF2 BIT10 // SCC Function
> 2
> +#define B_PCH_PMC_D3_STDBY_STS_0_SCCF1 BIT9 // SCC Function 1
> +#define B_PCH_PMC_D3_STDBY_STS_0_SCCF0 BIT8 // SCC Function 0
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F7 BIT7 // LPSS 0
> Function 7
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F6 BIT6 // LPSS 0
> Function 6
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F5 BIT5 // LPSS 0
> Function 5
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F4 BIT4 // LPSS 0
> Function 4
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F3 BIT3 // LPSS 0
> Function 3
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F2 BIT2 // LPSS 0
> Function 2
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F1 BIT1 // LPSS 0
> Function 1
> +#define B_PCH_PMC_D3_STDBY_STS_0_LPSS0F0 BIT0 // LPSS 0
> Function 0
> +
> +#define R_PCH_PMC_D3_STDBY_STS_1 0xAC // D3 Standby Status
> 1
> +#define B_PCH_PMC_D3_STDBY_STS_1_DFX BIT3 // DFX
> +#define B_PCH_PMC_D3_STDBY_STS_1_OTG_SS BIT2 // OTG SS
> +#define B_PCH_PMC_D3_STDBY_STS_1_USH_SS BIT1 // USH SS
> +#define B_PCH_PMC_D3_STDBY_STS_1_SMB BIT0 // SMBus
> +
> +#define R_PCH_PMC_MTPMC1 0xB0 // Message to PMC 1
> +
> +#define R_PCH_PMC_MTPMC2 0xB4 // Message to PMC 2
> +
> +#define R_PCH_PMC_MTPMC3 0xB8 // Message to PMC 3
> +
> +#define R_PCH_PMC_MTPMC4 0xBC // Message to PMC 4
> +
> +//
> +// IO Memory Space Registers (IOBASE)
> +//
> +#define R_PCH_CFIO_PAD_CONF0 0x00 // CFIO PAD_CONF0
> +#define R_PCH_CFIO_PAD_CONF1 0x04 // CFIO PAD_CONF1
> +#define R_PCH_CFIO_PAD_VAL 0x08 // CFIO PAD_VAL
> +#define R_PCH_CFIO_PAD_DFT 0x0C // CFIO PAD_CFT
> +
> +//
> +// GPIO Register Offsets from GBASE
> +//
> +#define R_PCH_GPIO_SC_USE_SEL 0x00 // GPIO South Usage
> Select [31:0]
> +#define R_PCH_GPIO_SC_IO_SEL 0x04 // GPIO South Input /
> Output Select [31:0]
> +#define R_PCH_GPIO_SC_LVL 0x08 // GPIO South Level for
> Input or Output [31:0]
> +
> +#define R_PCH_GPIO_SC_TPE 0x0C // GPIO South Trigger
> Positive Edge Enable [31:0]
> +#define R_PCH_GPIO_SC_TNE 0x10 // GPIO South Trigger
> Negative Edge Enable [31:0]
> +#define R_PCH_GPIO_SC_TS 0x14 // GPIO South Trigger Status
> [31:0]
> +
> +#define R_PCH_GPIO_SC_USE_SEL2 0x20 // GPIO South Usage
> Select 2 [63:32]
> +#define R_PCH_GPIO_SC_IO_SEL2 0x24 // GPIO South Input /
> Output Select 2 [63:32]
> +#define R_PCH_GPIO_SC_LVL2 0x28 // GPIO South Level for
> Input or Output 2 [63:32]
> +
> +#define R_PCH_GPIO_SC_TPE2 0x2C // GPIO South Trigger
> Positive Edge Enable 2 [63:32]
> +#define R_PCH_GPIO_SC_TNE2 0x30 // GPIO South Trigger
> Negative Edge Enable 2 [63:32]
> +#define R_PCH_GPIO_SC_TS2 0x34 // GPIO South Trigger
> Status 2 [63:32]
> +
> +#define R_PCH_GPIO_SC_USE_SEL3 0x40 // GPIO South Usage
> Select 3 [95:64]
> +#define R_PCH_GPIO_SC_IO_SEL3 0x44 // GPIO South Input /
> Output Select 3 [95:64]
> +#define R_PCH_GPIO_SC_LVL3 0x48 // GPIO South Level for
> Input or Output 3 [95:64]
> +
> +#define R_PCH_GPIO_SC_TPE3 0x4C // GPIO South Trigger
> Positive Edge Enable 3 [95:64]
> +#define R_PCH_GPIO_SC_TNE3 0x50 // GPIO South Trigger
> Negative Edge Enable 3 [95:64]
> +#define R_PCH_GPIO_SC_TS3 0x54 // GPIO South Trigger
> Status 3 [95:64]
> +
> +#define R_PCH_GPIO_SC_USE_SEL4 0x60 // GPIO South Usage
> Select 4 [127:96]
> +#define R_PCH_GPIO_SC_IO_SEL4 0x64 // GPIO South Input /
> Output Select 4 [127:96]
> +#define R_PCH_GPIO_SC_LVL4 0x68 // GPIO South Level for
> Input or Output 4 [127:96]
> +
> +#define R_PCH_GPIO_SC_TPE4 0x6C // GPIO South Trigger
> Positive Edge Enable 4 [127:96]
> +#define R_PCH_GPIO_SC_TNE4 0x70 // GPIO South Trigger
> Negative Edge Enable 4 [127:96]
> +#define R_PCH_GPIO_SC_TS4 0x74 // GPIO South Trigger
> Status 4 [127:96]
> +
> +#define R_PCH_GPIO_SUS_USE_SEL 0x80 // GPIO Suspend Use
> Select [31:0]
> +#define R_PCH_GPIO_SUS_IO_SEL 0x84 // GPIO Suspend Input /
> Output Select [31:0]
> +#define R_PCH_GPIO_SUS_LVL 0x88 // GPIO Suspend Level for
> Input or Output [31:0]
> +
> +#define R_PCH_GPIO_SUS_TPE 0x8C // GPIO Suspend Trigger
> Positive Edge Enable [31:0]
> +#define R_PCH_GPIO_SUS_TNE 0x90 // GPIO Suspend Trigger
> Negative Edge Enable [31:0]
> +#define R_PCH_GPIO_SUS_TS 0x94 // GPIO Suspend Trigger
> Status [31:0]
> +
> +#define R_PCH_GPIO_SUS_WAKE_EN 0x98 // GPIO Suspend
> Wake Enable [31:0]
> +
> +#define R_PCH_GPIO_SUS_USE_SEL2 0x100 // GPIO Suspend Use
> Select 2 [42:32]
> +#define R_PCH_GPIO_SUS_IO_SEL2 0x104 // GPIO Suspend Input
> / Output Select 2 [42:32]
> +#define R_PCH_GPIO_SUS_LVL2 0x108 // GPIO Suspend Level
> for Input or Output 2 [42:32]
> +
> +#define R_PCH_GPIO_SUS_TPE2 0x10C // GPIO Suspend Trigger
> Positive Edge Enable [42:32]
> +#define R_PCH_GPIO_SUS_TNE2 0x110 // GPIO Suspend Trigger
> Negative Edge Enable [42:32]
> +#define R_PCH_GPIO_SUS_TS2 0x114 // GPIO Suspend Trigger
> Status [42:32]
> +
> +#define R_PCH_GPIO_SUS_WAKE_EN2 0x118 // GPIO Suspend
> Wake Enable 2 [42:32]
> +
> +//
> +// Fixed IO Space
> +//
> +
> +//
> +// Processor Interface Registers
> +//
> +#define R_PCH_NMI_SC 0x61 // NMI Status and Control
> +#define B_PCH_NMI_SC_SERR_NMI_STS BIT7 // SERR# NMI Status
> +#define B_PCH_NMI_SC_IOCHK_NMI_STS BIT6 // IOCHK NMI
> Status
> +#define B_PCH_NMI_SC_TMR2_OUT_STS BIT5 // Timer Counter 2
> Status
> +#define B_PCH_NMI_SC_REF_TOGGLE BIT4 // Refresh Cycle
> toggle Status
> +#define B_PCH_NMI_SC_IOCHK_NMI_EN BIT3 // IOCHK NMI
> Enable
> +#define B_PCH_NMI_SC_PCI_SERR_EN BIT2 // SERR# NMI Enable
> +#define B_PCH_NMI_SC_SPKR_DAT_EN BIT1 // Speaker Data
> Enable
> +#define B_PCH_NMI_SC_TIM_CNT2_EN BIT0 // Timer Counter 2
> Enable
> +
> +#define R_PCH_NMI_EN 0x70 // NMI Enable and Real Time
> Clock Index, Co-function with R_PCH_RTC_INDEX
> +#define B_PCH_NMI_EN_NMI_EN BIT7 // NMI Enable, must
> preserve this bit first before writing to IO port 0x70
> +
> +//
> +// RTC Registers
> +//
> +#define R_PCH_RTC_INDEX 0x70 // NMI Enable and Real Time
> Clock Index, Co-function with R_PCH_NMI_EN
> +#define R_PCH_RTC_TARGET 0x71 // Real-Time Clock Target
> Register
> +#define R_PCH_RTC_EXT_INDEX 0x72 // Extended RAM Index
> Register
> +#define R_PCH_RTC_EXT_TARGET 0x73 // Extended RAM Target
> Register
> +#define R_PCH_RTC_INDEX2 0x74 // Real-Time Clock Index
> Register
> +#define R_PCH_RTC_TARGET2 0x75 // Real-Time Clock Target
> Register
> +#define R_PCH_RTC_EXT_INDEX2 0x76 // Extended RAM Index
> Register
> +#define R_PCH_RTC_EXT_TARGET2 0x77 // Extended RAM Target
> Register
> +
> +#define R_PCH_RTC_SECONDS 0x00 // Seconds, Range 0..59
> +#define R_PCH_RTC_SECONDSALARM 0x01 // Seconds Alarm,
> Range 0..59
> +#define R_PCH_RTC_MINUTES 0x02 // Minutes, Range 0..59
> +#define R_PCH_RTC_MINUTESALARM 0x03 // Minutes Alarm,
> Range 0..59
> +#define R_PCH_RTC_HOURS 0x04 // Hours, Range 1..12 or
> 0..23 Bit 7 is AM/PM
> +#define R_PCH_RTC_HOURSALARM 0x05 // Hours Alarm, Range
> 1..12 or 0..23 Bit 7 is AM/PM
> +#define R_PCH_RTC_DAYOFWEEK 0x06 // Day of Week, Range
> 1..7
> +#define R_PCH_RTC_DAYOFMONTH 0x07 // Day of Month,
> Range 1..31
> +#define R_PCH_RTC_MONTH 0x08 // Month, Range 1..12
> +#define R_PCH_RTC_YEAR 0x09 // Year, Range 0..99
> +
> +#define R_PCH_RTC_REGISTERA 0x0A // RTC Register A
> +#define B_PCH_RTC_REGISTERA_UIP BIT7 // Update In Progress
> +#define B_PCH_RTC_REGISTERA_DV (BIT6 | BIT5 | BIT4) //
> Division Chain Select
> +#define V_PCH_RTC_REGISTERA_DV_NORM_OP 0x20 // Normal
> Operation
> +#define V_PCH_RTC_REGISTERA_DV_BYP_5 0x30 // Bypass 5 Stages
> (Test mode only)
> +#define V_PCH_RTC_REGISTERA_DV_BYP_10 0x40 // Bypass 10
> Stages (Test mode only)
> +#define V_PCH_RTC_REGISTERA_DV_BYP_15 0x50 // Bypass 15
> Stages (Test mode only)
> +#define V_PCH_RTC_REGISTERA_DV_DIV_RST1 0x60 // Divider Reset
> +#define V_PCH_RTC_REGISTERA_DV_DIV_RST2 0x70 // Divider Reset
> +#define B_PCH_RTC_REGISTERA_RS (BIT3 | BIT2 | BIT1 | BIT0) //
> Rate Select
> +#define V_PCH_RTC_REGISTERA_RS_INT_NV_TGL 0x00 // Interrupt
> Never Toggles
> +#define V_PCH_RTC_REGISTERA_RS_3P906MS1 0x01 // 3.90625 ms
> +#define V_PCH_RTC_REGISTERA_RS_7P812MS1 0x02 // 7.8125 ms
> +#define V_PCH_RTC_REGISTERA_RS_122P0US 0x03 // 122.070 us
> +#define V_PCH_RTC_REGISTERA_RS_244P1US 0x04 // 244.141 us
> +#define V_PCH_RTC_REGISTERA_RS_488P2US 0x05 // 488.281 us
> +#define V_PCH_RTC_REGISTERA_RS_976P5US 0x06 // 976.5625 us
> +#define V_PCH_RTC_REGISTERA_RS_1P953MS 0x07 // 1.953125 ms
> +#define V_PCH_RTC_REGISTERA_RS_3P906MS 0x08 // 3.90625 ms
> +#define V_PCH_RTC_REGISTERA_RS_7P812MS 0x09 // 7.8125 ms
> +#define V_PCH_RTC_REGISTERA_RS_15P62MS 0x0A // 15.625 ms
> +#define V_PCH_RTC_REGISTERA_RS_31P25MS 0x0B // 31.25 ms
> +#define V_PCH_RTC_REGISTERA_RS_62P5MS 0x0C // 62.5 ms
> +#define V_PCH_RTC_REGISTERA_RS_125MS 0x0D // 125 ms
> +#define V_PCH_RTC_REGISTERA_RS_250MS 0x0E // 250 ms
> +#define V_PCH_RTC_REGISTERA_RS_500MS 0x0F // 500 ms
> +
> +#define R_PCH_RTC_REGISTERB 0x0B // RTC Register B
> +#define B_PCH_RTC_REGISTERB_SET BIT7 // Update Cycle Inhibit
> 1: Stop auto update, begin set value; 0: Update cycle occurs
> +#define B_PCH_RTC_REGISTERB_PIE BIT6 // Periodic Interrupt
> Enable
> +#define B_PCH_RTC_REGISTERB_AIE BIT5 // Alarm Interrupt
> Enable
> +#define B_PCH_RTC_REGISTERB_UIE BIT4 // Update-ended
> Interrupt Enable
> +#define B_PCH_RTC_REGISTERB_SQWE BIT3 // Square Wave
> Enable (Not implemented)
> +#define B_PCH_RTC_REGISTERB_DM BIT2 // Data Mode 1: Binary;
> 0:BCD
> +#define B_PCH_RTC_REGISTERB_HF BIT1 // Hour Format 1: 24
> mode; 0: 12 mode.
> +#define B_PCH_RTC_REGISTERB_DSE BIT0 // Daylight Savings
> Enable (Not Implemented)
> +
> +#define R_PCH_RTC_REGISTERC 0x0C // RTC Register C
> +#define B_PCH_RTC_REGISTERC_IRQF BIT7 // Interrupt Request
> Flag
> +#define B_PCH_RTC_REGISTERC_PF BIT6 // Periodic Interrupt Flag
> +#define B_PCH_RTC_REGISTERC_AF BIT5 // Alarm Flag
> +#define B_PCH_RTC_REGISTERC_UF BIT4 // Update-ended Flag
> +#define B_PCH_RTC_REGISTERC_RESERVED (BIT3 | BIT2 | BIT1 | BIT0)
> +
> +#define R_PCH_RTC_REGISTERD 0x0D // RTC Register D
> +#define B_PCH_RTC_REGISTERD_VRT BIT7 // Valid RAM and Time
> Bit
> +#define B_PCH_RTC_REGISTERD_RESERVED BIT6
> +#define B_PCH_RTC_REGISTERD_DA 0x3F // Date Alarm
> +
> +#define B_PCH_RTC_CENTURY 0x32 // Century Data
> +
> +//
> +// APM Registers
> +//
> +#define R_PCH_APM_CNT 0xB2 // Advanced Power
> Management Control Port
> +#define R_PCH_APM_STS 0xB3 // Advanced Power
> Management Status Port
> +
> +//
> +// INIT Register
> +//
> +#define R_PCH_PORT92 0x92
> +#define B_PCH_PORT92_ALT_A20_GATE BIT1 // Alternate A20
> Gate
> +#define B_PCH_PORT92_INIT_NOW BIT0 // Init Now
> +
> +//
> +// PCU UART
> +//
> +#define R_PCH_COM1_BASE 0x3F8 // COM1 IO BASE
> +
> +//
> +// Reset Control Register
> +//
> +#define R_PCH_RST_CNT 0xCF9 // Reset Control
> +#define B_PCH_RST_CNT_FULL_RST BIT3
> +#define B_PCH_RST_CNT_RST_CPU BIT2
> +#define B_PCH_RST_CNT_SYS_RST BIT1
> +#define V_PCH_RST_CNT_FULLRESET 0x0E
> +#define V_PCH_RST_CNT_HARDRESET 0x06
> +#define V_PCH_RST_CNT_SOFTRESET 0x04 // Not supported by
> VLV
> +#define V_PCH_RST_CNT_HARDSTARTSTATE 0x02
> +#define V_PCH_RST_CNT_SOFTSTARTSTATE 0x00
> +
> +//
> +// Fixed Memory Region
> +//
> +
> +//
> +// IO APIC Registers
> +//
> +#define R_PCH_IO_APIC_INDEX 0xFEC00000 // IOAPIC Index
> Register, 8bit
> +#define R_PCH_IO_APIC_WINDOW 0xFEC00010 // IOAPIC
> Window Register, 32bit
> +#define R_PCH_IO_APIC_EOI 0xFEC00040 // IOAPIC EOI
> Register, 8bit
> +
> +#define R_PCH_IO_APIC_ID 0x00 // Identification
> +#define B_PCH_IO_APIC_ID_AID (BIT27 | BIT26 | BIT25 | BIT24)
> // APIC Identification
> +
> +#define R_PCH_IO_APIC_VS 0x01 // Version
> +#define B_PCH_IO_APIC_VS_MRE 0xFF0000 // Maximum
> Redirection Entries
> +#define B_PCH_IO_APIC_VS_PRQ BIT15 // Pin Assertion Register
> Supported
> +#define B_PCH_IO_APIC_VS_VS 0xFF // Version
> +
> +//
> +// HPET Registers
> +//
> +#define R_PCH_PCH_HPET 0xFED00000 // HPET Base Address
> +
> +#define R_PCH_PCH_HPET_GCID 0x00 // HPET General
> Capabilities and ID, 64bit
> +#define B_PCH_PCH_HPET_GCID_CTP 0xFFFFFFFF00000000 //
> Counter Tick Period
> +#define B_PCH_PCH_HPET_GCID_VID 0xFFFF0000 // Vendor ID
> +#define B_PCH_PCH_HPET_GCID_LRC BIT15 // Legacy Rout
> Capable
> +#define B_PCH_PCH_HPET_GCID_CS BIT13 // Counter Size
> +#define B_PCH_PCH_HPET_GCID_NT 0x1F00 // Number of Timers
> +#define B_PCH_PCH_HPET_GCID_RID 0xFF // Revision ID
> +#define N_PCH_HPET_ADDR_ASEL 12
> +
> +#define R_PCH_PCH_HPET_GCFG 0x10 // HPET General
> Configuration
> +#define B_PCH_PCH_HPET_GCFG_LRE BIT1 // Legacy Rout Enable
> +#define B_PCH_PCH_HPET_GCFG_EN BIT0 // Overall Enable
> +
> +#define R_PCH_PCH_HPET_GIS 0x20 // HPET General Interrupt
> Status
> +#define B_PCH_PCH_HPET_GIS_T2 BIT2 // Timer 2 Status
> +#define B_PCH_PCH_HPET_GIS_T1 BIT1 // Timer 1 Status
> +#define B_PCH_PCH_HPET_GIS_T0 BIT0 // Timer 0 Status
> +
> +#define R_PCH_PCH_HPET_MCV 0xF0 // HPET Main Counter
> Value, 64bit
> +
> +#define R_PCH_PCH_HPET_T0C 0x100 // HPET Timer 0 Config
> and Capabilities
> +#define R_PCH_PCH_HPET_T0CV_L 0x108 // HPET Timer 0 Lower
> Comparator Value
> +#define R_PCH_PCH_HPET_T0CV_H 0x10C // HPET Timer 0 Upper
> Comparator Value
> +
> +#define R_PCH_PCH_HPET_T1C 0x120 // HPET Timer 1 Config
> and Capabilities
> +#define R_PCH_PCH_HPET_T1CV 0x128 // HPET Timer 1
> Comparator Value
> +
> +#define R_PCH_PCH_HPET_T2C 0x140 // HPET Timer 2 Config
> and Capabilities
> +#define R_PCH_PCH_HPET_T2CV 0x148 // HPET Timer 2
> Comparator Value
> +
> +#define B_PCH_PCH_HPET_TXC_IRC 0xFFFFFFFF00000000 //
> Interrupt Rout Capability
> +#define B_PCH_PCH_HPET_TXC_FID BIT15 // FSB Interrupt
> Delivery
> +#define B_PCH_PCH_HPET_TXC_FE BIT14 // FSB Enable
> +#define B_PCH_PCH_HPET_TXC_IR 0x3E00 // Interrupt Rout
> +#define B_PCH_PCH_HPET_TXC_T32M BIT8 // Timer 32-bit Mode
> +#define B_PCH_PCH_HPET_TXC_TVS BIT6 // Timer Value Set
> +#define B_PCH_PCH_HPET_TXC_TS BIT5 // Timer Size
> +#define B_PCH_PCH_HPET_TXC_PIC BIT4 // Periodic Interrupt
> Capable
> +#define B_PCH_PCH_HPET_TXC_TYP BIT3 // Timer Type
> +#define B_PCH_PCH_HPET_TXC_IE BIT2 // Interrupt Enable
> +#define B_PCH_PCH_HPET_TXC_IT BIT1 // Timer Interrupt Type
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsRcrb.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsRcrb.h
> new file mode 100644
> index 0000000000..7cc599cd6a
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsRcrb.h
> @@ -0,0 +1,48 @@
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsRcrb.h
> +
> + @brief
> + Register names for VLV Chipset Configuration Registers
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_RCRB_H_
> +#define _PCH_REGS_RCRB_H_
> +
> +///
> +/// Chipset Configuration Registers (Memory space)
> +/// RCBA
> +///
> +#define R_PCH_RCRB_GCS 0x00 // General Control and Status
> +#define B_PCH_RCRB_GCS_BBSIZE (BIT30 | BIT29) // Boot Block Size
> +#define B_PCH_RCRB_GCS_BBS (BIT11 | BIT10) // Boot BIOS Straps
> +#define V_PCH_RCRB_GCS_BBS_SPI (3 << 10) // Boot BIOS strapped
> to SPI
> +#define V_PCH_RCRB_GCS_BBS_LPC (0 << 10) // Boot BIOS strapped
> to LPC
> +#define B_PCH_RCRB_GCS_TS BIT1 // Top Swap
> +#define B_PCH_RCRB_GCS_BILD BIT0 // BIOS Interface Lock-Down
> +
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSata.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSata.h
> new file mode 100644
> index 0000000000..a326e178fe
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSata.h
> @@ -0,0 +1,245 @@
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsSata.h
> +
> + @brief
> + Register names for VLV SATA controllers
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_SATA_H_
> +#define _PCH_REGS_SATA_H_
> +
> +///
> +/// VLV SATA Message Bus
> +///
> +#define PCH_SATA_PHY_PORT_ID 0xA3 // SATA PHY Port ID
> +#define PCH_SATA_PHY_MMIO_READ_OPCODE 0x00 // CUnit to SATA
> PHY MMIO Read Opcode
> +#define PCH_SATA_PHY_MMIO_WRITE_OPCODE 0x01 // CUnit to SATA
> PHY MMIO Write Opcode
> +
> +///
> +/// SATA Controller Registers (D19:F0)
> +///
> +#define PCI_DEVICE_NUMBER_PCH_SATA 19
> +#define PCI_FUNCTION_NUMBER_PCH_SATA 0
> +
> +#define R_PCH_SATA_ID 0x00 // Identifiers
> +#define B_PCH_SATA_ID_DID 0xFFFF0000 // Device ID
> +#define B_PCH_SATA_ID_VID 0x0000FFFF // Vendor ID
> +#define V_PCH_SATA_VENDOR_ID V_PCH_INTEL_VENDOR_ID
> +#define V_PCH_SATA_DEVICE_ID_D_IDE 0x0F20 // Desktop IDE Mode
> (Ports 0 and 1)
> +#define V_PCH_SATA_DEVICE_ID_D_AHCI 0x0F22 // Desktop AHCI
> Mode (Ports 0 and 1)
> +#define V_PCH_SATA_DEVICE_ID_D_RAID 0x2822 // Desktop RAID
> 0/1/5/10 Mode, based on D19:F0:9Ch[7]
> +
> +#define V_PCH_SATA_DEVICE_ID_M_IDE 0x0F21 // Mobile IDE Mode
> (Ports 0 and 1)
> +#define V_PCH_SATA_DEVICE_ID_M_AHCI 0x0F23 // Mobile AHCI
> Mode (Ports 0 and 1)
> +#define V_PCH_SATA_DEVICE_ID_M_RAID 0x282A // Mobile RAID
> 0/1/5/10 Mode, based on D19:F0:9Ch[7]
> +
> +#define R_PCH_SATA_COMMAND 0x04 // Command
> +#define B_PCH_SATA_COMMAND_INT_DIS BIT10 // Interrupt Disable
> +#define B_PCH_SATA_COMMAND_FBE BIT9 // Fast Back-to-back
> Enable
> +#define B_PCH_SATA_COMMAND_SERR_EN BIT8 // SERR# Enable
> +#define B_PCH_SATA_COMMAND_WCC BIT7 // Wait Cycle Enable
> +#define B_PCH_SATA_COMMAND_PER BIT6 // Parity Error
> Response Enable
> +#define B_PCH_SATA_COMMAND_VPS BIT5 // VGA Palette
> Snooping Enable
> +#define B_PCH_SATA_COMMAND_PMWE BIT4 // Memory Write
> and Invalidate Enable
> +#define B_PCH_SATA_COMMAND_SCE BIT3 // Special Cycle Enable
> +#define B_PCH_SATA_COMMAND_BME BIT2 // Bus Master Enable
> +#define B_PCH_SATA_COMMAND_MSE BIT1 // Memory Space
> Enable
> +#define B_PCH_SATA_COMMAND_IOSE BIT0 // I/O Space Enable
> +
> +#define R_PCH_SATA_PCISTS 0x06 // Device Status
> +#define B_PCH_SATA_PCISTS_DPE BIT15 // Detected Parity Error
> +#define B_PCH_SATA_PCISTS_SSE BIT14 // Signaled System Error
> +#define B_PCH_SATA_PCISTS_RMA BIT13 // Received Master-Abort
> Status
> +#define B_PCH_SATA_PCISTS_RTA BIT12 // Received Target-Abort
> Status
> +#define B_PCH_SATA_PCISTS_STA BIT11 // Signaled Target-Abort
> Status
> +#define B_PCH_SATA_PCISTS_DEV_STS_MASK (BIT10 | BIT9) // DEVSEL#
> Timing Status
> +#define B_PCH_SATA_PCISTS_DPED BIT8 // Master Data Parity Error
> Detected
> +#define B_PCH_SATA_PCISTS_CAP_LIST BIT4 // Capabilities List
> +#define B_PCH_SATA_PCISTS_ITNS BIT3 // Interrupt Status
> +
> +#define R_PCH_SATA_RID 0x08 // Revision ID (8 bits)
> +
> +#define R_PCH_SATA_PI_REGISTER 0x09 // Programming Interface
> (8 bits)
> +#define B_PCH_SATA_PI_REGISTER_SNC BIT3 // Secondary Mode
> Native Capable
> +#define B_PCH_SATA_PI_REGISTER_SNE BIT2 // Secondary Mode
> Native Enable
> +#define B_PCH_SATA_PI_REGISTER_PNC BIT1 // Primary Mode Native
> Capable
> +#define B_PCH_SATA_PI_REGISTER_PNE BIT0 // Primary Mode Native
> Enable
> +
> +#define R_PCH_SATA_CC 0x0A // Class Code
> +#define B_PCH_SATA_CC_BCC 0xFF00 // Base Class Code
> +#define B_PCH_SATA_CC_SCC 0x00FF // Sub Class Code
> +#define V_PCH_SATA_CC_SCC_IDE 0x01
> +#define V_PCH_SATA_CC_SCC_AHCI 0x06
> +#define V_PCH_SATA_CC_SCC_RAID 0x04
> +
> +#define R_PCH_SATA_CLS 0x0C // Cache Line Size (8 bits)
> +#define B_PCH_SATA_CLS 0xFF
> +
> +#define R_PCH_SATA_MLT 0x0D // Master Latency Timer (8 bits)
> +#define B_PCH_SATA_MLT 0xFF
> +
> +#define R_PCH_SATA_HTYPE 0x0E // Header Type
> +#define B_PCH_SATA_HTYPE_MFD BIT7 // Multi-function Device
> +#define B_PCH_SATA_HTYPE_HL 0x7F // Header Layout
> +
> +#define R_PCH_SATA_PCMD_BAR 0x10 // Primary Command Block
> Base Address
> +#define B_PCH_SATA_PCMD_BAR_BA 0x0000FFF8 // Base Address
> +#define B_PCH_SATA_PCMD_BAR_RTE BIT0 // Resource Type
> Indicator
> +
> +#define R_PCH_SATA_PCTL_BAR 0x14 // Primary Control Block
> Base Address
> +#define B_PCH_SATA_PCTL_BAR_BA 0x0000FFFC // Base Address
> +#define B_PCH_SATA_PCTL_BAR_RTE BIT0 // Resource Type
> Indicator
> +
> +#define R_PCH_SATA_SCMD_BAR 0x18 // Secondary Command
> Block Base Address
> +#define B_PCH_SATA_SCMD_BAR_BA 0x0000FFF8 // Base Address
> +#define B_PCH_SATA_SCMD_BAR_RTE BIT0 // Resource Type
> Indicator
> +
> +#define R_PCH_SATA_SCTL_BAR 0x1C // Secondary Control Block
> Base Address
> +#define B_PCH_SATA_SCTL_BAR_BA 0x0000FFFC // Base Address
> +#define B_PCH_SATA_SCTL_BAR_RTE BIT0 // Resource Type
> Indicator
> +
> +#define R_PCH_SATA_LBAR 0x20 // Legacy IDE Base Address /
> AHCI Index Data Pair Base Address
> +#define B_PCH_SATA_LBAR_BA 0x0000FFE0 // Base Address
> +#define B_PCH_SATA_LBAR_BA4 BIT4 // Base Address 4
> +#define B_PCH_SATA_LBAR_RTE BIT0 // Resource Type Indicator
> +
> +#define R_PCH_SATA_SIDPBA 0x24 // Serial ATA Index Data Pair
> Base Address
> +#define R_PCH_SATA_ABAR 0x24 // AHCI Base Address
> +#define B_PCH_SATA_ABAR_BA 0xFFFFF800 // AHCI Memory Base
> Address (When CC.SCC not equal 0x01)
> +#define V_PCH_SATA_ABAR_LENGTH 0x800 // AHCI Memory Length
> (When CC.SCC not equal 0x01)
> +#define N_PCH_SATA_ABAR_ALIGNMENT 11 // AHCI Base Address
> Alignment (When CC.SCC not equal 0x01)
> +#define B_PCH_SATA_SIDPBA_BA 0x0000FFF0 // Serial ATA Index
> Data Pair IO Base Address (When CC.SCC equal 0x01)
> +#define V_PCH_SATA_SIDPBA_LENGTH 0x10 // Serial ATA Index Data
> Pair IO Length (When CC.SCC equal 0x01)
> +#define N_PCH_SATA_SIDPBA_ALIGNMENT 4 // Serial ATA Index
> Data Pair Base Address Alignment (When CC.SCC not equal 0x01)
> +#define B_PCH_SATA_ABAR_PF BIT3 // Prefetchable
> +#define B_PCH_SATA_ABAR_TP (BIT2 | BIT1) // Type
> +#define B_PCH_SATA_ABAR_RTE BIT0 // Resource Type Indicator
> +
> +#define R_PCH_SATA_SS 0x2C // Sub System Identifiers
> +#define B_PCH_SATA_SS_SSID 0xFFFF0000 // Subsystem ID
> +#define B_PCH_SATA_SS_SSVID 0x0000FFFF // Subsystem Vendor
> ID
> +
> +#define R_PCH_SATA_AHCI_CAP_PTR 0x34 // Capabilities Pointer (8
> bits)
> +#define B_PCH_SATA_AHCI_CAP_PTR 0xFF
> +
> +#define R_PCH_SATA_INTR 0x3C // Interrupt Information
> +#define B_PCH_SATA_INTR_IPIN 0xFFFF0000 // Interrupt Pin
> +#define B_PCH_SATA_INTR_ILINE 0x0000FFFF // Interrupt Line
> +
> +#define R_PCH_SATA_PMCS 0x74 // PCI Power Management
> Control and Status
> +#define B_PCH_SATA_PMCS_PMES BIT15 // PME Status
> +#define B_PCH_SATA_PMCS_PMEE BIT8 // PME Enable
> +#define B_PCH_SATA_PMCS_NSFRST BIT3 // No Soft Reset
> +#define V_PCH_SATA_PMCS_NSFRST_1 0x01
> +#define V_PCH_SATA_PMCS_NSFRST_0 0x00
> +#define B_PCH_SATA_PMCS_PS (BIT1 | BIT0) // Power State
> +#define V_PCH_SATA_PMCS_PS_3 0x03
> +#define V_PCH_SATA_PMCS_PS_0 0x00
> +
> +#define R_PCH_SATA_MAP 0x90 // Port Mapping Register
> +#define B_PCH_SATA_MAP_SPD (BIT14 | BIT13 | BIT12 | BIT11 |
> BIT10 | BIT9 | BIT8) // SATA Port Disable
> +#define B_PCH_SATA_PORT6_DISABLED BIT14
> +#define B_PCH_SATA_PORT5_DISABLED BIT13
> +#define B_PCH_SATA_PORT4_DISABLED BIT12
> +#define B_PCH_SATA_PORT3_DISABLED BIT11
> +#define B_PCH_SATA_PORT2_DISABLED BIT10
> +#define B_PCH_SATA_PORT1_DISABLED BIT9
> +#define B_PCH_SATA_PORT0_DISABLED BIT8
> +#define B_PCH_SATA_MAP_SMS_MASK (BIT7 | BIT6) // SATA Mode
> Select
> +#define V_PCH_SATA_MAP_SMS_IDE 0x00
> +#define V_PCH_SATA_MAP_SMS_AHCI 0x40
> +#define V_PCH_SATA_MAP_SMS_RAID 0x80
> +#define B_PCH_SATA_PORT_TO_CONTROLLER_CFG BIT5 // SATA Port-to-
> Controller Configuration
> +
> +#define R_PCH_SATA_PCS 0x92 // Port Control and Status
> +#define S_PCH_SATA_PCS 0x2
> +#define B_PCH_SATA_PCS_OOB_RETRY BIT15 // OOB Retry Mode
> +#define B_PCH_SATA_PCS_PORT6_DET BIT14 // Port 6 Present
> +#define B_PCH_SATA_PCS_PORT5_DET BIT13 // Port 5 Present
> +#define B_PCH_SATA_PCS_PORT4_DET BIT12 // Port 4 Present
> +#define B_PCH_SATA_PCS_PORT3_DET BIT11 // Port 3 Present
> +#define B_PCH_SATA_PCS_PORT2_DET BIT10 // Port 2 Present
> +#define B_PCH_SATA_PCS_PORT1_DET BIT9 // Port 1 Present
> +#define B_PCH_SATA_PCS_PORT0_DET BIT8 // Port 0 Present
> +#define B_PCH_SATA_PCS_PORT5_EN BIT5 // Port 5 Enabled
> +#define B_PCH_SATA_PCS_PORT4_EN BIT4 // Port 4 Enabled
> +#define B_PCH_SATA_PCS_PORT3_EN BIT3 // Port 3 Enabled
> +#define B_PCH_SATA_PCS_PORT2_EN BIT2 // Port 2 Enabled
> +#define B_PCH_SATA_PCS_PORT1_EN BIT1 // Port 1 Enabled
> +#define B_PCH_SATA_PCS_PORT0_EN BIT0 // Port 0 Enabled
> +
> +#define R_PCH_SATA_AHCI_PI 0x0C // Ports Implemented
> +#define B_PCH_SATA_PORT_MASK 0x3F
> +#define B_PCH_SATA_PORT5_IMPLEMENTED BIT5 // Port 5
> Implemented
> +#define B_PCH_SATA_PORT4_IMPLEMENTED BIT4 // Port 4
> Implemented
> +#define B_PCH_SATA_PORT3_IMPLEMENTED BIT3 // Port 3
> Implemented
> +#define B_PCH_SATA_PORT2_IMPLEMENTED BIT2 // Port 2
> Implemented
> +#define B_PCH_SATA_PORT1_IMPLEMENTED BIT1 // Port 1
> Implemented
> +#define B_PCH_SATA_PORT0_IMPLEMENTED BIT0 // Port 0
> Implemented
> +
> +#define R_PCH_SATA_AHCI_P0SSTS 0x128 // Port 0 Serial ATA Status
> +#define R_PCH_SATA_AHCI_P1SSTS 0x1A8 // Port 1 Serial ATA Status
> +#define B_PCH_SATA_AHCI_PXSSTS_IPM 0x00000F00 // Interface
> Power Management
> +#define B_PCH_SATA_AHCI_PXSSTS_IPM_0 0x00000000
> +#define B_PCH_SATA_AHCI_PXSSTS_IPM_1 0x00000100
> +#define B_PCH_SATA_AHCI_PXSSTS_IPM_2 0x00000200
> +#define B_PCH_SATA_AHCI_PXSSTS_IPM_6 0x00000600
> +#define B_PCH_SATA_AHCI_PXSSTS_SPD 0x000000F0 // Current
> Interface Speed
> +#define B_PCH_SATA_AHCI_PXSSTS_SPD_0 0x00000000
> +#define B_PCH_SATA_AHCI_PXSSTS_SPD_1 0x00000010
> +#define B_PCH_SATA_AHCI_PXSSTS_SPD_2 0x00000020
> +#define B_PCH_SATA_AHCI_PXSSTS_SPD_3 0x00000030
> +#define B_PCH_SATA_AHCI_PXSSTS_DET 0x0000000F // Device
> Detection
> +#define B_PCH_SATA_AHCI_PXSSTS_DET_0 0x00000000
> +#define B_PCH_SATA_AHCI_PXSSTS_DET_1 0x00000001
> +#define B_PCH_SATA_AHCI_PXSSTS_DET_3 0x00000003
> +#define B_PCH_SATA_AHCI_PXSSTS_DET_4 0x00000004
> +
> +//
> +// Macros of VLV capabilities for SATA controller which are used by SATA
> controller driver
> +//
> +//
> +//
> +// Define the individual capabilities of each SATA controller
> +//
> +#define PCH_SATA_MAX_CONTROLLERS 1 // Max SATA controllers
> number supported
> +#define PCH_SATA_MAX_DEVICES 2 // Max SATA devices number
> of single SATA channel
> +#define PCH_IDE_MAX_CHANNELS 2 // Max IDE channels number
> of single SATA controller
> +#define PCH_IDE_MAX_DEVICES 2 // Max IDE devices number of
> single SATA channel
> +#define PCH_AHCI_MAX_PORTS 2 // Max number of SATA ports
> in VLV
> +#define PCH_IDE_MAX_PORTS 2 // Max number of IDE ports in
> VLV
> +
> +//
> +// GPIOS_14 SATA0GP is the SATA port 0 reset pin.
> +//
> +#define PCH_GPIO_SATA_PORT0_RESET 14
> +//
> +// GPIOS_15 SATA1GP is the SATA port 1 reset pin.
> +//
> +#define PCH_GPIO_SATA_PORT1_RESET 15
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsScc.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsScc.h
> new file mode 100644
> index 0000000000..a45c2358f6
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsScc.h
> @@ -0,0 +1,53 @@
> +/*++
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PchRegsScc.h
> +
> +Abstract:
> +
> + Register names for VLV SCC module.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +--*/
> +#ifndef _PCH_REGS_SCC_H_
> +#define _PCH_REGS_SCC_H_
> +
> +
> +//
> +// SCC Modules Registers
> +//
> +
> +//
> +// SCC SDIO Modules
> +// PCI Config Space Registers
> +//
> +#define PCI_DEVICE_NUMBER_PCH_SCC_SDIO_0 16
> +#define PCI_DEVICE_NUMBER_PCH_SCC_SDIO_1 17
> +#define PCI_DEVICE_NUMBER_PCH_SCC_SDIO_2 18
> +#define PCI_DEVICE_NUMBER_PCH_SCC_SDIO_3 23
> +
> +#define PCI_FUNCTION_NUMBER_PCH_SCC_SDIO 0
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSmbus.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSmbus.h
> new file mode 100644
> index 0000000000..dc858c244c
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSmbus.h
> @@ -0,0 +1,149 @@
> +/**
> +
> +Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsSmbus.h
> +
> + @brief
> + Register names for VLV Smbus Device.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_SMBUS_H_
> +#define _PCH_REGS_SMBUS_H_
> +
> +///
> +/// SMBus Controller Registers (D31:F3)
> +///
> +#define PCI_DEVICE_NUMBER_PCH_SMBUS 31
> +#define PCI_FUNCTION_NUMBER_PCH_SMBUS 3
> +
> +#define R_PCH_SMBUS_VENDOR_ID 0x00 // Vendor ID
> +#define V_PCH_SMBUS_VENDOR_ID V_PCH_INTEL_VENDOR_ID //
> Intel Vendor ID
> +
> +#define R_PCH_SMBUS_DEVICE_ID 0x02 // Device ID
> +#define V_PCH_SMBUS_DEVICE_ID 0x0F12
> +
> +#define R_PCH_SMBUS_PCICMD 0x04 // CMD register
> enables/disables, Memory/IO space access and interrupt
> +#define B_PCH_SMBUS_PCICMD_INTR_DIS BIT10 // Interrupt Disable
> +#define B_PCH_SMBUS_PCICMD_FBE BIT9 // FBE - reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_SERR_EN BIT8 // SERR Enable -
> reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_WCC BIT7 // Wait Cycle Control -
> reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_PER BIT6 // Parity Error - reserved
> as '0'
> +#define B_PCH_SMBUS_PCICMD_VPS BIT5 // VGA Palette Snoop -
> reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_PMWE BIT4 // Postable Memory
> Write Enable - reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_SCE BIT3 // Special Cycle Enable -
> reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_BME BIT2 // Bus Master Enable -
> reserved as '0'
> +#define B_PCH_SMBUS_PCICMD_MSE BIT1 // Memory Space Enable
> +#define B_PCH_SMBUS_PCICMD_IOSE BIT0 // I/O Space Enable
> +
> +#define R_PCH_SMBUS_BASE 0x20 // The I/O memory bar
> +#define B_PCH_SMBUS_BASE_BAR 0x0000FFE0 // Base Address
> +#define B_PCH_SMBUS_BASE_IOSI BIT0 // IO Space Indicator
> +
> +#define R_PCH_SMBUS_SVID 0x2C // Subsystem Vendor ID
> +#define B_PCH_SMBUS_SVID 0xFFFF // Subsystem Vendor ID
> +
> +//
> +// SMBus I/O Registers
> +//
> +#define R_PCH_SMBUS_HSTS 0x00 // Host Status Register R/W
> +#define B_PCH_SMBUS_HSTS_ALL 0xFF
> +#define B_PCH_SMBUS_BYTE_DONE_STS BIT7 // Byte Done Status
> +#define B_PCH_SMBUS_IUS BIT6 // In Use Status
> +#define B_PCH_SMBUS_SMBALERT_STS BIT5 // SMBUS Alert
> +#define B_PCH_SMBUS_FAIL BIT4 // Failed
> +#define B_PCH_SMBUS_BERR BIT3 // Bus Error
> +#define B_PCH_SMBUS_DERR BIT2 // Device Error
> +#define B_PCH_SMBUS_ERRORS (B_PCH_SMBUS_FAIL |
> B_PCH_SMBUS_BERR | B_PCH_SMBUS_DERR)
> +#define B_PCH_SMBUS_INTR BIT1 // Interrupt
> +#define B_PCH_SMBUS_HBSY BIT0 // Host Busy
> +
> +#define R_PCH_SMBUS_HCTL 0x02 // Host Control Register R/W
> +#define B_PCH_SMBUS_PEC_EN BIT7 // Packet Error Checking
> Enable
> +#define B_PCH_SMBUS_START BIT6 // Start
> +#define B_PCH_SMBUS_LAST_BYTE BIT5 // Last Byte
> +#define B_PCH_SMBUS_SMB_CMD 0x1C // SMB Command
> +#define V_PCH_SMBUS_SMB_CMD_BLOCK_PROCESS 0x1C // Block
> Process
> +#define V_PCH_SMBUS_SMB_CMD_IIC_READ 0x18 // I2C Read
> +#define V_PCH_SMBUS_SMB_CMD_BLOCK 0x14 // Block
> +#define V_PCH_SMBUS_SMB_CMD_PROCESS_CALL 0x10 // Process Call
> +#define V_PCH_SMBUS_SMB_CMD_WORD_DATA 0x0C // Word Data
> +#define V_PCH_SMBUS_SMB_CMD_BYTE_DATA 0x08 // Byte Data
> +#define V_PCH_SMBUS_SMB_CMD_BYTE 0x04 // Byte
> +#define V_PCH_SMBUS_SMB_CMD_QUICK 0x00 // Quick
> +#define B_PCH_SMBUS_KILL BIT1 // Kill
> +#define B_PCH_SMBUS_INTREN BIT0 // Interrupt Enable
> +
> +#define R_PCH_SMBUS_HCMD 0x03 // Host Command Register
> R/W
> +#define B_PCH_SMBUS_HCMD 0xFF // Command to be
> transmitted
> +
> +#define R_PCH_SMBUS_TSA 0x04 // Transmit Slave Address
> Register R/W
> +#define B_PCH_SMBUS_ADDRESS 0xFE // 7-bit address of the
> targeted slave
> +#define B_PCH_SMBUS_RW_SEL BIT0 // Direction of the host
> transfer, 1 = read, 0 = write
> +#define B_PCH_SMBUS_RW_SEL_READ 0x01 // Read
> +#define B_PCH_SMBUS_RW_SEL_WRITE 0x00 // Write
> +//
> +#define R_PCH_SMBUS_HD0 0x05 // Data 0 Register R/W
> +#define R_PCH_SMBUS_HD1 0x06 // Data 1 Register R/W
> +#define R_PCH_SMBUS_HBD 0x07 // Host Block Data Register
> R/W
> +#define R_PCH_SMBUS_PEC 0x08 // Packet Error Check Data
> Register R/W
> +
> +#define R_PCH_SMBUS_RSA 0x09 // Receive Slave Address
> Register R/W
> +#define B_PCH_SMBUS_SLAVE_ADDR 0x7F // TCO slave address
> (Not used, reserved)
> +
> +#define R_PCH_SMBUS_SD 0x0A // Receive Slave Data Register
> R/W
> +
> +#define R_PCH_SMBUS_AUXS 0x0C // Auxiliary Status Register
> R/WC
> +#define B_PCH_SMBUS_CRCE BIT0 // CRC Error
> +//
> +#define R_PCH_SMBUS_AUXC 0x0D // Auxiliary Control Register
> R/W
> +#define B_PCH_SMBUS_E32B BIT1 // Enable 32-byte Buffer
> +#define B_PCH_SMBUS_AAC BIT0 // Automatically Append CRC
> +
> +#define R_PCH_SMBUS_SMLC 0x0E // SMLINK Pin Control
> Register R/W
> +#define B_PCH_SMBUS_SMLINK_CLK_CTL BIT2 // Not supported
> +#define B_PCH_SMBUS_SMLINK1_CUR_STS BIT1 // Not supported
> +#define B_PCH_SMBUS_SMLINK0_CUR_STS BIT0 // Not supported
> +
> +
> +#define R_PCH_SMBUS_SMBC 0x0F // SMBus Pin Control Register
> R/W
> +#define B_PCH_SMBUS_SMBCLK_CTL BIT2 // SMBCLK Control
> +#define B_PCH_SMBUS_SMBDATA_CUR_STS BIT1 // SMBDATA Current
> Status
> +#define B_PCH_SMBUS_SMBCLK_CUR_STS BIT0 // SMBCLK Current
> Status
> +
> +#define R_PCH_SMBUS_SSTS 0x10 // Slave Status Register R/WC
> +#define B_PCH_SMBUS_HOST_NOTIFY_STS BIT0 // Host Notify Status
> +
> +#define R_PCH_SMBUS_SCMD 0x11 // Slave Command Register
> R/W
> +#define B_PCH_SMBUS_SMBALERT_DIS BIT2 // Not supported
> +#define B_PCH_SMBUS_HOST_NOTIFY_WKEN BIT1 // Host Notify Wake
> Enable
> +#define B_PCH_SMBUS_HOST_NOTIFY_INTREN BIT0 // Host Notify
> Interrupt Enable
> +
> +#define R_PCH_SMBUS_NDA 0x14 // Notify Device Address
> Register RO
> +#define B_PCH_SMBUS_DEVICE_ADDRESS 0xFE // Device Address
> +
> +#define R_PCH_SMBUS_NDLB 0x16 // Notify Data Low Byte
> Register RO
> +#define R_PCH_SMBUS_NDHB 0x17 // Notify Data High Byte
> Register RO
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSpi.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSpi.h
> new file mode 100644
> index 0000000000..bca7e4567e
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsSpi.h
> @@ -0,0 +1,119 @@
> +/**
> +
> +Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsSpi.h
> +
> + @brief
> + Register names for PCH SPI device.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_SPI_H_
> +#define _PCH_REGS_SPI_H_
> +
> +///
> +/// SPI Host Interface Registers
> +///
> +
> +#define R_PCH_SPI_HSFS 0x04 // Hardware Sequencing Flash
> Status Register (16bits)
> +#define B_PCH_SPI_HSFS_FLOCKDN BIT15 // Flash Configuration
> Lock-Down
> +#define B_PCH_SPI_HSFS_FDV BIT14 // Flash Descriptor Valid
> +#define B_PCH_SPI_HSFS_FDOPSS BIT13 // Flash Descriptor
> Override Pin-Strap Status
> +#define B_PCH_SPI_HSFS_SCIP BIT5 // SPI Cycle in Progress
> +#define B_PCH_SPI_HSFS_BERASE_MASK (BIT4 | BIT3) // Block /
> Sector Erase Size
> +#define V_PCH_SPI_HSFS_BERASE_256B 0x00 // Block/Sector = 256
> Bytes
> +#define V_PCH_SPI_HSFS_BERASE_4K 0x01 // Block/Sector = 4K
> Bytes
> +#define V_PCH_SPI_HSFS_BERASE_8K 0x10 // Block/Sector = 8K
> Bytes
> +#define V_PCH_SPI_HSFS_BERASE_64K 0x11 // Block/Sector = 64K
> Bytes
> +#define B_PCH_SPI_HSFS_AEL BIT2 // Access Error Log
> +#define B_PCH_SPI_HSFS_FCERR BIT1 // Flash Cycle Error
> +#define B_PCH_SPI_HSFS_FDONE BIT0 // Flash Cycle Done
> +
> +#define R_PCH_SPI_PR0 0x74 // Protected Region 0 Register
> +#define B_PCH_SPI_PR0_WPE BIT31 // Write Protection Enable
> +#define B_PCH_SPI_PR0_PRL_MASK 0x1FFF0000 // Protected Range
> Limit Mask, [28:16] here represents upper limit of address [24:12]
> +#define B_PCH_SPI_PR0_RPE BIT15 // Read Protection Enable
> +#define B_PCH_SPI_PR0_PRB_MASK 0x00001FFF // Protected Range
> Base Mask, [12:0] here represents base limit of address [24:12]
> +
> +#define R_PCH_SPI_PR1 0x78 // Protected Region 1 Register
> +#define B_PCH_SPI_PR1_WPE BIT31 // Write Protection Enable
> +#define B_PCH_SPI_PR1_PRL_MASK 0x1FFF0000 // Protected Range
> Limit Mask, [28:16] here represents upper limit of address [24:12]
> +#define B_PCH_SPI_PR1_RPE BIT15 // Read Protection Enable
> +#define B_PCH_SPI_PR1_PRB_MASK 0x00001FFF // Protected Range
> Base Mask, [12:0] here represents base limit of address [24:12]
> +
> +#define R_PCH_SPI_PREOP 0x94 // Prefix Opcode Configuration
> Register (16 bits)
> +#define B_PCH_SPI_PREOP1_MASK 0xFF00 // Prefix Opcode 1 Mask
> +#define B_PCH_SPI_PREOP0_MASK 0x00FF // Prefix Opcode 0 Mask
> +
> +#define R_PCH_SPI_OPTYPE 0x96 // Opcode Type Configuration
> +#define B_PCH_SPI_OPTYPE7_MASK (BIT15 | BIT14) // Opcode Type
> 7 Mask
> +#define B_PCH_SPI_OPTYPE6_MASK (BIT13 | BIT12) // Opcode Type
> 6 Mask
> +#define B_PCH_SPI_OPTYPE5_MASK (BIT11 | BIT10) // Opcode Type
> 5 Mask
> +#define B_PCH_SPI_OPTYPE4_MASK (BIT9 | BIT8) // Opcode Type 4
> Mask
> +#define B_PCH_SPI_OPTYPE3_MASK (BIT7 | BIT6) // Opcode Type 3
> Mask
> +#define B_PCH_SPI_OPTYPE2_MASK (BIT5 | BIT4) // Opcode Type 2
> Mask
> +#define B_PCH_SPI_OPTYPE1_MASK (BIT3 | BIT2) // Opcode Type 1
> Mask
> +#define B_PCH_SPI_OPTYPE0_MASK (BIT1 | BIT0) // Opcode Type 0
> Mask
> +#define V_PCH_SPI_OPTYPE_RDNOADDR 0x00 // Read cycle type
> without address
> +#define V_PCH_SPI_OPTYPE_WRNOADDR 0x01 // Write cycle type
> without address
> +#define V_PCH_SPI_OPTYPE_RDADDR 0x02 // Address required;
> Read cycle type
> +#define V_PCH_SPI_OPTYPE_WRADDR 0x03 // Address required;
> Write cycle type
> +
> +#define R_PCH_SPI_OPMENU0 0x98 // Opcode Menu
> Configuration 0 (32bits)
> +#define R_PCH_SPI_OPMENU1 0x9C // Opcode Menu
> Configuration 1 (32bits)
> +
> +#define R_PCH_SPI_IND_LOCK 0xA4 // Indvidual Lock
> +#define B_PCH_SPI_IND_LOCK_PR0 BIT2 // PR0 LockDown
> +
> +
> +#define R_PCH_SPI_FDOC 0xB0 // Flash Descriptor Observability
> Control Register (32 bits)
> +#define B_PCH_SPI_FDOC_FDSS_MASK (BIT14 | BIT13 | BIT12) //
> Flash Descriptor Section Select
> +#define V_PCH_SPI_FDOC_FDSS_FSDM 0x0000 // Flash Signature and
> Descriptor Map
> +#define V_PCH_SPI_FDOC_FDSS_COMP 0x1000 // Component
> +#define V_PCH_SPI_FDOC_FDSS_REGN 0x2000 // Region
> +#define V_PCH_SPI_FDOC_FDSS_MSTR 0x3000 // Master
> +#define V_PCH_SPI_FDOC_FDSS_VLVS 0x4000 // Soft Straps
> +#define B_PCH_SPI_FDOC_FDSI_MASK 0x0FFC // Flash Descriptor
> Section Index
> +
> +#define R_PCH_SPI_FDOD 0xB4 // Flash Descriptor Observability
> Data Register (32 bits)
> +
> +#define R_PCH_SPI_BCR 0xFC // BIOS Control Register
> +#define S_PCH_SPI_BCR 1
> +#define B_PCH_SPI_BCR_SMM_BWP BIT5 // SMM BIOS Write
> Protect Disable
> +#define B_PCH_SPI_BCR_SRC (BIT3 | BIT2) // SPI Read
> Configuration (SRC)
> +#define V_PCH_SPI_BCR_SRC_PREF_EN_CACHE_EN 0x08 // Prefetch
> Enable, Cache Enable
> +#define V_PCH_SPI_BCR_SRC_PREF_DIS_CACHE_DIS 0x04 // Prefetch
> Disable, Cache Disable
> +#define V_PCH_SPI_BCR_SRC_PREF_DIS_CACHE_EN 0x00 // Prefetch
> Disable, Cache Enable
> +#define B_PCH_SPI_BCR_BLE BIT1 // Lock Enable (LE)
> +#define B_PCH_SPI_BCR_BIOSWE BIT0 // Write Protect Disable
> (WPD)
> +#define N_PCH_SPI_BCR_BLE 1
> +#define N_PCH_SPI_BCR_BIOSWE 0
> +
> +//
> +// Flash Descriptor Base Address Region (FDBAR) from Flash Region 0
> +//
> +#define R_PCH_SPI_FDBAR_FLVALSIG 0x00 // Flash Valid Signature
> +#define V_PCH_SPI_FDBAR_FLVALSIG 0x0FF0A55A
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsUsb.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsUsb.h
> new file mode 100644
> index 0000000000..93b6419eb7
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/PchRegs/PchRegsUsb.h
> @@ -0,0 +1,92 @@
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchRegsUsb.h
> +
> + @brief
> + Register names for PCH USB devices.
> +
> + Conventions:
> +
> + - Prefixes:
> + Definitions beginning with "R_" are registers
> + Definitions beginning with "B_" are bits within registers
> + Definitions beginning with "V_" are meaningful values of bits within the
> registers
> + Definitions beginning with "S_" are register sizes
> + Definitions beginning with "N_" are the bit position
> + - In general, PCH registers are denoted by "_PCH_" in register names
> + - Registers / bits that are different between PCH generations are denoted
> by
> + "_PCH_<generation_name>_" in register/bit names. e.g., "_PCH_VLV_"
> + - Registers / bits that are different between SKUs are denoted by
> "_<SKU_name>"
> + at the end of the register/bit names
> + - Registers / bits of new devices introduced in a PCH generation will be just
> named
> + as "_PCH_" without <generation_name> inserted.
> +
> +**/
> +#ifndef _PCH_REGS_USB_H_
> +#define _PCH_REGS_USB_H_
> +
> +///
> +/// USB Definitions
> +///
> +
> +typedef enum {
> + PchEhci1 = 0,
> + PchEhciControllerMax
> +} PCH_USB20_CONTROLLER_TYPE;
> +
> +#define PCH_USB_MAX_PHYSICAL_PORTS 4 /// Max Physical
> Connector EHCI + XHCI, not counting virtual ports like USB-R.
> +#define PCH_EHCI_MAX_PORTS 4 /// Counting ports behind
> RMHs 8 from EHCI-1 and 6 from EHCI-2, not counting EHCI USB-R virtual ports.
> +#define PCH_HSIC_MAX_PORTS 2
> +#define PCH_XHCI_MAX_USB3_PORTS 1
> +
> +#define PCI_DEVICE_NUMBER_PCH_USB 29
> +#define PCI_FUNCTION_NUMBER_PCH_EHCI 0
> +
> +#define R_PCH_USB_VENDOR_ID 0x00 // Vendor ID
> +#define V_PCH_USB_VENDOR_ID V_PCH_INTEL_VENDOR_ID
> +
> +#define R_PCH_USB_DEVICE_ID 0x02 // Device ID
> +#define V_PCH_USB_DEVICE_ID_0 0x0F34 // EHCI#1
> +
> +#define R_PCH_EHCI_SVID 0x2C // USB2 Subsystem Vendor ID
> +#define B_PCH_EHCI_SVID 0xFFFF // USB2 Subsystem Vendor ID
> Mask
> +
> +#define R_PCH_EHCI_PWR_CNTL_STS 0x54 // Power Management
> Control / Status
> +#define B_PCH_EHCI_PWR_CNTL_STS_PME_STS BIT15 // PME Status
> +#define B_PCH_EHCI_PWR_CNTL_STS_DATASCL (BIT14 | BIT13) // Data
> Scale
> +#define B_PCH_EHCI_PWR_CNTL_STS_DATASEL (BIT12 | BIT11 | BIT10 |
> BIT9) // Data Select
> +#define B_PCH_EHCI_PWR_CNTL_STS_PME_EN BIT8 // Power Enable
> +#define B_PCH_EHCI_PWR_CNTL_STS_PWR_STS (BIT1 | BIT0) // Power
> State
> +#define V_PCH_EHCI_PWR_CNTL_STS_PWR_STS_D0 0 // D0 State
> +#define V_PCH_EHCI_PWR_CNTL_STS_PWR_STS_D3 (BIT1 | BIT0) // D3
> Hot State
> +
> +///
> +/// USB3 (XHCI) related definitions
> +///
> +#define PCI_DEVICE_NUMBER_PCH_XHCI 20
> +#define PCI_FUNCTION_NUMBER_PCH_XHCI 0
> +//
> +/////
> +///// XHCI PCI Config Space registers
> +/////
> +
> +#define R_PCH_XHCI_SVID 0x2C
> +#define B_PCH_XHCI_SVID 0xFFFF
> +
> +
> +#define R_PCH_XHCI_PWR_CNTL_STS 0x74
> +#define B_PCH_XHCI_PWR_CNTL_STS_PME_STS BIT15
> +#define B_PCH_XHCI_PWR_CNTL_STS_DATASCL (BIT14 | BIT13)
> +#define B_PCH_XHCI_PWR_CNTL_STS_DATASEL (BIT12 | BIT11 | BIT10 |
> BIT9)
> +#define B_PCH_XHCI_PWR_CNTL_STS_PME_EN BIT8
> +#define B_PCH_XHCI_PWR_CNTL_STS_PWR_STS (BIT1 | BIT0)
> +#define V_PCH_XHCI_PWR_CNTL_STS_PWR_STS_D3 (BIT1 | BIT0)
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchInit.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchInit.h
> new file mode 100644
> index 0000000000..c8aba9c5e6
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchInit.h
> @@ -0,0 +1,75 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchInit.h
> +
> + @brief
> + This file defines the PCH Init PPI
> +
> +**/
> +#ifndef _PCH_INIT_H_
> +#define _PCH_INIT_H_
> +
> +//
> +// Define the PCH Init PPI GUID
> +//
> +
> +
> +#include <Protocol/PchPlatformPolicy.h>
> +#define PCH_INIT_PPI_GUID \
> + { \
> + 0x9ea894a, 0xbe0d, 0x4230, 0xa0, 0x3, 0xed, 0xc6, 0x93, 0xb4, 0x8e, 0x95 \
> + }
> +extern EFI_GUID gPchInitPpiGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _PCH_INIT_PPI PCH_INIT_PPI;
> +
> +///
> +/// Data structure definitions
> +///
> +typedef enum _CPU_STRAP_OPERATION {
> + GetCpuStrapSetData,
> + SetCpuStrapSetData,
> + LockCpuStrapSetData
> +} CPU_STRAP_OPERATION;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PCH_USB_INIT) (
> + IN EFI_PEI_SERVICES **PeiServices
> + )
> +/**
> +
> + @brief
> + The function performing USB init in PEI phase. This could be used by USB
> recovery
> + or debug features that need USB initialization during PEI phase.
> + Note: Before executing this function, please be sure that
> PCH_INIT_PPI.Initialize
> + has been done and PchUsbPolicyPpi has been installed.
> +
> + @param[in] PeiServices General purpose services available to every
> PEIM
> +
> + @retval EFI_SUCCESS The function completed successfully
> + @retval Others All other error conditions encountered result in an
> ASSERT.
> +
> +**/
> +;
> +
> +///
> +/// PCH_INIT_PPI Structure Definition
> +///
> +struct _PCH_INIT_PPI {
> + PCH_USB_INIT UsbInit;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchPeiInit.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchPeiInit.h
> new file mode 100644
> index 0000000000..a9bbb3766c
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchPeiInit.h
> @@ -0,0 +1,34 @@
> +
> +/*++
> +
> +Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +Module Name:
> +
> + PchPeiInit.h
> +
> +Abstract:
> +
> +
> +--*/
> +
> +#ifndef _PCH_PEI_INIT_H_
> +#define _PCH_PEI_INIT_H_
> +
> +//
> +// Define the PCH PEI Init PPI GUID
> +//
> +#define PCH_PEI_INIT_PPI_GUID \
> + { \
> + 0xACB93B08, 0x5CDC, 0x4A8F, 0x93, 0xD4, 0x6, 0xE3, 0x42, 0xDF, 0x18,
> 0x2E \
> + }
> +
> +//
> +// Extern the GUID for PPI users.
> +//
> +extern EFI_GUID gPchPeiInitPpiGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchPlatformPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchPlatformPolicy.h
> new file mode 100644
> index 0000000000..b3b2f549cd
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchPlatformPolicy.h
> @@ -0,0 +1,161 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchPlatformPolicy.h
> +
> + @brief
> + PCH policy PPI produced by a platform driver specifying various
> + expected PCH settings. This PPI is consumed by the PCH PEI modules.
> +
> +**/
> +#ifndef PCH_PLATFORM_POLICY_H_
> +#define PCH_PLATFORM_POLICY_H_
> +//
> +// External include files do NOT need to be explicitly specified in real EDKII
> +// environment
> +//
> +
> +
> +#include "PchRegs.h"
> +
> +//
> +#define PCH_PLATFORM_POLICY_PPI_GUID \
> + { \
> + 0x15344673, 0xd365, 0x4be2, 0x85, 0x13, 0x14, 0x97, 0xcc, 0x7, 0x61, 0x1d
> \
> + }
> +
> +extern EFI_GUID gPchPlatformPolicyPpiGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _PCH_PLATFORM_POLICY_PPI PCH_PLATFORM_POLICY_PPI;
> +
> +///
> +/// PPI revision number
> +/// Any backwards compatible changes to this PPI will result in an update in
> the revision number
> +/// Major changes will require publication of a new PPI
> +///
> +/// Revision 1: Original version
> +///
> +#define PCH_PLATFORM_POLICY_PPI_REVISION_1 1
> +#define PCH_PLATFORM_POLICY_PPI_REVISION_2 2
> +#define PCH_PLATFORM_POLICY_PPI_REVISION_3 3
> +#define PCH_PLATFORM_POLICY_PPI_REVISION_4 4
> +#define PCH_PLATFORM_POLICY_PPI_REVISION_5 5
> +//
> +// Generic definitions for device enabling/disabling used by PCH code.
> +//
> +#define PCH_DEVICE_ENABLE 1
> +#define PCH_DEVICE_DISABLE 0
> +
> +typedef struct {
> + UINT8 ThermalDataReportEnable : 1; // OBSOLETE from Revision 5 !!! DO
> NOT USE !!!
> + UINT8 MchTempReadEnable : 1;
> + UINT8 PchTempReadEnable : 1;
> + UINT8 CpuEnergyReadEnable : 1;
> + UINT8 CpuTempReadEnable : 1;
> + UINT8 Cpu2TempReadEnable : 1;
> + UINT8 TsOnDimmEnable : 1;
> + UINT8 Dimm1TempReadEnable : 1;
> +
> + UINT8 Dimm2TempReadEnable : 1;
> + UINT8 Dimm3TempReadEnable : 1;
> + UINT8 Dimm4TempReadEnable : 1;
> + UINT8 Rsvdbits : 5;
> +} PCH_THERMAL_REPORT_CONTROL;
> +//
> +// ---------------------------- HPET Config -----------------------------
> +//
> +typedef struct {
> + BOOLEAN Enable; /// Determines if enable HPET function
> + UINT32 Base; /// The HPET base address
> +} PCH_HPET_CONFIG;
> +
> +
> +///
> +/// ---------------------------- SATA Config -----------------------------
> +///
> +typedef enum {
> + PchSataModeIde,
> + PchSataModeAhci,
> + PchSataModeRaid,
> + PchSataModeMax
> +} PCH_SATA_MODE;
> +
> +///
> +/// ---------------------------- PCI Express Config -----------------------------
> +///
> +typedef enum {
> + PchPcieAuto,
> + PchPcieGen1,
> + PchPcieGen2
> +} PCH_PCIE_SPEED;
> +
> +typedef struct {
> + PCH_PCIE_SPEED PcieSpeed[PCH_PCIE_MAX_ROOT_PORTS];
> +} PCH_PCIE_CONFIG;
> +
> +///
> +/// ---------------------------- IO APIC Config -----------------------------
> +///
> +typedef struct {
> + UINT8 IoApicId;
> +} PCH_IOAPIC_CONFIG;
> +
> +///
> +/// --------------------- Low Power Input Output Config ------------------------
> +///
> +typedef struct {
> + UINT8 LpssPciModeEnabled : 1; /// Determines if LPSS PCI
> Mode enabled
> + UINT8 Dma0Enabled : 1; /// Determines if LPSS DMA1
> enabled
> + UINT8 Dma1Enabled : 1; /// Determines if LPSS DMA2
> enabled
> + UINT8 I2C0Enabled : 1; /// Determines if LPSS I2C #1
> enabled
> + UINT8 I2C1Enabled : 1; /// Determines if LPSS I2C #2
> enabled
> + UINT8 I2C2Enabled : 1; /// Determines if LPSS I2C #3
> enabled
> + UINT8 I2C3Enabled : 1; /// Determines if LPSS I2C #4
> enabled
> + UINT8 I2C4Enabled : 1; /// Determines if LPSS I2C #5
> enabled
> + UINT8 I2C5Enabled : 1; /// Determines if LPSS I2C #6
> enabled
> + UINT8 I2C6Enabled : 1; /// Determines if LPSS I2C #7
> enabled
> + UINT8 Pwm0Enabled : 1; /// Determines if LPSS PWM #1
> enabled
> + UINT8 Pwm1Enabled : 1; /// Determines if LPSS PWM #2
> enabled
> + UINT8 Hsuart0Enabled : 1; /// Determines if LPSS HSUART #1
> enabled
> + UINT8 Hsuart1Enabled : 1; /// Determines if LPSS HSUART #2
> enabled
> + UINT8 SpiEnabled : 1; /// Determines if LPSS SPI enabled
> + UINT8 Rsvdbits : 2;
> +} PEI_PCH_LPSS_CONFIG;
> +
> +///
> +/// ------------ General PCH Platform Policy PPI definition ------------
> +///
> +struct _PCH_PLATFORM_POLICY_PPI {
> + UINT8 Revision;
> + UINT8 BusNumber; // Bus Number of the PCH device
> + UINT32 SpiBase; // SPI Base Address.
> + UINT32 PmcBase; // PMC Base Address.
> + UINT32 SmbmBase; // SMB Memory Base Address.
> + UINT32 IoBase; // IO Base Address.
> + UINT32 IlbBase; // Intel Legacy Block Base Address.
> + UINT32 PUnitBase; // PUnit Base Address.
> + UINT32 Rcba; // Root Complex Base Address.
> + UINT32 MphyBase; // MPHY Base Address.
> + UINT16 AcpiBase; // ACPI I/O Base address.
> + UINT16 GpioBase; // GPIO Base address
> + PCH_HPET_CONFIG *HpetConfig;
> + PCH_SATA_MODE SataMode;
> + PCH_PCIE_CONFIG *PcieConfig;
> + PCH_IOAPIC_CONFIG *IoApicConfig;
> + PEI_PCH_LPSS_CONFIG *LpssConfig;
> + BOOLEAN EnableRmh; // Determines if enable USB RMH
> function
> + BOOLEAN EhciPllCfgEnable;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchUsbPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchUsbPolicy.h
> new file mode 100644
> index 0000000000..d03aa4a8b4
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PchUsbPolicy.h
> @@ -0,0 +1,69 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchUsbPolicy.h
> +
> + @brief
> + PCH Usb policy PPI produced by a platform driver specifying
> + various expected PCH Usb settings. This PPI is consumed by the
> + PCH PEI drivers.
> +
> +**/
> +#ifndef _PCH_USB_POLICY_H_
> +#define _PCH_USB_POLICY_H_
> +
> +//
> +// PCH Usb policy provided by platform for PEI phase
> +//
> +
> +#ifndef ECP_FLAG
> +#include <PiPei.h>
> +#endif
> +
> +#include "PchRegs.h"
> +#include <Protocol/PchPlatformPolicy.h>
> +
> +#define PCH_USB_POLICY_PPI_GUID \
> + { \
> + 0xc02b0573, 0x2b4e, 0x4a31, 0xa3, 0x1a, 0x94, 0x56, 0x7b, 0x50, 0x44, 0x2c
> \
> + }
> +
> +extern EFI_GUID gPchUsbPolicyPpiGuid;
> +
> +typedef struct _PCH_USB_POLICY_PPI PCH_USB_POLICY_PPI;
> +
> +///
> +/// PPI revision number
> +/// Any backwards compatible changes to this PPI will result in an update in
> the revision number
> +/// Major changes will require publication of a new PPI
> +///
> +/// Revision 1: Original version
> +///
> +#define PCH_USB_POLICY_PPI_REVISION_1 1
> +
> +///
> +/// Generic definitions for device enabling/disabling used by PCH code.
> +///
> +#define PCH_DEVICE_ENABLE 1
> +#define PCH_DEVICE_DISABLE 0
> +
> +#define EHCI_MODE 1
> +
> +struct _PCH_USB_POLICY_PPI {
> + UINT8 Revision;
> + PCH_USB_CONFIG *UsbConfig;
> + UINT8 Mode;
> + UINTN EhciMemBaseAddr;
> + UINT32 EhciMemLength;
> + UINTN XhciMemBaseAddr;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PeiBlockIo.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PeiBlockIo.h
> new file mode 100644
> index 0000000000..d6c8366e26
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/PeiBlockIo.h
> @@ -0,0 +1,230 @@
> +/** @file
> + Block IO protocol as defined in the UEFI 2.0 specification.
> +
> + The Block IO protocol is used to abstract block devices like hard drives,
> + DVD-ROMs and floppy drives.
> +
> + Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef __PEI_BLOCK_IO_H__
> +#define __PEI_BLOCK_IO_H__
> +// {BC5FA650-EDBB-4d0d-B3A3-D98907F847DF}
> +#ifndef ECP_FLAG
> +#define PEI_BLOCK_IO_PPI_GUID \
> + { \
> + 0xbc5fa650, 0xedbb, 0x4d0d, { 0xb3, 0xa3, 0xd9, 0x89, 0x7, 0xf8, 0x47,
> 0xdf } \
> + }
> +#endif
> +typedef struct _PEI_BLOCK_IO_PPI PEI_BLOCK_IO_PPI;
> +
> +
> +/**
> + Reset the Block Device.
> +
> + @param This Indicates a pointer to the calling context.
> + @param ExtendedVerification Driver may perform diagnostics on reset.
> +
> + @retval EFI_SUCCESS The device was reset.
> + @retval EFI_DEVICE_ERROR The device is not functioning properly and
> could
> + not be reset.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_BLOCK_RESET)(
> + IN PEI_BLOCK_IO_PPI *This,
> + IN BOOLEAN ExtendedVerification
> + );
> +
> +/**
> + Read BufferSize bytes from Lba into Buffer.
> +
> + @param This Indicates a pointer to the calling context.
> + @param MediaId Id of the media, changes every time the media is
> replaced.
> + @param Lba The starting Logical Block Address to read from
> + @param BufferSize Size of Buffer, must be a multiple of device block size.
> + @param Buffer A pointer to the destination buffer for the data. The
> caller is
> + responsible for either having implicit or explicit ownership of the
> buffer.
> +
> + @retval EFI_SUCCESS The data was read correctly from the device.
> + @retval EFI_DEVICE_ERROR The device reported an error while
> performing the read.
> + @retval EFI_NO_MEDIA There is no media in the device.
> + @retval EFI_MEDIA_CHANGED The MediaId does not matched the
> current device.
> + @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block
> size of the device.
> + @retval EFI_INVALID_PARAMETER The read request contains LBAs that
> are not valid,
> + or the buffer is not on proper alignment.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_BLOCK_READ)(
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_BLOCK_IO_PPI *This,
> + IN UINT32 MediaId,
> + IN EFI_LBA Lba,
> + IN UINTN BufferSize,
> + OUT VOID *Buffer
> + );
> +
> +/**
> + Write BufferSize bytes from Lba into Buffer.
> +
> + @param This Indicates a pointer to the calling context.
> + @param MediaId The media ID that the write request is for.
> + @param Lba The starting logical block address to be written. The caller
> is
> + responsible for writing to only legitimate locations.
> + @param BufferSize Size of Buffer, must be a multiple of device block size.
> + @param Buffer A pointer to the source buffer for the data.
> +
> + @retval EFI_SUCCESS The data was written correctly to the device.
> + @retval EFI_WRITE_PROTECTED The device can not be written to.
> + @retval EFI_DEVICE_ERROR The device reported an error while
> performing the write.
> + @retval EFI_NO_MEDIA There is no media in the device.
> + @retval EFI_MEDIA_CHNAGED The MediaId does not matched the
> current device.
> + @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block
> size of the device.
> + @retval EFI_INVALID_PARAMETER The write request contains LBAs that
> are not valid,
> + or the buffer is not on proper alignment.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_BLOCK_WRITE)(
> + IN EFI_PEI_SERVICES **PeiServices,
> + IN PEI_BLOCK_IO_PPI *This,
> + IN UINT32 MediaId,
> + IN EFI_LBA Lba,
> + IN UINTN BufferSize,
> + IN VOID *Buffer
> + );
> +
> +/**
> + Flush the Block Device.
> +
> + @param This Indicates a pointer to the calling context.
> +
> + @retval EFI_SUCCESS All outstanding data was written to the device
> + @retval EFI_DEVICE_ERROR The device reported an error while writting
> back the data
> + @retval EFI_NO_MEDIA There is no media in the device.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_BLOCK_FLUSH)(
> + IN PEI_BLOCK_IO_PPI *This
> + );
> +
> +/**
> + Block IO read only mode data and updated only via members of BlockIO
> +**/
> +typedef struct {
> + ///
> + /// The curent media Id. If the media changes, this value is changed.
> + ///
> + UINT32 MediaId;
> +
> + ///
> + /// TRUE if the media is removable; otherwise, FALSE.
> + ///
> + BOOLEAN RemovableMedia;
> +
> + ///
> + /// TRUE if there is a media currently present in the device;
> + /// othersise, FALSE. THis field shows the media present status
> + /// as of the most recent ReadBlocks() or WriteBlocks() call.
> + ///
> + BOOLEAN MediaPresent;
> +
> + ///
> + /// TRUE if LBA 0 is the first block of a partition; otherwise
> + /// FALSE. For media with only one partition this would be TRUE.
> + ///
> + BOOLEAN LogicalPartition;
> +
> + ///
> + /// TRUE if the media is marked read-only otherwise, FALSE.
> + /// This field shows the read-only status as of the most recent WriteBlocks
> () call.
> + ///
> + BOOLEAN ReadOnly;
> +
> + ///
> + /// TRUE if the WriteBlock () function caches write data.
> + ///
> + BOOLEAN WriteCaching;
> +
> + ///
> + /// The intrinsic block size of the device. If the media changes, then
> + /// this field is updated.
> + ///
> + UINT32 BlockSize;
> +
> + ///
> + /// Supplies the alignment requirement for any buffer to read or write
> block(s).
> + ///
> + UINT32 IoAlign;
> +
> + ///
> + /// The last logical block address on the device.
> + /// If the media changes, then this field is updated.
> + ///
> + EFI_LBA LastBlock;
> +
> + ///
> + /// Only present if EFI_BLOCK_IO_PROTOCOL.Revision is greater than or
> equal to
> + /// EFI_BLOCK_IO_PROTOCOL_REVISION2. Returns the first LBA is aligned
> to
> + /// a physical block boundary.
> + ///
> + EFI_LBA LowestAlignedLba;
> +
> + ///
> + /// Only present if EFI_BLOCK_IO_PROTOCOL.Revision is greater than or
> equal to
> + /// EFI_BLOCK_IO_PROTOCOL_REVISION2. Returns the number of logical
> blocks
> + /// per physical block.
> + ///
> + UINT32 LogicalBlocksPerPhysicalBlock;
> +
> + ///
> + /// Only present if EFI_BLOCK_IO_PROTOCOL.Revision is greater than or
> equal to
> + /// EFI_BLOCK_IO_PROTOCOL_REVISION3. Returns the optimal transfer
> length
> + /// granularity as a number of logical blocks.
> + ///
> + UINT32 OptimalTransferLengthGranularity;
> +#ifdef ECP_FLAG
> +} PEI_BLOCK_IO_MEDIA2;
> +#else
> +} PEI_BLOCK_IO_MEDIA;
> +#endif
> +#define EFI_BLOCK_IO_PROTOCOL_REVISION 0x00010000
> +#define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001
> +#define EFI_BLOCK_IO_PROTOCOL_REVISION3 0x00020031
> +
> +///
> +/// Revision defined in EFI1.1.
> +///
> +#define EFI_BLOCK_IO_INTERFACE_REVISION
> EFI_BLOCK_IO_PROTOCOL_REVISION
> +
> +///
> +/// This protocol provides control over block devices.
> +///
> +struct _PEI_BLOCK_IO_PPI {
> + ///
> + /// The revision to which the block IO interface adheres. All future
> + /// revisions must be backwards compatible. If a future version is not
> + /// back wards compatible, it is not the same GUID.
> + ///
> + UINT64 Revision;
> + ///
> + /// Pointer to the EFI_BLOCK_IO_MEDIA data for this device.
> + ///
> + PEI_BLOCK_IO_MEDIA *Media;
> + PEI_BLOCK_RESET Reset;
> + PEI_BLOCK_READ ReadBlocks;
> + PEI_BLOCK_WRITE WriteBlocks;
> + PEI_BLOCK_FLUSH FlushBlocks;
> +};
> +
> +//extern EFI_GUID gEfiBlockIoProtocolGuid;
> +extern EFI_GUID gPeiBlockIoPpiGuid;
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/Sdhc.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/Sdhc.h
> new file mode 100644
> index 0000000000..4909d81573
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/Sdhc.h
> @@ -0,0 +1,359 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + Spi.h
> +
> + @brief
> + This file defines the EFI SPI PPI which implements the
> + Intel(R) PCH SPI Host Controller Compatibility Interface.
> +
> +**/
> +#ifndef _PEI_SDHC_H_
> +#define _PEI_SDHC_H_
> +
> +
> +
> +//
> +#define PEI_SDHC_PPI_GUID \
> + { \
> + 0xf4ef9d7a, 0x98c5, 0x4c1a, 0xb4, 0xd9, 0xd8, 0xd8, 0x72, 0x65, 0xbe, 0xc
> \
> + }
> +typedef struct _PEI_SD_CONTROLLER_PPI PEI_SD_CONTROLLER_PPI;
> +
> +#define EFI_SD_HOST_IO_PROTOCOL_REVISION_01 0x01
> +
> +typedef enum {
> + ResponseNo = 0,
> + ResponseR1,
> + ResponseR1b,
> + ResponseR2,
> + ResponseR3,
> + ResponseR4,
> + ResponseR5,
> + ResponseR5b,
> + ResponseR6,
> + ResponseR7
> +} RESPONSE_TYPE;
> +
> +typedef enum {
> + NoData = 0,
> + InData,
> + OutData
> +} TRANSFER_TYPE;
> +
> +typedef enum {
> + Reset_Auto = 0,
> + Reset_DAT,
> + Reset_CMD,
> + Reset_DAT_CMD,
> + Reset_All
> +} RESET_TYPE;
> +
> +
> +
> +typedef enum {
> + SDMA = 0,
> + ADMA2,
> + PIO
> +} DMA_MOD;
> +
> +typedef struct {
> + UINT32 HighSpeedSupport: 1; //High speed supported
> + UINT32 V18Support: 1; //1.8V supported
> + UINT32 V30Support: 1; //3.0V supported
> + UINT32 V33Support: 1; //3.3V supported
> + UINT32 Reserved0: 4;
> + UINT32 BusWidth4: 1; // 4 bit width
> + UINT32 BusWidth8: 1; // 8 bit width
> + UINT32 Reserved1: 6;
> + UINT32 SDMASupport: 1;
> + UINT32 ADMA2Support: 1;
> + UINT32 DmaMode: 2;
> + UINT32 Reserved2: 12;
> + UINT32 BoundarySize;
> +}HOST_CAPABILITY;
> +
> +
> +#define PCI_SUBCLASS_SD_HOST_CONTROLLER 0x05
> +#define PCI_IF_STANDARD_HOST_NO_DMA 0x00
> +#define PCI_IF_STANDARD_HOST_SUPPORT_DMA 0x01
> +
> +//
> +//MMIO Registers definition for MMC/SDIO controller
> +//
> +#define MMIO_DMAADR 0x00
> +#define MMIO_BLKSZ 0x04
> +#define MMIO_BLKCNT 0x06
> +#define MMIO_CMDARG 0x08
> +#define MMIO_XFRMODE 0x0C
> +#define MMIO_SDCMD 0x0E
> +#define MMIO_RESP 0x10
> +#define MMIO_BUFDATA 0x20
> +#define MMIO_PSTATE 0x24
> +#define MMIO_HOSTCTL 0x28
> +#define MMIO_PWRCTL 0x29
> +#define MMIO_BLKGAPCTL 0x2A
> +#define MMIO_WAKECTL 0x2B
> +#define MMIO_CLKCTL 0x2C
> +#define MMIO_TOCTL 0x2E
> +#define MMIO_SWRST 0x2F
> +#define MMIO_NINTSTS 0x30
> +#define MMIO_ERINTSTS 0x32
> +#define MMIO_NINTEN 0x34
> +#define MMIO_ERINTEN 0x36
> +#define MMIO_NINTSIGEN 0x38
> +#define MMIO_ERINTSIGEN 0x3A
> +#define MMIO_AC12ERRSTS 0x3C
> +#define MMIO_HOST_CTL2 0x3E //hphang <- New in VLV2
> +#define MMIO_CAP 0x40
> +#define MMIO_CAP2 0x44 //hphang <- New in VLV2
> +#define MMIO_MCCAP 0x48
> +#define MMIO_FORCEEVENTCMD12ERRSTAT 0x50 //hphang <- New in
> VLV2
> +#define MMIO_FORCEEVENTERRINTSTAT 0x52 //hphang <- New in VLV2
> +#define MMIO_ADMAERRSTAT 0x54 //hphang <- New in VLV2
> +#define MMIO_ADMASYSADDR 0x58 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE0 0x60 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE1 0x64 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE2 0x68 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE3 0x6C //hphang <- New in VLV2
> +#define MMIO_BOOTTIMEOUTCTRL 0x70 //hphang <- New in VLV2
> +#define MMIO_DEBUGSEL 0x74 //hphang <- New in VLV2
> +#define MMIO_SHAREDBUS 0xE0 //hphang <- New in VLV2
> +#define MMIO_SPIINTSUP 0xF0 //hphang <- New in VLV2
> +#define MMIO_SLTINTSTS 0xFC
> +#define MMIO_CTRLRVER 0xFE
> +#define MMIO_SRST 0x1FC
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_SEND_COMMAND) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN UINT16 CommandIndex,
> + IN UINT32 Argument,
> + IN TRANSFER_TYPE DataType,
> + IN UINT8 *Buffer, OPTIONAL
> + IN UINT32 BufferSize,
> + IN RESPONSE_TYPE ResponseType,
> + IN UINT32 TimeOut,
> + OUT UINT32 *ResponseData OPTIONAL
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set max clock frequency of the host, the actual frequency
> + may not be the same as MaxFrequency. It depends on
> + the max frequency the host can support, divider, and host
> + speed mode.
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + MaxFrequency - Max frequency in HZ
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_SET_CLOCK_FREQUENCY) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN UINT32 MaxFrequency
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set bus width of the host
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + BusWidth - Bus width in 1, 4, 8 bits
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_SET_BUS_WIDTH) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN UINT32 BusWidth
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set Host mode in DDR
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + SetHostDdrMode - True for DDR Mode set, false for normal mode
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN UINT32 DdrMode
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set voltage which could supported by the host.
> + Support 0(Power off the host), 1.8V, 3.0V, 3.3V
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + Voltage - Units in 0.1 V
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_SET_HOST_VOLTAGE) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN UINT32 Voltage
> + );
> +
> +/*++
> +
> + Routine Description:
> + Reset the host
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + ResetAll - TRUE to reset all
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_RESET_SD_HOST) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN RESET_TYPE ResetType
> + );
> +
> +/*++
> +
> + Routine Description:
> + Reset the host
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + Enable - TRUE to enable, FALSE to disable
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_ENABLE_AUTO_STOP_CMD) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN BOOLEAN Enable
> + );
> +
> +/*++
> +
> + Routine Description:
> + Find whether these is a card inserted into the slot. If so
> + init the host. If not, return EFI_NOT_FOUND.
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_NOT_FOUND
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_DETECT_CARD_AND_INIT_HOST) (
> + IN PEI_SD_CONTROLLER_PPI *This
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set the Block length
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + BlockLength - card supportes block length
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_SET_BLOCK_LENGTH) (
> + IN PEI_SD_CONTROLLER_PPI *This,
> + IN UINT32 BlockLength
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set the Block length
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + BlockLength - card supportes block length
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +
> +typedef EFI_STATUS
> +(EFIAPI *EFI_SD_CONTROLLER_PPI_SETUP_DEVICE)(
> + IN PEI_SD_CONTROLLER_PPI *This
> + );
> +
> +//
> +// Interface structure for the EFI SD Host I/O Protocol
> +//
> +struct _PEI_SD_CONTROLLER_PPI {
> + UINT32 Revision;
> + HOST_CAPABILITY HostCapability;
> + EFI_SD_CONTROLLER_PPI_SEND_COMMAND SendCommand;
> + EFI_SD_CONTROLLER_PPI_SET_CLOCK_FREQUENCY
> SetClockFrequency;
> + EFI_SD_CONTROLLER_PPI_SET_BUS_WIDTH SetBusWidth;
> + EFI_SD_CONTROLLER_PPI_SET_HOST_VOLTAGE SetHostVoltage;
> + EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE
> SetHostDdrMode;
> + EFI_SD_CONTROLLER_PPI_RESET_SD_HOST ResetSdHost;
> + EFI_SD_CONTROLLER_PPI_ENABLE_AUTO_STOP_CMD
> EnableAutoStopCmd;
> + EFI_SD_CONTROLLER_PPI_DETECT_CARD_AND_INIT_HOST
> DetectCardAndInitHost;
> + EFI_SD_CONTROLLER_PPI_SET_BLOCK_LENGTH SetBlockLength;
> + EFI_SD_CONTROLLER_PPI_SETUP_DEVICE SetupDevice;
> +};
> +// Extern the GUID for PPI users.
> +//
> +extern EFI_GUID gPeiSdhcPpiGuid;
> +
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/SmbusPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/SmbusPolicy.h
> new file mode 100644
> index 0000000000..3f48142138
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/SmbusPolicy.h
> @@ -0,0 +1,40 @@
> +//
> +//
> +
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + SmbusPolicy.h
> +
> +Abstract:
> +
> + Smbus Policy PPI as defined in EFI 2.0
> +
> +--*/
> +#ifndef _PEI_SMBUS_POLICY_PPI_H
> +#define _PEI_SMBUS_POLICY_PPI_H
> +
> +#define PEI_SMBUS_POLICY_PPI_GUID \
> + { \
> + 0x63b6e435, 0x32bc, 0x49c6, 0x81, 0xbd, 0xb7, 0xa1, 0xa0, 0xfe, 0x1a, 0x6c
> \
> + }
> +
> +typedef struct _PEI_SMBUS_POLICY_PPI PEI_SMBUS_POLICY_PPI;
> +
> +struct _PEI_SMBUS_POLICY_PPI {
> + UINTN BaseAddress;
> + UINT32 PciAddress;
> + UINT8 NumRsvdAddress;
> + UINT8 *RsvdAddress;
> +};
> +
> +extern EFI_GUID gPeiSmbusPolicyPpiGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/Spi.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/Spi.h
> new file mode 100644
> index 0000000000..3496f59d1d
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Ppi/Spi.h
> @@ -0,0 +1,42 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + Spi.h
> +
> + @brief
> + This file defines the EFI SPI PPI which implements the
> + Intel(R) PCH SPI Host Controller Compatibility Interface.
> +
> +**/
> +#ifndef _PEI_SPI_H_
> +#define _PEI_SPI_H_
> +
> +
> +#include <Protocol/Spi.h>
> +
> +
> +//
> +#define PEI_SPI_PPI_GUID \
> + { \
> + 0xa38c6898, 0x2b5c, 0x4ff6, 0x93, 0x26, 0x2e, 0x63, 0x21, 0x2e, 0x56, 0xc2
> \
> + }
> +// Extern the GUID for PPI users.
> +//
> +extern EFI_GUID gPeiSpiPpiGuid;
> +
> +///
> +/// Reuse the EFI_SPI_PROTOCOL definitions
> +/// This is possible becaues the PPI implementation does not rely on a
> PeiService pointer,
> +/// as it uses EDKII Glue Lib to do IO accesses
> +///
> +typedef EFI_SPI_PROTOCOL PEI_SPI_PPI;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/ActiveBios.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/ActiveBios.h
> new file mode 100644
> index 0000000000..4bd0523445
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/ActiveBios.h
> @@ -0,0 +1,123 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + ActiveBios.h
> +
> + @brief
> + This protocol is used to report and control what BIOS is mapped to the
> + BIOS address space anchored at 4GB boundary.
> +
> + This protocol is EFI compatible.
> +
> + E.G. For current generation ICH, the 4GB-16MB to 4GB range can be
> mapped
> + to PCI, SPI, or FWH.
> +
> +**/
> +#ifndef _EFI_ACTIVE_BIOS_PROTOCOL_H_
> +#define _EFI_ACTIVE_BIOS_PROTOCOL_H_
> +
> +
> +
> +
> +//
> +#define EFI_ACTIVE_BIOS_PROTOCOL_GUID \
> + { \
> + 0xebbe2d1b, 0x1647, 0x4bda, 0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4,
> 0x1a \
> + }
> +extern EFI_GUID gEfiActiveBiosProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _EFI_ACTIVE_BIOS_PROTOCOL
> EFI_ACTIVE_BIOS_PROTOCOL;
> +
> +///
> +/// Protocol definitions
> +///
> +typedef enum {
> + ActiveBiosStateSpi,
> + ActiveBiosStatePci, /// Obsolete since VLV
> + ActiveBiosStateLpc,
> + ActiveBiosStateMax
> +} EFI_ACTIVE_BIOS_STATE;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE) (
> + IN EFI_ACTIVE_BIOS_PROTOCOL * This,
> + IN EFI_ACTIVE_BIOS_STATE DesiredState,
> + IN UINTN Key
> + )
> +/**
> +
> + @brief
> + Change the current active BIOS settings to the requested state.
> + The caller is responsible for requesting a supported state from
> + the EFI_ACTIVE_BIOS_STATE selections.
> + This will fail if someone has locked the interface and the correct key is
> + not provided.
> +
> + @param[in] This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL
> instance.
> + @param[in] DesiredState The requested state to configure the system
> for.
> + @param[in] Key If the interface is locked, Key must be the Key
> + returned from the LockState function call.
> +
> + @retval EFI_SUCCESS The function completed successfully
> + @retval EFI_ACCESS_DENIED The interface is currently locked.
> +
> +**/
> +;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE) (
> + IN EFI_ACTIVE_BIOS_PROTOCOL * This,
> + IN BOOLEAN Lock,
> + IN OUT UINTN *Key
> + );
> +
> +/**
> +
> + @brief
> + Lock the current active BIOS state from further changes. This allows a
> + caller to implement a critical section. This is optionally supported
> + functionality. Size conscious implementations may choose to require
> + callers cooperate without support from this protocol.
> +
> + @param[in] This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL
> instance.
> + @param[in] Lock TRUE to lock the current state, FALSE to unlock.
> + @param[in] Key If Lock is TRUE, then a key will be returned. If
> + Lock is FALSE, the key returned from the prior call
> + to lock the protocol must be provided to unlock the
> + protocol. The value of Key is undefined except that
> + it cannot be 0.
> +
> + @retval EFI_SUCCESS Command succeed.
> + @exception EFI_UNSUPPORTED The function is not supported.
> + @retval EFI_ACCESS_DENIED The interface is currently locked.
> + @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
> +
> +**/
> +
> +///
> +/// Protocol definition
> +///
> +/// Note that some functions are optional. This means that they may be
> NULL.
> +/// Caller is required to verify that an optional function is defined by
> checking
> +/// that the value is not NULL.
> +///
> +struct _EFI_ACTIVE_BIOS_PROTOCOL {
> + EFI_ACTIVE_BIOS_STATE State;
> + EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE SetState;
> + EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE LockState;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/ActiveBiosProtocol.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/ActiveBiosProtocol.h
> new file mode 100644
> index 0000000000..a41e5831f1
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/ActiveBiosProtocol.h
> @@ -0,0 +1,125 @@
> +/**
> + This protocol is used to report and control what BIOS is mapped to the
> + BIOS address space anchored at 4GB boundary.
> +
> + This protocol is EFI compatible.
> +
> + E.G. For current generation ICH, the 4GB-16MB to 4GB range can be
> mapped
> + to PCI, SPI, or FWH.
> +
> +Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +**/
> +
> +
> +#ifndef _EFI_ACTIVE_BIOS_PROTOCOL_H_
> +#define _EFI_ACTIVE_BIOS_PROTOCOL_H_
> +
> +//
> +// Define the protocol GUID
> +//
> +#define EFI_ACTIVE_BIOS_PROTOCOL_GUID \
> + { 0xebbe2d1b, 0x1647, 0x4bda, {0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4,
> 0x1a} }
> +
> +typedef struct _EFI_ACTIVE_BIOS_PROTOCOL
> EFI_ACTIVE_BIOS_PROTOCOL;
> +
> +//
> +// Protocol definitions
> +//
> +typedef enum {
> + ActiveBiosStateSpi,
> + ActiveBiosStatePci,
> + ActiveBiosStateLpc,
> + ActiveBiosStateMax
> +} EFI_ACTIVE_BIOS_STATE;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE) (
> + IN EFI_ACTIVE_BIOS_PROTOCOL *This,
> + IN EFI_ACTIVE_BIOS_STATE DesiredState,
> + IN UINTN Key
> + );
> +/*++
> +
> +Routine Description:
> +
> + Change the current active BIOS settings to the requested state.
> + The caller is responsible for requesting a supported state from
> + the EFI_ACTIVE_BIOS_STATE selections.
> +
> + This will fail if someone has locked the interface and the correct key is
> + not provided.
> +
> +Arguments:
> +
> + This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL instance.
> + DesiredState The requested state to configure the system for.
> + Key If the interface is locked, Key must be the Key
> + returned from the LockState function call.
> +
> +Returns:
> +
> + EFI_SUCCESS Command succeed.
> + EFI_ACCESS_DENIED The interface is currently locked.
> + EFI_DEVICE_ERROR Device error, command aborts abnormally.
> +
> +--*/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE) (
> + IN EFI_ACTIVE_BIOS_PROTOCOL *This,
> + IN BOOLEAN Lock,
> + IN OUT UINTN *Key
> + );
> +/*++
> +
> +Routine Description:
> +
> + Lock the current active BIOS state from further changes. This allows a
> + caller to implement a critical section. This is optionally supported
> + functionality. Size conscious implementations may choose to require
> + callers cooperate without support from this protocol.
> +
> +Arguments:
> +
> + This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL instance.
> + Lock TRUE to lock the current state, FALSE to unlock.
> + Key If Lock is TRUE, then a key will be returned. If
> + Lock is FALSE, the key returned from the prior call
> + to lock the protocol must be provided to unlock the
> + protocol. The value of Key is undefined except that it
> + will never be 0.
> +
> +Returns:
> +
> + EFI_SUCCESS Command succeed.
> + EFI_UNSUPPORTED The function is not supported.
> + EFI_ACCESS_DENIED The interface is currently locked.
> + EFI_DEVICE_ERROR Device error, command aborts abnormally.
> +
> +--*/
> +
> +//
> +// Protocol definition
> +//
> +// Note that some functions are optional. This means that they may be
> NULL.
> +// Caller is required to verify that an optional function is defined by checking
> +// that the value is not NULL.
> +//
> +struct _EFI_ACTIVE_BIOS_PROTOCOL {
> + EFI_ACTIVE_BIOS_STATE State;
> + EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE SetState;
> + EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE LockState;
> +};
> +
> +//
> +// Extern the GUID for protocol users.
> +//
> +extern EFI_GUID gEfiActiveBiosProtocolGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/DxePchPolicyUpdateProtocol.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/DxePchPolicyUpdateProtocol.h
> new file mode 100644
> index 0000000000..4e7140e868
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/DxePchPolicyUpdateProtocol.h
> @@ -0,0 +1,51 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + DxePchPolicyUpdateProtocol.h
> +
> +Abstract:
> +
> + PCH policy update protocol. This protocol is consumed by the
> PchDxePolicyInit driver
> +
> +--*/
> +#ifndef _DXE_PCH_POLICY_UPDATE_PROTOCOL_H_
> +#define _DXE_PCH_POLICY_UPDATE_PROTOCOL_H_
> +
> +#include "PchRegs.h"
> +
> +
> +#ifdef ECP_FLAG
> +#define DXE_PCH_POLICY_UPDATE_PROTOCOL_GUID \
> + { \
> + 0x1a819e49, 0xd8ee, 0x48cb, 0x9a, 0x9c, 0xa, 0xa0, 0xd2, 0x81, 0xa, 0x38 \
> + }
> +#else
> +#define DXE_PCH_POLICY_UPDATE_PROTOCOL_GUID \
> + { \
> + 0x1a819e49, 0xd8ee, 0x48cb, \
> + { \
> + 0x9a, 0x9c, 0xa, 0xa0, 0xd2, 0x81, 0xa, 0x38 \
> + } \
> + }
> +#endif
> +
> +extern EFI_GUID gDxePchPolicyUpdateProtocolGuid;
> +#define DXE_PCH_POLICY_UPDATE_PROTOCOL_REVISION_1 1
> +
> +//
> +// ------------ General PCH policy Update protocol definition ------------
> +//
> +struct _DXE_PCH_POLICY_UPDATE_PROTOCOL {
> + UINT8 Revision;
> +};
> +
> +typedef struct _DXE_PCH_POLICY_UPDATE_PROTOCOL
> DXE_PCH_POLICY_UPDATE_PROTOCOL;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/EmmcCardInfoProtocol.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/EmmcCardInfoProtocol.h
> new file mode 100644
> index 0000000000..d92f227d5b
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/EmmcCardInfoProtocol.h
> @@ -0,0 +1,42 @@
> +/*++
> +
> +Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +--*/
> +
> +
> +/*++
> +Module Name:
> +
> + EmmcCardInfoProtocol.h
> +
> +Abstract:
> +
> + Interface definition for EFI_EMMC_CARD_INFO_PROTOCOL
> +
> +--*/
> +
> +
> +#ifndef _EMMC_CARD_INFO_H_
> +#define _EMMC_CARD_INFO_H_
> +
> +#define EFI_EMMC_CARD_INFO_PROTOCOL_GUID \
> + { \
> + 0x1ebe5ab9, 0x2129, 0x49e7, {0x84, 0xd7, 0xee, 0xb9, 0xfc, 0xe5, 0xde,
> 0xdd } \
> + }
> +
> +typedef struct _EFI_EMMC_CARD_INFO_PROTOCOL
> EFI_EMMC_CARD_INFO_PROTOCOL;
> +
> +
> +//
> +// EMMC Card info Structures
> +//
> +struct _EFI_EMMC_CARD_INFO_PROTOCOL {
> + CARD_DATA *CardData;
> +};
> +
> +extern EFI_GUID gEfiEmmcCardInfoProtocolGuid;
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/Gpio.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/Gpio.h
> new file mode 100644
> index 0000000000..3f7260e0bf
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/Gpio.h
> @@ -0,0 +1,161 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + Gpio.h
> +
> +Abstract:
> +
> +EFI 2.0 PEIM to provide platform specific information to other
> +modules and to do some platform specific initialization.
> +
> +--*/
> +
> +#ifndef _PEI_GPIO_H
> +#define _PEI_GPIO_H
> +
> +//#include "Efi.h"
> +//#include "EfiCommonLib.h"
> +//#include "Pei.h"
> +//#include "Numbers.h"
> +
> +////
> +//// GPIO Register Settings for BeaverBridge (FFVS) (Cedarview/Tigerpoint)
> +////
> +//// Field Descriptions:
> +//// USE: Defines the pin's usage model: GPIO (G) or Native (N) mode.
> +//// I/O: Defines whether GPIOs are inputs (I) or outputs (O).
> +//// (Note: Only meaningful for pins used as GPIOs.)
> +//// LVL: This field gives you the initial value for "output" GPIO's.
> +//// (Note: The output level is dependent upon whether the pin is
> inverted.)
> +//// INV: Defines whether Input GPIOs activation level is inverted.
> +//// (Note: Only affects the level sent to the GPE logic and does not
> +//// affect the level read through the GPIO registers.)
> +////
> +//// Notes:
> +//// 1. BoardID is GPIO [8:38:34]
> +////
> +////Signal UsedAs USE I/O LVL INV
> +////--------------------------------------------------------------------------
> +////GPIO0 Nonfunction G O H -
> +////GPIO1 SMC_RUNTIME_SCI# G I - I
> +////PIRQE#/GPIO2 Nonfunction G O H -
> +////PIRQF#/GPIO3 Nonfunction G O H -
> +////PIRQG#/GPIO4 Nonfunction G O H -
> +////PIRQH#/GPIO5 Nonfunction G O H -
> +////GPIO6 unused G O L -
> +////GPIO7 unused G O L -
> +////GPIO8 BOARD ID2 G I - -
> +////GPIO9 unused G O L -
> +////GPIO10 SMC_EXTSMI# G I - I
> +////GPIO11 Nonfunction G O H -
> +////GPIO12 unused G O L -
> +////GPIO13 SMC_WAKE_SCI# G I - I
> +////GPIO14 unused G O L -
> +////GPIO15 unused G O L -
> +////GPIO16 PM_DPRSLPVR N - - -
> +////GNT5#/GPIO17 GNT5# N - - -
> +////STPPCI#/GPIO18 PM_STPPCI# N - - -
> +////STPCPU#/GPIO20 PM_STPCPU# N - - -
> +////GPIO22 CRT_RefClk G I - -
> +////GPIO23 unused G O L -
> +////GPIO24 unused G O L -
> +////GPIO25 DMI strap G O L -
> +////GPIO26 unused G O L -
> +////GPIO27 unused G O L -
> +////GPIO28 RF_KILL# G O H -
> +////OC5#/GPIO29 OC N - - -
> +////OC6#/GPIO30 OC N - - -
> +////OC7#/GPIO31 OC N - - -
> +////CLKRUN#/GPIO32 PM_CLKRUN# N - - -
> +////GPIO33 NC G O L -
> +////GPIO34 BOARD ID0 G I - -
> +////GPIO36 unused G O L -
> +////GPIO38 BOARD ID1 G I - -
> +////GPIO39 unused G O L -
> +////GPIO48 unused G O L -
> +////CPUPWRGD/GPIO49 H_PWRGD N - - -
> +//
> +//#define GPIO_USE_SEL_VAL 0x1FC0FFFF //GPIO1, 10, 13 is EC
> signal
> +//#define GPIO_USE_SEL2_VAL 0x000100D6
> +//#define GPIO_IO_SEL_VAL 0x00402502
> +//#define GPIO_IO_SEL2_VAL 0x00000044
> +//#define GPIO_LVL_VAL 0x1800083D
> +//#define GPIO_LVL2_VAL 0x00000000
> +//#define GPIO_INV_VAL 0x00002402
> +//#define GPIO_BLNK_VAL 0x00000000
> +//#define ICH_GPI_ROUTE (ICH_GPI_ROUTE_SCI(13) |
> ICH_GPI_ROUTE_SCI(1))
> +
> +//
> +// GPIO Register Settings for CedarRock and CedarFalls platforms
> +//
> +// GPIO Register Settings for NB10_CRB
> +//---------------------------------------------------------------------------------
> +//Signal Used As USE I/O LVL
> +//---------------------------------------------------------------------------------
> +//
> +// GPIO0 FP_AUDIO_DETECT G I
> +// GPIO1 SMC_RUNTIME_SCI# G I
> +// GPIO2 INT_PIRQE_N N I
> +// GPIO3 INT_PIRQF_N N I
> +// GPIO4 INT_PIRQG_N N I
> +// GPIO5 INT_PIRQH_N N I
> +// GPIO6
> +// GPIO7
> +// GPIO8
> +// GPIO9 LPC_SIO_PME G I
> +// GPIO10 SMC_EXTSMI_N G I
> +// GPIO11 SMBALERT- pullup N
> +// GPIO12 ICH_GP12 G I
> +// GPIO13 SMC_WAKE_SCI_N G I
> +// GPIO14 LCD_PID0 G O H
> +// GPIO15 CONFIG_MODE_N G I
> +// GPIO16 PM_DPRSLPVR N
> +// GPIO17 SPI_SELECT_STRAP1
> +// /L_BKLTSEL0_N G I
> +// GPIO18 PM_STPPCI_N N
> +// GPIO19
> +// GPIO20 PM_STPCPU_N N
> +// GPIO21
> +// GPIO22 REQ4B G I
> +// GPIO23 L_DRQ1_N N
> +// GPIO24 CRB_SV_DET_N G O H
> +// GPIO25 DMI strap
> +// / L_BKLTSEL1_N G O H
> +// GPIO26 LCD_PID1 G O H
> +// GPIO27 TPEV_DDR3L_DETECT G O H
> +// GPIO28 RF_KILL G O H:enable
> +// GPIO29 OC N
> +// GPIO30 OC N
> +// GPIO31 OC N
> +// GPIO32 PM_CLKRUN_N Native
> +// GPIO33 MFG_MODE_N G I
> +// GPIO34 BOARD ID0 G I
> +// GPIO35
> +// GPIO36 SV_SET_UP G O H
> +// GPIO37
> +// GPIO38 BOARD ID1 G I
> +// GPIO39 BOARD ID2 G I
> +// GPIO48 FLASH_SEL0 N
> +// GPIO49 H_PWRGD N
> +
> +#define ICH_GPI_ROUTE_SMI(Gpio) ((( 0 << ((Gpio * 2) + 1)) | (1 <<
> (Gpio * 2))))
> +#define ICH_GPI_ROUTE_SCI(Gpio) ((( 1 << ((Gpio * 2) + 1)) | (0 <<
> (Gpio * 2))))
> +
> +#define GPIO_USE_SEL_VAL 0X1F42F7C3
> +#define GPIO_USE_SEL2_VAL 0X000000D6
> +#define GPIO_IO_SEL_VAL 0X1042B73F
> +#define GPIO_IO_SEL2_VAL 0X000100C6
> +#define GPIO_LVL_VAL 0X1F15F601
> +#define GPIO_LVL2_VAL 0X000200D7
> +#define GPIO_INV_VAL 0x00002602
> +#define GPIO_BLNK_VAL 0x00040000
> +#define ICH_GPI_ROUTE (ICH_GPI_ROUTE_SCI(13) |
> ICH_GPI_ROUTE_SCI(1))
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/HwWatchdogTimer.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/HwWatchdogTimer.h
> new file mode 100644
> index 0000000000..592ac285ea
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/HwWatchdogTimer.h
> @@ -0,0 +1,294 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + HwWatchdogTimer.h
> +
> +Abstract:
> +
> +
> +--*/
> +
> +#ifndef __EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL_H__
> +#define __EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL_H__
> +
> +#define EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL_GUID \
> + { 0xd5b06d16, 0x2ea1, 0x4def, 0x98, 0xd0, 0xa0, 0x5d, 0x40, 0x72, 0x84,
> 0x17 }
> +
> +#define EFI_WATCHDOG_TIMER_NOT_SUPPORTED_PROTOCOL_GUID \
> + { 0xe9e156ac, 0x3203, 0x4572, 0xac, 0xdf, 0x84, 0x4f, 0xdc, 0xdb, 0x6, 0xbf }
> +
> +
> +#include <Guid/HwWatchdogTimerHob.h>
> +
> +//
> +// General Purpose Constants
> +//
> +#define ICH_INSTAFLUSH_GPIO BIT16 // BIT 16 in GPIO Level 2 is GPIO 48.
> +#define B_INSTAFLUSH BIT4
> +//
> +// Other Watchdog timer values
> +//
> +#define WDT_COUNTDOWN_VALUE 0x14
> +#define BDS_WDT_COUNTDOWN_VALUE 0x35
> +
> +
> +//
> +// Prototypes for the Watchdog Timer Driver Protocol
> +//
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_WATCHDOG_START_TIMER) (
> + VOID
> + );
> +/*++
> +
> + Routine Description:
> + This service begins the Watchdog Timer countdown. If the countdown
> completes prior to
> + Stop Timer or Restart Timer the system will reset.
> +
> + Arguments:
> + None
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_WATCHDOG_RESET_TIMER) (
> + VOID
> + );
> +/*++
> +
> + Routine Description:
> + This service resets the Watchdog Timer countdown and should only be
> called after the
> + Start Timer function.
> +
> + Arguments:
> + None
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +
> +
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_WATCHDOG_RESTART_TIMER) (
> + VOID
> + );
> +/*++
> +
> + Routine Description:
> + This service restarts the Watchdog Timer countdown and should only be
> called after the
> + Start Timer function.
> +
> + Arguments:
> + None
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +
> +
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_WATCHDOG_STOP_TIMER) (
> + VOID
> + );
> +/*++
> +
> + Routine Description:
> + This service disables the Watchdog Timer countdown.
> +
> + Arguments:
> + None
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_WATCHDOG_CHECK_TIMEOUT) (
> + OUT HW_WATCHDOG_TIMEOUT *WatchdogTimeout
> + );
> +/*++
> +
> + Routine Description:
> + This service disables the Watchdog Timer countdown.
> +
> + Arguments:
> + None
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_WATCHDOG_FORCE_REBOOT) (
> + IN BOOLEAN ForceTimeout,
> + IN UINT8 ResetType
> + );
> +/*++
> +
> + Routine Description:
> + This service forces a reboot of the system due to a reset of the
> POWERGOOD_PS,
> + POWERGOOD_CLK, and the BSEL Override
> +
> + Arguments:
> + None
> +
> + Returns:
> + This function should not return!
> +
> + EFI_DEVICE_ERROR - The command was unsuccessful and a reboot did
> not occur
> +
> +--*/
> +
> +
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_WATCHDOG_KNOWN_RESET) (
> + IN BOOLEAN AllowReset
> + );
> +/*++
> +
> + Routine Description:
> + This service notifies the Watchdog Timer of the fact that a known reset is
> occuring.
> +
> + Arguments:
> + AllowReset - TRUE if a Reset is currently expected
> + FALSE if a Reset is not currently expected
> +
> + Returns:
> + This function should not return!
> +
> + EFI_DEVICE_ERROR - The command was unsuccessful and a reboot did
> not occur
> +
> +--*/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_GET_TIMER_COUNT_DOWN_PERIOD)(
> + OUT UINT32 *CountdownValue
> + );
> +/*++
> +
> + Routine Description:
> + This service reads the current Watchdog Timer countdown reload value.
> +
> + Arguments:
> + CountdownValue - pointer to UINT32 to return the value of the reload
> register.
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SET_TIMER_COUNT_DOWN_PERIOD)(
> + OUT UINT32 CountdownValue
> + );
> +/*++
> +
> + Routine Description:
> + This service reads the current Watchdog Timer countdown reload value.
> +
> + Arguments:
> + CountdownValue - Value to set the reload register.
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PEI_WATCHDOG_CLEAR_TIMER_STATE) (
> + );
> +/*++
> +
> + Routine Description:
> + This service clears the state that indicates the Watchdog Timer fired.
> +
> + Arguments:
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_STALL_WATCHDOG_COUNTDOWN) (
> + IN BOOLEAN Stall
> + );
> +/*++
> +
> + Routine Description:
> + This service disables the Watchdog Timer countdown. It also closes the
> recurring restart event
> + if the event exists.
> +
> + Arguments:
> + Stall - TRUE = Stop the timer countdown
> + FALSE = Start the timer countdown
> +
> + Returns:
> + EFI_SUCCESS - Operation completed successfully
> + EFI_DEVICE_ERROR - The command was unsuccessful
> +
> +--*/
> +
> +typedef struct _EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL {
> + EFI_WATCHDOG_START_TIMER StartWatchdogTimer;
> + PEI_WATCHDOG_RESET_TIMER ResetWatchdogTimeout;
> + EFI_WATCHDOG_RESTART_TIMER RestartWatchdogTimer;
> + EFI_WATCHDOG_STOP_TIMER StopWatchdogTimer;
> + EFI_WATCHDOG_CHECK_TIMEOUT CheckWatchdogTimeout;
> + EFI_WATCHDOG_FORCE_REBOOT ForceReboot;
> + EFI_WATCHDOG_KNOWN_RESET AllowKnownReset;
> + EFI_GET_TIMER_COUNT_DOWN_PERIOD GetCountdownPeriod;
> + EFI_SET_TIMER_COUNT_DOWN_PERIOD SetCountdownPeriod;
> + PEI_WATCHDOG_CLEAR_TIMER_STATE ClearTimerState;
> + EFI_STALL_WATCHDOG_COUNTDOWN StallWatchdogCountdown;
> +} EFI_WATCHDOG_TIMER_DRIVER_PROTOCOL;
> +
> +extern EFI_GUID gEfiWatchdogTimerDriverProtocolGuid;
> +extern EFI_GUID gEfiWatchdogTimerNotSupportedProtocolGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/I2cBus.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/I2cBus.h
> new file mode 100644
> index 0000000000..0fccaa0786
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/I2cBus.h
> @@ -0,0 +1,164 @@
> +/** @file
> + I2C bus interface
> +
> + This layer provides I/O access to an I2C device.
> +
> + Copyright (c) 2012, Intel Corporation. All rights reserved.
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef __I2C_BUS_H__
> +#define __I2C_BUS_H__
> +
> +#include <Protocol/I2cHostMcg.h>
> +
> +///
> +/// I2C bus protocol
> +///
> +typedef struct _EFI_I2C_BUS_PROTOCOL EFI_I2C_BUS_PROTOCOL;
> +
> +
> +/**
> + Perform an I2C operation on the device
> +
> + This routine must be called at or below TPL_NOTIFY. For synchronous
> + requests this routine must be called at or below TPL_CALLBACK.
> +
> + N.B. The typical consumers of this API are the third party I2C
> + drivers. Extreme care must be taken by other consumers of this
> + API to prevent confusing the third party I2C drivers due to a
> + state change at the I2C device which the third party I2C drivers
> + did not initiate. I2C platform drivers may use this API within
> + these guidelines.
> +
> + This routine queues an operation to the I2C controller for execution
> + on the I2C bus.
> +
> + As an upper layer driver writer, the following need to be provided
> + to the platform vendor:
> +
> + 1. ACPI CID value or string - this is used to connect the upper layer
> + driver to the device.
> + 2. Slave address array guidance when the I2C device uses more than one
> + slave address. This is used to access the blocks of hardware within
> + the I2C device.
> +
> + @param[in] This Address of an EFI_I2C_BUS_PROTOCOL
> + structure
> + @param[in] SlaveAddressIndex Index into an array of slave addresses for
> + the I2C device. The values in the array are
> + specified by the board designer, with the
> + I2C device driver writer providing the slave
> + address order.
> +
> + For devices that have a single slave address,
> + this value must be zero. If the I2C device
> + uses more than one slave address then the third
> + party (upper level) I2C driver writer needs to
> + specify the order of entries in the slave address
> + array.
> +
> + \ref ThirdPartyI2cDrivers "Third Party I2C Drivers"
> + section in I2cMaster.h.
> + @param[in] Event Event to set for asynchronous operations,
> + NULL for synchronous operations
> + @param[in] RequestPacket Address of an EFI_I2C_REQUEST_PACKET
> + structure describing the I2C operation
> + @param[out] I2cStatus Optional buffer to receive the I2C operation
> + completion status
> +
> + @retval EFI_SUCCESS The operation completed successfully.
> + @retval EFI_ABORTED The request did not complete because the
> driver
> + was shutdown.
> + @retval EFI_ACCESS_DENIED Invalid SlaveAddressIndex value
> + @retval EFI_BAD_BUFFER_SIZE The WriteBytes or ReadBytes buffer size
> is too large.
> + @retval EFI_DEVICE_ERROR There was an I2C error (NACK) during the
> operation.
> + This could indicate the slave device is not present.
> + @retval EFI_INVALID_PARAMETER RequestPacket is NULL
> + @retval EFI_INVALID_PARAMETER TPL is too high
> + @retval EFI_NO_RESPONSE The I2C device is not responding to the
> + slave address. EFI_DEVICE_ERROR may also be
> + returned if the controller can not distinguish
> + when the NACK occurred.
> + @retval EFI_NOT_FOUND I2C slave address exceeds maximum
> address
> + @retval EFI_NOT_READY I2C bus is busy or operation pending, wait for
> + the event and then read status pointed to by
> + the request packet.
> + @retval EFI_OUT_OF_RESOURCES Insufficient memory for I2C operation
> + @retval EFI_TIMEOUT The transaction did not complete within an
> internally
> + specified timeout period.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_I2C_BUS_START_REQUEST) (
> + IN CONST EFI_I2C_BUS_PROTOCOL *This,
> + IN UINTN SlaveAddressIndex,
> + IN EFI_EVENT Event OPTIONAL,
> + IN CONST EFI_I2C_REQUEST_PACKET *RequestPacket,
> + OUT EFI_STATUS *I2cStatus OPTIONAL
> + );
> +
> +///
> +/// The I2C bus protocol enables access to a specific device on the I2C bus.
> +///
> +/// Each I2C device is described as an ACPI node (HID, UID and CID) within
> the
> +/// platform layer. The I2C bus protocol enumerates the I2C devices in the
> +/// platform and creates a unique handle and device path for each I2C
> device.
> +///
> +/// I2C slave addressing is abstracted to validate addresses and limit
> operation
> +/// to the specified I2C device. The third party providing the I2C device
> support
> +/// provides an ordered list of slave addresses for the I2C device to the
> team
> +/// building the platform layer. The platform team must preserve the order
> of the
> +/// supplied list. SlaveAddressCount is the number of entries in this list or
> +/// array within the platform layer. The third party device support
> references
> +/// a slave address using an index into the list or array in the range of zero
> +/// to SlaveAddressCount - 1.
> +///
> +struct _EFI_I2C_BUS_PROTOCOL {
> + ///
> + /// Start an I2C operation on the bus
> + ///
> + EFI_I2C_BUS_START_REQUEST StartRequest;
> +
> + ///
> + /// The maximum number of slave addresses for the I2C device. The caller
> may
> + /// validate this value as a check on the platform layer's configuration.
> Slave
> + /// address selection uses an index value in the range of zero to
> SlaveAddressCount - 1.
> + ///
> + UINTN SlaveAddressCount;
> +
> + ///
> + /// Hardware revision - Matches the ACPI _HRV value
> + ///
> + /// The HardwareRevision value allows a single driver to support multiple
> hardware
> + /// revisions and implement the necessary workarounds for limitations
> within the
> + /// hardware.
> + ///
> + UINT32 HardwareRevision;
> +
> + ///
> + /// The maximum number of bytes the I2C host controller
> + /// is able to receive from the I2C bus.
> + ///
> + UINT32 MaximumReceiveBytes;
> +
> + ///
> + /// The maximum number of bytes the I2C host controller
> + /// is able to send on the I2C bus.
> + ///
> + UINT32 MaximumTransmitBytes;
> +
> + ///
> + /// The maximum number of bytes in the I2C bus transaction.
> + ///
> + UINT32 MaximumTotalBytes;
> +};
> +
> +///
> +/// GUID for the I2C bus protocol
> +///
> +extern EFI_GUID gEfiI2cBusProtocolGuid;
> +
> +#endif // __I2C_BUS_H__
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchExtendedReset.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchExtendedReset.h
> new file mode 100644
> index 0000000000..ef7975b033
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchExtendedReset.h
> @@ -0,0 +1,84 @@
> +/*++
> +
> +Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + PchExtendedReset.h
> +
> +Abstract:
> +
> + PCH Extended Reset Protocol
> +
> +--*/
> +#ifndef _EFI_PCH_EXTENDED_RESET_H_
> +#define _EFI_PCH_EXTENDED_RESET_H_
> +
> +
> +
> +//
> +#define EFI_PCH_EXTENDED_RESET_PROTOCOL_GUID \
> + { \
> + 0xf0bbfca0, 0x684e, 0x48b3, 0xba, 0xe2, 0x6c, 0x84, 0xb8, 0x9e, 0x53, 0x39
> \
> + }
> +extern EFI_GUID gEfiPchExtendedResetProtocolGuid;
> +
> +//
> +// Forward reference for ANSI C compatibility
> +//
> +typedef struct _EFI_PCH_EXTENDED_RESET_PROTOCOL
> EFI_PCH_EXTENDED_RESET_PROTOCOL;
> +
> +//
> +// Related Definitions
> +//
> +//
> +// PCH Extended Reset Types
> +//
> +typedef struct {
> + UINT8 PowerCycle : 1; // 0: Disabled*; 1: Enabled
> + UINT8 GlobalReset : 1; // 0: Disabled*; 1: Enabled
> + UINT8 SusPwrDnAck : 1; // 0: Do Nothing;
> + // 1: GPIO[30](SUS_PWR_DN_ACK) level is set low prior to Global
> Reset(for systems with an embedded controller)
> + UINT8 RsvdBits : 5; // Reserved fields for future expansion w/o protocol
> change
> +} PCH_EXTENDED_RESET_TYPES;
> +
> +//
> +// Member functions
> +//
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_PCH_EXTENDED_RESET) (
> + IN EFI_PCH_EXTENDED_RESET_PROTOCOL * This,
> + IN PCH_EXTENDED_RESET_TYPES PchExtendedResetTypes
> + );
> +
> +/*++
> +
> +Routine Description:
> +
> + Execute Pch Extended Reset from the host controller.
> +
> +Arguments:
> +
> + This - Pointer to the EFI_PCH_EXTENDED_RESET_PROTOCOL
> instance.
> + PchExtendedResetTypes - Pch Extended Reset Types which includes
> PowerCycle, Globalreset.
> +
> +Returns:
> +
> + Does not return if the reset takes place.
> + EFI_INVALID_PARAMETER - If ResetType is invalid.
> +
> +--*/
> +
> +//
> +// Interface structure for the Pch Extended Reset Protocol
> +//
> +struct _EFI_PCH_EXTENDED_RESET_PROTOCOL {
> + EFI_PCH_EXTENDED_RESET Reset;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchInfo.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchInfo.h
> new file mode 100644
> index 0000000000..22e25c27fa
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchInfo.h
> @@ -0,0 +1,60 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchInfo.h
> +
> + @brief
> + This file defines the PCH Info Protocol.
> +
> +**/
> +#ifndef _PCH_INFO_H_
> +#define _PCH_INFO_H_
> +
> +
> +#define EFI_PCH_INFO_PROTOCOL_GUID \
> + { \
> + 0xd31f0400, 0x7d16, 0x4316, 0xbf, 0x88, 0x60, 0x65, 0x88, 0x3b, 0x40, 0x2b
> \
> + }
> +extern EFI_GUID gEfiPchInfoProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _EFI_PCH_INFO_PROTOCOL EFI_PCH_INFO_PROTOCOL;
> +
> +///
> +/// Protocol revision number
> +/// Any backwards compatible changes to this protocol will result in an
> update in the revision number
> +/// Major changes will require publication of a new protocol
> +///
> +/// Revision 1: Original version
> +///
> +#define PCH_INFO_PROTOCOL_REVISION_1 1
> +#define PCH_INFO_PROTOCOL_REVISION_2 2
> +
> +///
> +/// RCVersion[7:0] is the release number.
> +/// For example:
> +/// VlvFramework 0.6.0-01 should be 00 06 00 01 (0x00060001)
> +/// VlvFramework 0.6.2 should be 00 06 02 00 (0x00060200)
> +///
> +#define PCH_RC_VERSION 0x01000000
> +
> +///
> +/// Protocol definition
> +///
> +struct _EFI_PCH_INFO_PROTOCOL {
> + UINT8 Revision;
> + UINT8 BusNumber;
> + UINT32 RCVersion;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchPlatformPolicy.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchPlatformPolicy.h
> new file mode 100644
> index 0000000000..79845d646d
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchPlatformPolicy.h
> @@ -0,0 +1,550 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchPlatformPolicy.h
> +
> + @brief
> + PCH policy protocol produced by a platform driver specifying various
> + expected PCH settings. This protocol is consumed by the PCH drivers.
> +
> +**/
> +#ifndef _PCH_PLATFORM_POLICY_H_
> +#define _PCH_PLATFORM_POLICY_H_
> +
> +
> +//
> +#include "PchRegs.h"
> +#ifndef ECP_FLAG
> +#include "Uefi.h"
> +#endif
> +
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_GUID \
> + { \
> + 0x4b0165a9, 0x61d6, 0x4e23, 0xa0, 0xb5, 0x3e, 0xc7, 0x9c, 0x2e, 0x30,
> 0xd5 \
> + }
> +extern EFI_GUID gDxePchPlatformPolicyProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _DXE_PCH_PLATFORM_POLICY_PROTOCOL
> DXE_PCH_PLATFORM_POLICY_PROTOCOL;
> +
> +///
> +/// Protocol revision number
> +/// Any backwards compatible changes to this protocol will result in an
> update in the revision number
> +/// Major changes will require publication of a new protocol
> +///
> +/// Revision 1: Original version
> +///
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_1 1
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_2 2
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_3 3
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_4 4
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_5 5
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_6 6
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_7 7
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_8 8
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_9 9
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_10 10
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_11 11
> +#define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_12 12
> +
> +///
> +/// Generic definitions for device enabling/disabling used by PCH code.
> +///
> +#define PCH_DEVICE_ENABLE 1
> +#define PCH_DEVICE_DISABLE 0
> +
> +///
> +/// ---------------------------- Device Enabling ------------------------------
> +///
> +/// PCH Device enablings
> +///
> +typedef struct {
> + UINT8 Lan : 1; /// 0: Disable; 1: Enable
> + UINT8 Azalia : 2; /// 0: Disable; 1: Enable; 2: Auto
> + UINT8 Sata : 1; /// 0: Disable; 1: Enable
> + UINT8 Smbus : 1; /// 0: Disable; 1: Enable
> + UINT8 LpeEnabled : 2; /// 0: Disabled; 1: PCI Mode 2: ACPI Mode
> + UINT8 Reserved[1]; /// Reserved fields for future expansion w/o
> protocol change
> +} PCH_DEVICE_ENABLING;
> +
> +///
> +/// ---------------------------- USB Config -----------------------------
> +///
> +///
> +/// Overcurrent pins
> +///
> +typedef enum {
> + PchUsbOverCurrentPin0 = 0,
> + PchUsbOverCurrentPin1,
> + PchUsbOverCurrentPin2,
> + PchUsbOverCurrentPin3,
> + PchUsbOverCurrentPin4,
> + PchUsbOverCurrentPin5,
> + PchUsbOverCurrentPin6,
> + PchUsbOverCurrentPin7,
> + PchUsbOverCurrentPinSkip,
> + PchUsbOverCurrentPinMax
> +} PCH_USB_OVERCURRENT_PIN;
> +
> +typedef struct {
> + UINT8 Enable : 1; /// 0: Disable; 1: Enable. This would take effect
> while UsbPerPortCtl is enabled
> + UINT8 Panel : 1; /// 0: Back Panel Port; 1: Front Panel Port.
> + UINT8 Dock : 1; /// 0: Not docking port; 1: Docking Port.
> + UINT8 Rsvdbits : 5;
> +} PCH_USB_PORT_SETTINGS;
> +
> +typedef struct {
> + UINT8 Enable : 1; /// 0: Disable; 1: Enable
> + UINT8 Rsvdbits : 7;
> +} PCH_USB20_CONTROLLER_SETTINGS;
> +
> +typedef struct {
> + UINT8 Enable : 2; /// 0: 0: Disabled; 1: PCI Mode 2: ACPI Mode
> + UINT8 Rsvdbits : 6;
> +} PCH_USBOTG_CONTROLLER_SETTINGS;
> +
> +#define PCH_XHCI_MODE_OFF 0
> +#define PCH_XHCI_MODE_ON 1
> +#define PCH_XHCI_MODE_AUTO 2
> +#define PCH_XHCI_MODE_SMARTAUTO 3
> +
> +#define PCH_EHCI_DEBUG_OFF 0
> +#define PCH_EHCI_DEBUG_ON 1
> +
> +#define PCH_USB_FRONT_PANEL 1
> +#define PCH_USB_BACK_PANEL 0
> +
> +typedef struct {
> + UINT8 Mode : 2; /// 0: Disable; 1: Enable, 2: Auto, 3: Smart Auto
> + UINT8 PreBootSupport : 1; /// 0: No xHCI driver available; 1: xHCI driver
> available
> + UINT8 XhciStreams : 1; /// 0: Disable; 1: Enable
> + UINT8 Rsvdbits : 4;
> +} PCH_USB30_CONTROLLER_SETTINGS;
> +
> +typedef struct {
> + UINT8 UsbPerPortCtl : 1; /// 0: Disable; 1: Enable Per-port enable
> control
> + UINT8 Ehci1Usbr : 1; /// 0: Disable; 1: Enable EHCI 1 USBR
> + UINT8 RsvdBits : 6;
> + PCH_USB_PORT_SETTINGS
> PortSettings[PCH_USB_MAX_PHYSICAL_PORTS];
> + PCH_USB20_CONTROLLER_SETTINGS
> Usb20Settings[PchEhciControllerMax];
> + PCH_USB30_CONTROLLER_SETTINGS Usb30Settings;
> + PCH_USBOTG_CONTROLLER_SETTINGS UsbOtgSettings;
> + PCH_USB_OVERCURRENT_PIN
> Usb20OverCurrentPins[PCH_USB_MAX_PHYSICAL_PORTS];
> + PCH_USB_OVERCURRENT_PIN
> Usb30OverCurrentPins[PCH_XHCI_MAX_USB3_PORTS];
> + ///
> + /// The length of Usb Port to configure the USB transmitter,
> + /// Bits [16:4] represents length of Usb Port in inches using octal format
> and [3:0] is for the decimal Point.
> + ///
> + UINT16 Usb20PortLength[PCH_EHCI_MAX_PORTS];
> + UINT16 EhciDebug;
> + UINT16 UsbXhciLpmSupport;
> +
> +} PCH_USB_CONFIG;
> +
> +///
> +/// ---------------------------- PCI Express Config ----------------------
> +///
> +/// The values before AutoConfig match the setting of PCI Express Base
> Specification 1.1, please be careful for adding new feature
> +///
> +typedef enum {
> + PchPcieAspmDisabled,
> + PchPcieAspmL0s,
> + PchPcieAspmL1,
> + PchPcieAspmL0sL1,
> + PchPcieAspmAutoConfig,
> + PchPcieAspmMax
> +} PCH_PCI_EXPRESS_ASPM_CONTROL;
> +
> +///
> +/// Refer to PCH EDS for the PCH implementation values corresponding
> +/// to below PCI-E spec defined ranges
> +///
> +typedef enum {
> + PchPciECompletionTO_Default,
> + PchPciECompletionTO_50_100us,
> + PchPciECompletionTO_1_10ms,
> + PchPciECompletionTO_16_55ms,
> + PchPciECompletionTO_65_210ms,
> + PchPciECompletionTO_260_900ms,
> + PchPciECompletionTO_1_3P5s,
> + PchPciECompletionTO_4_13s,
> + PchPciECompletionTO_17_64s,
> + PchPciECompletionTO_Disabled
> +} PCH_PCIE_COMPLETION_TIMEOUT;
> +
> +typedef struct {
> + UINT8 Enable : 1; /// Root Port enabling, 0: Disable; 1: Enable.
> + UINT8 Hide : 1; /// Whether or not to hide the configuration
> space of this port
> + UINT8 SlotImplemented : 1;
> + UINT8 HotPlug : 1;
> + UINT8 PmSci : 1;
> + UINT8 ExtSync : 1; /// Extended Synch
> + UINT8 Rsvdbits : 2;
> + ///
> + /// Error handlings
> + ///
> + UINT8 UnsupportedRequestReport : 1;
> + UINT8 FatalErrorReport : 1;
> + UINT8 NoFatalErrorReport : 1;
> + UINT8 CorrectableErrorReport : 1;
> + UINT8 PmeInterrupt : 1;
> + UINT8 SystemErrorOnFatalError : 1;
> + UINT8 SystemErrorOnNonFatalError : 1;
> + UINT8 SystemErrorOnCorrectableError : 1;
> +
> + UINT8 AdvancedErrorReporting : 1;
> + UINT8 TransmitterHalfSwing : 1;
> + UINT8 Reserved : 6; /// Reserved fields for future expansion
> w/o protocol change
> +
> + UINT8 FunctionNumber; /// The function number this root
> port is mapped to.
> + UINT8 PhysicalSlotNumber;
> + PCH_PCIE_COMPLETION_TIMEOUT CompletionTimeout;
> + PCH_PCI_EXPRESS_ASPM_CONTROL Aspm;
> +} PCH_PCI_EXPRESS_ROOT_PORT_CONFIG;
> +
> +typedef struct {
> + /**
> + VendorId
> +
> + The vendor Id of Pci Express card ASPM setting override, 0xFFFF means
> any Vendor ID
> +
> + DeviceId
> +
> + The Device Id of Pci Express card ASPM setting override, 0xFFFF means
> any Device ID
> +
> + RevId
> +
> + The Rev Id of Pci Express card ASPM setting override, 0xFF means all
> steppings
> +
> + BaseClassCode
> +
> + The Base Class Code of Pci Express card ASPM setting override, 0xFF
> means all base class
> +
> + SubClassCode
> +
> + The Sub Class Code of Pci Express card ASPM setting override, 0xFF
> means all sub class
> +
> +
> + EndPointAspm
> +
> + The override ASPM setting from End point
> + **/
> + UINT16 VendorId;
> + UINT16 DeviceId;
> + UINT8 RevId;
> + UINT8 BaseClassCode;
> + UINT8 SubClassCode;
> + PCH_PCI_EXPRESS_ASPM_CONTROL EndPointAspm;
> +} PCH_PCIE_DEVICE_ASPM_OVERRIDE;
> +
> +typedef struct {
> + UINT16 VendorId; ///< PCI configuration space offset 0
> + UINT16 DeviceId; ///< PCI configuration space offset 2
> + UINT8 RevId; ///< PCI configuration space offset 8; 0xFF means all
> steppings
> + /**
> + SnoopLatency bit definition
> + Note: All Reserved bits must be set to 0
> +
> + BIT[15] - When set to 1b, indicates that the values in bits 9:0 are valid
> + When clear values in bits 9:0 will be ignored
> + BITS[14:13] - Reserved
> + BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
> + 000b - 1 ns
> + 001b - 32 ns
> + 010b - 1024 ns
> + 011b - 32,768 ns
> + 100b - 1,048,576 ns
> + 101b - 33,554,432 ns
> + 110b - Reserved
> + 111b - Reserved
> + BITS[9:0] - Snoop Latency Value. The value in these bits will be multiplied
> with
> + the scale in bits 12:10
> + **/
> + UINT16 SnoopLatency;
> + /**
> + NonSnoopLatency bit definition
> + Note: All Reserved bits must be set to 0
> +
> + BIT[15] - When set to 1b, indicates that the values in bits 9:0 are valid
> + When clear values in bits 9:0 will be ignored
> + BITS[14:13] - Reserved
> + BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
> + 000b - 1 ns
> + 001b - 32 ns
> + 010b - 1024 ns
> + 011b - 32,768 ns
> + 100b - 1,048,576 ns
> + 101b - 33,554,432 ns
> + 110b - Reserved
> + 111b - Reserved
> + BITS[9:0] - Non Snoop Latency Value. The value in these bits will be
> multiplied with
> + the scale in bits 12:10
> + **/
> + UINT16 NonSnoopLatency;
> +} PCH_PCIE_DEVICE_LTR_OVERRIDE;
> +
> +typedef struct {
> + ///
> + /// Temp Bus Number range available to be assigned to
> + /// each root port and its downstream devices for initialization
> + /// of these devices before PCI Bus enumeration
> + ///
> + UINT8 TempRootPortBusNumMin;
> + UINT8 TempRootPortBusNumMax;
> + PCH_PCI_EXPRESS_ROOT_PORT_CONFIG
> RootPort[PCH_PCIE_MAX_ROOT_PORTS];
> + BOOLEAN RootPortClockGating;
> + UINT8 NumOfDevAspmOverride; /// Number of PCI
> Express card Aspm setting override
> + PCH_PCIE_DEVICE_ASPM_OVERRIDE *DevAspmOverride; /// The
> Pointer which is point to Pci Express card Aspm setting override
> + UINT8 PcieDynamicGating; /// Need PMC enable it first
> from PMC 0x3_12 MCU 318.
> +} PCH_PCI_EXPRESS_CONFIG;
> +
> +
> +///
> +/// ---------------------------- SATA Config -----------------------------
> +///
> +typedef enum {
> + PchSataSpeedSupportGen1 = 1,
> + PchSataSpeedSupportGen2
> +} PCH_SATA_SPEED_SUPPORT;
> +
> +typedef struct {
> + UINT8 Enable : 1; /// 0: Disable; 1: Enable
> + UINT8 HotPlug : 1; /// 0: Disable; 1: Enable
> + UINT8 MechSw : 1; /// 0: Disable; 1: Enable
> + UINT8 External : 1; /// 0: Disable; 1: Enable
> + UINT8 SpinUp : 1; /// 0: Disable; 1: Enable the COMRESET initialization
> Sequence to the device
> + UINT8 Rsvdbits : 3; /// Reserved fields for future expansion w/o
> protocol change
> +} PCH_SATA_PORT_SETTINGS;
> +
> +typedef struct {
> + PCH_SATA_PORT_SETTINGS PortSettings[PCH_AHCI_MAX_PORTS];
> + UINT8 RaidAlternateId : 1; /// 0: Disable; 1: Enable
> + UINT8 Raid0 : 1; /// 0: Disable; 1: Enable RAID0
> + UINT8 Raid1 : 1; /// 0: Disable; 1: Enable RAID1
> + UINT8 Raid10 : 1; /// 0: Disable; 1: Enable RAID10
> + UINT8 Raid5 : 1; /// 0: Disable; 1: Enable RAID5
> + UINT8 Irrt : 1; /// 0: Disable; 1: Enable Intel Rapid Recovery
> Technology
> + UINT8 OromUiBanner : 1; /// 0: Disable; 1: Enable OROM UI and
> BANNER
> + UINT8 HddUnlock : 1; /// 0: Disable; 1: Indicates that the HDD
> password unlock in the OS is enabled
> +
> + UINT8 LedLocate : 1; /// 0: Disable; 1: Indicates that the LED/SGPIO
> hardware is attached and ping to locate feature is enabled on the OS
> + UINT8 IrrtOnly : 1; /// 0: Disable; 1: Allow only IRRT drives to span
> internal and external ports
> + UINT8 TestMode : 1; /// 0: Disable; 1: Allow entrance to the PCH SATA
> test modes
> + UINT8 SalpSupport : 1; /// 0: Disable; 1: Enable Aggressive Link Power
> Management
> + UINT8 LegacyMode : 1; /// 0: Native PCI mode; 1: Legacy mode, when
> SATA controller is operating in IDE mode
> + UINT8 SpeedSupport : 4; /// Indicates the maximum speed the SATA
> controller can support
> + /// 1h: 1.5 Gb/s (Gen 1); 2h: 3 Gb/s(Gen 2)
> +
> + UINT8 Rsvdbits : 7; // Reserved fields for future expansion w/o
> protocol change
> +} PCH_SATA_CONFIG;
> +///
> +/// --------------------------- AZALIA Config ------------------------------
> +///
> +typedef struct {
> + UINT32 VendorDeviceId;
> + UINT16 SubSystemId;
> + UINT8 RevisionId; /// 0xFF applies to all steppings
> + UINT8 FrontPanelSupport;
> + UINT16 NumberOfRearJacks;
> + UINT16 NumberOfFrontJacks;
> +} PCH_AZALIA_VERB_TABLE_HEADER;
> +
> +typedef struct {
> + PCH_AZALIA_VERB_TABLE_HEADER VerbTableHeader;
> + UINT32 *VerbTableData;
> +} PCH_AZALIA_VERB_TABLE;
> +
> +typedef struct {
> + UINT8 Pme : 1; /// 0: Disable; 1: Enable
> + UINT8 DS : 1; /// 0: Docking is not supported; 1:Docking is
> supported
> + UINT8 DA : 1; /// 0: Docking is not attached; 1:Docking is
> attached
> + UINT8 HdmiCodec : 1; /// 0: Disable; 1: Enable
> + UINT8 AzaliaVCi : 1; /// 0: Disable; 1: Enable
> + UINT8 Rsvdbits : 3;
> + UINT8 AzaliaVerbTableNum; /// Number of verb tables provided
> by platform
> + PCH_AZALIA_VERB_TABLE *AzaliaVerbTable; /// Pointer to the actual
> verb table(s)
> + UINT16 ResetWaitTimer; /// The delay timer after Azalia reset,
> the value is number of microseconds
> +} PCH_AZALIA_CONFIG;
> +
> +///
> +/// --------------------------- Smbus Config ------------------------------
> +///
> +typedef struct {
> + UINT8 NumRsvdSmbusAddresses;
> + UINT8 *RsvdSmbusAddressTable;
> +} PCH_SMBUS_CONFIG;
> +
> +///
> +/// --------------------------- Miscellaneous PM Config -----------------------------
> -
> +///
> +typedef struct {
> + UINT8 MeWakeSts : 1;
> + UINT8 MeHrstColdSts : 1;
> + UINT8 MeHrstWarmSts : 1;
> + UINT8 MeHostPowerDn : 1;
> + UINT8 WolOvrWkSts : 1;
> + UINT8 Rsvdbits : 3;
> +} PCH_POWER_RESET_STATUS;
> +
> +typedef struct {
> + UINT8 PmeB0S5Dis : 1;
> + UINT8 WolEnableOverride : 1;
> + UINT8 Rsvdbits : 6;
> +} PCH_WAKE_CONFIG;
> +
> +typedef enum {
> + PchSlpS360us,
> + PchSlpS31ms,
> + PchSlpS350ms,
> + PchSlpS32s
> +} PCH_SLP_S3_MIN_ASSERT;
> +
> +typedef enum {
> + PchSlpS4PchTime, /// The time defined in EDS Power Sequencing and
> Reset Signal Timings table
> + PchSlpS41s,
> + PchSlpS42s,
> + PchSlpS43s,
> + PchSlpS44s
> +} PCH_SLP_S4_MIN_ASSERT;
> +
> +typedef struct {
> + ///
> + /// Specify which Power/Reset bits need to be cleared by
> + /// the PCH Init Driver.
> + /// Usually platform drivers take care of these bits, but if
> + /// not, let PCH Init driver clear the bits.
> + ///
> + PCH_POWER_RESET_STATUS PowerResetStatusClear;
> + ///
> + /// Specify Wake Policy
> + ///
> + PCH_WAKE_CONFIG WakeConfig;
> + ///
> + /// SLP_XX Minimum Assertion Width Policy
> + ///
> + PCH_SLP_S3_MIN_ASSERT PchSlpS3MinAssert;
> + PCH_SLP_S4_MIN_ASSERT PchSlpS4MinAssert;
> + UINT8 SlpStrchSusUp : 1; /// Enable/Disable SLP_X Stretching
> After SUS Well Power Up
> + UINT8 SlpLanLowDc : 1;
> + UINT8 Rsvdbits : 6;
> +} PCH_MISC_PM_CONFIG;
> +
> +///
> +/// --------------------------- Subsystem Vendor ID / Subsystem ID Config -----
> +///
> +typedef struct {
> + UINT16 SubSystemVendorId;
> + UINT16 SubSystemId;
> +} PCH_DEFAULT_SVID_SID;
> +
> +///
> +/// --------------------------- Lock Down Config ------------------------------
> +///
> +typedef struct {
> + UINT8 GlobalSmi : 1;
> + UINT8 BiosInterface : 1;
> + UINT8 RtcLock : 1;
> + UINT8 BiosLock : 1;
> + UINT8 Rsvdbits : 4;
> + UINT8 PchBiosLockSwSmiNumber;
> +} PCH_LOCK_DOWN_CONFIG;
> +//
> +// --------------------------- Serial IRQ Config ------------------------------
> +//
> +typedef enum {
> + PchQuietMode,
> + PchContinuousMode
> +} PCH_SIRQ_MODE;
> +///
> +/// Refer to SoC EDS for the details of Start Frame Pulse Width in
> Continuous and Quiet mode
> +///
> +
> +typedef struct {
> + BOOLEAN SirqEnable; /// Determines if enable Serial IRQ
> + PCH_SIRQ_MODE SirqMode; /// Serial IRQ Mode Select
> +} PCH_LPC_SIRQ_CONFIG;
> +
> +///
> +/// --------------------------- Power Optimizer Config ------------------------------
> +///
> +typedef struct {
> + UINT8 NumOfDevLtrOverride; /// Number of Pci Express
> card listed in LTR override table
> + PCH_PCIE_DEVICE_LTR_OVERRIDE *DevLtrOverride; /// Pointer to Pci
> Express devices LTR override table
> +} PCH_PWR_OPT_CONFIG;
> +
> +///
> +/// --------------------- Low Power Input Output Config ------------------------
> +///
> +typedef struct {
> + UINT8 LpssPciModeEnabled : 1; /// Determines if LPSS PCI
> Mode enabled
> + UINT8 Dma0Enabled : 1; /// Determines if LPSS DMA1
> enabled
> + UINT8 Dma1Enabled : 1; /// Determines if LPSS DMA2
> enabled
> + UINT8 I2C0Enabled : 1; /// Determines if LPSS I2C #1
> enabled
> + UINT8 I2C1Enabled : 1; /// Determines if LPSS I2C #2
> enabled
> + UINT8 I2C2Enabled : 1; /// Determines if LPSS I2C #3
> enabled
> + UINT8 I2C3Enabled : 1; /// Determines if LPSS I2C #4
> enabled
> + UINT8 I2C4Enabled : 1; /// Determines if LPSS I2C #5
> enabled
> + UINT8 I2C5Enabled : 1; /// Determines if LPSS I2C #6
> enabled
> + UINT8 I2C6Enabled : 1; /// Determines if LPSS I2C #7
> enabled
> + UINT8 Pwm0Enabled : 1; /// Determines if LPSS PWM #1
> enabled
> + UINT8 Pwm1Enabled : 1; /// Determines if LPSS PWM #2
> enabled
> + UINT8 Hsuart0Enabled : 1; /// Determines if LPSS HSUART #1
> enabled
> + UINT8 Hsuart1Enabled : 1; /// Determines if LPSS HSUART #2
> enabled
> + UINT8 SpiEnabled : 1; /// Determines if LPSS SPI enabled
> + UINT8 Rsvdbits : 2;
> +} PCH_LPSS_CONFIG;
> +
> +///
> +/// ----------------------------- SCC Config --------------------------------
> +///
> +typedef struct {
> + UINT8 eMMCEnabled : 1; /// Determines if SCC eMMC
> enabled
> + UINT8 SdioEnabled : 1; /// Determines if SCC SDIO enabled
> + UINT8 SdcardEnabled : 1; /// Determines if SCC SD Card
> enabled
> + UINT8 HsiEnabled : 1; /// Determines if SCC HSI enabled
> + UINT8 eMMC45Enabled : 1; /// Determines if SCC eMMC
> 4.5 enabled
> + UINT8 eMMC45DDR50Enabled : 1; /// Determines if DDR50
> enabled for eMMC 4.5
> + UINT8 eMMC45HS200Enabled : 1; /// Determines if
> HS200nabled for eMMC 4.5
> + UINT8 Rsvdbits : 1;
> + UINT8 SdCardSDR25Enabled : 1; /// Determines if SDR25 for SD
> Card
> + UINT8 SdCardDDR50Enabled : 1; /// Determines if DDR50 for SD
> Card
> + UINT8 Rsvdbits1 : 6;
> + UINT8 eMMC45RetuneTimerValue; /// Determines retune timer
> value.
> +} PCH_SCC_CONFIG;
> +
> +///
> +/// ------------ General PCH Platform Policy protocol definition ------------
> +///
> +struct _DXE_PCH_PLATFORM_POLICY_PROTOCOL {
> + UINT8 Revision;
> + UINT8 BusNumber; /// PCI Bus Number of the PCH device
> + PCH_DEVICE_ENABLING *DeviceEnabling;
> + PCH_USB_CONFIG *UsbConfig;
> + PCH_PCI_EXPRESS_CONFIG *PciExpressConfig;
> +
> + PCH_SATA_CONFIG *SataConfig;
> + PCH_AZALIA_CONFIG *AzaliaConfig;
> + PCH_SMBUS_CONFIG *SmbusConfig;
> + PCH_MISC_PM_CONFIG *MiscPmConfig;
> + PCH_DEFAULT_SVID_SID *DefaultSvidSid;
> + PCH_LOCK_DOWN_CONFIG *LockDownConfig;
> + PCH_LPC_SIRQ_CONFIG *SerialIrqConfig;
> + PCH_PWR_OPT_CONFIG *PwrOptConfig;
> + PCH_LPSS_CONFIG *LpssConfig;
> + PCH_SCC_CONFIG *SccConfig;
> + UINT8 IdleReserve;
> + UINT8 EhciPllCfgEnable;
> + UINT8 AcpiHWRed; //Hardware Reduced Mode
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchReset.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchReset.h
> new file mode 100644
> index 0000000000..7e63f58346
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchReset.h
> @@ -0,0 +1,114 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchReset.h
> +
> + @brief
> + PCH Reset Protocol
> +
> +**/
> +#ifndef _PCH_RESET_H_
> +#define _PCH_RESET_H_
> +
> +
> +//
> +#define PCH_RESET_PROTOCOL_GUID \
> + { \
> + 0xdb63592c, 0xb8cc, 0x44c8, 0x91, 0x8c, 0x51, 0xf5, 0x34, 0x59, 0x8a, 0x5a
> \
> + }
> +#define PCH_RESET_CALLBACK_PROTOCOL_GUID \
> + { \
> + 0x3a3300ab, 0xc929, 0x487d, 0xab, 0x34, 0x15, 0x9b, 0xc1, 0x35, 0x62, 0xc0
> \
> + }
> +extern EFI_GUID gPchResetProtocolGuid;
> +extern EFI_GUID gPchResetCallbackProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _PCH_RESET_PROTOCOL PCH_RESET_PROTOCOL;
> +
> +typedef struct _PCH_RESET_CALLBACK_PROTOCOL
> PCH_RESET_CALLBACK_PROTOCOL;
> +
> +///
> +/// Related Definitions
> +///
> +///
> +/// PCH Reset Types
> +///
> +typedef enum {
> + ColdReset,
> + WarmReset,
> + ShutdownReset,
> + PowerCycleReset,
> + GlobalReset,
> + GlobalResetWithEc
> +} PCH_RESET_TYPE;
> +
> +///
> +/// Member functions
> +///
> +typedef
> +EFI_STATUS
> +(EFIAPI *PCH_RESET) (
> + IN PCH_RESET_PROTOCOL * This,
> + IN PCH_RESET_TYPE PchResetType
> + )
> +/**
> +
> + @brief
> + Execute Pch Reset from the host controller.
> +
> + @param[in] This Pointer to the PCH_RESET_PROTOCOL instance.
> + @param[in] PchResetType Pch Reset Types which includes ColdReset,
> WarmReset, ShutdownReset,
> + PowerCycleReset, GlobalReset, GlobalResetWithEc
> +
> + @retval EFI_SUCCESS Successfully completed.
> + @retval EFI_INVALID_PARAMETER If ResetType is invalid.
> +
> +**/
> +;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *PCH_RESET_CALLBACK) (
> + IN PCH_RESET_TYPE PchResetType
> + )
> +/**
> +
> + @brief
> + Execute call back function for Pch Reset.
> +
> + @param[in] PchResetType Pch Reset Types which includes PowerCycle,
> Globalreset.
> +
> + @retval EFI_SUCCESS The callback function has been done
> successfully
> + @retval EFI_NOT_FOUND Failed to find Pch Reset Callback protocol.
> Or, none of
> + callback protocol is installed.
> + @retval Others Do not do any reset from PCH
> +
> +**/
> +;
> +
> +///
> +/// Interface structure for the Pch Reset Protocol
> +///
> +struct _PCH_RESET_PROTOCOL {
> + PCH_RESET Reset;
> +};
> +
> +///
> +/// PCH_RESET_CALLBACK_PROTOCOL Structure Definition
> +///
> +struct _PCH_RESET_CALLBACK_PROTOCOL {
> + PCH_RESET_CALLBACK ResetCallback;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchS3Support.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchS3Support.h
> new file mode 100644
> index 0000000000..ae1543c9ea
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/PchS3Support.h
> @@ -0,0 +1,132 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + PchS3Support.h
> +
> + @brief
> + This file defines the PCH S3 support Protocol.
> +
> +**/
> +#ifndef _PCH_S3_SUPPORT_PROTOCOL_H_
> +#define _PCH_S3_SUPPORT_PROTOCOL_H_
> +
> +#ifndef ECP_FLAG
> +#include <Pi/PiS3BootScript.h>
> +#endif
> +
> +#define EFI_PCH_S3_SUPPORT_PROTOCOL_GUID \
> + { \
> + 0xe287d20b, 0xd897, 0x4e1e, 0xa5, 0xd9, 0x97, 0x77, 0x63, 0x93, 0x6a, 0x4
> \
> + }
> +
> +#include <Protocol/PchPlatformPolicy.h>
> +
> +///
> +/// Extern the GUID for protocol users.
> +///
> +extern EFI_GUID gEfiPchS3SupportProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _EFI_PCH_S3_SUPPORT_PROTOCOL
> EFI_PCH_S3_SUPPORT_PROTOCOL;
> +
> +typedef enum {
> + PchS3ItemTypeSendCodecCommand,
> + PchS3ItemTypePollStatus,
> + PchS3ItemTypeInitPcieRootPortDownstream,
> + PchS3ItemTypePcieSetPm,
> + PchS3ItemTypePmTimerStall,
> + PchS3ItemTypeMax
> +} EFI_PCH_S3_DISPATCH_ITEM_TYPE;
> +
> +///
> +/// It's better not to use pointer here because the size of pointer in DXE is 8,
> but it's 4 in PEI
> +/// plug 4 to ParameterSize in PEIM if you really need it
> +///
> +typedef struct {
> + UINT32 HdaBar;
> + UINT32 CodecCmdData;
> +} EFI_PCH_S3_PARAMETER_SEND_CODEC_COMMAND;
> +
> +typedef struct {
> + UINT64 MmioAddress;
> + EFI_BOOT_SCRIPT_WIDTH Width;
> + UINT64 Mask;
> + UINT64 Value;
> + UINT32 Timeout; // us
> +} EFI_PCH_S3_PARAMETER_POLL_STATUS;
> +
> +typedef struct {
> + UINT8 RootPortBus;
> + UINT8 RootPortDevice;
> + UINT8 RootPortFunc;
> + UINT8 TempBusNumberMin;
> + UINT8 TempBusNumberMax;
> +} EFI_PCH_S3_PARAMETER_INIT_PCIE_ROOT_PORT_DOWNSTREAM;
> +
> +typedef struct {
> + UINT8 RootPortBus;
> + UINT8 RootPortDevice;
> + UINT8 RootPortFunc;
> + PCH_PCI_EXPRESS_ASPM_CONTROL RootPortAspm;
> + UINT8 NumOfDevAspmOverride;
> + UINT32 DevAspmOverrideAddr;
> + UINT8 TempBusNumberMin;
> + UINT8 TempBusNumberMax;
> + UINT8 NumOfDevLtrOverride;
> + UINT32 DevLtrOverrideAddr;
> +} EFI_PCH_S3_PARAMETER_PCIE_SET_PM;
> +
> +typedef struct {
> + UINT32 DelayTime; // us
> +} EFI_PCH_S3_PARAMETER_PM_TIMER_STALL;
> +
> +typedef struct {
> + EFI_PCH_S3_DISPATCH_ITEM_TYPE Type;
> + VOID *Parameter;
> +} EFI_PCH_S3_DISPATCH_ITEM;
> +
> +///
> +/// Member functions
> +///
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_PCH_S3_SUPPORT_SET_S3_DISPATCH_ITEM) (
> + IN EFI_PCH_S3_SUPPORT_PROTOCOL * This,
> + IN EFI_PCH_S3_DISPATCH_ITEM * DispatchItem,
> + OUT EFI_PHYSICAL_ADDRESS * S3DispatchEntryPoint
> + );
> +
> +/**
> +
> + @brief
> + Set an item to be dispatched at S3 resume time. At the same time, the
> entry point
> + of the PCH S3 support image is returned to be used in subsequent boot
> script save
> + call
> +
> + @param[in] This Pointer to the protocol instance.
> + @param[in] DispatchItem The item to be dispatched.
> + @param[in] S3DispatchEntryPoint The entry point of the PCH S3 support
> image.
> +
> + @retval EFI_STATUS Successfully completed.
> + @retval EFI_OUT_OF_RESOURCES Out of resources.
> +
> +**/
> +
> +///
> +/// Protocol definition
> +///
> +struct _EFI_PCH_S3_SUPPORT_PROTOCOL {
> + EFI_PCH_S3_SUPPORT_SET_S3_DISPATCH_ITEM SetDispatchItem;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SdHostIo.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SdHostIo.h
> new file mode 100644
> index 0000000000..c0c94b9384
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SdHostIo.h
> @@ -0,0 +1,409 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +--*/
> +
> +
> +/*++
> +Module Name:
> +
> + SdHostIo.h
> +
> +Abstract:
> +
> + Interface definition for EFI_SD_HOST_IO_PROTOCOL
> +
> +--*/
> +
> +#ifndef _SD_HOST_IO_H
> +#define _SD_HOST_IO_H
> +
> +
> +// Global ID for the EFI_SD_HOST_IO_PROTOCOL
> +// {B63F8EC7-A9C9-4472-A4C0-4D8BF365CC51}
> +//
> +#define EFI_SD_HOST_IO_PROTOCOL_GUID \
> + { 0xb63f8ec7, 0xa9c9, 0x4472, { 0xa4, 0xc0, 0x4d, 0x8b, 0xf3, 0x65, 0xcc,
> 0x51 } }
> +
> +typedef struct _EFI_SD_HOST_IO_PROTOCOL EFI_SD_HOST_IO_PROTOCOL;
> +
> +//
> +// TODO: Move to Pci22.h
> +//
> +#define PCI_SUBCLASS_SD_HOST_CONTROLLER 0x05
> +#define PCI_IF_STANDARD_HOST_NO_DMA 0x00
> +#define PCI_IF_STANDARD_HOST_SUPPORT_DMA 0x01
> +
> +//
> +// TODO: Retire
> +//
> +#define EFI_SD_HOST_IO_PROTOCOL_REVISION_01 0x01
> +
> +//
> +// TODO: Do these belong in an Industry Standard include file?
> +//
> +// MMIO Registers definition for MMC/SDIO controller
> +//
> +#define MMIO_DMAADR 0x00
> +#define MMIO_BLKSZ 0x04
> +#define MMIO_BLKCNT 0x06
> +#define MMIO_CMDARG 0x08
> +#define MMIO_XFRMODE 0x0C
> +#define MMIO_SDCMD 0x0E
> +#define MMIO_RESP 0x10
> +#define MMIO_BUFDATA 0x20
> +#define MMIO_PSTATE 0x24
> +#define MMIO_HOSTCTL 0x28
> +#define MMIO_PWRCTL 0x29
> +#define MMIO_BLKGAPCTL 0x2A
> +#define MMIO_WAKECTL 0x2B
> +#define MMIO_CLKCTL 0x2C
> +#define MMIO_TOCTL 0x2E
> +#define MMIO_SWRST 0x2F
> +#define MMIO_NINTSTS 0x30
> +#define MMIO_ERINTSTS 0x32
> +#define MMIO_NINTEN 0x34
> +#define MMIO_ERINTEN 0x36
> +#define MMIO_NINTSIGEN 0x38
> +#define MMIO_ERINTSIGEN 0x3A
> +#define MMIO_AC12ERRSTS 0x3C
> +#define MMIO_HOST_CTL2 0x3E //hphang <- New in VLV2
> +#define MMIO_CAP 0x40
> +#define MMIO_CAP2 0x44 //hphang <- New in VLV2
> +#define MMIO_MCCAP 0x48
> +#define MMIO_FORCEEVENTCMD12ERRSTAT 0x50 //hphang <- New in
> VLV2
> +#define MMIO_FORCEEVENTERRINTSTAT 0x52 //hphang <- New in VLV2
> +#define MMIO_ADMAERRSTAT 0x54 //hphang <- New in VLV2
> +#define MMIO_ADMASYSADDR 0x58 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE0 0x60 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE1 0x64 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE2 0x68 //hphang <- New in VLV2
> +#define MMIO_PRESETVALUE3 0x6C //hphang <- New in VLV2
> +#define MMIO_BOOTTIMEOUTCTRL 0x70 //hphang <- New in VLV2
> +#define MMIO_DEBUGSEL 0x74 //hphang <- New in VLV2
> +#define MMIO_SHAREDBUS 0xE0 //hphang <- New in VLV2
> +#define MMIO_SPIINTSUP 0xF0 //hphang <- New in VLV2
> +#define MMIO_SLTINTSTS 0xFC
> +#define MMIO_CTRLRVER 0xFE
> +
> +typedef enum {
> + ResponseNo = 0,
> + ResponseR1,
> + ResponseR1b,
> + ResponseR2,
> + ResponseR3,
> + ResponseR4,
> + ResponseR5,
> + ResponseR5b,
> + ResponseR6,
> + ResponseR7
> +} RESPONSE_TYPE;
> +
> +typedef enum {
> + NoData = 0,
> + InData,
> + OutData
> +} TRANSFER_TYPE;
> +
> +typedef enum {
> + Reset_Auto = 0,
> + Reset_DAT,
> + Reset_CMD,
> + Reset_DAT_CMD,
> + Reset_All,
> + Reset_HW
> +} RESET_TYPE;
> +
> +
> +typedef enum {
> + SDMA = 0,
> + ADMA2,
> + PIO
> +} DMA_MOD;
> +
> +typedef struct {
> + UINT32 HighSpeedSupport: 1; //High speed supported
> + UINT32 V18Support: 1; //1.8V supported
> + UINT32 V30Support: 1; //3.0V supported
> + UINT32 V33Support: 1; //3.3V supported
> + UINT32 SDR50Support: 1;
> + UINT32 SDR104Support: 1;
> + UINT32 DDR50Support: 1;
> + UINT32 Reserved0: 1;
> + UINT32 BusWidth4: 1; // 4 bit width
> + UINT32 BusWidth8: 1; // 8 bit width
> + UINT32 Reserved1: 6;
> + UINT32 SDMASupport: 1;
> + UINT32 ADMA2Support: 1;
> + UINT32 DmaMode: 2;
> + UINT32 ReTuneTimer: 4;
> + UINT32 ReTuneMode: 2;
> + UINT32 Reserved2: 6;
> + UINT32 BoundarySize;
> +} HOST_CAPABILITY;
> +
> +/*++
> +
> + Routine Description:
> + The main function used to send the command to the card inserted into
> the SD host
> + slot.
> + It will assemble the arguments to set the command register and wait for
> the command
> + and transfer completed until timeout. Then it will read the response
> register to fill
> + the ResponseData
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + CommandIndex - The command index to set the command index field of
> command register
> + Argument - Command argument to set the argument field of
> command register
> + DataType - TRANSFER_TYPE, indicates no data, data in or data out
> + Buffer - Contains the data read from / write to the device
> + BufferSize - The size of the buffer
> + ResponseType - RESPONSE_TYPE
> + TimeOut - Time out value in 1 ms unit
> + ResponseData - Depending on the ResponseType, such as CSD or card
> status
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> + EFI_OUT_OF_RESOURCES
> + EFI_TIMEOUT
> + EFI_DEVICE_ERROR
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SEND_COMMAND) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT16 CommandIndex,
> + IN UINT32 Argument,
> + IN TRANSFER_TYPE DataType,
> + IN UINT8 *Buffer, OPTIONAL
> + IN UINT32 BufferSize,
> + IN RESPONSE_TYPE ResponseType,
> + IN UINT32 TimeOut,
> + OUT UINT32 *ResponseData OPTIONAL
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set max clock frequency of the host, the actual frequency
> + may not be the same as MaxFrequency. It depends on
> + the max frequency the host can support, divider, and host
> + speed mode.
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + MaxFrequency - Max frequency in HZ
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_CLOCK_FREQUENCY) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT32 MaxFrequency
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set bus width of the host
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + BusWidth - Bus width in 1, 4, 8 bits
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_BUS_WIDTH) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT32 BusWidth
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set voltage which could supported by the host.
> + Support 0(Power off the host), 1.8V, 3.0V, 3.3V
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + Voltage - Units in 0.1 V
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_VOLTAGE) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT32 Voltage
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set Host High Speed
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + HighSpeed - True for High Speed Mode set, false for normal mode
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_SPEED_MODE) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT32 HighSpeed
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set High Speed Mode
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + SetHostDdrMode - True for DDR Mode set, false for normal mode
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_INVALID_PARAMETER
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT32 DdrMode
> + );
> +
> +
> +/*++
> +
> + Routine Description:
> + Reset the host
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + ResetAll - TRUE to reset all
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_RESET_SD_HOST) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN RESET_TYPE ResetType
> + );
> +
> +/*++
> +
> + Routine Description:
> + Reset the host
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + Enable - TRUE to enable, FALSE to disable
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_ENABLE_AUTO_STOP_CMD) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN BOOLEAN Enable
> + );
> +
> +/*++
> +
> + Routine Description:
> + Find whether these is a card inserted into the slot. If so
> + init the host. If not, return EFI_NOT_FOUND.
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_NOT_FOUND
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_DETECT_CARD_AND_INIT_HOST) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This
> + );
> +
> +/*++
> +
> + Routine Description:
> + Set the Block length
> +
> + Arguments:
> + This - Pointer to EFI_SD_HOST_IO_PROTOCOL
> + BlockLength - card supportes block length
> +
> + Returns:
> + EFI_SUCCESS
> + EFI_TIMEOUT
> +
> +--*/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_BLOCK_LENGTH) (
> + IN EFI_SD_HOST_IO_PROTOCOL *This,
> + IN UINT32 BlockLength
> + );
> +
> +typedef EFI_STATUS
> +(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SETUP_DEVICE)(
> + IN EFI_SD_HOST_IO_PROTOCOL *This
> + );
> +
> +
> +
> +//
> +// Interface structure for the EFI SD Host I/O Protocol
> +//
> +struct _EFI_SD_HOST_IO_PROTOCOL {
> + UINT32 Revision;
> + HOST_CAPABILITY HostCapability;
> + EFI_SD_HOST_IO_PROTOCOL_SEND_COMMAND SendCommand;
> + EFI_SD_HOST_IO_PROTOCOL_SET_CLOCK_FREQUENCY
> SetClockFrequency;
> + EFI_SD_HOST_IO_PROTOCOL_SET_BUS_WIDTH SetBusWidth;
> + EFI_SD_HOST_IO_PROTOCOL_SET_HOST_VOLTAGE SetHostVoltage;
> + EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE
> SetHostDdrMode;
> + EFI_SD_HOST_IO_PROTOCOL_RESET_SD_HOST ResetSdHost;
> + EFI_SD_HOST_IO_PROTOCOL_ENABLE_AUTO_STOP_CMD
> EnableAutoStopCmd;
> + EFI_SD_HOST_IO_PROTOCOL_DETECT_CARD_AND_INIT_HOST
> DetectCardAndInitHost;
> + EFI_SD_HOST_IO_PROTOCOL_SET_BLOCK_LENGTH SetBlockLength;
> + EFI_SD_HOST_IO_PROTOCOL_SETUP_DEVICE SetupDevice;
> + EFI_SD_HOST_IO_PROTOCOL_SET_HOST_SPEED_MODE
> SetHostSpeedMode;
> +};
> +
> +extern EFI_GUID gEfiSdHostIoProtocolGuid;
> +
> +#endif
> +
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmbiosSlotPopulation.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmbiosSlotPopulation.h
> new file mode 100644
> index 0000000000..8b7c42805f
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmbiosSlotPopulation.h
> @@ -0,0 +1,47 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + SmbiosSlotPopulation.h
> +
> +Abstract:
> +
> + EFI SMBIOS slot structure control code.
> +
> +GUID:
> + {EF7BF7D6-F8FF-4a76-8247-C0D0D1CC49C0}
> + 0xef7bf7d6, 0xf8ff, 0x4a76, 0x82, 0x47, 0xc0, 0xd0, 0xd1, 0xcc, 0x49, 0xc0
> +
> +Revision History
> +
> +--*/
> +
> +#ifndef _EFI_SMBIOS_SLOT_POPULATION_H_
> +#define _EFI_SMBIOS_SLOT_POPULATION_H_
> +
> +//
> +// Slot Population Protocol GUID
> +//
> +#define EFI_SMBIOS_SLOT_POPULATION_GUID \
> + { 0xef7bf7d6, 0xf8ff, 0x4a76, 0x82, 0x47, 0xc0, 0xd0, 0xd1, 0xcc, 0x49, 0xc0 }
> +
> +typedef struct {
> + UINT16 SmbiosSlotId; // SMBIOS Slot ID
> + BOOLEAN InUse; // Does the slot have a card in it
> + BOOLEAN Disabled; // Should the slot information be in SMBIOS
> +} EFI_SMBIOS_SLOT_ENTRY;
> +
> +typedef struct {
> + UINT32 NumberOfEntries;
> + EFI_SMBIOS_SLOT_ENTRY *SlotEntries;
> +} EFI_SMBIOS_SLOT_POPULATION_INFO;
> +
> +extern EFI_GUID gEfiSmbiosSlotPopulationGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmmIchnDispatchEx.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmmIchnDispatchEx.h
> new file mode 100644
> index 0000000000..73e12c5d6a
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmmIchnDispatchEx.h
> @@ -0,0 +1,159 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + SmmIchnDispatchEx.h
> +
> + @brief
> + SmmIchnDispatch Extended Protocol
> +
> +**/
> +#ifndef _EFI_SMM_ICHN_DISPATCH_EX_H_
> +#define _EFI_SMM_ICHN_DISPATCH_EX_H_
> +
> +#ifdef ECP_FLAG
> +#include <Protocol/SmmIchnDispatch/SmmIchnDispatch.h>
> +#else
> +#include <Protocol/SmmIchnDispatch.h>
> +#endif
> +
> +#define EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL_GUID \
> + { \
> + 0x3920405b, 0xc897, 0x44da, 0x88, 0xf3, 0x4c, 0x49, 0x8a, 0x6f, 0xf7, 0x36
> \
> + }
> +extern EFI_GUID gEfiSmmIchnDispatchExProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL
> EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL;
> +
> +///
> +/// Related Definitions
> +///
> +///
> +/// Ichn Dispatch Extended Types
> +///
> +typedef enum {
> + IchnExPciExpress = NUM_ICHN_TYPES + 1,
> + IchnExMonitor,
> + IchnExSpi,
> + IchnExQRT,
> + IchnExGpioUnlock,
> + IchnExTmrOverflow,
> + IchnExPcie0Hotplug,
> + IchnExPcie1Hotplug,
> + IchnExPcie2Hotplug,
> + IchnExPcie3Hotplug,
> + IchnExPcie0LinkActive,
> + IchnExPcie1LinkActive,
> + IchnExPcie2LinkActive,
> + IchnExPcie3LinkActive,
> + ///
> + /// INSERT NEW ITEMS JUST BEFORE THIS LINE
> + ///
> + IchnExTypeMAX /// the maximum number of items in this enumeration
> +} EFI_SMM_ICHN_EX_SMI_TYPE;
> +
> +typedef struct {
> + EFI_SMM_ICHN_EX_SMI_TYPE Type;
> +} EFI_SMM_ICHN_DISPATCH_EX_CONTEXT;
> +
> +///
> +/// Member functions
> +///
> +typedef
> +VOID
> +(EFIAPI *EFI_SMM_ICHN_DISPATCH_EX) (
> + IN EFI_HANDLE DispatchHandle,
> + IN EFI_SMM_ICHN_DISPATCH_EX_CONTEXT * DispatchContext
> + );
> +
> +/**
> +
> + @brief
> + Dispatch function for a ICH n Extended specific SMI handler.
> +
> + @param[in] DispatchHandle Handle of this dispatch function.
> + @param[in] DispatchContext Pointer to the dispatch function's context.
> + The DispatchContext fields are filled in
> + by the dispatching driver prior to
> + invoking this dispatch function.
> +
> + @retval None
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SMM_ICHN_EX_REGISTER) (
> + IN EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL * This,
> + IN EFI_SMM_ICHN_DISPATCH_EX DispatchFunction,
> + IN EFI_SMM_ICHN_DISPATCH_EX_CONTEXT * DispatchContext,
> + OUT EFI_HANDLE * DispatchHandle
> + );
> +
> +/**
> +
> + @brief
> + Register a child SMI source dispatch function with a parent SMM driver
> +
> + @param[in] This Protocol instance pointer.
> + @param[in] DispatchFunction Pointer to dispatch function to be invoked
> for
> + this SMI source
> + @param[in] DispatchContext Pointer to the dispatch function's context.
> + The caller fills this context in before calling
> + the register function to indicate to the register
> + function the ICHN SMI source for which the dispatch
> + function should be invoked.
> + @param[in] DispatchHandle Handle of dispatch function, for when
> interfacing
> + with the parent SMM driver.
> +
> + @retval EFI_SUCCESS The dispatch function has been successfully
> + registered and the SMI source has been enabled.
> + @retval EFI_DEVICE_ERROR The driver was unable to enable the SMI
> source.
> + @retval EFI_OUT_OF_RESOURCES Not enough memory (system or SMM)
> to manage this
> + child.
> + @retval EFI_INVALID_PARAMETER DispatchContext is invalid. The ICHN
> input value
> + is not within valid range.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SMM_ICHN_EX_UNREGISTER) (
> + IN EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL * This,
> + IN EFI_HANDLE DispatchHandle
> + );
> +
> +/**
> +
> + @brief
> + Unregister a child SMI source dispatch function with a parent SMM driver
> +
> + @param[in] This Protocol instance pointer.
> + @param[in] DispatchHandle Handle of dispatch function to deregister.
> +
> + @retval EFI_SUCCESS The dispatch function has been successfully
> + unregistered and the SMI source has been disabled
> + if there are no other registered child dispatch
> + functions for this SMI source.
> + @retval EFI_INVALID_PARAMETER Handle is invalid.
> + @retval Others TBD
> +
> +**/
> +
> +///
> +/// Interface structure for the SMM Ich n specific SMI Dispatch Protocol
> +///
> +typedef struct _EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL {
> + EFI_SMM_ICHN_EX_REGISTER Register;
> + EFI_SMM_ICHN_EX_UNREGISTER UnRegister;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmmSmbus.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmmSmbus.h
> new file mode 100644
> index 0000000000..bb2b4d7c13
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/SmmSmbus.h
> @@ -0,0 +1,39 @@
> +/*++
> +
> +Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + SmmSmbus.h
> +
> +Abstract:
> +
> + SmmSmbus Protocol
> +
> +--*/
> +#ifndef __EFI_SMM_SMBUS_PROTOCOL_H__
> +#define __EFI_SMM_SMBUS_PROTOCOL_H__
> +
> +//
> +// GUID for the SmmSmbus Protocol
> +//
> +// EDK and EDKII have different GUID formats
> +//
> +
> +#define EFI_SMM_SMBUS_PROTOCOL_GUID \
> + { \
> + 0x72e40094, 0x2ee1, 0x497a, 0x8f, 0x33, 0x4c, 0x93, 0x4a, 0x9e, 0x9c, 0xc \
> + }
> +
> +//
> +// Resuse the DXE definition, and use another GUID.
> +//
> +typedef EFI_SMBUS_HC_PROTOCOL SMM_SMBUS_HC_PROTOCOL;
> +
> +extern EFI_GUID gEfiSmmSmbusProtocolGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/Spi.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/Spi.h
> new file mode 100644
> index 0000000000..a8d50cbbf2
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/Spi.h
> @@ -0,0 +1,260 @@
> +/**
> +**/
> +/**
> +
> +Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> + @file
> + Spi.h
> +
> + @brief
> + This file defines the EFI SPI Protocol which implements the
> + Intel(R) ICH SPI Host Controller Compatibility Interface.
> +
> +**/
> +#ifndef _EFI_SPI_H_
> +#define _EFI_SPI_H_
> +
> +
> +//
> +#define EFI_SPI_PROTOCOL_GUID \
> + { \
> + 0x1156efc6, 0xea32, 0x4396, 0xb5, 0xd5, 0x26, 0x93, 0x2e, 0x83, 0xc3, 0x13
> \
> + }
> +#define EFI_SMM_SPI_PROTOCOL_GUID \
> + { \
> + 0xD9072C35, 0xEB8F, 0x43ad, 0xA2, 0x20, 0x34, 0xD4, 0x0E, 0x2A, 0x82,
> 0x85 \
> + }
> +extern EFI_GUID gEfiSpiProtocolGuid;
> +extern EFI_GUID gEfiSmmSpiProtocolGuid;
> +
> +///
> +/// Forward reference for ANSI C compatibility
> +///
> +typedef struct _EFI_SPI_PROTOCOL EFI_SPI_PROTOCOL;
> +
> +///
> +/// SPI protocol data structures and definitions
> +///
> +///
> +/// Number of Prefix Opcodes allowed on the SPI interface
> +///
> +#define SPI_NUM_PREFIX_OPCODE 2
> +
> +///
> +/// Number of Opcodes in the Opcode Menu
> +///
> +#define SPI_NUM_OPCODE 8
> +
> +///
> +/// Opcode Type
> +/// EnumSpiOpcodeCommand: Command without address
> +/// EnumSpiOpcodeRead: Read with address
> +/// EnumSpiOpcodeWrite: Write with address
> +///
> +typedef enum {
> + EnumSpiOpcodeReadNoAddr,
> + EnumSpiOpcodeWriteNoAddr,
> + EnumSpiOpcodeRead,
> + EnumSpiOpcodeWrite,
> + EnumSpiOpcodeMax
> +} SPI_OPCODE_TYPE;
> +
> +typedef enum {
> + EnumSpiCycle20MHz,
> + EnumSpiCycle33MHz,
> + EnumSpiCycle66MHz, /// Not supported by VLV
> + EnumSpiCycle50MHz,
> + EnumSpiCycleMax
> +} SPI_CYCLE_FREQUENCY;
> +
> +typedef enum {
> + EnumSpiRegionAll,
> + EnumSpiRegionBios,
> + EnumSpiRegionSeC,
> + EnumSpiRegionDescriptor,
> + EnumSpiRegionPlatformData,
> + EnumSpiRegionMax
> +} SPI_REGION_TYPE;
> +
> +///
> +/// Hardware Sequencing required operations (as listed in Valleyview EDS
> "Hardware
> +/// Sequencing Commands and Opcode Requirements"
> +///
> +typedef enum {
> + EnumSpiOperationWriteStatus,
> + EnumSpiOperationProgramData_1_Byte,
> + EnumSpiOperationProgramData_64_Byte,
> + EnumSpiOperationReadData,
> + EnumSpiOperationWriteDisable,
> + EnumSpiOperationReadStatus,
> + EnumSpiOperationWriteEnable,
> + EnumSpiOperationFastRead,
> + EnumSpiOperationEnableWriteStatus,
> + EnumSpiOperationErase_256_Byte,
> + EnumSpiOperationErase_4K_Byte,
> + EnumSpiOperationErase_8K_Byte,
> + EnumSpiOperationErase_64K_Byte,
> + EnumSpiOperationFullChipErase,
> + EnumSpiOperationJedecId,
> + EnumSpiOperationDualOutputFastRead,
> + EnumSpiOperationDiscoveryParameters,
> + EnumSpiOperationOther,
> + EnumSpiOperationMax
> +} SPI_OPERATION;
> +
> +///
> +/// SPI Command Configuration
> +/// Frequency The expected frequency to be used (value to be
> programmed to the SSFC
> +/// Register)
> +/// Operation Which Hardware Sequencing required operation this
> opcode respoinds to.
> +/// The required operations are listed in EDS Table 5-55: "Hardware
> +/// Sequencing Commands and Opcode Requirements"
> +/// If the opcode does not corresponds to any operation listed, use
> +/// EnumSpiOperationOther, and provides TYPE and Code for it in
> +/// SpecialOpcodeEntry.
> +///
> +typedef struct _SPI_OPCODE_MENU_ENTRY {
> + SPI_OPCODE_TYPE Type;
> + UINT8 Code;
> + SPI_CYCLE_FREQUENCY Frequency;
> + SPI_OPERATION Operation;
> +} SPI_OPCODE_MENU_ENTRY;
> +
> +//
> +// Initialization data table loaded to the SPI host controller
> +// VendorId Vendor ID of the SPI device
> +// DeviceId0 Device ID0 of the SPI device
> +// DeviceId1 Device ID1 of the SPI device
> +// PrefixOpcode Prefix opcodes which are loaded into the SPI host
> controller
> +// OpcodeMenu Opcodes which are loaded into the SPI host controller
> Opcode Menu
> +// BiosStartOffset The offset of the start of the BIOS image relative to the
> flash device.
> +// Please note this is a Flash Linear Address, NOT a memory space
> address.
> +// This value is platform specific and depends on the system flash
> map.
> +// This value is only used on non Descriptor mode.
> +// BiosSize The the BIOS Image size in flash. This value is platform
> specific
> +// and depends on the system flash map. Please note BIOS Image
> size may
> +// be smaller than BIOS Region size (in Descriptor Mode) or the
> flash size
> +// (in Non Descriptor Mode), and in this case, BIOS Image is
> supposed to be
> +// placed at the top end of the BIOS Region (in Descriptor Mode)
> or the flash
> +// (in Non Descriptor Mode)
> +//
> +typedef struct _SPI_INIT_TABLE {
> + UINT8 VendorId;
> + UINT8 DeviceId0;
> + UINT8 DeviceId1;
> + UINT8 PrefixOpcode[SPI_NUM_PREFIX_OPCODE];
> + SPI_OPCODE_MENU_ENTRY OpcodeMenu[SPI_NUM_OPCODE];
> + UINTN BiosStartOffset;
> + UINTN BiosSize;
> +} SPI_INIT_TABLE;
> +
> +//
> +// Protocol member functions
> +//
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SPI_INIT) (
> + IN EFI_SPI_PROTOCOL * This,
> + IN SPI_INIT_TABLE * InitTable
> + );
> +
> +/**
> +
> + @brief
> + Initializes the host controller to execute SPI commands.
> +
> + @param[in] This Pointer to the EFI_SPI_PROTOCOL instance.
> + @param[in] InitData Pointer to caller-allocated buffer containing the
> SPI
> + interface initialization table.
> +
> + @retval EFI_SUCCESS Opcode initialization on the SPI host controller
> completed.
> + @retval EFI_ACCESS_DENIED The SPI configuration interface is locked.
> + @retval EFI_OUT_OF_RESOURCES Not enough resource available to
> initialize the device.
> + @retval EFI_DEVICE_ERROR Device error, operation failed.
> +
> +**/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SPI_LOCK) (
> + IN EFI_SPI_PROTOCOL * This
> + );
> +/**
> +
> + @brief
> + Initializes the host controller to execute SPI commands.
> +
> + @param[in] This Pointer to the EFI_SPI_PROTOCOL instance.
> + @param[in] InitData Pointer to caller-allocated buffer containing the
> SPI
> + interface initialization table.
> +
> + @retval EFI_SUCCESS Opcode initialization on the SPI host controller
> completed.
> + @retval EFI_ACCESS_DENIED The SPI configuration interface is locked.
> + @retval EFI_OUT_OF_RESOURCES Not enough resource available to
> initialize the device.
> + @retval EFI_DEVICE_ERROR Device error, operation failed.
> +
> +**/
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_SPI_EXECUTE) (
> + IN EFI_SPI_PROTOCOL * This,
> + IN UINT8 OpcodeIndex,
> + IN UINT8 PrefixOpcodeIndex,
> + IN BOOLEAN DataCycle,
> + IN BOOLEAN Atomic,
> + IN BOOLEAN ShiftOut,
> + IN UINTN Address,
> + IN UINT32 DataByteCount,
> + IN OUT UINT8 *Buffer,
> + IN SPI_REGION_TYPE SpiRegionType
> + );
> +/**
> +
> + @brief
> + Execute SPI commands from the host controller.
> +
> + @param[in] This Pointer to the EFI_SPI_PROTOCOL instance.
> + @param[in] OpcodeIndex Index of the command in the OpCode
> Menu.
> + @param[in] PrefixOpcodeIndex Index of the first command to run when
> in an atomic cycle sequence.
> + @param[in] DataCycle TRUE if the SPI cycle contains data
> + @param[in] Atomic TRUE if the SPI cycle is atomic and interleave
> cycles are not allowed.
> + @param[in] ShiftOut If DataByteCount is not zero, TRUE to shift data
> out and FALSE to shift data in.
> + @param[in] Address In Descriptor Mode, for Descriptor Region, GbE
> Region, ME Region and Platform
> + Region, this value specifies the offset from the Region
> Base; for BIOS Region,
> + this value specifies the offset from the start of the BIOS
> Image. In Non
> + Descriptor Mode, this value specifies the offset from the
> start of the BIOS Image.
> + Please note BIOS Image size may be smaller than BIOS
> Region size (in Descriptor
> + Mode) or the flash size (in Non Descriptor Mode), and in
> this case, BIOS Image is
> + supposed to be placed at the top end of the BIOS Region
> (in Descriptor Mode) or
> + the flash (in Non Descriptor Mode)
> + @param[in] DataByteCount Number of bytes in the data portion of the
> SPI cycle.
> + @param[in] Buffer Pointer to caller-allocated buffer containing the
> dada received or sent during the SPI cycle.
> + @param[in] SpiRegionType SPI Region type. Values EnumSpiRegionBios,
> EnumSpiRegionGbE, EnumSpiRegionMe,
> + EnumSpiRegionDescriptor, and
> EnumSpiRegionPlatformData are only applicable in
> + Descriptor mode. Value EnumSpiRegionAll is applicable to
> both Descriptor Mode
> + and Non Descriptor Mode, which indicates
> "SpiRegionOffset" is actually relative
> + to base of the 1st flash device (i.e., it is a Flash Linear
> Address).
> +
> + @retval EFI_SUCCESS Command succeed.
> + @retval EFI_INVALID_PARAMETER The parameters specified are not valid.
> + @exception EFI_UNSUPPORTED Command not supported.
> + @retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
> +
> +**/
> +
> +///
> +/// Protocol definition
> +///
> +struct _EFI_SPI_PROTOCOL {
> + EFI_SPI_INIT Init;
> + EFI_SPI_LOCK Lock;
> + EFI_SPI_EXECUTE Execute;
> +};
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/TcoReset.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/TcoReset.h
> new file mode 100644
> index 0000000000..09be81ecbe
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Protocol/TcoReset.h
> @@ -0,0 +1,88 @@
> +/*++
> +
> +Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> + TcoReset.h
> +
> +Abstract:
> +
> + Protocol to communicate with ICH TCO.
> +
> +GUID Info:
> + {A6A79162-E325-4c30-BCC3-59373064EFB3}
> + 0xa6a79162, 0xe325, 0x4c30, 0xbc, 0xc3, 0x59, 0x37, 0x30, 0x64, 0xef, 0xb3);
> +
> +
> +--*/
> +
> +#ifndef _TCO_RESET_H_
> +#define _TCO_RESET_H_
> +
> +
> +#define EFI_TCO_RESET_PROTOCOL_GUID \
> + {0xa6a79162, 0xe325, 0x4c30, 0xbc, 0xc3, 0x59, 0x37, 0x30, 0x64, 0xef, 0xb3}
> +
> +typedef struct _EFI_TCO_RESET_PROTOCOL EFI_TCO_RESET_PROTOCOL;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_TCO_RESET_PROTOCOL_ENABLE_TCO_RESET) (
> + IN UINT32 *RcrbGcsSaveValue
> + )
> +/*++
> +
> +Routine Description:
> +
> + Enables the TCO timer to reset the system in case of a system hang. This is
> + used when writing the clock registers.
> +
> +Arguments:
> +
> + RcrbGcsSaveValue - This is the value of the RCRB GCS register before it is
> + changed by this procedure. This will be used to restore
> + the settings of this register in PpiDisableTcoReset.
> +
> +Returns:
> +
> + EFI_STATUS
> +
> +--*/
> +;
> +
> +typedef
> +EFI_STATUS
> +(EFIAPI *EFI_TCO_RESET_PROTOCOL_DISABLE_TCO_RESET) (
> + OUT UINT32 RcrbGcsRestoreValue
> + )
> +/*++
> +
> +Routine Description:
> +
> + Disables the TCO timer. This is used after writing the clock registers.
> +
> +Arguments:
> +
> + RcrbGcsRestoreValue - Value saved in PpiEnableTcoReset so that it can
> + restored.
> +
> +Returns:
> +
> + EFI_STATUS
> +
> +--*/
> +;
> +
> +typedef struct _EFI_TCO_RESET_PROTOCOL {
> + EFI_TCO_RESET_PROTOCOL_ENABLE_TCO_RESET EnableTcoReset;
> + EFI_TCO_RESET_PROTOCOL_DISABLE_TCO_RESET DisableTcoReset;
> +} EFI_TCO_RESET_PROTOCOL;
> +
> +extern EFI_GUID gEfiTcoResetProtocolGuid;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Rsci.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Rsci.h
> new file mode 100644
> index 0000000000..f5aa2eaf86
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/Rsci.h
> @@ -0,0 +1,28 @@
> +/*++
> +Copyright (c) 1996 - 2014, Intel Corporation.
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +
> +
> +Module Name:
> +
> +
> +
> +Abstract:
> +
> +
> +
> +--*/
> +
> +#ifndef _RSCI_H
> +#define _RSCI_H
> +
> +typedef enum {
> + NOT_APPLICABLE_RESET = 0,
> + WARM_RESET = 1,
> + COLD_RESET = 2,
> + GLOBAL_RESET = 7,
> +}ANDROID_RESET_TYPE;
> +
> +#endif
> diff --git
> a/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/TianoApi.h
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/TianoApi.h
> new file mode 100644
> index 0000000000..784ea187c6
> --- /dev/null
> +++
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Includ
> e/TianoApi.h
> @@ -0,0 +1,61 @@
> +/*++
> +
> +Copyright (c) 2004, Intel Corporation. All rights reserved.
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +Module Name:
> +
> + TianoApi.h
> +
> +Abstract:
> +
> + Tiano intrinsic definitions.
> +
> +
> +--*/
> +
> +#ifndef _TIANO_API_H_
> +#define _TIANO_API_H_
> +
> +//
> +// Pointer to internal runtime function
> +//
> +#define EFI_INTERNAL_FUNCTION 0x00000002
> +
> +//
> +// Pointer to internal runtime pointer
> +//
> +#define EFI_INTERNAL_POINTER 0x00000004
> +
> +//
> +// Pointer to internal runtime pointer
> +//
> +#define EFI_IPF_GP_POINTER 0x00000008
> +
> +#define EFI_TPL_DRIVER 6
> +
> +//
> +// EFI Event Types
> +//
> +#define EFI_EVENT_TIMER 0x80000000
> +#define EFI_EVENT_RUNTIME 0x40000000
> +#define EFI_EVENT_RUNTIME_CONTEXT 0x20000000
> +
> +#define EFI_EVENT_NOTIFY_WAIT 0x00000100
> +#define EFI_EVENT_NOTIFY_SIGNAL 0x00000200
> +
> +#define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
> +#define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
> +
> +#define EFI_EVENT_EFI_SIGNAL_MASK 0x000000FF
> +#define EFI_EVENT_EFI_SIGNAL_MAX 4
> +
> +//
> +// Task priority level
> +//
> +#define EFI_TPL_APPLICATION 4
> +#define EFI_TPL_CALLBACK 8
> +#define EFI_TPL_NOTIFY 16
> +#define EFI_TPL_HIGH_LEVEL 31
> +
> +#endif
> diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
> b/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
> new file mode 100644
> index 0000000000..6117f179ba
> --- /dev/null
> +++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
> @@ -0,0 +1,231 @@
> +## @file Vlv2DeviceRefCodePkg.dec
> +#
> +# Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#
> +##
> +
> +[Defines]
> + DEC_SPECIFICATION = 0x00010005
> + PACKAGE_NAME = Vlv2DeviceRefCodePkg
> + PACKAGE_GUID = E4FA0DCA-91A3-4957-9344-C10BAA0BFE5F
> + PACKAGE_VERSION = 0.1
> +
> +[Ppis]
> + gVlvPolicyPpiGuid = { 0x7D84B2C2, 0x22A1, 0x4372,
> {0xB1, 0x2C, 0xEB, 0xB2, 0x32, 0xD3, 0xA6, 0xA3}}
> + gVlvMmioPolicyPpiGuid = { 0xE767BF7F, 0x4DB6, 0x5B34,
> {0x10, 0x11, 0x4F, 0xBE, 0x4C, 0xA7, 0xAF, 0xD2}}
> + gPeiSmbusPolicyPpiGuid = { 0x63b6e435, 0x32bc, 0x49c6,
> {0x81, 0xbd, 0xb7, 0xa1, 0xa0, 0xfe, 0x1a, 0x6c}}
> + gSeCfTPMPpiGuid = { 0x10e26df1, 0x8775, 0x4ee1, {0xb5, 0x0a,
> 0x3a, 0xe8, 0x28, 0x93, 0x70, 0x3a}}
> + gPchUsbPolicyPpiGuid = { 0xc02b0573, 0x2b4e, 0x4a31, {0xa3, 0x1a,
> 0x94, 0x56, 0x7b, 0x50, 0x44, 0x2c}}
> + gPchInitPpiGuid = { 0x09ea894a, 0xbe0d, 0x4230, {0xa0, 0x03,
> 0xed, 0xc6, 0x93, 0xb4, 0x8e, 0x95}}
> + gPchPlatformPolicyPpiGuid = { 0x15344673, 0xD365, 0x4BE2, {0x85,
> 0x13, 0x14, 0x97, 0xCC, 0x07, 0x61, 0x1D}}
> + gPeiSpiPpiGuid = { 0xA38C6898, 0x2B5C, 0x4FF6, {0x93, 0x26,
> 0x2E, 0x63, 0x21, 0x2E, 0x56, 0xC2}}
> + gVlvPeiInitPpiGuid = { 0x09ea8911, 0xbe0d, 0x4230, {0xa0, 0x03,
> 0xed, 0xc6, 0x93, 0xb4, 0x8e, 0x11}}
> + gSeCUmaPpiGuid = { 0xcbd86677, 0x362f, 0x4c04, {0x94, 0x59,
> 0xa7, 0x41, 0x32, 0x6e, 0x05, 0xcf}}
> + gPeiSeCPlatformPolicyPpiGuid = { 0x7ae3ceb7, 0x2ee2, 0x48fa, {0xaa,
> 0x49, 0x35, 0x10, 0xbc, 0x83, 0xca, 0xbf}}
> + gPeiHeciPpiGuid = { 0xEE0EA811, 0xFBD9, 0x4777, {0xB9, 0x5A,
> 0xBA, 0x4F, 0x71, 0x10, 0x1F, 0x74}}
> + gPeiSdhcPpiGuid = { 0xf4ef9d7a, 0x98c5, 0x4c1a, {0xb4, 0xd9,
> 0xd8, 0xd8, 0x72, 0x65, 0xbe, 0x0c}}
> + gPeiBlockIoPpiGuid = { 0xbc5fa650, 0xedbb, 0x4d0d, {0xb3, 0xa3,
> 0xd9, 0x89, 0x07, 0xf8, 0x47, 0xdf}}
> + gSeCfTPMPolicyPpiGuid = { 0x4fd1ba49, 0x8f90, 0x471a, {0xa2, 0xc9,
> 0x17, 0x3c, 0x7a, 0x73, 0x2f, 0xd0}}
> + gEfiPeiReadOnlyVariable2PpiGuid = { 0x2ab86ef5, 0xecb5, 0x4134, {0xb5,
> 0x56, 0x38, 0x54, 0xca, 0x1f, 0xe1, 0xb4}}
> + gPchPeiInitPpiGuid = { 0xACB93B08, 0x5CDC, 0x4A8F, {0x93, 0xD4,
> 0x6, 0xE3, 0x42, 0xDF, 0x18, 0x2E}}
> + gPttPassThruPpiGuid = { 0xc5068bac, 0xa7dc, 0x42f1, {0xae, 0x80,
> 0xca, 0xa2, 0x4b, 0xb4, 0x90, 0x4b}}
> +
> +[Protocols]
> + gEfiGlobalNvsAreaProtocolGuid = { 0x074e1e48, 0x8132, 0x47a1, {0x8c,
> 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc}}
> + gPpmPlatformPolicyProtocolGuid = { 0xddabfeac, 0xef63, 0x452c, {0x8f,
> 0x39, 0xed, 0x7f, 0xae, 0xd8, 0x26, 0x5e}}
> + gEfiSpiProtocolGuid = { 0x1156efc6, 0xea32, 0x4396, {0xb5, 0xd5,
> 0x26, 0x93, 0x2e, 0x83, 0xc3, 0x13}}
> + gMemInfoProtocolGuid = { 0x6f20f7c8, 0xe5ef, 0x4f21, {0x8d, 0x19,
> 0xed, 0xc5, 0xf0, 0xc4, 0x96, 0xae}}
> + gEfiSdHostIoProtocolGuid = { 0xb63f8ec7, 0xa9c9, 0x4472, {0xa4,
> 0xc0, 0x4d, 0x8b, 0xf3, 0x65, 0xcc, 0x51}}
> + gEfiSpiProtocolGuid = { 0x1156efc6, 0xea32, 0x4396, {0xb5, 0xd5,
> 0x26, 0x93, 0x2e, 0x83, 0xc3, 0x13}}
> + gEfiSmmSpiProtocolGuid = { 0xD9072C35, 0xEB8F, 0x43AD, {0xA2,
> 0x20, 0x34, 0xD4, 0x0E, 0x2A, 0x82, 0x85}}
> + gEfiSmmIchnDispatchExProtocolGuid = { 0x3920405B, 0xC897, 0x44DA,
> {0x88, 0xF3, 0x4C, 0x49, 0x8A, 0x6F, 0xF7, 0x36}}
> + gEfiPchS3SupportProtocolGuid = { 0xE287D20B, 0xD897, 0x4E1E, {0xA5,
> 0xD9, 0x97, 0x77, 0x63, 0x93, 0x6A, 0x04}}
> + gPchResetProtocolGuid = { 0xDB63592C, 0xB8CC, 0x44C8, {0x91,
> 0x8C, 0x51, 0xF5, 0x34, 0x59, 0x8A, 0x5A}}
> + gPchResetCallbackProtocolGuid = { 0x3A3300AB, 0xC929, 0x487D,
> {0xAB, 0x34, 0x15, 0x9B, 0xC1, 0x35, 0x62, 0xC0}}
> + gDxePchPlatformPolicyProtocolGuid = { 0x4b0165a9, 0x61d6, 0x4e23,
> {0xa0, 0xb5, 0x3e, 0xc7, 0x9c, 0x2e, 0x30, 0xd5}}
> + gEfiPchInfoProtocolGuid = { 0xD31F0400, 0x7D16, 0x4316, {0xBF,
> 0x88, 0x60, 0x65, 0x88, 0x3B, 0x40, 0x2B}}
> + gEfiPchExtendedResetProtocolGuid = { 0xF0BBFCA0, 0x684E, 0x48B3,
> {0xBA, 0xE2, 0x6C, 0x84, 0xB8, 0x9E, 0x53, 0x39}}
> + gEfiActiveBiosProtocolGuid = { 0xEBBE2D1B, 0x1647, 0x4BDA, {0xAB,
> 0x9A, 0x78, 0x63, 0xE3, 0x96, 0xD4, 0x1A}}
> + gDxeIchPlatformPolicyProtocolGuid = { 0xf617b358, 0x12cf, 0x414a, {0xa0,
> 0x69, 0x60, 0x67, 0x7b, 0xda, 0x13, 0xb3}}
> + gEfiIchInfoProtocolGuid = { 0xd31f0400, 0x7d16, 0x4316, {0xbf, 0x88,
> 0x60, 0x65, 0x88, 0x3b, 0x40, 0x2b}}
> + gEfiSmmIoTrapDispatchProtocolGuid = { 0x58dc368d, 0x7bfa, 0x4e77,
> {0xab, 0xbc, 0x0e, 0x29, 0x41, 0x8d, 0xf9, 0x30}}
> + gEfiSmmSmbusProtocolGuid = { 0x72e40094, 0x2ee1, 0x497a, {0x8f,
> 0x33, 0x4c, 0x93, 0x4a, 0x9e, 0x9c, 0x0c}}
> + gDxeVlvPlatformPolicyGuid = { 0x5bab88ba, 0xe0e2, 0x4674, {0xb6,
> 0xad, 0xb8, 0x12, 0xf6, 0x88, 0x1c, 0xd6}}
> + gIgdOpRegionProtocolGuid = { 0xcdc5dddf, 0xe79d, 0x41ec, {0xa9,
> 0xb0, 0x65, 0x65, 0x49, 0x0d, 0xb9, 0xd3}}
> + gEfiHeciProtocolGuid = { 0xcfb33810, 0x6e87, 0x4284, {0xb2, 0x03,
> 0xa6, 0x6a, 0xbe, 0x07, 0xf6, 0xe8}}
> + gPlatformSeCHookProtocolGuid = { 0xbc52476e, 0xf67e, 0x4301, {0xb2,
> 0x62, 0x36, 0x9c, 0x48, 0x78, 0xaa, 0xc2}}
> + gEfiSeCRcInfoProtocolGuid = { 0x11fbfdfb, 0x10d2, 0x43e6, {0xb5,
> 0xb1, 0xb4, 0x38, 0x6e, 0xdc, 0xcb, 0x9a}}
> + gEfiTdtProtocolGuid = { 0x0bf70067, 0xd53b, 0x42df, {0xb7, 0x70,
> 0xe9, 0x2c, 0x91, 0xc6, 0x14, 0x11}}
> + gDxePlatformSeCPolicyGuid = { 0xf8bff014, 0x18fb, 0x4ef9, {0xb1,
> 0x0c, 0xae, 0x22, 0x73, 0x8d, 0xbe, 0xed}}
> + gLpssDummyProtocolGuid = { 0xaf4cc162, 0xd41c, 0x455a, {0xab,
> 0x45, 0x6d, 0xbc, 0xc1, 0xcd, 0x32, 0xf3}}
> + gEfiEmmcCardInfoProtocolGuid = { 0x1ebe5ab9, 0x2129, 0x49e7, {0x84,
> 0xd7, 0xee, 0xb9, 0xfc, 0xe5, 0xde, 0xdd}}
> + gEfiTdtOperationProtocolGuid = {0xfd301ba4, 0x5e62, 0x4679,{ 0xa0,
> 0x6f, 0xe0, 0x9a, 0xab, 0xdd, 0x2a, 0x91}}
> + gEfiConfigFileNameGuid = { 0x98B8D59B, 0xE8BA, 0x48EE, { 0x98,
> 0xDD, 0xC2, 0x95, 0x39, 0x2F, 0x1E, 0xDB }}
> + gEfiDFUResultGuid = { 0x14a7c46f, 0xbc02, 0x4047, { 0x9f, 0x18,
> 0xa5, 0xd7, 0x25, 0xd8, 0xbd, 0x19 }}
> + gPttPassThruProtocolGuid = { 0x73e2576, 0xf6c1, 0x4b91, { 0x92, 0xa9,
> 0xd4, 0x67, 0x5d, 0xda, 0x34, 0xb1 } }
> +
> +[Guids]
> + gEfiCPTokenSpaceGuid = { 0x918211ce, 0xa1d2, 0x43a0, {0xa0,
> 0x4e, 0x75, 0xb5, 0xbf, 0x44, 0x50, 0x0E}}
> + gEfiSmbusArpMapGuid = { 0x707BE83E, 0x0BF6, 0x40A5, {0xBE,
> 0x64, 0x34, 0xC0, 0x3A, 0xA0, 0xB8, 0xE2}}
> + gEfiMemoryConfigDataGuid = { 0x80dbd530, 0xb74c, 0x4f11, {0x8c,
> 0x03, 0x41, 0x86, 0x65, 0x53, 0x28, 0x31}}
> + gEfiVLVTokenSpaceGuid = { 0xca452c68, 0xdf0c, 0x45c9, {0x82, 0xfb,
> 0xea, 0xe4, 0x2b, 0x31, 0x29, 0x46}}
> + gSataControllerDriverGuid = { 0xbb929da9, 0x68f7, 0x4035, {0xb2,
> 0x2c, 0xa3, 0xbb, 0x3f, 0x23, 0xda, 0x55}}
> + gDxePchPolicyUpdateProtocolGuid = { 0x1a819e49, 0xd8ee, 0x48cb,
> {0x9a, 0x9c, 0x0a, 0xa0, 0xd2, 0x81, 0x0a, 0x38}}
> + gPowerManagementAcpiTableStorageGuid = { 0x161be597, 0xe9c5,
> 0x49db, {0xae, 0x50, 0xc4, 0x62, 0xab, 0x54, 0xee, 0xda}}
> + gEfiSetupVariableGuid = { 0xec87d643, 0xeba4, 0x4bb5, {0xa1, 0xe5,
> 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9}}
> + gBmpImageGuid = { 0x878AC2CC, 0x5343, 0x46F2, {0xB5, 0x63,
> 0x51, 0xF8, 0x9D, 0xAF, 0x56, 0xBA}}
> + gPchInitVariableGuid = { 0xe6c2f70a, 0xb604, 0x4877, {0x85, 0xba,
> 0xde, 0xec, 0x89, 0xe1, 0x17, 0xeb}}
> + gEfiMemoryConfigDataGuid = { 0x80dbd530, 0xb74c, 0x4f11, {0x8c,
> 0x03, 0x41, 0x86, 0x65, 0x53, 0x28, 0x31}}
> + gVlvRefCodePkgTokenSpaceGuid = { 0x85768E4A, 0x6CDC, 0x444E,
> {0x93, 0xDF, 0x93, 0x66, 0x85, 0xB5, 0xDF, 0xCC}}
> + gSeCPlatformReadyToBootGuid = { 0x03fdf171, 0x1d67, 0x4ace, {0xa9,
> 0x04, 0x3e, 0x36, 0xd3, 0x38, 0xfa, 0x74}}
> + gAmtReadyToBootGuid = { 0x40b09b5a, 0xf0ef, 0x4627, {0x93,
> 0xd5, 0x27, 0xf0, 0x4b, 0x75, 0x4d, 0x05}}
> + #
> + # According to UEFI 2.3.1 Errata C, 3.2 Globally Defined Variables.
> + # To prevent name collisions with possible future globally defined variables,
> + # other internal firmware data variables that are not defined in Table.10
> must be saved with a unique VendorGuid other than EFI_GLOBAL_VARIABLE.
> + #
> + gEfiVlv2VariableGuid = { 0x10ba6bbe, 0xa97e, 0x41c3, {0x9a, 0x07,
> 0x60, 0x7a, 0xd9, 0xbd, 0x60, 0xe5}}
> +
> +[Includes.common]
> + .
> + ValleyView2Soc/NorthCluster/Include
> + ValleyView2Soc/SouthCluster/Include
> + ValleyView2Soc/CPU/Include
> + Include
> +
> +[PcdsFixedAtBuild]
> +
> gEfiVLVTokenSpaceGuid.PcdTCSmbaIoBaseAddress|0x1040|UINT16|0x1000
> 0207
> +
> +[PcdsDynamic, PcdsDynamicEx]
> +
> gEfiVLVTokenSpaceGuid.PcdTCSmbaIoBaseAddress|0x1040|UINT16|0x1000
> 0207
> + gEfiVLVTokenSpaceGuid.PcdEmmcManufacturerId|0|UINT8|0x10000208
> + gEfiVLVTokenSpaceGuid.PcdProductSerialNumber|0|UINT32|0x10000209
> +
> gEfiVLVTokenSpaceGuid.PcdMeasuredBootEnable|TRUE|BOOLEAN|0x10000
> 20A
> +
> gEfiVLVTokenSpaceGuid.PcdFTPMErrorOccur|FALSE|BOOLEAN|0x1000020B
> + gEfiVLVTokenSpaceGuid.PcdFTPMErrorSkip|FALSE|BOOLEAN|0x1000020C
> + gEfiVLVTokenSpaceGuid.PcdFTPMCommand|0|UINT32|0x1000020D
> + gEfiVLVTokenSpaceGuid.PcdFTPMResponse|0|UINT32|0x1000020E
> +
> gEfiVLVTokenSpaceGuid.PcdFTPMNotRespond|FALSE|BOOLEAN|0x1000020
> F
> + gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0|UINT32|0x10000210
> +
> gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0x0|UINT64|0x100002
> 11
> +
> gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0x0|UINT64|0x100
> 00212
> + gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0x0|UINT64|0x10000213
> +
> +[PcdsFeatureFlag]
> +
> gVlvRefCodePkgTokenSpaceGuid.PcdCeAtaSupport|FALSE|BOOLEAN|0x12
> +
> gVlvRefCodePkgTokenSpaceGuid.PcdMmcSdMultiBlockSupport|TRUE|BOOL
> EAN|0x13
> +
> +[PcdsPatchableInModule]
> +
> + ## Memory Down or DIMM slot.<BR><BR>
> + # 0 - DIMM<BR>
> + # 1 - Memory Down<BR>
> + # @Prompt Enable Memory Down
> + # @ValidList 0x80000001 | 0, 1
> +
> gVlvRefCodePkgTokenSpaceGuid.PcdEnableMemoryDown|1|UINT8|0x2000
> 0000
> +
> + ## Memory Parameter Patchable.<BR><BR>
> + # 0 - Fixed Parameter for MinnowBoard Max<BR>
> + # 1 - Patchable Parameter for Customization<BR>
> + # @Prompt Memory Parameter Patchable.
> + # @ValidList 0x80000001 | 0, 1
> +
> gVlvRefCodePkgTokenSpaceGuid.PcdMemoryParameterPatchable|FALSE|B
> OOLEAN|0x20000010
> +
> + ## The speed of DRAM.<BR><BR>
> + # 0 - 800 MHz<BR>
> + # 1 - 1066 MHz<BR>
> + # 2 - 1333 MHz<BR>
> + # 3 - 1600 MHz<BR>
> + # @Prompt DRAM Speed
> + # @ValidList 0x80000001 | 0, 1, 2, 3
> + gVlvRefCodePkgTokenSpaceGuid.PcdDramSpeed|1|UINT8|0x20000001
> +
> + ## DRAM Type.<BR><BR>
> + # 0 - DDR3<BR>
> + # 1 - DDR3L<BR>
> + # 2 - DDR3U<BR>
> + # 3 - DDR3All<BR>
> + # 4 - LPDDR2<BR>
> + # 5 - LPDDR3<BR>
> + # 6 - DDR4<BR>
> + # @Prompt DRAM Type
> + # @ValidList 0x80000001 | 0, 1, 2, 3, 4, 5, 6
> + gVlvRefCodePkgTokenSpaceGuid.PcdDramType|1|UINT8|0x20000002
> +
> + ## Please populate DIMM slot 0 if only one DIMM is supported.<BR><BR>
> + # 0 - Disable<BR>
> + # 1 - Enable<BR>
> + # @Prompt DIMM 0 Enable
> + # @ValidList 0x80000001 | 0, 1
> + gVlvRefCodePkgTokenSpaceGuid.PcdEnableDimm0|1|UINT8|0x20000003
> +
> + ## DIMM 1 has to be identical to DIMM 0.<BR><BR>
> + # 0 - Disable<BR>
> + # 1 - Enable<BR>
> + # @Prompt DIMM 1 Enable Type
> + # @ValidList 0x80000001 | 0, 1
> + gVlvRefCodePkgTokenSpaceGuid.PcdEnableDimm1|0|UINT8|0x20000004
> +
> + ## DRAM device data width.<BR><BR>
> + # 0 - x8<BR>
> + # 1 - x16<BR>
> + # 2 - x32<BR>
> + # @Prompt DIMM_DWIDTH
> + # @ValidList 0x80000001 | 0, 1, 2
> +
> gVlvRefCodePkgTokenSpaceGuid.PcdDimmDataWidth|1|UINT8|0x20000005
> +
> + ## DRAM device data density.<BR><BR>
> + # 0 - 1 Gbit<BR>
> + # 1 - 2 Gbit<BR>
> + # 2 - 4 Gbit<BR>
> + # 3 - 8 Gbit<BR>
> + # @Prompt DIMM_Density
> + # @ValidList 0x80000001 | 0, 1, 2, 3
> + gVlvRefCodePkgTokenSpaceGuid.PcdDimmDensity|2|UINT8|0x20000006
> +
> + ## DRAM device data bus width.<BR><BR>
> + # 0 - 8 bits<BR>
> + # 1 - 16 bits<BR>
> + # 2 - 32 bits<BR>
> + # 3 - 64 bits<BR>
> + # @Prompt DIMM_BusWidth
> + # @ValidList 0x80000001 | 0, 1, 2, 3
> +
> gVlvRefCodePkgTokenSpaceGuid.PcdDimmBusWidth|3|UINT8|0x20000007
> +
> + ## Ranks Per DIMM or Sides Per DIMM.<BR><BR>
> + # 0 - 1 Rank<BR>
> + # 1 - 2 Ranks<BR>
> + # @Prompt DIMM_Sides
> + # @ValidList 0x80000001 | 0, 1
> + gVlvRefCodePkgTokenSpaceGuid.PcdRankPerDimm|0|UINT8|0x20000008
> +
> + ## tCL.<BR><BR>
> + # @Prompt tCL
> + gVlvRefCodePkgTokenSpaceGuid.PcdTcl|11|UINT8|0x20000009
> +
> + ## tRP and tRCD in DRAM clk - 5:12.5ns, 6:15ns, etc.<BR><BR>
> + # @Prompt tRP_tRCD
> + gVlvRefCodePkgTokenSpaceGuid.PcdTrpTrcd|11|UINT8|0x2000000A
> +
> + ## tWR in DRAM clk.<BR><BR>
> + # @Prompt tWR
> + gVlvRefCodePkgTokenSpaceGuid.PcdTwr|12|UINT8|0x2000000B
> +
> + ## tWTR in DRAM clk.<BR><BR>
> + # @Prompt tWTR
> + gVlvRefCodePkgTokenSpaceGuid.PcdTwtr|6|UINT8|0x2000000C
> +
> + ## tRRD in DRAM clk.<BR><BR>
> + # @Prompt tRRD
> + gVlvRefCodePkgTokenSpaceGuid.PcdTrrd|6|UINT8|0x2000000D
> +
> + ## tRTP in DRAM clk.<BR><BR>
> + # @Prompt tRTP
> + gVlvRefCodePkgTokenSpaceGuid.PcdTrtp|6|UINT8|0x2000000E
> +
> + ## tFAW in DRAM clk.<BR><BR>
> + # @Prompt tFAW
> + gVlvRefCodePkgTokenSpaceGuid.PcdTfaw|32|UINT8|0x2000000F
> --
> 2.21.0.windows.1
next prev parent reply other threads:[~2019-05-13 2:52 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-10 3:34 [edk2-platforms: Patch 0/8] Add packages from edk2 Michael D Kinney
2019-05-10 3:34 ` [edk2-platforms: Patch 1/8] Silicon/TexasInsturments: Import Omap35xxPkg " Michael D Kinney
2019-05-10 17:56 ` Leif Lindholm
2019-05-10 19:16 ` Michael D Kinney
2019-05-10 19:54 ` Leif Lindholm
2019-05-10 3:34 ` [edk2-platforms: Patch 2/8] Platform/BeagleBoard: Import BeagleBoardPkg " Michael D Kinney
2019-05-10 3:34 ` [edk2-platforms: Patch 3/8] Silicon/Intel: Import QuarkSocPkg " Michael D Kinney
2019-05-10 3:34 ` [edk2-platforms: Patch 4/8] Platform/QuarkPlatformPkg: Import QuarkPlatformPkg " Michael D Kinney
2019-05-10 3:34 ` [edk2-platforms: Patch 5/8] Platform/Vlv2DeviceRefCodePkg: Import Vlv2DeviceRefCodePkg " Michael D Kinney
2019-05-13 2:52 ` Sun, Zailiang [this message]
2019-05-10 3:34 ` [edk2-platforms: Patch 6/8] Platform/Vlv2TbltDevicePkg: Import Vlv2TbltDevicePkg " Michael D Kinney
2019-05-13 2:52 ` Sun, Zailiang
2019-05-10 3:34 ` [edk2-platforms: Patch 7/8] Drivers/OptionRomPkg: Import OptionRomPkg " Michael D Kinney
2019-05-11 1:52 ` Ni, Ray
2019-05-10 3:34 ` [edk2-platforms: Patch 8/8] edk2-platforms: Update Maintainers.txt/Readme.md for imported packages Michael D Kinney
2019-05-10 18:04 ` [edk2-devel] " Leif Lindholm
2019-05-13 2:52 ` Sun, Zailiang
2019-05-10 5:14 ` [edk2-devel] [edk2-platforms: Patch 0/8] Add packages from edk2 Liming Gao
2019-05-10 6:17 ` Michael D Kinney
2019-05-10 7:32 ` Liming Gao
2019-05-10 18:49 ` Kubacki, Michael A
2019-05-11 2:12 ` Ni, Ray
2019-05-13 21:03 ` Steele, Kelly
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7CB7EF03E15B5D48981329A508747A9850C63ADE@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox