/** @file
|
Pch information library for TGL.
|
|
All function in this library is available for PEI, DXE, and SMM,
|
But do not support UEFI RUNTIME environment call.
|
|
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
**/
|
|
#include <Uefi/UefiBaseType.h>
|
#include <Library/PchInfoLib.h>
|
#include "PchInfoLibPrivate.h"
|
#include <Library/PrintLib.h>
|
#include <Register/PchRegsLpc.h>
|
|
/**
|
Print Pch Stepping String
|
|
@param[out] Buffer Output buffer of string
|
@param[in] BufferSize Buffer Size
|
@param[in] PchStep Pch Stepping Type
|
|
@retval VOID
|
**/
|
VOID
|
PchPrintSteppingStr (
|
OUT CHAR8 *Buffer,
|
IN UINT32 BufferSize,
|
IN PCH_STEPPING PchStep
|
)
|
{
|
AsciiSPrint (Buffer, BufferSize, "%c%c", 'A' + (PchStep >> 4), '0' + (PchStep & 0xF));
|
}
|
|
/**
|
Return Pch Generation
|
|
@retval PCH_GENERATION Pch Generation
|
**/
|
PCH_GENERATION
|
PchGeneration (
|
VOID
|
)
|
{
|
return TGL_PCH;
|
}
|
|
|
/**
|
Get PCH series ASCII string.
|
|
@retval PCH Series string
|
**/
|
CHAR8*
|
PchGetSeriesStr (
|
VOID
|
)
|
{
|
switch (PchSeries ()) {
|
|
case PCH_LP:
|
return "TGL PCH-LP";
|
|
default:
|
return NULL;
|
}
|
}
|
|
/**
|
Get Pch Maximum Pcie Clock Number
|
|
@retval Pch Maximum Pcie Clock Number
|
**/
|
UINT8
|
GetPchMaxPcieClockNum (
|
VOID
|
)
|
{
|
return 7;
|
}
|
|
/**
|
Get Pch Maximum Pcie ClockReq Number
|
|
@retval Pch Maximum Pcie ClockReq Number
|
**/
|
UINT8
|
GetPchMaxPcieClockReqNum (
|
VOID
|
)
|
{
|
return GetPchMaxPcieClockNum ();
|
}
|
|
/**
|
Get Pch Maximum Type C Port Number
|
|
@retval Pch Maximum Type C Port Number
|
**/
|
UINT8
|
GetPchMaxTypeCPortNum (
|
VOID
|
)
|
{
|
switch (PchSeries ()) {
|
case PCH_LP:
|
return 4;
|
default:
|
return 0;
|
}
|
}
|
|
/**
|
Check whether integrated LAN controller is supported by PCH Series.
|
|
@retval TRUE GbE is supported in current PCH
|
@retval FALSE GbE is not supported on current PCH
|
**/
|
BOOLEAN
|
PchIsGbeSupported (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
/**
|
Check whether integrated TSN is supported by PCH Series.
|
|
@retval TRUE TSN is supported in current PCH
|
@retval FALSE TSN is not supported on current PCH
|
**/
|
BOOLEAN
|
PchIsTsnSupported (
|
VOID
|
)
|
{
|
#if FixedPcdGet8(PcdEmbeddedEnable) == 0x1
|
return TRUE;
|
#else
|
return FALSE;
|
#endif
|
}
|
|
/**
|
Check whether ISH is supported by PCH Series.
|
|
@retval TRUE ISH is supported in current PCH
|
@retval FALSE ISH is not supported on current PCH
|
**/
|
BOOLEAN
|
PchIsIshSupported (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
/**
|
Get Pch Maximum Pcie Root Port Number
|
|
@retval Pch Maximum Pcie Root Port Number
|
**/
|
UINT8
|
GetPchMaxPciePortNum (
|
VOID
|
)
|
{
|
switch (PchSeries ()) {
|
case PCH_LP:
|
return 12;
|
default:
|
return 0;
|
}
|
}
|
|
/**
|
Get Pch Maximum Hda Dmic Link
|
|
@retval Pch Maximum Hda Dmic Link
|
**/
|
UINT8
|
GetPchHdaMaxDmicLinkNum (
|
VOID
|
)
|
{
|
return 2;
|
}
|
|
/**
|
Get Pch Maximum Hda Sndw Link
|
|
@retval Pch Maximum Hda Sndw Link
|
**/
|
UINT8
|
GetPchHdaMaxSndwLinkNum (
|
VOID
|
)
|
{
|
return 4;
|
}
|
|
/**
|
Get Pch Maximum Hda Ssp Link
|
|
@retval Pch Maximum Hda Ssp Link
|
**/
|
UINT8
|
GetPchHdaMaxSspLinkNum (
|
VOID
|
)
|
{
|
return 3;
|
}
|
|
/**
|
Check if given Audio Interface is supported
|
|
@param[in] AudioLinkType Link type support to be checked
|
@param[in] AudioLinkIndex Link number
|
|
@retval TRUE Link supported
|
@retval FALSE Link not supported
|
**/
|
BOOLEAN
|
IsAudioInterfaceSupported (
|
IN HDAUDIO_LINK_TYPE AudioLinkType,
|
IN UINT32 AudioLinkIndex
|
)
|
{
|
//
|
// Interfaces supported:
|
// 1. HDA Link (SDI0/SDI1)
|
// 2. Display Audio Link (SDI2)
|
// 3. SSP[0-5]
|
// 4. SNDW[1-4]
|
//
|
switch (AudioLinkType) {
|
case HdaLink:
|
case HdaIDispLink:
|
return TRUE;
|
case HdaDmic:
|
if (AudioLinkIndex < 2) {
|
return TRUE;
|
} else {
|
return FALSE;
|
}
|
case HdaSsp:
|
if (AudioLinkIndex < 6) {
|
return TRUE;
|
} else {
|
return FALSE;
|
}
|
case HdaSndw:
|
if (AudioLinkIndex < 1) {
|
return TRUE;
|
} else if (AudioLinkIndex < 4) {
|
return TRUE;
|
} else {
|
return FALSE;
|
}
|
default:
|
return FALSE;
|
}
|
}
|
|
/**
|
Check if given Display Audio Link T-Mode is supported
|
|
@param[in] Tmode T-mode support to be checked
|
|
@retval TRUE T-mode supported
|
@retval FALSE T-mode not supported
|
**/
|
BOOLEAN
|
IsAudioIDispTmodeSupported (
|
IN HDAUDIO_IDISP_TMODE Tmode
|
)
|
{
|
//
|
// iDisplay Audio Link T-mode support per PCH Generation/Series:
|
// 1. 2T - TGL-LP/H/N
|
// 2. 4T - TGL-LP (default), TGL-H, TGL-N
|
// 3. 8T - TGL-H, TGL-N (default)
|
// 4. 16T - TGL-H, TGL-N (not-POR)
|
//
|
switch (Tmode) {
|
case HdaIDispMode1T:
|
return FALSE;
|
case HdaIDispMode2T:
|
case HdaIDispMode4T:
|
case HdaIDispMode8T:
|
return TRUE;
|
case HdaIDispMode16T:
|
return FALSE;
|
default:
|
return FALSE;
|
}
|
}
|
|
/**
|
Get Pch Usb2 Maximum Physical Port Number
|
|
@retval Pch Usb2 Maximum Physical Port Number
|
**/
|
UINT8
|
GetPchUsb2MaxPhysicalPortNum(
|
VOID
|
)
|
{
|
switch (PchSeries()) {
|
case PCH_LP:
|
return 10;
|
default:
|
return 0;
|
}
|
}
|
|
/**
|
Get Pch Maximum Usb2 Port Number of XHCI Controller
|
|
@retval Pch Maximum Usb2 Port Number of XHCI Controller
|
**/
|
UINT8
|
GetPchXhciMaxUsb2PortNum(
|
VOID
|
)
|
{
|
switch (PchSeries()) {
|
case PCH_LP:
|
return 12;
|
default:
|
return 0;
|
}
|
}
|
|
/**
|
Get Pch Maximum Usb3 Port Number of XHCI Controller
|
|
@retval Pch Maximum Usb3 Port Number of XHCI Controller
|
**/
|
UINT8
|
GetPchXhciMaxUsb3PortNum(
|
VOID
|
)
|
{
|
switch (PchSeries()) {
|
case PCH_LP:
|
return 4;
|
default:
|
return 0;
|
}
|
}
|
|
/**
|
Gets the maximum number of UFS controller supported by this chipset.
|
|
@return Number of supported UFS controllers
|
**/
|
UINT8
|
PchGetMaxUfsNum (
|
VOID
|
)
|
{
|
return 2;
|
}
|
|
/**
|
Check if this chipset supports eMMC controller
|
|
@retval BOOLEAN TRUE if supported, FALSE otherwise
|
**/
|
BOOLEAN
|
IsPchEmmcSupported (
|
VOID
|
)
|
{
|
return FALSE;
|
}
|
|
/**
|
Check if this chipset supports SD controller
|
|
@retval BOOLEAN TRUE if supported, FALSE otherwise
|
**/
|
BOOLEAN
|
IsPchSdCardSupported (
|
VOID
|
)
|
{
|
return FALSE;
|
}
|
|
/**
|
Check if this chipset supports THC controller
|
|
@retval BOOLEAN TRUE if supported, FALSE otherwise
|
**/
|
BOOLEAN
|
IsPchThcSupported (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
/**
|
Check if this chipset supports HSIO BIOS Sync
|
|
@retval BOOLEAN TRUE if supported, FALSE otherwise
|
**/
|
BOOLEAN
|
IsPchChipsetInitSyncSupported (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
/**
|
Check if link between PCH and CPU is an P-DMI
|
|
@retval TRUE P-DMI link
|
@retval FALSE Not an P-DMI link
|
**/
|
BOOLEAN
|
IsPchWithPdmi (
|
VOID
|
)
|
{
|
return FALSE;
|
}
|
|
/**
|
Check whether ATX Shutdown (PS_ON) is supported.
|
|
@retval TRUE ATX Shutdown (PS_ON) is supported in PCH
|
@retval FALSE ATX Shutdown (PS_ON) is not supported by PCH
|
**/
|
BOOLEAN
|
IsPchPSOnSupported (
|
VOID
|
)
|
{
|
return FALSE;
|
}
|
|
/**
|
Check if link between PCH and CPU is an OP-DMI
|
|
@retval TRUE OP-DMI link
|
@retval FALSE Not an OP-DMI link
|
**/
|
BOOLEAN
|
IsPchWithOpdmi (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
/**
|
Check if link between PCH and CPU is an F-DMI
|
|
@retval TRUE F-DMI link
|
@retval FALSE Not an F-DMI link
|
**/
|
BOOLEAN
|
IsPchWithFdmi (
|
VOID
|
)
|
{
|
return FALSE;
|
}
|
/**
|
Get Pch Maximum ISH UART Controller number
|
|
@retval Pch Maximum ISH UART controllers number
|
**/
|
UINT8
|
GetPchMaxIshUartControllersNum (
|
VOID
|
)
|
{
|
return 2;
|
}
|
|
/**
|
Get Pch Maximum ISH I2C Controller number
|
|
@retval Pch Maximum ISH I2C controllers number
|
**/
|
UINT8
|
GetPchMaxIshI2cControllersNum (
|
VOID
|
)
|
{
|
return 3;
|
}
|
|
/**
|
Get Pch Maximum ISH I3C Controller number
|
|
@retval Pch Maximum ISH I3C controllers number
|
**/
|
UINT8
|
GetPchMaxIshI3cControllersNum (
|
VOID
|
)
|
{
|
return 0;
|
}
|
|
/**
|
Get Pch Maximum ISH SPI Controller number
|
|
@retval Pch Maximum ISH SPI controllers number
|
**/
|
UINT8
|
GetPchMaxIshSpiControllersNum (
|
VOID
|
)
|
{
|
return 1;
|
}
|
|
/**
|
Get Pch Maximum ISH SPI Controller Cs pins number
|
|
@retval Pch Maximum ISH SPI controller Cs pins number
|
**/
|
UINT8
|
GetPchMaxIshSpiControllerCsPinsNum (
|
VOID
|
)
|
{
|
return 1;
|
}
|
|
/**
|
Get Pch Maximum ISH GP number
|
|
@retval Pch Maximum ISH GP number
|
**/
|
UINT8
|
GetPchMaxIshGpNum (
|
VOID
|
)
|
{
|
return 8;
|
}
|
|
/**
|
Get Pch Maximum Serial IO I2C controllers number
|
|
@retval Pch Maximum Serial IO I2C controllers number
|
**/
|
UINT8
|
GetPchMaxSerialIoI2cControllersNum (
|
VOID
|
)
|
{
|
return 6;
|
}
|
|
/**
|
Get Pch Maximum Serial IO SPI controllers number
|
|
@retval Pch Maximum Serial IO SPI controllers number
|
**/
|
UINT8
|
GetPchMaxSerialIoSpiControllersNum (
|
VOID
|
)
|
{
|
return 4;
|
}
|
|
/**
|
Get Pch Maximum Serial IO UART controllers number
|
|
@retval Pch Maximum Serial IO UART controllers number
|
**/
|
UINT8
|
GetPchMaxSerialIoUartControllersNum (
|
VOID
|
)
|
{
|
return 4;
|
}
|
|
/**
|
Get Pch Maximum Serial IO SPI Chip Selects count
|
|
@retval Pch Maximum Serial IO SPI Chip Selects number
|
**/
|
UINT8
|
GetPchMaxSerialIoSpiChipSelectsNum (
|
VOID
|
)
|
{
|
return 2;
|
}
|
|
/**
|
Get Pch Maximum ME Applet count
|
|
@retval Pch Maximum ME Applet number
|
**/
|
UINT8
|
GetPchMaxMeAppletCount (
|
VOID
|
)
|
{
|
return 31;
|
}
|
|
/**
|
Get Pch Maximum ME Session count
|
|
@retval Pch Maximum ME Sesion number
|
**/
|
UINT8
|
GetPchMaxMeSessionCount (
|
VOID
|
)
|
{
|
return 16;
|
}
|
|
/**
|
Get Pch Maximum THC count
|
|
@retval Pch Maximum THC count number
|
**/
|
UINT8
|
GetPchMaxThcCount (
|
VOID
|
)
|
{
|
return 2;
|
}
|
|
/**
|
Returns a frequency of the sosc_clk signal.
|
All SATA controllers on the system are assumed to
|
work on the same sosc_clk frequency.
|
|
@retval Frequency of the sosc_clk signal.
|
**/
|
SATA_SOSC_CLK_FREQ
|
GetSataSoscClkFreq (
|
VOID
|
)
|
{
|
return SataSosc100Mhz;
|
}
|
|
/**
|
Check if SATA support should be awake after function disable
|
|
@retval TRUE
|
@retval FALSE
|
**/
|
BOOLEAN
|
IsSataSupportWakeAfterFunctionDisable (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
/**
|
Returns USB2 PHY Reference Clock frequency value used by PCH
|
This defines what electrical tuning parameters shall be used
|
during USB2 PHY initialization programming
|
|
@retval Frequency reference clock for USB2 PHY
|
**/
|
USB2_PHY_REF_FREQ
|
GetUsb2PhyRefFreq (
|
VOID
|
)
|
{
|
return FREQ_19_2;
|
}
|
|
/**
|
Check if SPI in a given PCH generation supports an Extended BIOS Range Decode
|
|
@retval TRUE or FALSE if PCH supports Extended BIOS Range Decode
|
**/
|
BOOLEAN
|
IsExtendedBiosRangeDecodeSupported (
|
VOID
|
)
|
{
|
return TRUE;
|
}
|
|
#define SPI_PCH_LP_DMI_TARGET 0x23A8
|
|
/**
|
Returns DMI target for current PCH SPI
|
|
@retval PCH SPI DMI target value
|
**/
|
UINT16
|
GetPchSpiDmiTarget (
|
VOID
|
)
|
{
|
return SPI_PCH_LP_DMI_TARGET;
|
}
|