/** @file
This file is SampleCode of the library for Intel PCH PEI Policy initialization.
Copyright (c) 2020, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "PeiPchPolicyUpdate.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
CONST UINT8 mPchSerialIoDevMode[PCH_MAX_SERIALIO_CONTROLLERS] = {
1 /* I2C0 */, 1 /* I2C1 */, 0 /* I2C2 */, 0 /* I2C3 */, 0 /* I2C4 */, 0 /* I2C5 */,
0 /* SPI0 */, 0 /* SPI1 */, 0 /* SPI2 */, 1 /* UART0 */, 0 /* UART1 */, 3 /* UART2 */
};
CONST UINT8 mPchLpSerialIoDevMode[PCH_MAX_SERIALIO_CONTROLLERS] = {
1 /* I2C0 */, 1 /* I2C1 */, 0 /* I2C2 */, 0 /* I2C3 */, 0 /* I2C4 */, 0 /* I2C5 */,
0 /* SPI0 */, 0 /* SPI1 */, 0 /* SPI2 */, 0 /* UART0 */, 0 /* UART1 */, 0 /* UART2 */
};
/**
Performs FSP PCH PEI Policy initialization.
@param[in][out] FspsUpd Pointer to FSP UPD Data.
@retval EFI_SUCCESS FSP UPD Data is updated.
@retval EFI_NOT_FOUND Fail to locate required PPI.
@retval Other FSP UPD Data update process fail.
**/
EFI_STATUS
EFIAPI
PeiFspPchPolicyUpdate (
IN OUT FSPS_UPD *FspsUpd
)
{
UINT32 Index;
UINT32 Length;
FspsUpd->FspsConfig.PchPcieDeviceOverrideTablePtr = (UINT32) mPcieDeviceTable;
FspsUpd->FspsConfig.PchPmSlpS3MinAssert = 0;
FspsUpd->FspsConfig.PchPmSlpS4MinAssert = 0;
FspsUpd->FspsConfig.PchPmSlpSusMinAssert = 0;
FspsUpd->FspsConfig.PchPmSlpAMinAssert = 0;
FspsUpd->FspsConfig.PchPmLpcClockRun = 1;
FspsUpd->FspsConfig.EnableTcoTimer = 0;
FspsUpd->FspsConfig.Enable8254ClockGating = 0;
FspsUpd->FspsConfig.Enable8254ClockGatingOnS3 = 0;
FspsUpd->FspsConfig.ScsEmmcEnabled = 1;
FspsUpd->FspsConfig.ScsEmmcHs400Enabled = 1;
FspsUpd->FspsConfig.ScsSdCardEnabled = 0;
FspsUpd->FspsConfig.ScsUfsEnabled = 0;
FspsUpd->FspsConfig.SataPwrOptEnable = 1;
FspsUpd->FspsConfig.GpioIrqRoute = 14;
FspsUpd->FspsConfig.SciIrqSelect = 9;
FspsUpd->FspsConfig.TcoIrqEnable = 0;
FspsUpd->FspsConfig.TcoIrqSelect = 9;
AddPlatformVerbTables (
PchHdaCodecPlatformOnboard,
&(FspsUpd->FspsConfig.PchHdaVerbTableEntryNum),
&(FspsUpd->FspsConfig.PchHdaVerbTablePtr)
);
DEBUG_CODE_BEGIN();
if (
(FixedPcdGet8 (PcdSerialIoUartDebugEnable) == 1) &&
FspsUpd->FspsConfig.SerialIoDevMode[PchSerialIoIndexUart0 + PcdGet8 (PcdSerialIoUartNumber)] == PchSerialIoDisabled
) {
FspsUpd->FspsConfig.SerialIoDevMode[PchSerialIoIndexUart0 + PcdGet8 (PcdSerialIoUartNumber)] = PchSerialIoHidden;
}
FspsUpd->FspsConfig.SerialIoDebugUartNumber = PcdGet8 (PcdSerialIoUartNumber);
FspsUpd->FspsConfig.SerialIoEnableDebugUartAfterPost = TRUE;
FspsUpd->FspsConfig.SerialIoUartHwFlowCtrl[PcdGet8 (PcdSerialIoUartNumber)] = 0;
DEBUG_CODE_END();
//
// SerialIo config
//
if (IsPchLp()) {
CopyMem (&FspsUpd->FspsConfig.SerialIoDevMode, mPchLpSerialIoDevMode, PCH_MAX_SERIALIO_CONTROLLERS);
} else {
CopyMem (&FspsUpd->FspsConfig.SerialIoDevMode, mPchSerialIoDevMode, PCH_MAX_SERIALIO_CONTROLLERS);
}
// Set debug UART in PCI mode
FspsUpd->FspsConfig.SerialIoDevMode[PCH_MAX_SERIALIO_I2C_CONTROLLERS + PCH_MAX_SERIALIO_SPI_CONTROLLERS + 2] = 1;
FspsUpd->FspsConfig.SerialIoSpiCsPolarity[0] = 1;
FspsUpd->FspsConfig.SerialIoSpiCsPolarity[1] = 0;
FspsUpd->FspsConfig.SerialIoSpiCsPolarity[2] = 0;
FspsUpd->FspsConfig.SerialIoUartHwFlowCtrl[0] = 1;
FspsUpd->FspsConfig.SerialIoUartHwFlowCtrl[1] = 1;
FspsUpd->FspsConfig.SerialIoUartHwFlowCtrl[2] = 1;
FspsUpd->FspsConfig.PchSerialIoI2cPadsTermination[0] = 1;
FspsUpd->FspsConfig.PchSerialIoI2cPadsTermination[1] = 1;
FspsUpd->FspsConfig.PchSerialIoI2cPadsTermination[2] = 1;
FspsUpd->FspsConfig.PchSerialIoI2cPadsTermination[3] = 1;
FspsUpd->FspsConfig.PchSerialIoI2cPadsTermination[4] = 1;
FspsUpd->FspsConfig.PchSerialIoI2cPadsTermination[5] = 1;
//
// USB config
//
FspsUpd->FspsConfig.XdciEnable = FALSE;
FspsUpd->FspsConfig.PchEnableComplianceMode = FALSE;
FspsUpd->FspsConfig.UsbPdoProgramming = TRUE;
FspsUpd->FspsConfig.PchUsbOverCurrentEnable = TRUE;
FspsUpd->FspsConfig.PchUsb2PhySusPgEnable = TRUE;
FspsUpd->FspsTestConfig.PchXhciOcLock = TRUE;
Length = GetPchXhciMaxUsb2PortNum ();
for (Index = 0; Index < Length; Index++) {
FspsUpd->FspsConfig.PortUsb20Enable[Index] = TRUE;
FspsUpd->FspsConfig.Usb2OverCurrentPin[Index] = UsbOverCurrentPinMax;
FspsUpd->FspsConfig.Usb2AfePetxiset[Index] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[Index] = 5;
FspsUpd->FspsConfig.Usb2AfePredeemp[Index] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[Index] = 0;
}
Length = GetPchXhciMaxUsb3PortNum ();
for (Index = 0; Index < Length; Index++) {
FspsUpd->FspsConfig.PortUsb30Enable[Index] = TRUE;
FspsUpd->FspsConfig.Usb3OverCurrentPin[Index] = UsbOverCurrentPinMax;
FspsUpd->FspsConfig.Usb3HsioTxDeEmphEnable[Index] = 0;
FspsUpd->FspsConfig.Usb3HsioTxDeEmph[Index] = 0;
FspsUpd->FspsConfig.Usb3HsioTxDownscaleAmpEnable[Index] = 0;
FspsUpd->FspsConfig.Usb3HsioTxDownscaleAmp[Index] = 0;
FspsUpd->FspsConfig.PchUsbHsioRxTuningEnable[Index] = 0;
FspsUpd->FspsConfig.PchUsbHsioRxTuningParameters[Index] = 3;
FspsUpd->FspsConfig.PchUsbHsioFilterSel[Index] = 0;
}
if (IsPchLp()) {
FspsUpd->FspsConfig.Usb2OverCurrentPin[0] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb2OverCurrentPin[1] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[2] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb2OverCurrentPin[3] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb2OverCurrentPin[4] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2OverCurrentPin[5] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2OverCurrentPin[6] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2OverCurrentPin[7] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2OverCurrentPin[8] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[9] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[10] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[11] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[12] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[13] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[14] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[15] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[0] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb3OverCurrentPin[1] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[2] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb3OverCurrentPin[3] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb3OverCurrentPin[4] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[5] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[6] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[7] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[8] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[9] = UsbOverCurrentPinSkip;
Length = GetPchUsb2MaxPhysicalPortNum ();
for (Index = 0; Index < Length; Index++) {
FspsUpd->FspsConfig.Usb2AfePetxiset[Index] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[Index] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[Index] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[Index] = 0;
}
} else {
FspsUpd->FspsConfig.Usb2OverCurrentPin[0] = UsbOverCurrentPin4;
FspsUpd->FspsConfig.Usb2OverCurrentPin[1] = UsbOverCurrentPin0;
FspsUpd->FspsConfig.Usb2OverCurrentPin[2] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb2OverCurrentPin[3] = UsbOverCurrentPin5;
FspsUpd->FspsConfig.Usb2OverCurrentPin[4] = UsbOverCurrentPin5;
FspsUpd->FspsConfig.Usb2OverCurrentPin[5] = UsbOverCurrentPin0;
FspsUpd->FspsConfig.Usb2OverCurrentPin[6] = UsbOverCurrentPin1;
FspsUpd->FspsConfig.Usb2OverCurrentPin[7] = UsbOverCurrentPin1;
FspsUpd->FspsConfig.Usb2OverCurrentPin[8] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb2OverCurrentPin[9] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2OverCurrentPin[10] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2OverCurrentPin[11] = UsbOverCurrentPin6;
FspsUpd->FspsConfig.Usb2OverCurrentPin[12] = UsbOverCurrentPin6;
FspsUpd->FspsConfig.Usb2OverCurrentPin[13] = UsbOverCurrentPin0;
FspsUpd->FspsConfig.Usb3OverCurrentPin[0] = UsbOverCurrentPin4;
FspsUpd->FspsConfig.Usb3OverCurrentPin[1] = UsbOverCurrentPin0;
FspsUpd->FspsConfig.Usb3OverCurrentPin[2] = UsbOverCurrentPin2;
FspsUpd->FspsConfig.Usb3OverCurrentPin[3] = UsbOverCurrentPin5;
FspsUpd->FspsConfig.Usb3OverCurrentPin[4] = UsbOverCurrentPin5;
FspsUpd->FspsConfig.Usb3OverCurrentPin[5] = UsbOverCurrentPin0;
FspsUpd->FspsConfig.Usb3OverCurrentPin[6] = UsbOverCurrentPin1;
FspsUpd->FspsConfig.Usb3OverCurrentPin[7] = UsbOverCurrentPin1;
FspsUpd->FspsConfig.Usb3OverCurrentPin[8] = UsbOverCurrentPinSkip;
FspsUpd->FspsConfig.Usb3OverCurrentPin[9] = UsbOverCurrentPin3;
FspsUpd->FspsConfig.Usb2AfePetxiset[0] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[0] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[0] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[0] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[1] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[1] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[1] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[1] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[2] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[2] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[2] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[2] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[3] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[3] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[3] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[3] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[4] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[4] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[4] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[4] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[5] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[5] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[5] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[5] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[6] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[6] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[6] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[6] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[7] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[7] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[7] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[7] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[8] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[8] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[8] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[8] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[9] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[9] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[9] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[9] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[10] = 6;
FspsUpd->FspsConfig.Usb2AfeTxiset[10] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[10] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[10] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[11] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[11] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[11] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[11] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[12] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[12] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[12] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[12] = 0;
FspsUpd->FspsConfig.Usb2AfePetxiset[13] = 7;
FspsUpd->FspsConfig.Usb2AfeTxiset[13] = 0;
FspsUpd->FspsConfig.Usb2AfePredeemp[13] = 3;
FspsUpd->FspsConfig.Usb2AfePehalfbit[13] = 0;
}
FspsUpd->FspsConfig.PcieSwEqCoeffListCm[0] = 4;
FspsUpd->FspsConfig.PcieSwEqCoeffListCp[0] = 8;
FspsUpd->FspsConfig.PcieSwEqCoeffListCm[1] = 6;
FspsUpd->FspsConfig.PcieSwEqCoeffListCp[1] = 2;
FspsUpd->FspsConfig.PcieSwEqCoeffListCm[2] = 8;
FspsUpd->FspsConfig.PcieSwEqCoeffListCp[2] = 6;
FspsUpd->FspsConfig.PcieSwEqCoeffListCm[3] = 10;
FspsUpd->FspsConfig.PcieSwEqCoeffListCp[3] = 8;
FspsUpd->FspsConfig.PcieSwEqCoeffListCm[4] = 12;
FspsUpd->FspsConfig.PcieSwEqCoeffListCp[4] = 2;
return EFI_SUCCESS;
}