/** @file
This file is PeiPchPreMemPolicy library.
Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "PeiPchPolicyLibrary.h"
#include
#include
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadPchGeneralPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_GENERAL_PREMEM_CONFIG *PchGeneralPreMemConfig;
PchGeneralPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "PchGeneralPreMemConfig->Header.GuidHob.Name = %g\n", &PchGeneralPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "PchGeneralPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", PchGeneralPreMemConfig->Header.GuidHob.Header.HobLength));
/********************************
PCH general premem configuration
********************************/
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadDciPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_DCI_PREMEM_CONFIG *DciPreMemConfig;
DciPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "DciPreMemConfig->Header.GuidHob.Name = %g\n", &DciPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "DciPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", DciPreMemConfig->Header.GuidHob.Header.HobLength));
/********************************
DCI Configuration
********************************/
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadWatchDogPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_WDT_PREMEM_CONFIG *WdtPreMemConfig;
WdtPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "WdtPreMemConfig->Header.GuidHob.Name = %g\n", &WdtPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "WdtPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", WdtPreMemConfig->Header.GuidHob.Header.HobLength));
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadPchTraceHubPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_TRACE_HUB_PREMEM_CONFIG *PchTraceHubPreMemConfig;
PchTraceHubPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "PchTraceHubPreMemConfig->Header.GuidHob.Name = %g\n", &PchTraceHubPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "PchTraceHubPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", PchTraceHubPreMemConfig->Header.GuidHob.Header.HobLength));
}
GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSmbusRsvdAddresses[] = {
0xA0,
0xA2,
0xA4,
0xA6
};
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadSmbusPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_SMBUS_PREMEM_CONFIG *SmbusPreMemConfig;
SmbusPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "SmbusPreMemConfig->Header.GuidHob.Name = %g\n", &SmbusPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "SmbusPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", SmbusPreMemConfig->Header.GuidHob.Header.HobLength));
/********************************
SMBus configuration
********************************/
SmbusPreMemConfig->Enable = TRUE;
SmbusPreMemConfig->DynamicPowerGating = TRUE;
SmbusPreMemConfig->SpdWriteDisable = TRUE;
SmbusPreMemConfig->SmbusIoBase = PcdGet16 (PcdSmbusBaseAddress);
ASSERT (sizeof (mSmbusRsvdAddresses) <= PCH_MAX_SMBUS_RESERVED_ADDRESS);
SmbusPreMemConfig->NumRsvdSmbusAddresses = sizeof (mSmbusRsvdAddresses);
CopyMem (
SmbusPreMemConfig->RsvdSmbusAddressTable,
mSmbusRsvdAddresses,
sizeof (mSmbusRsvdAddresses)
);
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadLpcPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_LPC_PREMEM_CONFIG *LpcPreMemConfig;
LpcPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "LpcPreMemConfig->Header.GuidHob.Name = %g\n", &LpcPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "LpcPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", LpcPreMemConfig->Header.GuidHob.Header.HobLength));
/********************************
LPC Configuration
********************************/
LpcPreMemConfig->EnhancePort8xhDecoding = TRUE;
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadHsioPciePreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_HSIO_PCIE_PREMEM_CONFIG *HsioPciePreMemConfig;
HsioPciePreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "HsioPciePreMemConfig->Header.GuidHob.Name = %g\n", &HsioPciePreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "HsioPciePreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", HsioPciePreMemConfig->Header.GuidHob.Header.HobLength));
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadHsioSataPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_HSIO_SATA_PREMEM_CONFIG *HsioSataPreMemConfig;
HsioSataPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "HsioSataPreMemConfig->Header.GuidHob.Name = %g\n", &HsioSataPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "HsioSataPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", HsioSataPreMemConfig->Header.GuidHob.Header.HobLength));
}
/**
Get Hsio Sata Pre Mem Config Policy
@param[in] SiPolicy The RC Policy PPI instance
@param[in] SataCtrlIndex SATA controller index
@retval Pointer to Hsio Sata Pre Mem Config Policy
**/
PCH_HSIO_SATA_PREMEM_CONFIG *
GetPchHsioSataPreMemConfig (
IN SI_PREMEM_POLICY_PPI *SiPreMemPolicy,
IN UINT32 SataCtrlIndex
)
{
PCH_HSIO_SATA_PREMEM_CONFIG *HsioSataPreMemConfig;
EFI_STATUS Status;
ASSERT (SataCtrlIndex < GetPchMaxSataControllerNum ());
Status = GetConfigBlock ((VOID *) SiPreMemPolicy, &gHsioSataPreMemConfigGuid, (VOID *) &HsioSataPreMemConfig);
ASSERT_EFI_ERROR (Status);
HsioSataPreMemConfig += SataCtrlIndex;
return HsioSataPreMemConfig;
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadPcieRpPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_PCIE_RP_PREMEM_CONFIG *PcieRpPreMemConfig;
UINT32 RpIndex;
PcieRpPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "PcieRpPreMemConfig->Header.GuidHob.Name = %g\n", &PcieRpPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "PcieRpPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", PcieRpPreMemConfig->Header.GuidHob.Header.HobLength));
for (RpIndex = 0; RpIndex < GetPchMaxPciePortNum (); RpIndex ++) {
PcieRpPreMemConfig->RpEnabledMask |= (UINT32) (1 << RpIndex);
}
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadHdAudioPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_HDAUDIO_PREMEM_CONFIG *HdaPreMemConfig;
HdaPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "PcieRpPreMemConfig->Header.GuidHob.Name = %g\n", &HdaPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "PcieRpPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", HdaPreMemConfig->Header.GuidHob.Header.HobLength));
HdaPreMemConfig->Enable = 1;
}
/**
Load Config block default
@param[in] ConfigBlockPointer Pointer to config block
**/
VOID
LoadIshPreMemConfigDefault (
IN VOID *ConfigBlockPointer
)
{
PCH_ISH_PREMEM_CONFIG *IshPreMemConfig;
IshPreMemConfig = ConfigBlockPointer;
DEBUG ((DEBUG_INFO, "PcieRpPreMemConfig->Header.GuidHob.Name = %g\n", &IshPreMemConfig->Header.GuidHob.Name));
DEBUG ((DEBUG_INFO, "PcieRpPreMemConfig->Header.GuidHob.Header.HobLength = 0x%x\n", IshPreMemConfig->Header.GuidHob.Header.HobLength));
//Enable ISH controller for Non-Desktop sku platforms
if (GetCpuSku () != EnumCpuTrad) {
IshPreMemConfig->Enable = TRUE;
}
}
GLOBAL_REMOVE_IF_UNREFERENCED COMPONENT_BLOCK_ENTRY mPchIpBlocksPreMem [] = {
{&gPchGeneralPreMemConfigGuid, sizeof (PCH_GENERAL_PREMEM_CONFIG), PCH_GENERAL_PREMEM_CONFIG_REVISION, LoadPchGeneralPreMemConfigDefault},
{&gDciPreMemConfigGuid, sizeof (PCH_DCI_PREMEM_CONFIG), DCI_PREMEM_CONFIG_REVISION, LoadDciPreMemConfigDefault},
{&gWatchDogPreMemConfigGuid, sizeof (PCH_WDT_PREMEM_CONFIG), WATCH_DOG_PREMEM_CONFIG_REVISION, LoadWatchDogPreMemConfigDefault},
{&gPchTraceHubPreMemConfigGuid, sizeof (PCH_TRACE_HUB_PREMEM_CONFIG), PCH_TRACEHUB_PREMEM_CONFIG_REVISION, LoadPchTraceHubPreMemConfigDefault},
{&gSmbusPreMemConfigGuid, sizeof (PCH_SMBUS_PREMEM_CONFIG), SMBUS_PREMEM_CONFIG_REVISION, LoadSmbusPreMemConfigDefault},
{&gLpcPreMemConfigGuid, sizeof (PCH_LPC_PREMEM_CONFIG), LPC_PREMEM_CONFIG_REVISION, LoadLpcPreMemConfigDefault},
{&gHsioPciePreMemConfigGuid, sizeof (PCH_HSIO_PCIE_PREMEM_CONFIG), HSIO_PCIE_PREMEM_CONFIG_REVISION, LoadHsioPciePreMemConfigDefault},
{&gHsioSataPreMemConfigGuid, sizeof (PCH_HSIO_SATA_PREMEM_CONFIG), HSIO_SATA_PREMEM_CONFIG_REVISION, LoadHsioSataPreMemConfigDefault},
{&gPcieRpPreMemConfigGuid, sizeof (PCH_PCIE_RP_PREMEM_CONFIG), PCIE_RP_PREMEM_CONFIG_REVISION, LoadPcieRpPreMemConfigDefault},
{&gHdAudioPreMemConfigGuid, sizeof (PCH_HDAUDIO_PREMEM_CONFIG), HDAUDIO_PREMEM_CONFIG_REVISION, LoadHdAudioPreMemConfigDefault},
{&gIshPreMemConfigGuid, sizeof (PCH_ISH_PREMEM_CONFIG), ISH_PREMEM_CONFIG_REVISION, LoadIshPreMemConfigDefault},
};
/**
Get PCH PREMEM config block table total size.
@retval Size of PCH PREMEM config block table
**/
UINT16
EFIAPI
PchGetPreMemConfigBlockTotalSize (
VOID
)
{
return GetComponentConfigBlockTotalSize (&mPchIpBlocksPreMem[0], sizeof (mPchIpBlocksPreMem) / sizeof (COMPONENT_BLOCK_ENTRY));
}
/**
PchAddPreMemConfigBlocks add all PCH PREMEM config blocks.
@param[in] ConfigBlockTableAddress The pointer to add PCH PREMEM config blocks
@retval EFI_SUCCESS The policy default is initialized.
@retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer
**/
EFI_STATUS
EFIAPI
PchAddPreMemConfigBlocks (
IN VOID *ConfigBlockTableAddress
)
{
DEBUG ((DEBUG_INFO, "PCH AddPreMemConfigBlocks\n"));
return AddComponentConfigBlocks (ConfigBlockTableAddress, &mPchIpBlocksPreMem[0], sizeof (mPchIpBlocksPreMem) / sizeof (COMPONENT_BLOCK_ENTRY));
}