alder_lake_bios/Intel/AlderLake/ClientOneSiliconPkg/Include/Library/PmcLib.h

570 lines
13 KiB
C

/** @file
Header file for PmcLib.
@copyright
INTEL CONFIDENTIAL
Copyright 2014 - 2021 Intel Corporation.
The source code contained or described herein and all documents related to the
source code ("Material") are owned by Intel Corporation or its suppliers or
licensors. Title to the Material remains with Intel Corporation or its suppliers
and licensors. The Material may contain trade secrets and proprietary and
confidential information of Intel Corporation and its suppliers and licensors,
and is protected by worldwide copyright and trade secret laws and treaty
provisions. No part of the Material may be used, copied, reproduced, modified,
published, uploaded, posted, transmitted, distributed, or disclosed in any way
without Intel's prior express written permission.
No license under any patent, copyright, trade secret or other intellectual
property right is granted to or conferred upon you by disclosure or delivery
of the Materials, either expressly, by implication, inducement, estoppel or
otherwise. Any license under such intellectual property rights must be
express and approved by Intel in writing.
Unless otherwise agreed by Intel in writing, you may not remove or alter
this notice or any other notice embedded in Materials by Intel or
Intel's suppliers or licensors in any way.
This file contains an 'Intel Peripheral Driver' and is uniquely identified as
"Intel Reference Module" and is licensed for Intel CPUs and chipsets under
the terms of your license agreement with Intel or your vendor. This file may
be modified by the user, subject to additional terms of the license agreement.
@par Specification Reference:
**/
#ifndef _PMC_LIB_H_
#define _PMC_LIB_H_
#include <PmConfig.h>
#pragma pack(1)
typedef enum {
PmcTPch25_10us = 0,
PmcTPch25_100us,
PmcTPch25_1ms,
PmcTPch25_10ms,
} PMC_TPCH25_TIMING;
typedef enum {
PmcNotASleepState,
PmcInS0State,
PmcS1SleepState,
PmcS2SleepState,
PmcS3SleepState,
PmcS4SleepState,
PmcS5SleepState,
PmcUndefinedState,
} PMC_SLEEP_STATE;
typedef struct {
UINT32 Buf0;
UINT32 Buf1;
UINT32 Buf2;
UINT32 Buf3;
} PMC_IPC_COMMAND_BUFFER;
//
// Structure to Check different attributes for CrashLog supported by PMC.
//
typedef union {
struct {
UINT32 Avail : 1; ///< CrashLog feature availability bit
UINT32 Dis : 1; ///< CrasLog Disable bit
UINT32 Rsvd : 2; ///< Reserved
UINT32 Size : 12; ///< CrasLog data size. (If it is zero, use default size 0xC00)
UINT32 BaseOffset : 16; ///< Start offset of CrashLog in PMC SSRAM
} Bits;
struct {
UINT32 Avail : 1; ///< CrashLog feature availability bit
UINT32 Dis : 1; ///< CrasLog Disable bit
UINT32 Mech : 2; ///< CrashLog mechanism
UINT32 ManuTri : 1; ///< Manul trigger command.
UINT32 Clr : 1; ///< Clear Command
UINT32 AllReset : 1; ///< Trigger on all reset command
UINT32 ReArm : 1; ///< Re-arm command
UINT32 GlbRstTriggerMask : 1; ///< Global reset trigger mask supported
UINT32 Rsvd : 18; ///< Pch Specific reserved
UINT32 GlbRstTriggerMaskSts : 1; ///< Global reset trigger mask status
UINT32 CrashLogReq: 1; ///< Crash log requestor flow
UINT32 TriArmedSts: 1; ///< Trigger armed status, re-arm indication bit.
UINT32 TriAllReset: 1; ///< Trigger on all resets status
UINT32 CrashDisSts: 1; ///< Crash log disabled status
UINT32 PchRsvd : 16; ///< Pch Specific reserved
UINT32 DesTableOffset: 16; ///< Descriptor Table offset
} Bits64;
UINT32 Uint32;
UINT64 Uint64;
} PMC_IPC_DISCOVERY_BUF;
typedef union {
struct {
UINT32 Offset : 16;
UINT32 Size : 16;
} Info;
UINT32 Uint32;
} PMC_CRASHLOG_RECORDS;
typedef struct PmcCrashLogLink {
PMC_CRASHLOG_RECORDS Record;
UINT64 AllocateAddress;
struct PmcCrashLogLink *Next;
} PMC_CRASHLOG_LINK;
#pragma pack()
/**
Get PCH ACPI base address.
@retval Address Address of PWRM base address.
**/
UINT16
PmcGetAcpiBase (
VOID
);
/**
Get PCH PWRM base address.
@retval Address Address of PWRM base address.
**/
UINT32
PmcGetPwrmBase (
VOID
);
/**
This function sets tPCH25 timing
@param[in] TimingValue tPCH25 timing value (10us, 100us, 1ms, 10ms)
**/
VOID
PmcSetTPch25Timing (
IN PMC_TPCH25_TIMING TimingValue
);
/**
This function checks if RTC Power Failure occurred by
reading RTC_PWR_FLR bit
@retval RTC Power Failure state: TRUE - Battery is always present.
FALSE - CMOS is cleared.
**/
BOOLEAN
PmcIsRtcBatteryGood (
VOID
);
/**
This function checks if Power Failure occurred by
reading PWR_FLR bit
@retval Power Failure state
**/
BOOLEAN
PmcIsPowerFailureDetected (
VOID
);
/**
This function checks if Power Failure occurred by
reading SUS_PWR_FLR bit
@retval SUS Power Failure state
**/
BOOLEAN
PmcIsSusPowerFailureDetected (
VOID
);
/**
This function clears Power Failure status (PWR_FLR)
**/
VOID
PmcClearPowerFailureStatus (
VOID
);
/**
This function clears Global Reset status (GBL_RST_STS)
**/
VOID
PmcClearGlobalResetStatus (
VOID
);
/**
This function clears Host Reset status (HOST_RST_STS)
**/
VOID
PmcClearHostResetStatus (
VOID
);
/**
This function clears SUS Power Failure status (SUS_PWR_FLR)
**/
VOID
PmcClearSusPowerFailureStatus (
VOID
);
/**
This function sets state to which platform will get after power is reapplied
@param[in] PowerStateAfterG3 0: S0 state (boot)
1: S5/S4 State
**/
VOID
PmcSetPlatformStateAfterPowerFailure (
IN UINT8 PowerStateAfterG3
);
/**
This function enables Power Button SMI
**/
VOID
PmcEnablePowerButtonSmi (
VOID
);
/**
This function disables Power Button SMI
**/
VOID
PmcDisablePowerButtonSmi (
VOID
);
/**
This function reads PM Timer Count driven by 3.579545 MHz clock
@retval PM Timer Count
**/
UINT32
PmcGetTimerCount (
VOID
);
/**
Get Sleep Type that platform has waken from
@retval SleepType Sleep Type
**/
PMC_SLEEP_STATE
PmcGetSleepTypeAfterWake (
VOID
);
/**
Clear PMC Wake Status
**/
VOID
PmcClearWakeStatus (
VOID
);
/**
Configure sleep state
@param[in] SleepState S0/S1/S3/S4/S5, refer to PMC_SLEEP_STATE
**/
VOID
PmcSetSleepState (
PMC_SLEEP_STATE SleepState
);
/**
Check if platform boots after shutdown caused by power button override event
@retval TRUE Power Button Override occurred in last system boot
@retval FALSE Power Button Override didn't occur
**/
BOOLEAN
PmcIsPowerButtonOverrideDetected (
VOID
);
/**
This function sends PMC IPC CrashLog Discovery Command
@param[out] DiscoveryBuffer Pointer to CrashLog Discovery Data
@retval EFI_SUCCESS Command was executed successfully
@retval EFI_INVALID_PARAMETER NULL argument
@retval EFI_DEVICE_ERROR Crash Log Discovery command failed with an error
@retval EFI_TIMEOUT Crash Log Discovery command did not complete
**/
EFI_STATUS
PmcCrashLogDiscovery (
OUT PMC_IPC_DISCOVERY_BUF *DiscoveryBuffer
);
/**
This function sends PMC IPC CrashLog Disable Command
@retval EFI_SUCCESS Command was executed successfully
@retval EFI_DEVICE_ERROR Crash Log Disable command failed with an error
@retval EFI_TIMEOUT Crash Log Disable command did not complete
**/
EFI_STATUS
PmcCrashLogDisable (
VOID
);
/**
This function sends PMC IPC to clear CrashLog from PMC SSRAM area
@retval EFI_SUCCESS Command was executed successfully
@retval EFI_DEVICE_ERROR Crash Log Clear command failed with an error
@retval EFI_TIMEOUT Crash Log Clear command did not complete
**/
EFI_STATUS
PmcCrashLogClear (
VOID
);
/**
This function sends PMC IPC to populate CrashLog on all reboot. The SSRAM area will be cleared on G3 by PMC automatically
@retval EFI_SUCCESS Command was executed successfully
@retval EFI_DEVICE_ERROR Crash Log command failed with an error
@retval EFI_TIMEOUT Crash Log command did not complete
**/
EFI_STATUS
PmcCrashLogOnAllReset (
VOID
);
/**
This function sends PMC IPC Crashlog Re-arm command
@retval EFI_SUCCESS Command was executed successfully
@retval EFI_DEVICE_ERROR Crash Log command failed with an error
@retval EFI_TIMEOUT Crash Log command did not complete
**/
EFI_STATUS
PmcCrashLogReArm (
VOID
);
/**
Program the crashlog global reset trigger enable mask
@param[in] PmcGlobalResetMask Global reset mask
@param[in] PmcGlobalResetMask1 Global reset mask 1
@retval Result of the IPC command send
**/
EFI_STATUS
PmcCrashLogProgramGlobalResetTriggerEnableMask (
IN PMC_GLOBAL_RESET_MASK PmcGlobalResetMask,
IN PMC_GLOBAL_RESET_MASK1 PmcGlobalResetMask1
);
/**
Restore the default value of the global reset trigger enable mask
@retval Result of the IPC command send
**/
EFI_STATUS
PmcCrashLogRestoreGlobalResetTriggerMask (
VOID
);
/**
Read the PMC global reset mask
@param[out] PmcGlobalResetMask Global reset mask
@param[out] PmcGlobalResetMask1 Global reset mask 1
@retval Result of the IPC command send
**/
EFI_STATUS
PmcCrashLogReadGlobalResetTriggerMask (
OUT PMC_GLOBAL_RESET_MASK *PmcGlobalResetMask,
OUT PMC_GLOBAL_RESET_MASK1 *PmcGlobalResetMask1
);
/**
This function will set the DISB - DRAM Initialization Scratchpad Bit.
**/
VOID
PmcSetDramInitScratchpad (
VOID
);
/**
Check global SMI enable is set
@retval TRUE Global SMI enable is set
FALSE Global SMI enable is not set
**/
BOOLEAN
PmcIsGblSmiEn (
VOID
);
/**
This function checks if SMI Lock is set
@retval SMI Lock state
**/
BOOLEAN
PmcIsSmiLockSet (
VOID
);
/**
This function checks if Debug Mode is locked
@retval Debug Mode Lock state
**/
BOOLEAN
PmcIsDebugModeLocked (
VOID
);
/**
This function checks PMC Set Strap Message interface lock
@retval State of PMC Set Strap Message Interface lock
**/
BOOLEAN
PmcIsSetStrapMsgInterfaceLocked (
VOID
);
/**
This function verify VR Config Bit is Locked
@retval TRUE VR Config Bit is Locked.
@retval FALSE VR Config Bit is Unlocked.
**/
BOOLEAN
PmcIsFivrConfigLocked (
VOID
);
/**
Check if user wants to turn off in PEI phase
**/
VOID
CheckPowerOffNow(
VOID
);
/**
Clear any SMI status or wake status left from boot.
**/
VOID
ClearSmiAndWake (
VOID
);
/**
Function to check if Dirty Warm Reset occurs
(Global Reset has been converted to Host Reset)
@reval TRUE DWR occurs
@reval FALSE Normal boot flow
**/
BOOLEAN
PmcIsDwrBootMode (
VOID
);
/**
Sets the GPE Ctrl bit to generate a _GPE._L62 SCI to an ACPI OS
**/
VOID
PmcSetSwGpeSts (
VOID
);
/**
Read Cpu BCLK source comes from
@reval TRUE BCLK from integrated clock
@reval FALSE BCLK from discrete clock
**/
BOOLEAN
PmcDetectIntegratedClockSource (
VOID
);
/**
Read Low Power Mode Requirement registers by PMC IPC interface,
and store read data to the output buffer.
@param[OUT] LpmReqData Point to buffer (caller allocated) where LPM requirement data being stored.
@param[IN] BufLen Length of Buffer which param LpmReqData point to
@reval EFI_SUCCESS Function was executed successfully
@reval EFI_INVALID_PARAMETER Parameters are invalid
@reval EFI_DEVICE_ERROR Fail to read LPM requirement data
**/
EFI_STATUS
PmcReadLpmReqData (
OUT UINT32 *LpmReqData,
IN UINT32 BufLen
);
/**
Reads an 8-bit PMIC register of CastroCove.
Reads the 8-bit PMIC register specified by RegisterOffset input field.
The operation status is returned.
@param[in] RegisterOffset - The PMIC register to read
@param[out] Value - The value read from the PMIC register
@retval EFI_SUCCESS - Read bytes from PMIC device successfully
@retval Others - Status depends on IPC operation
**/
EFI_STATUS
EFIAPI
PmicRead8 (
IN UINT32 RegisterOffset,
OUT UINT8 *Value,
IN UINT8 PmicId
);
/**
Writes an 8-bit PMIC register of CastroCove with a 8-bit value.
Writes the 8-bit PMIC register specified by RegisterOffset input field with the value specified
by Value and return the operation status.
@param[in] RegisterOffset - The PMIC register to write.
@param[in] Value - The value to write to the PMIC register
@retval EFI_SUCCESS - Write bytes to PMIC device successfully
@retval Others - Status depends on IPC operation
**/
EFI_STATUS
EFIAPI
PmicWrite8 (
IN UINT32 RegisterOffset,
IN UINT8 Value,
IN UINT8 PmicId
);
/**
Set OTP memory is write-locked
@param[in] - None
@retval EFI_SUCCESS - Write bytes to PMIC device successfully
@retval Others - Status depends on IPC operation
**/
EFI_STATUS
EFIAPI
PmicWriteLock (
VOID
);
#endif // _PMC_LIB_H_