/** @file PCH private PEI PMC Library for all PCH generations. Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "PmcPrivateLibInternal.h" /** Check if PCH PM Timer enabled based on platform policy @retval TRUE PCH PM Timer is enabled. @retval FALSE PCH PM Timer is disabled. **/ BOOLEAN PmcIsPchPmTimerEnabled ( VOID ) { BOOLEAN PchPmTimerEnabled; EFI_STATUS Status; SI_POLICY_PPI *SiPolicy; PCH_PM_CONFIG *PmConfig; Status = PeiServicesLocatePpi ( &gSiPolicyPpiGuid, 0, NULL, (VOID **)&SiPolicy ); ASSERT_EFI_ERROR (Status); Status = GetConfigBlock ((VOID *) SiPolicy, &gPmConfigGuid, (VOID *) &PmConfig); ASSERT_EFI_ERROR (Status); PchPmTimerEnabled = TRUE; if (!PmConfig->EnableTcoTimer) { PchPmTimerEnabled = FALSE; } DEBUG ((DEBUG_INFO, "PmcIsPchPmTimerEnabled () = %x\n", PchPmTimerEnabled)); return PchPmTimerEnabled; } /** Lock down PMC settings @param[in] SiPolicy The SI Policy PPI instance **/ VOID PmcLockSettings ( IN SI_POLICY_PPI *SiPolicy ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); /// /// Set PWRMBASE Offset 0x1048 [24] /// MmioOr32 (PchPwrmBase + R_PMC_PWRM_ETR3, BIT24); /// /// PM_SYNC_LOCK /// Set PWRMBASE Offset 0x18C8 [15] /// MmioOr32 (PchPwrmBase + R_PMC_PWRM_PMSYNC_MISC_CFG, B_PMC_PWRM_PMSYNC_PM_SYNC_LOCK); }