/** @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; }