/** @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.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include "PchInfoLibPrivate.h"
#include
#include
/**
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;
}