/** @file
|
Header file for PchPcrLib.
|
|
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
**/
|
#ifndef _PCH_PCR_LIB_H_
|
#define _PCH_PCR_LIB_H_
|
|
#include <PchReservedResources.h>
|
|
/**
|
Definition for PCR address
|
The PCR address is used to the PCR MMIO programming
|
|
SBREG_BAR_20BITADDRESS is configured by SoC
|
|
SBREG_BAR_20BITADDRESS=1, the format has included 16b addressing.
|
+---------------------------------------------------------------------------------------------+
|
| Addr[63:28] | Addr[27:24] | Addr[23:16] | Addr[15:2] | Addr[1:0] |
|
+----------------+-----------------------+-----------------+----------------------------------+
|
| REG_BAR[63:28] | TargetRegister[19:16] | TargetPort[7:0] | TargetRegister[15:2] |
|
+---------------------------------------------------------------------------------------------+
|
|
SBREG_BAR_20BITADDRESS=0
|
+---------------------------------------------------------------------------------------------+
|
| Addr[63:24] | Addr[27:24] | Addr[23:16] | Addr[15:2] | Addr[1:0] |
|
+----------------+-----------------------+-----------------+----------------------------------+
|
| REG_BAR[63:24] | REG_BAR[27:24] | TargetPort[7:0] | TargetRegister[15:2] |
|
+---------------------------------------------------------------------------------------------+
|
**/
|
#define PCH_PCR_ADDRESS(Pid, Offset) (PCH_PCR_BASE_ADDRESS | (UINT32) (((Offset) & 0x0F0000) << 8) | ((UINT8)(Pid) << 16) | (UINT16) ((Offset) & 0xFFFF))
|
|
/**
|
PCH PCR boot script accessing macro
|
Those macros are only available for DXE phase.
|
**/
|
#define PCH_PCR_BOOT_SCRIPT_WRITE(Width, Pid, Offset, Count, Buffer) \
|
S3BootScriptSaveMemWrite (Width, PCH_PCR_ADDRESS (Pid, Offset), Count, Buffer); \
|
|
#define PCH_PCR_BOOT_SCRIPT_READ_WRITE(Width, Pid, Offset, DataOr, DataAnd) \
|
S3BootScriptSaveMemReadWrite (Width, PCH_PCR_ADDRESS (Pid, Offset), DataOr, DataAnd); \
|
|
#define PCH_PCR_BOOT_SCRIPT_READ(Width, Pid, Offset, BitMask, BitValue) \
|
S3BootScriptSaveMemPoll (Width, PCH_PCR_ADDRESS (Pid, Offset), BitMask, BitValue, 1, 1);
|
|
typedef UINT8 PCH_SBI_PID;
|
|
/**
|
Read PCR register.
|
It returns PCR register and size in 4bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of this Port ID
|
|
@retval UINT32 PCR register value.
|
**/
|
UINT32
|
PchPcrRead32 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset
|
);
|
|
/**
|
Read PCR register.
|
It returns PCR register and size in 2bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of this Port ID
|
|
@retval UINT16 PCR register value.
|
**/
|
UINT16
|
PchPcrRead16 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset
|
);
|
|
/**
|
Read PCR register.
|
It returns PCR register and size in 1bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of this Port ID
|
|
@retval UINT8 PCR register value
|
**/
|
UINT8
|
PchPcrRead8 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset
|
);
|
|
/**
|
Write PCR register.
|
It programs PCR register and size in 4bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] Data Input Data. Must be the same size as Size parameter.
|
|
@retval UINT32 Value written to register
|
**/
|
UINT32
|
PchPcrWrite32 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT32 InData
|
);
|
|
/**
|
Write PCR register.
|
It programs PCR register and size in 2bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] Data Input Data. Must be the same size as Size parameter.
|
|
@retval UINT16 Value written to register
|
**/
|
UINT16
|
PchPcrWrite16 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT16 InData
|
);
|
|
/**
|
Write PCR register.
|
It programs PCR register and size in 1bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] Data Input Data. Must be the same size as Size parameter.
|
|
@retval UINT8 Value written to register
|
**/
|
UINT8
|
PchPcrWrite8 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT8 InData
|
);
|
|
/**
|
Write PCR register.
|
It programs PCR register and size in 4bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] AndData AND Data. Must be the same size as Size parameter.
|
@param[in] OrData OR Data. Must be the same size as Size parameter.
|
|
@retval UINT32 Value written to register
|
|
**/
|
UINT32
|
PchPcrAndThenOr32 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT32 AndData,
|
IN UINT32 OrData
|
);
|
|
/**
|
Write PCR register and read back.
|
The read back ensures the PCR cycle is completed before next operation.
|
It programs PCR register and size in 4bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] AndData AND Data. Must be the same size as Size parameter.
|
@param[in] OrData OR Data. Must be the same size as Size parameter.
|
|
@retval UINT32 Value read back from the register
|
**/
|
UINT32
|
PchPcrAndThenOr32WithReadback (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT32 AndData,
|
IN UINT32 OrData
|
);
|
|
/**
|
Write PCR register.
|
It programs PCR register and size in 2bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] AndData AND Data. Must be the same size as Size parameter.
|
@param[in] OrData OR Data. Must be the same size as Size parameter.
|
|
@retval UINT16 Value written to register
|
|
**/
|
UINT16
|
PchPcrAndThenOr16 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT16 AndData,
|
IN UINT16 OrData
|
);
|
|
/**
|
Write PCR register.
|
It programs PCR register and size in 1bytes.
|
The Offset should not exceed 0xFFFF and must be aligned with size.
|
|
@param[in] Pid Port ID
|
@param[in] Offset Register offset of Port ID.
|
@param[in] AndData AND Data. Must be the same size as Size parameter.
|
@param[in] OrData OR Data. Must be the same size as Size parameter.
|
|
@retval UINT8 Value written to register
|
|
**/
|
UINT8
|
PchPcrAndThenOr8 (
|
IN PCH_SBI_PID Pid,
|
IN UINT32 Offset,
|
IN UINT8 AndData,
|
IN UINT8 OrData
|
);
|
|
|
typedef enum {
|
PchIpDmi = 1,
|
PchIpIclk,
|
} PCH_IP_PID_ENUM;
|
|
#define PCH_INVALID_PID 0
|
|
/**
|
Get PCH IP PID number
|
|
@param[in] IpEnum PCH IP in PCH_IP_PID_ENUM
|
|
@retval 0 PID of this IP is not supported
|
!0 PID of the IP.
|
**/
|
PCH_SBI_PID
|
PchPcrGetPid (
|
PCH_IP_PID_ENUM IpEnum
|
);
|
|
#endif // _PCH_PCR_LIB_H_
|