123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /** @file
- This file is PeiPchPreMemPolicy library.
- Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved. <BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include "PeiPchPolicyLibrary.h"
- #include <Library/CpuPlatformLib.h>
- #include <Library/ConfigBlockLib.h>
- /**
- 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));
- }
|