/** @file Pch information library. All function in this library is available for PEI, DXE, and SMM, But do not support UEFI RUNTIME environment call. Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include "PchInfoLibPrivate.h" #include #include /** Determine Pch Series based on Device Id @param[in] LpcDeviceId Lpc Device Id @retval PCH_SERIES Pch Series **/ PCH_SERIES PchSeriesFromLpcDid ( IN UINT16 LpcDeviceId ) { switch (LpcDeviceId & B_LPC_CFG_DID) { case V_LPC_CFG_DID_CNL_H: return PCH_H; case V_LPC_CFG_DID_CNL_LP: return PCH_LP; case V_LPC_CFG_DID_CML_LP: return PCH_LP; default: return PCH_UNKNOWN_SERIES; } } /** Return Pch Generation @retval PCH_GENERATION Pch Generation **/ PCH_GENERATION PchGeneration ( VOID ) { return CNL_PCH; } /** Check if this is Server PCH @retval TRUE It's a Server PCH @retval FALSE It's not a Server PCH **/ BOOLEAN IsPchServer ( VOID ) { return FALSE; } /** Get RST mode supported by the silicon @retval RST_MODE RST mode supported by silicon **/ RST_MODE PchGetSupportedRstMode ( VOID ) { switch (PchGetLpcDid ()) { case V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_4: case V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A303_SKU: return RstUnsupported; break; default: return RstPremium; break; } } /** Check if this is Server SKU @retval TRUE It's PCH Server SKU @retval FALSE It's not PCH Server SKU **/ BOOLEAN IsPchServerSku ( VOID ) { UINT16 LpcDid; LpcDid = PchGetLpcDid (); if (LpcDid == V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A309_SKU) { return TRUE; } else { return FALSE; } } /** Get PCH series ASCII string. @retval PCH Series string **/ CHAR8* PchGetSeriesStr ( VOID ) { switch (PchSeries ()) { case PCH_LP: return "CNL PCH-LP"; case PCH_H: return "CNL PCH-H"; default: return NULL; } } GLOBAL_REMOVE_IF_UNREFERENCED struct PCH_SKU_STRING mSkuStrs[] = { // // PCH LP Mobile LPC Device IDs // {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_SUPER_SKU, "Super SKU"}, {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_0, "(U) Super SKU"}, {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_1, "Super SKU (locked)"}, {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_2, "(Y) Premium SKU"}, {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_3, "(U) Premium SKU"}, {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_4, "(U) Base/Mainstream SKU"}, {V_CNL_PCH_LP_LPC_CFG_DEVICE_ID_MB_5, "(Y) Super SKU"}, // // PCH H LPC Device IDs // {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A300_SKU, "CNL PCH-H SKU A300"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A303_SKU, "H310"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A304_SKU, "H370"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A305_SKU, "Z390"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A306_SKU, "Q370"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A309_SKU, "C246"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A30A_SKU, "C242"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A30B_SKU, "X399"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A30C_SKU, "QM370"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A30D_SKU, "HM370"}, {V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A30E_SKU, "CM246"}, {0xFFFF, NULL} }; /** 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; } /** Get Pch Maximum Pcie Root Port Number @retval Pch Maximum Pcie Root Port Number **/ UINT8 GetPchMaxPciePortNum ( VOID ) { if (IsPchLp ()) { return 16; } else { return 24; } } /** Get Pch Usb2 Maximum Physical Port Number @retval Pch Usb2 Maximum Physical Port Number **/ UINT8 GetPchUsb2MaxPhysicalPortNum ( VOID ) { if (IsPchLp ()) { return 10; } else { return 14; } } /** Get Pch Maximum Usb2 Port Number of XHCI Controller @retval Pch Maximum Usb2 Port Number of XHCI Controller **/ UINT8 GetPchXhciMaxUsb2PortNum ( VOID ) { if (IsPchLp ()) { return 12; } else { return 16; } } /** Get Pch Maximum Usb3 Port Number of XHCI Controller @retval Pch Maximum Usb3 Port Number of XHCI Controller **/ UINT8 GetPchXhciMaxUsb3PortNum ( VOID ) { if (IsPchLp ()) { return 6; } else { return 10; } } /** 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 PCH_HDAUDIO_IDISP_TMODE Tmode ) { // // iDisplay Audio Link T-mode support per PCH Generation/Series: // 1. 1T - CNP-LP // 2. 2T - CNP-LP/H (default) // switch (Tmode) { case PchHdaIDispMode1T: return IsPchLp (); case PchHdaIDispMode2T: return TRUE; case PchHdaIDispMode4T: case PchHdaIDispMode8T: case PchHdaIDispMode16T: default: return FALSE; } } /** Gets the maximum number of UFS controller supported by this chipset. @return Number of supported UFS controllers **/ UINT8 PchGetMaxUfsNum ( VOID ) { if (IsPchLp ()) { return 1; } else { return 0; } } /** Check if this chipset supports eMMC controller @retval BOOLEAN TRUE if supported, FALSE otherwise **/ BOOLEAN IsPchEmmcSupported ( VOID ) { if (IsPchLp ()) { return TRUE; } return FALSE; } /** Check if this chipset supports SD controller @retval BOOLEAN TRUE if supported, FALSE otherwise **/ BOOLEAN IsPchSdCardSupported ( VOID ) { return TRUE; } /** Check if this chipset supports UFS controller @retval BOOLEAN TRUE if supported, FALSE otherwise **/ BOOLEAN IsPchUfsSupported ( VOID ) { if (IsPchLp ()) { return TRUE; } return FALSE; } /** 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 IsPchH (); } /** 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 !IsPchH (); } /** 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; }