/** @file PCH PMC Private Library implementation for Cannon Lake PCH. 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 #include #include "PmcPrivateLibInternal.h" /** This function disables (non-static power gating) SATA and enables ModPHY SPD gating (PCH-LP only). @param[in] SataCtrlIndex SATA controller index **/ VOID PmcDisableSata ( IN UINT32 SataCtrlIndex ) { UINT32 PchPwrmBase; PchPwrmBase = PmcGetPwrmBase (); ASSERT (SataCtrlIndex < GetPchMaxSataControllerNum ()); // // Set PWRMBASE + NST_PG_FDIS_1 [22] = 1b to disable SATA Controller in PMC // MmioOr32 (PchPwrmBase + R_PMC_PWRM_NST_PG_FDIS_1, B_PMC_PWRM_NST_PG_FDIS_1_SATA_FDIS_PMC); if (PmcIsModPhySusPgSupported ()) { // // MPHY SUS PG supported on PCH-LP only: // // Set MSPDRTREQ: // PWRMBASE + R_PWRM_MODPHY_PM_CFG5[12] = 1 to enable ASL code trigger request for ModPHY SPD gating. // MmioOr32 (PchPwrmBase + R_PMC_PWRM_MODPHY_PM_CFG5, B_PMC_PWRM_MODPHY_PM_CFG5_MSPDRTREQ_SATA); } } /** This function checks if SATA device is supported (not disabled by fuse) @param[in] SataCtrlIndex SATA controller index @retval SATA support state **/ BOOLEAN PmcIsSataSupported ( UINT32 SataCtrlIndex ) { ASSERT (SataCtrlIndex < GetPchMaxSataControllerNum ()); // // Get fuse info from PWRMBASE + FUSE_SS_DIS_RD_2 // return ((MmioRead32 (PmcGetPwrmBase () + R_PMC_PWRM_FUSE_DIS_RD_2) & B_PMC_PWRM_FUSE_DIS_RD_2_SATA_FUSE_SS_DIS) == 0); }