/** @file This file provides services for PEI policy default initialization Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "PeiSaPolicyLibrary.h" #include #include #include "MrcInterface.h" #include #define DEFAULT_OPTION_ROM_TEMP_BAR 0x80000000 #define DEFAULT_OPTION_ROM_TEMP_MEM_LIMIT 0xC0000000 // // Need minimum of 48MB during PEI phase for IAG and some buffer for boot. // #define PEI_MIN_MEMORY_SIZE (10 * 0x800000 + 0x10000000) // 80MB + 256MB // // Function call to Load defaults for Individial IP Blocks // VOID LoadSaMiscPeiPreMemDefault ( IN VOID *ConfigBlockPointer ) { SA_MISC_PEI_PREMEM_CONFIG *MiscPeiPreMemConfig; MiscPeiPreMemConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "MiscPeiPreMemConfig->Header.GuidHob.Name = %g\n", &MiscPeiPreMemConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "MiscPeiPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", MiscPeiPreMemConfig->Header.GuidHob.Header.HobLength)); // // Policy initialization commented out here is because it's the same with default 0 and no need to re-do again. // MiscPeiPreMemConfig->LockPTMregs = 1; // // Initialize the Platform Configuration // MiscPeiPreMemConfig->MchBar = 0xFED10000; MiscPeiPreMemConfig->DmiBar = 0xFED18000; MiscPeiPreMemConfig->EpBar = 0xFED19000; MiscPeiPreMemConfig->EdramBar = 0xFED80000; MiscPeiPreMemConfig->SmbusBar = 0xEFA0; MiscPeiPreMemConfig->TsegSize = PcdGet32 (PcdTsegSize); MiscPeiPreMemConfig->GdxcBar = 0xFED84000; // // Initialize the Switchable Graphics Default Configuration // MiscPeiPreMemConfig->SgDelayAfterHoldReset = 100; //100ms MiscPeiPreMemConfig->SgDelayAfterPwrEn = 300; //300ms /// /// Initialize the DataPtr for S3 resume /// MiscPeiPreMemConfig->S3DataPtr = NULL; MiscPeiPreMemConfig->OpRomScanTempMmioBar = DEFAULT_OPTION_ROM_TEMP_BAR; MiscPeiPreMemConfig->OpRomScanTempMmioLimit = DEFAULT_OPTION_ROM_TEMP_MEM_LIMIT; } VOID LoadSaMiscPeiDefault ( IN VOID *ConfigBlockPointer ) { SA_MISC_PEI_CONFIG *MiscPeiConfig; MiscPeiConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "MiscPeiConfig->Header.GuidHob.Name = %g\n", &MiscPeiConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "MiscPeiConfig->Header.GuidHob.Header.HobLength = 0x%x\n", MiscPeiConfig->Header.GuidHob.Header.HobLength)); /// /// EDRAM H/W Mode by default (0- EDRAM SW Disable, 1- EDRAM SW Enable, 2- EDRAM HW Mode) /// MiscPeiConfig->EdramTestMode = 2; if (IsWhlCpu()) { MiscPeiConfig->Device4Enable = 1; } } VOID LoadVtdDefault ( IN VOID *ConfigBlockPointer ) { VTD_CONFIG *Vtd; Vtd = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "Vtd->Header.GuidHob.Name = %g\n", &Vtd->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "Vtd->Header.GuidHob.Header.HobLength = 0x%x\n", Vtd->Header.GuidHob.Header.HobLength)); // // Initialize the Vtd Configuration // Vtd->VtdDisable = 0; Vtd->BaseAddress[0] = 0xFED90000; Vtd->BaseAddress[1] = 0xFED92000; Vtd->BaseAddress[2] = 0xFED91000; } VOID LoadIpuPreMemDefault ( IN VOID *ConfigBlockPointer ) { IPU_PREMEM_CONFIG *IpuPreMemPolicy; IpuPreMemPolicy = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "IpuPreMemPolicy->Header.GuidHob.Name = %g\n", &IpuPreMemPolicy->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "IpuPreMemPolicy->Header.GuidHob.Header.HobLength = 0x%x\n", IpuPreMemPolicy->Header.GuidHob.Header.HobLength)); } VOID LoadPciePeiPreMemDefault ( IN VOID *ConfigBlockPointer ) { UINT8 Index; PCIE_PEI_PREMEM_CONFIG *PciePeiPreMemConfig; PciePeiPreMemConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "PciePeiPreMemConfig->Header.GuidHob.Name = %g\n", &PciePeiPreMemConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "PciePeiPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", PciePeiPreMemConfig->Header.GuidHob.Header.HobLength)); // // Initialize the PciExpress Configuration // PciePeiPreMemConfig->DmiGen3EqPh2Enable = 2; PciePeiPreMemConfig->DmiGen3ProgramStaticEq = 1; PciePeiPreMemConfig->Peg0Enable = 2; PciePeiPreMemConfig->Peg1Enable = 2; PciePeiPreMemConfig->Peg2Enable = 2; PciePeiPreMemConfig->Peg3Enable = 2; PciePeiPreMemConfig->Peg0PowerDownUnusedLanes = 1; PciePeiPreMemConfig->Peg1PowerDownUnusedLanes = 1; PciePeiPreMemConfig->Peg2PowerDownUnusedLanes = 1; PciePeiPreMemConfig->Peg3PowerDownUnusedLanes = 1; PciePeiPreMemConfig->Peg0Gen3EqPh2Enable = 2; PciePeiPreMemConfig->Peg1Gen3EqPh2Enable = 2; PciePeiPreMemConfig->Peg2Gen3EqPh2Enable = 2; PciePeiPreMemConfig->Peg3Gen3EqPh2Enable = 2; PciePeiPreMemConfig->PegGen3ProgramStaticEq = 1; PciePeiPreMemConfig->Gen3SwEqNumberOfPresets = 2; PciePeiPreMemConfig->Gen3SwEqEnableVocTest = 2; if (IsCnlPch() && IsPchH() && (PchStepping() == PCH_A0)) { PciePeiPreMemConfig->DmiMaxLinkSpeed = 1; } for (Index = 0; Index < SA_DMI_MAX_LANE; Index++) { PciePeiPreMemConfig->DmiGen3RootPortPreset[Index] = 4; PciePeiPreMemConfig->DmiGen3EndPointPreset[Index] = 7; PciePeiPreMemConfig->DmiGen3EndPointHint[Index] = 2; } for (Index = 0; Index < SA_DMI_MAX_BUNDLE; Index++) { /// /// Gen3 RxCTLE peaking default is 0 for DMI /// PciePeiPreMemConfig->DmiGen3RxCtlePeaking[Index] = 0; } for (Index = 0; Index < SA_PEG_MAX_LANE; Index++) { PciePeiPreMemConfig->PegGen3RootPortPreset[Index] = 7; PciePeiPreMemConfig->PegGen3EndPointPreset[Index] = 7; PciePeiPreMemConfig->PegGen3EndPointHint[Index] = 2; } PciePeiPreMemConfig->DmiDeEmphasis = 1; /// /// Gen3 Software Equalization Jitter Dwell Time: 1 msec /// Gen3 Software Equalization Jitter Error Target: 1 /// Gen3 Software Equalization VOC Dwell Time: 10 msec /// Gen3 Software Equalization VOC Error Target: 2 /// PciePeiPreMemConfig->Gen3SwEqJitterDwellTime = 3 * STALL_ONE_MILLI_SECOND; PciePeiPreMemConfig->Gen3SwEqJitterErrorTarget = 2; PciePeiPreMemConfig->Gen3SwEqVocDwellTime = 10 * STALL_ONE_MILLI_SECOND; PciePeiPreMemConfig->Gen3SwEqVocErrorTarget = 2; /** Parameters for PCIe Gen3 device reset @note Refer to the Platform Design Guide (PDG) for additional information about this GPIO. **/ PciePeiPreMemConfig->PegGpioData.GpioSupport = FALSE; PciePeiPreMemConfig->PegGpioData.SaPeg0ResetGpio.GpioPad = 0; PciePeiPreMemConfig->PegGpioData.SaPeg0ResetGpio.Active = FALSE; PciePeiPreMemConfig->PegGpioData.SaPeg3ResetGpio.GpioPad = 0; PciePeiPreMemConfig->PegGpioData.SaPeg3ResetGpio.Active = FALSE; } VOID LoadPciePeiDefault ( IN VOID *ConfigBlockPointer ) { UINT8 Index; PCIE_PEI_CONFIG *PciePeiConfig; PciePeiConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "PciePeiConfig->Header.GuidHob.Name = %g\n", &PciePeiConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "PciePeiConfig->Header.GuidHob.Header.HobLength = 0x%x\n", PciePeiConfig->Header.GuidHob.Header.HobLength)); // // Initialize the PciExpress Configuration // for (Index = 0; Index < SA_PEG_MAX_FUN; Index++) { PciePeiConfig->PegDeEmphasis[Index] = 1; PciePeiConfig->PegMaxPayload[Index] = 0xFF; } /// /// Slot Power Limit Value: 75 W /// Slot Power Limit Scale: 1.0x /// Physical Slot Number: Peg Index + 1 (1,2,3) /// for (Index = 0; Index < SA_PEG_MAX_FUN; Index++) { PciePeiConfig->PegSlotPowerLimitValue[Index] = 75; PciePeiConfig->PegPhysicalSlotNumber[Index] = Index + 1; } } VOID LoadGraphichsPeiPreMemDefault ( IN VOID *ConfigBlockPointer ) { GRAPHICS_PEI_PREMEM_CONFIG *GtPreMemConfig; GtPreMemConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "GtPreMemConfig->Header.GuidHob.Name = %g\n", &GtPreMemConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "GtPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", GtPreMemConfig->Header.GuidHob.Header.HobLength)); /// /// Initialize Graphics Pre-Mem Configurations. /// GtPreMemConfig->GmAdr = 0xD0000000; GtPreMemConfig->GttMmAdr = 0xCF000000; GtPreMemConfig->GttSize = 3; GtPreMemConfig->IgdDvmt50PreAlloc = 1; GtPreMemConfig->InternalGraphics = 2; GtPreMemConfig->PrimaryDisplay = 3; GtPreMemConfig->ApertureSize = SA_GT_APERTURE_SIZE_256MB; GtPreMemConfig->PanelPowerEnable = 1; } VOID LoadGraphichsPeiDefault ( IN VOID *ConfigBlockPointer ) { GRAPHICS_PEI_CONFIG *GtConfig; GtConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "GtConfig->Header.GuidHob.Name = %g\n", &GtConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "GtConfig->Header.GuidHob.Header.HobLength = 0x%x\n", GtConfig->Header.GuidHob.Header.HobLength)); // // Initialize the Graphics configuration // GtConfig->RenderStandby = 1; GtConfig->PavpEnable = 1; GtConfig->PmSupport = 1; GtConfig->CdynmaxClampEnable = 1; GtConfig->GtFreqMax = 0xFF; // // Initialize the default VBT settings // GtConfig->DdiConfiguration.DdiPortEdp = 1; GtConfig->DdiConfiguration.DdiPortBHpd = 1; GtConfig->DdiConfiguration.DdiPortCHpd = 1; GtConfig->DdiConfiguration.DdiPortDHpd = 1; GtConfig->DdiConfiguration.DdiPortFHpd = 0; GtConfig->DdiConfiguration.DdiPortBDdc = 1; GtConfig->DdiConfiguration.DdiPortCDdc = 1; GtConfig->DdiConfiguration.DdiPortDDdc = 1; GtConfig->DdiConfiguration.DdiPortFDdc = 0; /// /// Initialize the CdClock to 675 Mhz /// GtConfig->CdClock = 3; } VOID LoadSwitchableGraphichsDefault ( IN VOID *ConfigBlockPointer ) { SWITCHABLE_GRAPHICS_CONFIG *SgConfig; SgConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "SgConfig->Header.GuidHob.Name = %g\n", &SgConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "SgConfig->Header.GuidHob.Header.HobLength = 0x%x\n", SgConfig->Header.GuidHob.Header.HobLength)); SgConfig->SaRtd3Pcie0Gpio.GpioSupport = NotSupported; SgConfig->SaRtd3Pcie1Gpio.GpioSupport = NotSupported; SgConfig->SaRtd3Pcie2Gpio.GpioSupport = NotSupported; } VOID LoadMemConfigNoCrcDefault ( IN VOID *ConfigBlockPointer ) { MEMORY_CONFIG_NO_CRC *MemConfigNoCrc; MemConfigNoCrc = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "MemConfigNoCrc->Header.GuidHob.Name = %g\n", &MemConfigNoCrc->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "MemConfigNoCrc->Header.GuidHob.Header.HobLength = 0x%x\n", MemConfigNoCrc->Header.GuidHob.Header.HobLength)); // // Allocating memory space for pointer structures inside MemConfigNoCrc // MemConfigNoCrc->SpdData = (SPD_DATA_BUFFER *) AllocateZeroPool (sizeof (SPD_DATA_BUFFER)); ASSERT (MemConfigNoCrc->SpdData != NULL); if (MemConfigNoCrc->SpdData == NULL) { return; } MemConfigNoCrc->DqByteMap = (SA_MEMORY_DQ_MAPPING *) AllocateZeroPool (sizeof (SA_MEMORY_DQ_MAPPING)); ASSERT (MemConfigNoCrc->DqByteMap != NULL); if (MemConfigNoCrc->DqByteMap == NULL) { return; } MemConfigNoCrc->DqsMap = (SA_MEMORY_DQS_MAPPING *) AllocateZeroPool (sizeof (SA_MEMORY_DQS_MAPPING)); ASSERT (MemConfigNoCrc->DqsMap != NULL); if (MemConfigNoCrc->DqsMap == NULL) { return; } MemConfigNoCrc->RcompData = (SA_MEMORY_RCOMP *) AllocateZeroPool (sizeof (SA_MEMORY_RCOMP)); ASSERT (MemConfigNoCrc->RcompData != NULL); if (MemConfigNoCrc->RcompData == NULL) { return; } // // Set PlatformMemory Size // MemConfigNoCrc->PlatformMemorySize = PEI_MIN_MEMORY_SIZE; MemConfigNoCrc->SerialDebugLevel = 3; //< Enable MRC debug message MemConfigNoCrc->MemTestOnWarmBoot = 1; //< Enable to run BaseMemoryTest on warm boot by default } VOID LoadGnaDefault ( IN VOID *ConfigBlockPointer ) { GNA_CONFIG *GnaConfig; GnaConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "GnaConfig->Header.GuidHob.Name = %g\n", &GnaConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "GnaConfig->Header.GuidHob.Header.HobLength = 0x%x\n", GnaConfig->Header.GuidHob.Header.HobLength)); GnaConfig->GnaEnable = TRUE; } VOID LoadMemConfigDefault ( IN VOID *ConfigBlockPointer ) { MEMORY_CONFIGURATION *MemConfig; CPU_FAMILY CpuFamily; UINT16 DeviceId; CPU_SKU CpuSku; CpuSku = GetCpuSku (); CpuFamily = GetCpuFamily (); DeviceId = PciSegmentRead16 (PCI_SEGMENT_LIB_ADDRESS (SA_SEG_NUM, SA_MC_BUS, 0, 0, R_SA_MC_DEVICE_ID)); MemConfig = ConfigBlockPointer; DEBUG ((DEBUG_INFO, "MemConfig->Header.GuidHob.Name = %g\n", &MemConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "MemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", MemConfig->Header.GuidHob.Header.HobLength)); // // Initialize the Memory Configuration // MemConfig->EnBER = 1; MemConfig->EccSupport = 1; MemConfig->ScramblerSupport = 1; MemConfig->PowerDownMode = 0xFF; MemConfig->RankInterleave = TRUE; MemConfig->EnhancedInterleave = TRUE; MemConfig->EnCmdRate = 3; MemConfig->AutoSelfRefreshSupport = TRUE; MemConfig->ExtTemperatureSupport = TRUE; MemConfig->WeaklockEn = 1; MemConfig->Ddr4MixedUDimm2DpcLimit = 1; MemConfig->DualDimmPerChannelBoardType = (CpuFamily == EnumCpuCflDtHalo) ? TRUE : FALSE; // // Channel Hash Configuration // MemConfig->ChHashEnable = TRUE; MemConfig->ChHashMask = 0; MemConfig->ChHashInterleaveBit = 2; MemConfig->PerBankRefresh = TRUE; // // Options for Thermal settings // MemConfig->EnablePwrDn = 1; MemConfig->EnablePwrDnLpddr = 1; MemConfig->DdrThermalSensor = 1; MemConfig->EnergyScaleFact = 4; MemConfig->IdleEnergyCh0Dimm0 = 0xA; MemConfig->IdleEnergyCh0Dimm1 = 0xA; MemConfig->IdleEnergyCh1Dimm0 = 0xA; MemConfig->IdleEnergyCh1Dimm1 = 0xA; MemConfig->PdEnergyCh0Dimm0 = 0x6; MemConfig->PdEnergyCh0Dimm1 = 0x6; MemConfig->PdEnergyCh1Dimm0 = 0x6; MemConfig->PdEnergyCh1Dimm1 = 0x6; MemConfig->ActEnergyCh0Dimm0 = 0xAC; MemConfig->ActEnergyCh0Dimm1 = 0xAC; MemConfig->ActEnergyCh1Dimm0 = 0xAC; MemConfig->ActEnergyCh1Dimm1 = 0xAC; MemConfig->RdEnergyCh0Dimm0 = 0xD4; MemConfig->RdEnergyCh0Dimm1 = 0xD4; MemConfig->RdEnergyCh1Dimm0 = 0xD4; MemConfig->RdEnergyCh1Dimm1 = 0xD4; MemConfig->WrEnergyCh0Dimm0 = 0xDD; MemConfig->WrEnergyCh0Dimm1 = 0xDD; MemConfig->WrEnergyCh1Dimm0 = 0xDD; MemConfig->WrEnergyCh1Dimm1 = 0xDD; MemConfig->WarmThresholdCh0Dimm0 = 0xFF; MemConfig->WarmThresholdCh0Dimm1 = 0xFF; MemConfig->WarmThresholdCh1Dimm0 = 0xFF; MemConfig->WarmThresholdCh1Dimm1 = 0xFF; MemConfig->HotThresholdCh0Dimm0 = 0xFF; MemConfig->HotThresholdCh0Dimm1 = 0xFF; MemConfig->HotThresholdCh1Dimm0 = 0xFF; MemConfig->HotThresholdCh1Dimm1 = 0xFF; MemConfig->WarmBudgetCh0Dimm0 = 0xFF; MemConfig->WarmBudgetCh0Dimm1 = 0xFF; MemConfig->WarmBudgetCh1Dimm0 = 0xFF; MemConfig->WarmBudgetCh1Dimm1 = 0xFF; MemConfig->HotBudgetCh0Dimm0 = 0xFF; MemConfig->HotBudgetCh0Dimm1 = 0xFF; MemConfig->HotBudgetCh1Dimm0 = 0xFF; MemConfig->HotBudgetCh1Dimm1 = 0xFF; MemConfig->SrefCfgEna = 1; MemConfig->SrefCfgIdleTmr = 0x200; MemConfig->ThrtCkeMinTmr = 0x30; MemConfig->ThrtCkeMinDefeatLpddr = 1; MemConfig->ThrtCkeMinTmrLpddr = 0x40; MemConfig->RaplLim2WindX = 1; MemConfig->RaplLim2WindY = 1; MemConfig->RaplLim2Pwr = 0xDE; // // CA Vref routing: board-dependent // 0 - VREF_CA goes to both CH_A and CH_B (LPDDR3/DDR3L) // 1 - VREF_CA to CH_A, VREF_DQ_A to CH_B (should not be used) // 2 - VREF_CA to CH_A, VREF_DQ_B to CH_B (DDR4) // //MemConfig->CaVrefConfig = 0; MemConfig->VttTermination = ((CpuSku == EnumCpuUlx) || (CpuSku == EnumCpuUlt)); MemConfig->VttCompForVsshi = 0; #ifdef UP_SERVER_FLAG MemConfig->TsodTcritmax = 0x69; MemConfig->TsodThigMax = 0x5D; #endif // // MRC training steps // MemConfig->ECT = 1; MemConfig->ERDMPRTC2D = 1; MemConfig->SOT = 1; MemConfig->RDMPRT = 1; MemConfig->RCVET = 1; MemConfig->JWRL = 1; MemConfig->EWRTC2D = 1; MemConfig->ERDTC2D = 1; MemConfig->WRTC1D = 1; MemConfig->WRVC1D = 1; MemConfig->RDTC1D = 1; MemConfig->DIMMODTT = 1; MemConfig->DIMMRONT = 1; MemConfig->WRSRT = 1; MemConfig->RDODTT = 1; MemConfig->RDAPT = 1; MemConfig->WRTC2D = 1; MemConfig->RDTC2D = 1; MemConfig->CMDVC = 1; MemConfig->WRVC2D = 1; MemConfig->RDVC2D = 1; MemConfig->LCT = 1; MemConfig->RTL = 1; MemConfig->TAT = 1; MemConfig->ALIASCHK = 1; MemConfig->RCVENC1D = 1; MemConfig->RMC = 1; MemConfig->CMDSR = 1; MemConfig->CMDDSEQ = 1; MemConfig->CMDNORM = 1; MemConfig->EWRDSEQ = 1; MemConfig->McLock = TRUE; MemConfig->GdxcIotSize = 4; MemConfig->GdxcMotSize = 12; MemConfig->RDEQT = 1; MemConfig->MrcFastBoot = TRUE; MemConfig->MrcTrainOnWarm = FALSE; MemConfig->RemapEnable = TRUE; MemConfig->BClkFrequency = 100 * 1000 * 1000; #ifdef EMBEDDED_FLAG MemConfig->Force1Dpc = TRUE; #endif MemConfig->Vc1ReadMeter = TRUE; MemConfig->Vc1ReadMeterTimeWindow = 0x320; MemConfig->Vc1ReadMeterThreshold = 0x118; MemConfig->StrongWkLeaker = 7; MemConfig->MobilePlatform = (IS_SA_DEVICE_ID_MOBILE (DeviceId)) ? TRUE : FALSE; MemConfig->PciIndex = 0xCF8; MemConfig->PciData = 0xCFC; MemConfig->CkeRankMapping = 0xAA; // This only affects ULX/ULT; otherwise SA GV is disabled. // CFL SA GV: 0 - Disabled, 1 - FixedLow, 2 - FixedHigh, 3 - Enabled MemConfig->SaGv = 3; MemConfig->SimicsFlag = 0; MemConfig->Idd3n = 26; MemConfig->Idd3p = 11; MemConfig->RhPrevention = TRUE; // Row Hammer prevention. MemConfig->RhSolution = HardwareRhp; // Type of solution to be used for RHP - 0/1 = HardwareRhp/Refresh2x MemConfig->RhActProbability = OneIn2To11; // Activation probability for Hardware RHP MemConfig->LpddrMemWriteLatencySet = 1; // Enable LPDDR3 WL Set B if supported by DRAM MemConfig->DllBwEn1 = 1; MemConfig->DllBwEn2 = 2; MemConfig->DllBwEn3 = 2; MemConfig->RetrainOnFastFail = 1; // Restart MRC in Cold mode if SW MemTest fails during Fast flow. 0 = Disabled, 1 = Enabled MemConfig->Lp4DqsOscEn = 1; MemConfig->IsvtIoPort = 0x99; } VOID LoadOverClockConfigDefault ( IN VOID *ConfigBlockPointer ) { OVERCLOCKING_PREMEM_CONFIG *OcPreMemConfig; OcPreMemConfig = (OVERCLOCKING_PREMEM_CONFIG *)ConfigBlockPointer; DEBUG ((DEBUG_INFO, "OcPreMemConfig->Header.GuidHob.Name = %g\n", &OcPreMemConfig->Header.GuidHob.Name)); DEBUG ((DEBUG_INFO, "OcPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", OcPreMemConfig->Header.GuidHob.Header.HobLength)); } static COMPONENT_BLOCK_ENTRY mSaIpBlocksPreMem [] = { {&gSaMiscPeiPreMemConfigGuid, sizeof (SA_MISC_PEI_PREMEM_CONFIG), SA_MISC_PEI_PREMEM_CONFIG_REVISION, LoadSaMiscPeiPreMemDefault}, {&gSaPciePeiPreMemConfigGuid, sizeof (PCIE_PEI_PREMEM_CONFIG), SA_PCIE_PEI_PREMEM_CONFIG_REVISION, LoadPciePeiPreMemDefault}, {&gGraphicsPeiPreMemConfigGuid, sizeof (GRAPHICS_PEI_PREMEM_CONFIG), GRAPHICS_PEI_PREMEM_CONFIG_REVISION, LoadGraphichsPeiPreMemDefault}, {&gSwitchableGraphicsConfigGuid, sizeof (SWITCHABLE_GRAPHICS_CONFIG), SWITCHABLE_GRAPHICS_CONFIG_REVISION, LoadSwitchableGraphichsDefault}, {&gMemoryConfigGuid, sizeof (MEMORY_CONFIGURATION), MEMORY_CONFIG_REVISION, LoadMemConfigDefault}, {&gMemoryConfigNoCrcGuid, sizeof (MEMORY_CONFIG_NO_CRC), MEMORY_CONFIG_REVISION, LoadMemConfigNoCrcDefault}, {&gSaOverclockingPreMemConfigGuid, sizeof (OVERCLOCKING_PREMEM_CONFIG), SA_OVERCLOCKING_CONFIG_REVISION, LoadOverClockConfigDefault}, {&gVtdConfigGuid, sizeof (VTD_CONFIG), VTD_CONFIG_REVISION, LoadVtdDefault}, {&gIpuPreMemConfigGuid, sizeof (IPU_PREMEM_CONFIG), IPU_PREMEM_CONFIG_REVISION, LoadIpuPreMemDefault} }; static COMPONENT_BLOCK_ENTRY mSaIpBlocks [] = { {&gSaMiscPeiConfigGuid, sizeof (SA_MISC_PEI_CONFIG), SA_MISC_PEI_CONFIG_REVISION, LoadSaMiscPeiDefault}, {&gSaPciePeiConfigGuid, sizeof (PCIE_PEI_CONFIG), SA_PCIE_PEI_CONFIG_REVISION, LoadPciePeiDefault}, {&gGraphicsPeiConfigGuid, sizeof (GRAPHICS_PEI_CONFIG), GRAPHICS_PEI_CONFIG_REVISION, LoadGraphichsPeiDefault}, {&gGnaConfigGuid, sizeof (GNA_CONFIG), GNA_CONFIG_REVISION, LoadGnaDefault} }; /** Get SA config block table total size. @retval Size of SA config block table **/ UINT16 EFIAPI SaGetConfigBlockTotalSize ( VOID ) { return GetComponentConfigBlockTotalSize (&mSaIpBlocks[0], sizeof (mSaIpBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); } /** Get SA config block table total size. @retval Size of SA config block table **/ UINT16 EFIAPI SaGetConfigBlockTotalSizePreMem ( VOID ) { return GetComponentConfigBlockTotalSize (&mSaIpBlocksPreMem[0], sizeof (mSaIpBlocksPreMem) / sizeof (COMPONENT_BLOCK_ENTRY)); } /** SaAddConfigBlocksPreMem add all SA config blocks. @param[in] ConfigBlockTableAddress The pointer to add SA config blocks @retval EFI_SUCCESS The policy default is initialized. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer **/ EFI_STATUS EFIAPI SaAddConfigBlocksPreMem ( IN VOID *ConfigBlockTableAddress ) { EFI_STATUS Status; DEBUG ((DEBUG_INFO, "SA AddConfigBlocks. TotalBlockCount = 0x%x\n", sizeof (mSaIpBlocksPreMem) / sizeof (COMPONENT_BLOCK_ENTRY))); Status = AddComponentConfigBlocks (ConfigBlockTableAddress, &mSaIpBlocksPreMem[0], sizeof (mSaIpBlocksPreMem) / sizeof (COMPONENT_BLOCK_ENTRY)); if (Status == EFI_SUCCESS) { SaLoadSamplePolicyPreMem (ConfigBlockTableAddress); } return Status; } /** SaAddConfigBlocks add all SA config blocks. @param[in] ConfigBlockTableAddress The pointer to add SA config blocks @retval EFI_SUCCESS The policy default is initialized. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer **/ EFI_STATUS EFIAPI SaAddConfigBlocks ( IN VOID *ConfigBlockTableAddress ) { DEBUG ((DEBUG_INFO, "SA AddConfigBlocks. TotalBlockCount = 0x%x\n", sizeof (mSaIpBlocks) / sizeof (COMPONENT_BLOCK_ENTRY))); return AddComponentConfigBlocks (ConfigBlockTableAddress, &mSaIpBlocks[0], sizeof (mSaIpBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)); }