/** @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);
}