/** @file PCH private PMC Library. All function in this library is available for PEI, DXE, and SMM, But do not support UEFI RUNTIME environment call. Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #include /** This function locks down PMC (DebugModeLock) **/ VOID PmcLockWithS3BootScript ( VOID ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); // // Set PWRM_CFG[27] prior to OS. // MmioOr32 (PchPwrmBase + R_PMC_PWRM_CFG, B_PMC_PWRM_CFG_DBG_MODE_LOCK); S3BootScriptSaveMemWrite ( S3BootScriptWidthUint32, (PchPwrmBase + R_PMC_PWRM_CFG), 1, (VOID *) ((UINTN) PchPwrmBase + R_PMC_PWRM_CFG) ); } /** This S3 BootScript only function disables triggering Global Reset of both the Host and the ME partitions after CF9h write of 6h or Eh. **/ VOID PmcDisableCf9GlobalResetInS3BootScript ( VOID ) { UINT32 Data; UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); Data = MmioRead32 (PchPwrmBase + R_PMC_PWRM_ETR3); Data &= (UINT32) ~B_PMC_PWRM_ETR3_CF9GR; S3BootScriptSaveMemWrite ( S3BootScriptWidthUint32, (UINTN) PchPwrmBase + R_PMC_PWRM_ETR3, 1, &Data ); } /** This S3 BootScript only function disables triggering Global Reset of both the Host and the ME partitions after CF9h write of 6h or Eh. Global Reset configuration is locked after programming **/ VOID PmcDisableCf9GlobalResetWithLockInS3BootScript ( VOID ) { UINT32 Data; UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); Data = MmioRead32 (PchPwrmBase + R_PMC_PWRM_ETR3); Data &= (UINT32) ~B_PMC_PWRM_ETR3_CF9GR; Data |= (UINT32) B_PMC_PWRM_ETR3_CF9LOCK; S3BootScriptSaveMemWrite ( S3BootScriptWidthUint32, (UINTN) PchPwrmBase + R_PMC_PWRM_ETR3, 1, &Data ); } /** This function sets SLP_SX Stretching Policy and adds lock setting to S3 Boot Script **/ VOID PmcLockSlpSxStretchingPolicyWithS3BootScript ( VOID ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); MmioOr8 ( (PchPwrmBase + R_PMC_PWRM_GEN_PMCON_B + 2), (UINT8) ((B_PMC_PWRM_GEN_PMCON_B_SLPSX_STR_POL_LOCK) >> 16) ); S3BootScriptSaveMemWrite ( S3BootScriptWidthUint8, (PchPwrmBase + R_PMC_PWRM_GEN_PMCON_B + 2), 1, (VOID *) ((UINTN) PchPwrmBase + R_PMC_PWRM_GEN_PMCON_B + 2) ); } /** This function sets SMI Lock with S3 Boot Script programming **/ VOID PmcLockSmiWithS3BootScript ( VOID ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); MmioOr8 ((PchPwrmBase + R_PMC_PWRM_GEN_PMCON_B), B_PMC_PWRM_GEN_PMCON_B_SMI_LOCK); S3BootScriptSaveMemWrite ( S3BootScriptWidthUint8, (PchPwrmBase + R_PMC_PWRM_GEN_PMCON_B), 1, (VOID *) ((UINTN) PchPwrmBase + R_PMC_PWRM_GEN_PMCON_B) ); } /** This function locks static power gating configuration with S3 Boot Script programming **/ VOID PmcLockFunctionDisableConfigWithS3BootScript ( VOID ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); MmioOr32 (PchPwrmBase + R_PMC_PWRM_ST_PG_FDIS_PMC_1, (UINT32) (B_PMC_PWRM_ST_PG_FDIS_PMC_1_ST_FDIS_LK)); S3BootScriptSaveMemWrite ( S3BootScriptWidthUint8, (UINTN) (PchPwrmBase + R_PMC_PWRM_ST_PG_FDIS_PMC_1), 1, (VOID *) (UINTN) (PchPwrmBase + R_PMC_PWRM_ST_PG_FDIS_PMC_1) ); } /** This function locks PMC Set Strap Message interface with S3 Boot Script programming **/ VOID PmcLockSetStrapMsgInterfaceWithS3BootScript ( VOID ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); MmioOr32 ((UINTN) (PchPwrmBase + R_PMC_PWRM_SSML), B_PMC_PWRM_SSML_SSL); S3BootScriptSaveMemWrite ( S3BootScriptWidthUint8, (UINTN) (PchPwrmBase + R_PMC_PWRM_SSML), 1, (VOID *) (UINTN) (PchPwrmBase + R_PMC_PWRM_SSML) ); }