+++ /dev/null
-/******************************************************************************
-*
-* Copyright (C) 2012 - 2015 Xilinx, Inc. All rights reserved.
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* Use of the Software is limited solely to applications:
-* (a) running on a Xilinx device, or
-* (b) that interact with a Xilinx device through a bus or interconnect.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-* SOFTWARE.
-*
-* Except as contained in this notice, the name of the Xilinx shall not be used
-* in advertising or otherwise to promote the sale, use or other dealings in
-* this Software without prior written authorization from Xilinx.
-*
-******************************************************************************/
-/****************************************************************************/
-/**
-*
-* @file xaxipmon.c
-* @addtogroup axipmon_v6_3
-* @{
-*
-* This file contains the driver API functions that can be used to access
-* the AXI Performance Monitor device.
-*
-* Refer to the xaxipmon.h header file for more information about this driver.
-*
-* @note None.
-*
-* <pre>
-*
-* MODIFICATION HISTORY:
-*
-* Ver Who Date Changes
-* ----- ----- -------- -----------------------------------------------------
-* 1.00a bss 02/27/12 First release
-* 2.00a bss 06/23/12 Updated to support v2_00a version of IP.
-* 3.00a bss 09/03/12 Deleted XAxiPmon_SetAgent, XAxiPmon_GetAgent APIs and
-* modified XAxiPmon_SetMetrics, XAxiPmon_GetMetrics APIs
-* to support v2_01a version of IP.
-* 3.01a bss 10/25/12 Added XAxiPmon_StartCounters and XAxiPmon_StopCounters
-* APIs (CR #683799).
-* Added XAxiPmon_StartEventLog and XAxiPmon_StopEventLog
-* APIs (CR #683801).
-* Added XAxiPmon_GetMetricName API (CR #683803).
-* Modified XAxiPmon_SetMetrics and XAxiPmon_GetMetrics
-* (CR #683746)
-* Added XAxiPmon_EnableEventLog,
-* XAxiPmon_DisableMetricsCounter,
-* XAxiPmon_EnableMetricsCounter APIs to replace macros.
-* Added XAxiPmon_SetMetricCounterCutOff,
-* XAxiPmon_GetMetricCounterCutOff,
-* XAxiPmon_EnableExternalTrigger and
-* XAxiPmon_DisableExternalTrigger APIs to support new
-* version of IP.
-* 4.00a bss 01/17/13 To support new version of IP:
-* Added XAxiPmon_SetLogEnableRanges,
-* XAxiPmon_GetLogEnableRanges,
-* XAxiPmon_EnableMetricCounterTrigger,
-* XAxiPmon_DisableMetricCounterTrigger,
-* XAxiPmon_EnableEventLogTrigger,
-* XAxiPmon_DisableEventLogTrigger,
-* XAxiPmon_SetWriteLatencyId,
-* XAxiPmon_SetReadLatencyId,
-* XAxiPmon_GetWriteLatencyId,
-* XAxiPmon_GetReadLatencyId APIs and removed
-* XAxiPmon_SetMetricCounterCutOff,
-* XAxiPmon_GetMetricCounterCutOff,
-* XAxiPmon_EnableExternalTrigger and
-* XAxiPmon_DisableExternalTrigger APIs
-* 5.00a bss 08/26/13 To support new version of IP:
-* Modified XAxiPmon_CfgInitialize to add Mode of APM and
-* ScaleFactor parameter.
-* Modified Assert functions depending on Mode.
-* Modified XAxiPmon_GetMetricCounter and
-* XAxiPmon_GetSampledMetricCounter to include
-* new Counters.
-* Modified XAxiPmon_SetSampleInterval and
-* XAxiPmon_GetSampleInterval to remove higher 32 bit
-* value of SampleInterval since Sample Interval Register
-* is only 32 bit.
-* Added XAxiPmon_SetWrLatencyStart,
-* XAxiPmon_SetWrLatencyEnd, XAxiPmon_SetRdLatencyStart
-* XAxiPmon_SetRdLatencyEnd, XAxiPmon_GetWrLatencyStart,
-* XAxiPmon_GetWrLatencyEnd, XAxiPmon_GetRdLatencyStart,
-* XAxiPmon_GetRdLatencyEnd, XAxiPmon_SetWriteIdMask,
-* XAxiPmon_SetReadIdMask,
-* XAxiPmon_GetWriteIdMask and
-* XAxiPmon_GetReadIdMask APIs.
-* Renamed:
-* XAxiPmon_SetWriteLatencyId to XAxiPmon_SetWriteId
-* XAxiPmon_SetReadLatencyId to XAxiPmon_SetReadId
-* XAxiPmon_GetWriteLatencyId to XAxiPmon_GetWriteId
-* XAxiPmon_SetReadLatencyId to XAxiPmon_GetReadId.
-* 6.2 bss 04/21/14 Updated XAxiPmon_CfgInitialize to Reset counters
-* and FIFOs based on Modes(CR#782671). And if both
-* profile and trace modes are present set mode as
-* Advanced.
-* 6.2 bss 03/02/15 Updated XAxiPmon_SetWriteId, XAxiPmon_SetReadId,
-* XAxiPmon_GetWriteId, XAxiPmon_GetReadId
-* XAxiPmon_SetWriteIdMask, XAxiPmon_SetReadIdMask,
-* XAxiPmon_GetWriteIdMask, XAxiPmon_GetReadIdMask
-* functions to support Zynq MP APM.
-* 6.3 kvn 07/02/15 Modified code according to MISRA-C:2012 guidelines.
-* 6.4 sk 11/10/15 Used UINTPTR instead of u32 for Baseaddress CR# 867425.
-* Changed the prototype of XAxiPmon_CfgInitialize API.
-* </pre>
-*
-*****************************************************************************/
-
-/***************************** Include Files ********************************/
-
-#include "xaxipmon.h"
-
-/************************** Constant Definitions *****************************/
-
-/**************************** Type Definitions *******************************/
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/************************** Function Prototypes ******************************/
-
-/************************** Variable Definitions *****************************/
-
-/*****************************************************************************/
-/**
-*
-* This function initializes a specific XAxiPmon device/instance. This function
-* must be called prior to using the AXI Performance Monitor device.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param ConfigPtr points to the XAxiPmon device configuration structure.
-* @param EffectiveAddr is the device base address in the virtual memory
-* address space. If the address translation is not used then the
-* physical address is passed.
-* Unexpected errors may occur if the address mapping is changed
-* after this function is invoked.
-*
-* @return
-* - XST_SUCCESS if successful.
-*
-* @note The user needs to first call the XAxiPmon_LookupConfig() API
-* which returns the Configuration structure pointer which is
-* passed as a parameter to the XAxiPmon_CfgInitialize() API.
-*
-******************************************************************************/
-s32 XAxiPmon_CfgInitialize(XAxiPmon *InstancePtr, XAxiPmon_Config *ConfigPtr,
- UINTPTR EffectiveAddr)
-{
- /*
- * Assert the input arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(ConfigPtr != NULL);
-
- /*
- * Set the values read from the device config and the base address.
- */
- InstancePtr->Config.DeviceId = ConfigPtr->DeviceId;
- InstancePtr->Config.BaseAddress = EffectiveAddr;
- InstancePtr->Config.GlobalClkCounterWidth =
- ConfigPtr->GlobalClkCounterWidth;
- InstancePtr->Config.MetricSampleCounterWidth =
- ConfigPtr->MetricSampleCounterWidth;
- InstancePtr->Config.IsEventCount =
- ConfigPtr->IsEventCount;
- InstancePtr->Config.NumberofSlots =
- ConfigPtr->NumberofSlots;
- InstancePtr->Config.NumberofCounters =
- ConfigPtr->NumberofCounters;
- InstancePtr->Config.HaveSampledCounters =
- ConfigPtr->HaveSampledCounters;
- InstancePtr->Config.IsEventLog =
- ConfigPtr->IsEventLog;
- InstancePtr->Config.FifoDepth =
- ConfigPtr->FifoDepth;
- InstancePtr->Config.FifoWidth =
- ConfigPtr->FifoWidth;
- InstancePtr->Config.TidWidth =
- ConfigPtr->TidWidth;
- InstancePtr->Config.Is32BitFiltering = ConfigPtr->Is32BitFiltering;
-
- InstancePtr->Config.ScaleFactor = ConfigPtr->ScaleFactor;
-
- if ((ConfigPtr->ModeProfile == ConfigPtr->ModeTrace)
- || (ConfigPtr->ModeAdvanced == 1U))
- {
- InstancePtr->Mode = XAPM_MODE_ADVANCED;
- } else if (ConfigPtr->ModeTrace == 1U) {
- InstancePtr->Mode = XAPM_MODE_TRACE;
- } else {
- InstancePtr->Mode = XAPM_MODE_PROFILE;
- }
-
- /*
- * Indicate the instance is now ready to use, initialized without error.
- */
- InstancePtr->IsReady = XIL_COMPONENT_IS_READY;
-
- /*
- * Reset the Counters and FIFO based on Modes.
- */
-
- /* Advanced and Profile */
- if((InstancePtr->Mode == XAPM_MODE_ADVANCED) ||
- (InstancePtr->Mode == XAPM_MODE_PROFILE))
- {
- (void)XAxiPmon_ResetMetricCounter(InstancePtr);
- }
- /* Advanced */
- if(InstancePtr->Mode == XAPM_MODE_ADVANCED)
- {
- XAxiPmon_ResetGlobalClkCounter(InstancePtr);
- }
- /* Advanced and Trace */
- if((InstancePtr->Mode == XAPM_MODE_ADVANCED) ||
- (InstancePtr->Mode == XAPM_MODE_TRACE))
- {
- (void)XAxiPmon_ResetFifo(InstancePtr);
- }
- return XST_SUCCESS;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function resets all Metric Counters and Sampled Metric Counters of
-* AXI Performance Monitor.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return XST_SUCCESS
-*
-*
-* @note None.
-*
-******************************************************************************/
-s32 XAxiPmon_ResetMetricCounter(XAxiPmon *InstancePtr)
-{
-
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid(InstancePtr->Mode != XAPM_MODE_TRACE);
-
- /*
- * Write the reset value to the Control register to reset
- * Metric counters
- */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- (RegValue | XAPM_CR_MCNTR_RESET_MASK));
- /*
- * Release from Reset
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- (RegValue & ~(XAPM_CR_MCNTR_RESET_MASK)));
- return XST_SUCCESS;
-
-}
-
-/*****************************************************************************/
-/**
-*
-* This function resets Global Clock Counter of AXI Performance Monitor
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None.
-*
-* @note None.
-*
-******************************************************************************/
-void XAxiPmon_ResetGlobalClkCounter(XAxiPmon *InstancePtr)
-{
-
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode == XAPM_MODE_ADVANCED);
-
- /*
- * Write the reset value to the Control register to reset
- * Global Clock Counter
- */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- (RegValue | XAPM_CR_GCC_RESET_MASK));
-
- /*
- * Release from Reset
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- (RegValue & ~(XAPM_CR_GCC_RESET_MASK)));
-
-}
-
-/*****************************************************************************/
-/**
-*
-* This function resets Streaming FIFO of AXI Performance Monitor
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return XST_SUCCESS
-*
-* @note None.
-*
-******************************************************************************/
-s32 XAxiPmon_ResetFifo(XAxiPmon *InstancePtr)
-{
-
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid(InstancePtr->Mode != XAPM_MODE_PROFILE);
-
- /* Check Event Logging is enabled in Hardware */
- if((InstancePtr->Config.IsEventLog == 0U) &&
- (InstancePtr->Mode == XAPM_MODE_ADVANCED))
- {
- /*Event logging not enabled in Hardware*/
- return XST_SUCCESS;
- }
- /*
- * Write the reset value to the Control register to reset
- * FIFO
- */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- (RegValue | XAPM_CR_FIFO_RESET_MASK));
- /*
- * Release from Reset
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- (RegValue & ~(XAPM_CR_FIFO_RESET_MASK)));
-
- return XST_SUCCESS;
-
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Ranges for Incrementers depending on parameters passed.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param IncrementerNum specifies the Incrementer for which Ranges
-* need to be set
-* @param RangeUpper specifies the Upper limit in 32 bit Register
-* @param RangeLower specifies the Lower limit in 32 bit Register
-*
-* @return None.
-*
-* @note None
-*
-*****************************************************************************/
-void XAxiPmon_SetIncrementerRange(XAxiPmon *InstancePtr, u8 IncrementerNum,
- u16 RangeUpper, u16 RangeLower)
- {
-
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode == XAPM_MODE_ADVANCED);
- Xil_AssertVoid(IncrementerNum < XAPM_MAX_COUNTERS);
-
- /*
- * Write to the specified Range register
- */
- RegValue = (u32)RangeUpper << 16;
- RegValue |= RangeLower;
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_RANGE0_OFFSET + ((u32)IncrementerNum * (u32)16)),
- RegValue);
- }
-
-/****************************************************************************/
-/**
-*
-* This function returns the Ranges of Incrementers Registers.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param IncrementerNum specifies the Incrementer for which Ranges
-* need to be returned.
-* @param RangeUpper specifies the user reference variable which returns
-* the Upper Range Value of the specified Incrementer.
-* @param RangeLower specifies the user reference variable which returns
-* the Lower Range Value of the specified Incrementer.
-*
-* @return None.
-*
-* @note None
-*
-*****************************************************************************/
-void XAxiPmon_GetIncrementerRange(XAxiPmon *InstancePtr, u8 IncrementerNum,
- u16 *RangeUpper, u16 *RangeLower)
- {
-
- u32 RegValue;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode == XAPM_MODE_ADVANCED);
- Xil_AssertVoid(IncrementerNum < XAPM_MAX_COUNTERS);
-
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_RANGE0_OFFSET + ((u32)IncrementerNum * (u32)16)));
-
- *RangeLower = (u16)(RegValue & 0x0000FFFFU);
- *RangeUpper = (u16)((RegValue >> 16) & 0x0000FFFFU);
- }
-
-/****************************************************************************/
-/**
-*
-* This function sets the Sample Interval Register
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param SampleInterval is the Sample Interval value to be set
-*
-* @return None
-*
-* @note None.
-*
-*****************************************************************************/
-void XAxiPmon_SetSampleInterval(XAxiPmon *InstancePtr, u32 SampleInterval)
-{
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode != XAPM_MODE_TRACE);
-
- /*
- * Set Sample Interval Lower
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_SI_LOW_OFFSET, SampleInterval);
-
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the contents of Sample Interval Register
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param SampleInterval is a pointer where the Sample Interval
-* Counter value is returned.
-*
-* @return None.
-*
-* @note None.
-*
-******************************************************************************/
-void XAxiPmon_GetSampleInterval(XAxiPmon *InstancePtr, u32 *SampleInterval)
-{
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode != XAPM_MODE_TRACE);
-
- /*
- * Set Sample Interval Lower
- */
- *SampleInterval = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_SI_LOW_OFFSET);
-
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Metrics for specified Counter in the corresponding
-* Metric Selector Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param Slot is the slot ID for which specified counter has to
-* be connected.
-* @param Metrics is one of the Metric Sets. User has to use
-* XAPM_METRIC_SET_* macros in xaxipmon.h for this parameter
-* @param CounterNum is the Counter Number.
-* The valid values are 0 to 9.
-*
-* @return XST_SUCCESS if Success
-* XST_FAILURE if Failure
-*
-* @note None.
-*
-*****************************************************************************/
-s32 XAxiPmon_SetMetrics(XAxiPmon *InstancePtr, u8 Slot, u8 Metrics,
- u8 CounterNum)
-{
- u32 RegValue;
- u32 Mask;
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid(InstancePtr->Mode == XAPM_MODE_ADVANCED);
- Xil_AssertNonvoid(Slot < XAPM_MAX_AGENTS);
- Xil_AssertNonvoid((Metrics <= XAPM_METRIC_SET_22) ||
- (Metrics == XAPM_METRIC_SET_30));
- Xil_AssertNonvoid(CounterNum < XAPM_MAX_COUNTERS);
-
- /* Find Mask value to force zero in counternum byte range */
- if ((CounterNum == 0U) || (CounterNum == 4U) || (CounterNum == 8U)) {
- Mask = 0xFFFFFF00U;
- }
- else if ((CounterNum == 1U) || (CounterNum == 5U) || (CounterNum == 9U)) {
- Mask = 0xFFFF00FFU;
- }
- else if ((CounterNum == 2U) || (CounterNum == 6U)) {
- Mask = 0xFF00FFFFU;
- }
- else {
- Mask = 0x00FFFFFFU;
- }
-
- if(CounterNum <= 3U) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR0_OFFSET);
-
- RegValue = RegValue & Mask;
- RegValue = RegValue | ((u32)Metrics << (CounterNum * (u8)8));
- RegValue = RegValue | ((u32)Slot << ((CounterNum * (u8)8) + (u8)5));
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_MSR0_OFFSET,RegValue);
- }
- else if((CounterNum >= 4U) && (CounterNum <= 7U)) {
- CounterNum = CounterNum - 4U;
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_MSR1_OFFSET);
-
- RegValue = RegValue & Mask;
- RegValue = RegValue | ((u32)Metrics << (CounterNum * (u8)8));
- RegValue = RegValue | ((u32)Slot << ((CounterNum * (u8)8) + (u8)5));
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR1_OFFSET,RegValue);
- }
- else {
- CounterNum = CounterNum - 8U;
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR2_OFFSET);
-
- RegValue = RegValue & Mask;
- RegValue = RegValue | ((u32)Metrics << (CounterNum * (u8)8));
- RegValue = RegValue | ((u32)Slot << ((CounterNum * (u8)8) + (u8)5));
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR2_OFFSET,RegValue);
- }
- return XST_SUCCESS;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function returns Metrics in the specified Counter from the corresponding
-* Metric Selector Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param CounterNum is the Counter Number.
-* The valid values are 0 to 9.
-* @param Metrics is a reference parameter from application where metrics
-* of specified counter is filled.
-* @praram Slot is a reference parameter in which slot Id of
-* specified counter is filled
-* @return XST_SUCCESS if Success
-* XST_FAILURE if Failure
-*
-* @note None.
-*
-*****************************************************************************/
-s32 XAxiPmon_GetMetrics(XAxiPmon *InstancePtr, u8 CounterNum, u8 *Metrics,
- u8 *Slot)
-{
- u32 RegValue;
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid(InstancePtr->Mode == XAPM_MODE_ADVANCED);
- Xil_AssertNonvoid(CounterNum <= XAPM_MAX_COUNTERS);
-
- if(CounterNum <= 3U) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR0_OFFSET);
- *Metrics = (u8)(RegValue >> (CounterNum * (u8)8)) & 0x1FU;
- *Slot = (u8)(RegValue >> ((CounterNum * (u8)8) + (u8)5)) & 0x07U;
-
- }
- else if((CounterNum >= 4U) && (CounterNum <= 7U)) {
- CounterNum = CounterNum - 4U;
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR1_OFFSET);
- *Metrics = (u8)(RegValue >> (CounterNum * (u8)8)) & 0x1FU;
- *Slot = (u8)(RegValue >> ((CounterNum * (u8)8) + (u8)5)) & 0x07U;
- }
- else {
- CounterNum = CounterNum - 8U;
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_MSR2_OFFSET);
- *Metrics = (u8)(RegValue >> (CounterNum * (u8)8)) & 0x1FU;
- *Slot = (u8)(RegValue >> ((CounterNum * (u8)8) + (u8)5)) & 0x07U;
- }
- return XST_SUCCESS;
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the contents of the Global Clock Counter Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param CntHighValue is the user space pointer with which upper 32 bits
-* of Global Clock Counter has to be filled
-* @param CntLowValue is the user space pointer with which lower 32 bits
-* of Global Clock Counter has to be filled
-*
-* @return None.
-*
-* @note None.
-*
-*****************************************************************************/
-void XAxiPmon_GetGlobalClkCounter(XAxiPmon *InstancePtr,u32 *CntHighValue,
- u32 *CntLowValue)
-{
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode == XAPM_MODE_ADVANCED);
-
- *CntHighValue = 0x0U;
- *CntLowValue = 0x0U;
-
- /*
- * If Counter width is 64 bit then Counter Value has to be
- * filled at CntHighValue address also.
- */
- if(InstancePtr->Config.GlobalClkCounterWidth == 64) {
-
- /* Bits[63:32] exists at XAPM_GCC_HIGH_OFFSET */
- *CntHighValue = XAxiPmon_ReadReg(InstancePtr->
- Config.BaseAddress, XAPM_GCC_HIGH_OFFSET);
- }
- /* Bits[31:0] exists at XAPM_GCC_LOW_OFFSET */
- *CntLowValue = XAxiPmon_ReadReg(InstancePtr->
- Config.BaseAddress, XAPM_GCC_LOW_OFFSET);
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the contents of the Metric Counter Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param CounterNum is the number of the Metric Counter to be read.
-* Use the XAPM_METRIC_COUNTER* defines for the counter number in
-* xaxipmon.h. The valid values are 0 (XAPM_METRIC_COUNTER_0) to
-* 47(XAPM_METRIC_COUNTER_47).
-* @return RegValue is the content of specified Metric Counter.
-*
-* @note None.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetMetricCounter(XAxiPmon *InstancePtr, u32 CounterNum)
-{
-
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid(InstancePtr->Mode != XAPM_MODE_TRACE);
- Xil_AssertNonvoid(CounterNum < XAPM_MAX_COUNTERS_PROFILE);
-
- if (CounterNum < 10U ) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC0_OFFSET + (CounterNum * (u32)16)));
- }
- else if ((CounterNum >= 10U) && (CounterNum < 12U)) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC10_OFFSET + ((CounterNum - (u32)10) * (u32)16)));
- }
- else if ((CounterNum >= 12U) && (CounterNum < 24U)) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC12_OFFSET + ((CounterNum - (u32)12) * (u32)16)));
- }
- else if ((CounterNum >= 24U) && (CounterNum < 36U)) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC24_OFFSET + ((CounterNum - (u32)24) * (u32)16)));
- }
- else {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC36_OFFSET + ((CounterNum - (u32)36) * (u32)16)));
- }
-
- return RegValue;
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the contents of the Sampled Metric Counter Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param CounterNum is the number of the Sampled Metric Counter to read.
-* Use the XAPM_METRIC_COUNTER* defines for the counter number in
-* xaxipmon.h. The valid values are 0 (XAPM_METRIC_COUNTER_0) to
-* 47(XAPM_METRIC_COUNTER_47).
-*
-* @return RegValue is the content of specified Sampled Metric Counter.
-*
-* @note None.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetSampledMetricCounter(XAxiPmon *InstancePtr, u32 CounterNum)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid(InstancePtr->Mode != XAPM_MODE_TRACE);
- Xil_AssertNonvoid(CounterNum < XAPM_MAX_COUNTERS_PROFILE);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_PROFILE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.HaveSampledCounters == 1U)));
-
- if (CounterNum < 10U ) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_SMC0_OFFSET + (CounterNum * (u32)16)));
- }
- else if ((CounterNum >= 10U) && (CounterNum < 12U)) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_SMC10_OFFSET + ((CounterNum - (u32)10) * (u32)16)));
- }
- else if ((CounterNum >= 12U) && (CounterNum < 24U)) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_SMC12_OFFSET + ((CounterNum - (u32)12) * (u32)16)));
- }
- else if ((CounterNum >= 24U) && (CounterNum < 36U)) {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_SMC24_OFFSET + ((CounterNum - (u32)24) * (u32)16)));
- }
- else {
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_SMC36_OFFSET + ((CounterNum - (u32)36) * (u32)16)));
- }
-
- return RegValue;
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the contents of the Incrementer Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param IncrementerNum is the number of the Incrementer register to
-* read.Use the XAPM_INCREMENTER_* defines for the Incrementer
-* number.The valid values are 0 (XAPM_INCREMENTER_0) to
-* 9 (XAPM_INCREMENTER_9).
-* @param IncrementerNum is the number of the specified Incrementer
-* register
-* @return RegValue is content of specified Metric Incrementer register.
-*
-* @note None.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetIncrementer(XAxiPmon *InstancePtr, u32 IncrementerNum)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U));
- Xil_AssertNonvoid(IncrementerNum < XAPM_MAX_COUNTERS);
-
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_INC0_OFFSET + (IncrementerNum * (u32)16)));
-
- return RegValue;
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the contents of the Sampled Incrementer Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param IncrementerNum is the number of the Sampled Incrementer
-* register to read.Use the XAPM_INCREMENTER_* defines for the
-* Incrementer number.The valid values are 0 (XAPM_INCREMENTER_0)
-* to 9 (XAPM_INCREMENTER_9).
-* @param IncrementerNum is the number of the specified Sampled
-* Incrementer register
-* @return RegValue is content of specified Sampled Incrementer register.
-*
-* @note None.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetSampledIncrementer(XAxiPmon *InstancePtr, u32 IncrementerNum)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U) &&
- (InstancePtr->Config.HaveSampledCounters == 1U));
- Xil_AssertNonvoid(IncrementerNum < XAPM_MAX_COUNTERS);
-
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_SINC0_OFFSET + (IncrementerNum * (u32)16)));
- return RegValue;
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Software-written Data Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param SwData is the Software written Data.
-*
-* @return None.
-*
-* @note None.
-*
-*****************************************************************************/
-void XAxiPmon_SetSwDataReg(XAxiPmon *InstancePtr, u32 SwData)
-{
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- /*
- * Set Software-written Data Register
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, (u32)XAPM_SWD_OFFSET,
- SwData);
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns contents of Software-written Data Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return SwData.
-*
-* @note None.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetSwDataReg(XAxiPmon *InstancePtr)
-{
- u32 SwData;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- /*
- * Set Metric Selector Register
- */
- SwData = (u32)XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_SWD_OFFSET);
- return SwData;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function enables the following in the AXI Performance Monitor:
-* - Event logging
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param FlagEnables is a value to write to the flag enables
-* register defined by XAPM_FEC_OFFSET. It is recommended
-* to use the XAPM_FEC_*_MASK mask bits to generate.
-* A value of 0x0 will disable all events to the event
-* log streaming FIFO.
-*
-* @return XST_SUCCESS
-*
-* @note None
-*
-******************************************************************************/
-s32 XAxiPmon_StartEventLog(XAxiPmon *InstancePtr, u32 FlagEnables)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_TRACE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventLog == 1U)));
-
- /* Read current register value */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- /* Flag Enable register is present only in Advanced Mode */
- if(InstancePtr->Mode == XAPM_MODE_ADVANCED)
- {
- /* Now write to flag enables register */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_FEC_OFFSET, FlagEnables);
- }
-
- /* Write the new value to the Control register to
- * enable event logging */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, (u32)XAPM_CTL_OFFSET,
- RegValue | XAPM_CR_EVENTLOG_ENABLE_MASK);
-
- return XST_SUCCESS;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function disables the following in the AXI Performance Monitor:
-* - Event logging
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return XST_SUCCESS
-*
-* @note None
-*
-******************************************************************************/
-s32 XAxiPmon_StopEventLog(XAxiPmon *InstancePtr)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_TRACE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventLog == 1U)));
-
- /* Read current register value */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
-
- /* Write the new value to the Control register to disable
- * event logging */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, (u32)XAPM_CTL_OFFSET,
- RegValue & ~XAPM_CR_EVENTLOG_ENABLE_MASK);
-
- return XST_SUCCESS;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function enables the following in the AXI Performance Monitor:
-* - Global clock counter
-* - All metric counters
-* - All sampled metric counters
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* SampleInterval is the sample interval for the sampled metric
-* counters
-*
-* @return XST_SUCCESS
-*
-* @note None
-******************************************************************************/
-s32 XAxiPmon_StartCounters(XAxiPmon *InstancePtr, u32 SampleInterval)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_PROFILE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U)));
-
- /* Read current register value */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- /* Globlal Clock Counter is present in Advanced mode only */
- if(InstancePtr->Mode == XAPM_MODE_ADVANCED)
- {
- RegValue = RegValue | XAPM_CR_GCC_ENABLE_MASK;
- }
-
- /*
- * Write the new value to the Control register to enable
- * global clock counter and metric counters
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, (u32)XAPM_CTL_OFFSET,
- RegValue | XAPM_CR_MCNTR_ENABLE_MASK);
-
- /* Set, enable, and load sampled counters */
- XAxiPmon_SetSampleInterval(InstancePtr, SampleInterval);
- XAxiPmon_LoadSampleIntervalCounter(InstancePtr);
- XAxiPmon_EnableSampleIntervalCounter(InstancePtr);
-
- return XST_SUCCESS;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function disables the following in the AXI Performance Monitor:
-* - Global clock counter
-* - All metric counters
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return XST_SUCCESS
-*
-* @note None
-*
-******************************************************************************/
-s32 XAxiPmon_StopCounters(XAxiPmon *InstancePtr)
-{
- u32 RegValue;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertNonvoid((InstancePtr->Mode == XAPM_MODE_PROFILE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U)));
-
- /* Read current register value */
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- /* Globlal Clock Counter is present in Advanced mode only */
- if(InstancePtr->Mode == XAPM_MODE_ADVANCED)
- {
- RegValue = RegValue & ~XAPM_CR_GCC_ENABLE_MASK;
- }
-
- /*
- * Write the new value to the Control register to disable
- * global clock counter and metric counters
- */
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, (u32)XAPM_CTL_OFFSET,
- RegValue & ~XAPM_CR_MCNTR_ENABLE_MASK);
-
- return XST_SUCCESS;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function enables Metric Counters.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*******************************************************************************/
-void XAxiPmon_EnableMetricsCounter(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid((InstancePtr->Mode == XAPM_MODE_PROFILE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U)));
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- RegVal | XAPM_CR_MCNTR_ENABLE_MASK);
-}
-/****************************************************************************/
-/**
-*
-* This function disables the Metric Counters.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*****************************************************************************/
-void XAxiPmon_DisableMetricsCounter(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid((InstancePtr->Mode == XAPM_MODE_PROFILE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U)));
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
-
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, (u32)XAPM_CTL_OFFSET,
- RegVal & ~(XAPM_CR_MCNTR_ENABLE_MASK));
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets the Upper and Lower Ranges for specified Metric Counter
-* Log Enable Register.Event Logging starts when corresponding Metric Counter
-* value falls in between these ranges
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param CounterNum is the Metric Counter number for which
-* Ranges are to be assigned.Use the XAPM_METRIC_COUNTER*
-* defines for the counter number in xaxipmon.h.
-* The valid values are 0 (XAPM_METRIC_COUNTER_0) to
-* 9 (XAPM_METRIC_COUNTER_9).
-* @param RangeUpper specifies the Upper limit in 32 bit Register
-* @param RangeLower specifies the Lower limit in 32 bit Register
-* @return None
-*
-* @note None.
-*
-*****************************************************************************/
-void XAxiPmon_SetLogEnableRanges(XAxiPmon *InstancePtr, u32 CounterNum,
- u16 RangeUpper, u16 RangeLower)
-{
- u32 RegValue;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(CounterNum < XAPM_MAX_COUNTERS);
- Xil_AssertVoid((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U));
-
-
- /*
- * Write the specified Ranges to corresponding Metric Counter Log
- * Enable Register
- */
- RegValue = (u32)RangeUpper << 16;
- RegValue |= RangeLower;
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC0LOGEN_OFFSET + (CounterNum * (u32)16)), RegValue);
-
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns the Ranges of specified Metric Counter Log
-* Enable Register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param CounterNum is the Metric Counter number for which
-* Ranges are to be returned.Use the XAPM_METRIC_COUNTER*
-* defines for the counter number in xaxipmon.h.
-* The valid values are 0 (XAPM_METRIC_COUNTER_0) to
-* 9 (XAPM_METRIC_COUNTER_9).
-*
-* @param RangeUpper specifies the user reference variable which returns
-* the Upper Range Value of the specified Metric Counter
-* Log Enable Register.
-* @param RangeLower specifies the user reference variable which returns
-* the Lower Range Value of the specified Metric Counter
-* Log Enable Register.
-*
-* @note None.
-*
-*****************************************************************************/
-void XAxiPmon_GetLogEnableRanges(XAxiPmon *InstancePtr, u32 CounterNum,
- u16 *RangeUpper, u16 *RangeLower)
-{
- u32 RegValue;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(CounterNum < XAPM_MAX_COUNTERS);
- Xil_AssertVoid((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventCount == 1U));
-
-
- RegValue = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- ((u32)XAPM_MC0LOGEN_OFFSET + (CounterNum * (u32)16)));
-
- *RangeLower = (u16)RegValue & 0xFFFFU;
- *RangeUpper = (u16)(RegValue >> 16) & 0xFFFFU;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function enables Event Logging.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*******************************************************************************/
-void XAxiPmon_EnableEventLog(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid((InstancePtr->Mode == XAPM_MODE_TRACE) ||
- ((InstancePtr->Mode == XAPM_MODE_ADVANCED) &&
- (InstancePtr->Config.IsEventLog == 1U)));
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- RegVal | XAPM_CR_EVENTLOG_ENABLE_MASK);
-}
-
-/*****************************************************************************/
-/**
-*
-* This function enables External trigger pulse so that Metric Counters can be
-* started on external trigger pulse for a Slot.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*******************************************************************************/
-void XAxiPmon_EnableMetricCounterTrigger(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode != XAPM_MODE_TRACE);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- RegVal | XAPM_CR_MCNTR_EXTTRIGGER_MASK);
-}
-
-/****************************************************************************/
-/**
-*
-* This function disables the External trigger pulse used to start Metric
-* Counters on external trigger pulse for a Slot.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*****************************************************************************/
-void XAxiPmon_DisableMetricCounterTrigger(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode != XAPM_MODE_TRACE);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
-
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- RegVal & ~(XAPM_CR_MCNTR_EXTTRIGGER_MASK));
-}
-
-/*****************************************************************************/
-/**
-*
-* This function enables External trigger pulse for Event Log
-* so that Event Logging can be started on external trigger pulse for a Slot.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*******************************************************************************/
-void XAxiPmon_EnableEventLogTrigger(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode != XAPM_MODE_PROFILE);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- RegVal | XAPM_CR_EVTLOG_EXTTRIGGER_MASK);
-}
-
-/****************************************************************************/
-/**
-*
-* This function disables the External trigger pulse used to start Event
-* Log on external trigger pulse for a Slot.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return None
-*
-* @note None
-*
-*****************************************************************************/
-void XAxiPmon_DisableEventLogTrigger(XAxiPmon *InstancePtr)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- Xil_AssertVoid(InstancePtr->Mode != XAPM_MODE_PROFILE);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
-
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress, XAPM_CTL_OFFSET,
- RegVal & ~(XAPM_CR_EVTLOG_EXTTRIGGER_MASK));
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns a name for a given Metric.
-*
-* @param Metrics is one of the Metric Sets. User has to use
-* XAPM_METRIC_SET_* macros in xaxipmon.h for this parameter
-*
-* @return const char *
-*
-* @note None
-*
-*****************************************************************************/
-const char * XAxiPmon_GetMetricName(u8 Metrics)
-{
- if (Metrics == XAPM_METRIC_SET_0 ){
- return "Write Transaction Count";
- }
- if (Metrics == XAPM_METRIC_SET_1 ){
- return "Read Transaction Count";
- }
- if (Metrics == XAPM_METRIC_SET_2 ){
- return "Write Byte Count";
- }
- if (Metrics == XAPM_METRIC_SET_3 ){
- return "Read Byte Count";
- }
- if (Metrics == XAPM_METRIC_SET_4 ){
- return "Write Beat Count";
- }
- if (Metrics == XAPM_METRIC_SET_5 ){
- return "Total Read Latency";
- }
- if (Metrics == XAPM_METRIC_SET_6 ){
- return "Total Write Latency";
- }
- if (Metrics == XAPM_METRIC_SET_7 ){
- return "Slv_Wr_Idle_Cnt";
- }
- if (Metrics == XAPM_METRIC_SET_8 ){
- return "Mst_Rd_Idle_Cnt";
- }
- if (Metrics == XAPM_METRIC_SET_9 ){
- return "Num_BValids";
- }
- if (Metrics == XAPM_METRIC_SET_10){
- return "Num_WLasts";
- }
- if (Metrics == XAPM_METRIC_SET_11){
- return "Num_RLasts";
- }
- if (Metrics == XAPM_METRIC_SET_12){
- return "Minimum Write Latency";
- }
- if (Metrics == XAPM_METRIC_SET_13){
- return "Maximum Write Latency";
- }
- if (Metrics == XAPM_METRIC_SET_14){
- return "Minimum Read Latency";
- }
- if (Metrics == XAPM_METRIC_SET_15){
- return "Maximum Read Latency";
- }
- if (Metrics == XAPM_METRIC_SET_16){
- return "Transfer Cycle Count";
- }
- if (Metrics == XAPM_METRIC_SET_17){
- return "Packet Count";
- }
- if (Metrics == XAPM_METRIC_SET_18){
- return "Data Byte Count";
- }
- if (Metrics == XAPM_METRIC_SET_19){
- return "Position Byte Count";
- }
- if (Metrics == XAPM_METRIC_SET_20){
- return "Null Byte Count";
- }
- if (Metrics == XAPM_METRIC_SET_21){
- return "Slv_Idle_Cnt";
- }
- if (Metrics == XAPM_METRIC_SET_22){
- return "Mst_Idle_Cnt";
- }
- if (Metrics == XAPM_METRIC_SET_30){
- return "External event count";
- }
- return "Unsupported";
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Write ID in ID register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param WriteId is the Write ID to be written in ID register.
-*
-* @return None.
-*
-* @note
-* If ID filtering for write is of 32 bits(for Zynq MP APM) width then
-* WriteID is written to XAPM_ID_OFFSET or if it is 16 bit width
-* then lower 16 bits of WriteID are written to XAPM_ID_OFFSET.
-*
-*****************************************************************************/
-void XAxiPmon_SetWriteId(XAxiPmon *InstancePtr, u32 WriteId)
-{
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET);
- RegVal = RegVal & ~(XAPM_ID_WID_MASK);
- RegVal = RegVal | WriteId;
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET, RegVal);
- } else {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET, WriteId);
- }
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Read ID in ID register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param ReadId is the Read ID to be written in ID register.
-*
-* @return None.
-*
-* @note
-* If ID filtering for read is of 32 bits(for Zynq MP APM) width then
-* ReadId is written to XAPM_RID_OFFSET or if it is 16 bit width
-* then lower 16 bits of ReadId are written to XAPM_ID_OFFSET.
-*
-*****************************************************************************/
-void XAxiPmon_SetReadId(XAxiPmon *InstancePtr, u32 ReadId)
-{
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET);
- RegVal = RegVal & ~(XAPM_ID_RID_MASK);
- RegVal = RegVal | (ReadId << 16);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET, RegVal);
- } else {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_RID_OFFSET, ReadId);
- }
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns Write ID in ID register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return WriteId is the required Write ID in ID register.
-*
-* @note None.
-* If ID filtering for write is of 32 bits(for Zynq MP APM) width then
-* 32 bit XAPM_ID_OFFSET contents are returned or if it is 16 bit
-* width then lower 16 bits of XAPM_ID_OFFSET register are returned.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetWriteId(XAxiPmon *InstancePtr)
-{
-
- u32 WriteId;
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET);
- WriteId = RegVal & XAPM_ID_WID_MASK;
- } else {
- WriteId = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET);
- }
-
- return WriteId;
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns Read ID in ID register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return ReadId is the required Read ID in ID register.
-*
-* @note None.
-* If ID filtering for write is of 32 bits(for Zynq MP APM) width then
-* 32 bit XAPM_RID_OFFSET contents are returned or if it is 16 bit
-* width then higher 16 bits of XAPM_ID_OFFSET register are returned.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetReadId(XAxiPmon *InstancePtr)
-{
-
- u32 ReadId;
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_ID_OFFSET);
- RegVal = RegVal & XAPM_ID_RID_MASK;
- ReadId = RegVal >> 16;
- } else {
- ReadId = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_RID_OFFSET);
- }
-
- return ReadId;
-}
-
-/*****************************************************************************/
-/**
-*
-* This function sets Latency Start point to calculate write latency.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param Param is XAPM_LATENCY_ADDR_ISSUE or XAPM_LATENCY_ADDR_ACCEPT
-* in xaxipmon.h.
-* @return None
-*
-* @note Param can be 0 - XAPM_LATENCY_ADDR_ISSUE
-* or 1 - XAPM_LATENCY_ADDR_ACCEPT
-*
-*******************************************************************************/
-void XAxiPmon_SetWrLatencyStart(XAxiPmon *InstancePtr, u8 Param)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- if (Param == XAPM_LATENCY_ADDR_ACCEPT) {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET, RegVal | XAPM_CR_WRLATENCY_START_MASK);
- }
- else {
- XAxiPmon_WriteReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET,
- XAxiPmon_ReadReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET) & ~(XAPM_CR_WRLATENCY_START_MASK));
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function sets Latency End point to calculate write latency.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param Param is XAPM_LATENCY_LASTWR or XAPM_LATENCY_FIRSTWR
-* in xaxipmon.h.
-*
-* @return None
-*
-* @note Param can be 0 - XAPM_LATENCY_LASTWR
-* or 1 - XAPM_LATENCY_FIRSTWR
-*
-*******************************************************************************/
-void XAxiPmon_SetWrLatencyEnd(XAxiPmon *InstancePtr, u8 Param)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- if (Param == XAPM_LATENCY_FIRSTWR) {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET, RegVal | XAPM_CR_WRLATENCY_END_MASK);
- }
- else {
- XAxiPmon_WriteReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET,
- XAxiPmon_ReadReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET) & ~(XAPM_CR_WRLATENCY_END_MASK));
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function sets Latency Start point to calculate read latency.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param Param is XAPM_LATENCY_ADDR_ISSUE or XAPM_LATENCY_ADDR_ACCEPT
-* in xaxipmon.h.
-*
-* @return None
-*
-* @note Param can be 0 - XAPM_LATENCY_ADDR_ISSUE
-* or 1 - XAPM_LATENCY_ADDR_ACCEPT
-*
-*******************************************************************************/
-void XAxiPmon_SetRdLatencyStart(XAxiPmon *InstancePtr, u8 Param)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- if (Param == XAPM_LATENCY_ADDR_ACCEPT) {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET, RegVal | XAPM_CR_RDLATENCY_START_MASK);
- }
- else {
- XAxiPmon_WriteReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET,
- XAxiPmon_ReadReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET) & ~(XAPM_CR_RDLATENCY_START_MASK));
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function sets Latency End point to calculate read latency.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param Param is XAPM_LATENCY_LASTRD or XAPM_LATENCY_FIRSTRD
-* in xaxipmon.h.
-*
-* @return None
-*
-* @note Param can be 0 - XAPM_LATENCY_LASTRD
-* or 1 - XAPM_LATENCY_FIRSTRD
-*
-*******************************************************************************/
-void XAxiPmon_SetRdLatencyEnd(XAxiPmon *InstancePtr, u8 Param)
-{
- u32 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET);
- if (Param == XAPM_LATENCY_FIRSTRD) {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_CTL_OFFSET, RegVal | XAPM_CR_RDLATENCY_END_MASK);
- }
- else {
- XAxiPmon_WriteReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET,
- XAxiPmon_ReadReg((InstancePtr)->Config.BaseAddress,
- XAPM_CTL_OFFSET) & ~(XAPM_CR_RDLATENCY_END_MASK));
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function returns Write Latency Start point.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return Returns 0 - XAPM_LATENCY_ADDR_ISSUE or
-* 1 - XAPM_LATENCY_ADDR_ACCEPT
-*
-* @note None
-*
-*******************************************************************************/
-u8 XAxiPmon_GetWrLatencyStart(XAxiPmon *InstancePtr)
-{
- u8 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = (u8)XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- RegVal = RegVal & XAPM_CR_WRLATENCY_START_MASK;
- if (RegVal != XAPM_LATENCY_ADDR_ISSUE) {
- return (u8)XAPM_LATENCY_ADDR_ACCEPT;
- }
- else {
- return (u8)XAPM_LATENCY_ADDR_ISSUE;
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function returns Write Latency End point.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return Returns 0 - XAPM_LATENCY_LASTWR or
-* 1 - XAPM_LATENCY_FIRSTWR.
-*
-* @note None
-*
-*******************************************************************************/
-u8 XAxiPmon_GetWrLatencyEnd(XAxiPmon *InstancePtr)
-{
- u8 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = (u8)XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- RegVal = RegVal & XAPM_CR_WRLATENCY_END_MASK;
- if (RegVal != XAPM_LATENCY_LASTWR) {
- return (u8)XAPM_LATENCY_FIRSTWR;
- }
- else {
- return (u8)XAPM_LATENCY_LASTWR;
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function returns read Latency Start point.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return Returns 0 - XAPM_LATENCY_ADDR_ISSUE or
-* 1 - XAPM_LATENCY_ADDR_ACCEPT
-*
-* @note None
-*
-*******************************************************************************/
-u8 XAxiPmon_GetRdLatencyStart(XAxiPmon *InstancePtr)
-{
- u8 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = (u8)XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- RegVal = RegVal & XAPM_CR_RDLATENCY_START_MASK;
-
- if (RegVal != XAPM_LATENCY_ADDR_ISSUE) {
- return (u8)XAPM_LATENCY_ADDR_ACCEPT;
- }
- else {
- return (u8)XAPM_LATENCY_ADDR_ISSUE;
- }
-}
-
-/*****************************************************************************/
-/**
-*
-* This function returns Read Latency End point.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return Returns 0 - XAPM_LATENCY_LASTRD or
-* 1 - XAPM_LATENCY_FIRSTRD.
-*
-* @note None
-*
-*******************************************************************************/
-u8 XAxiPmon_GetRdLatencyEnd(XAxiPmon *InstancePtr)
-{
- u8 RegVal;
-
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- RegVal = (u8)XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- (u32)XAPM_CTL_OFFSET);
- RegVal = RegVal & XAPM_CR_RDLATENCY_END_MASK;
- if (RegVal != XAPM_LATENCY_LASTRD) {
- return (u8)XAPM_LATENCY_FIRSTRD;
- }
- else {
- return (u8)XAPM_LATENCY_LASTRD;
- }
-
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Write ID Mask in ID Mask register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param WrMask is the Write ID mask to be written in ID register.
-*
-* @return None.
-*
-* @note
-* If ID masking for write is of 32 bits(for Zynq MP APM) width then
-* WrMask is written to XAPM_IDMASK_OFFSET or if it is 16 bit width
-* then lower 16 bits of WrMask are written to XAPM_IDMASK_OFFSET.
-*
-*****************************************************************************/
-void XAxiPmon_SetWriteIdMask(XAxiPmon *InstancePtr, u32 WrMask)
-{
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET);
- RegVal = RegVal & ~(XAPM_MASKID_WID_MASK);
- RegVal = RegVal | WrMask;
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET, RegVal);
- } else {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET, WrMask);
- }
-}
-
-/****************************************************************************/
-/**
-*
-* This function sets Read ID Mask in ID Mask register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-* @param RdMask is the Read ID mask to be written in ID Mask register.
-*
-* @return None.
-*
-* @note
-* If ID masking for read is of 32 bits(for Zynq MP APM) width then
-* RdMask is written to XAPM_RIDMASK_OFFSET or if it is 16 bit width
-* then lower 16 bits of RdMask are written to XAPM_IDMASK_OFFSET.
-*
-*****************************************************************************/
-void XAxiPmon_SetReadIdMask(XAxiPmon *InstancePtr, u32 RdMask)
-{
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET);
- RegVal = RegVal & ~(XAPM_MASKID_RID_MASK);
- RegVal = RegVal | (RdMask << 16);
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET, RegVal);
- } else {
- XAxiPmon_WriteReg(InstancePtr->Config.BaseAddress,
- XAPM_RIDMASK_OFFSET, RdMask);
- }
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns Write ID Mask in ID Mask register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return WrMask is the required Write ID Mask in ID Mask register.
-*
-* @note
-* If ID masking for write is of 32 bits(for Zynq MP APM) width then
-* 32 bit XAPM_IDMASK_OFFSET contents are returned or if it is 16 bit
-* width then lower 16 bits of XAPM_IDMASK_OFFSET register
-* are returned.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetWriteIdMask(XAxiPmon *InstancePtr)
-{
-
- u32 WrMask;
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET);
- WrMask = RegVal & XAPM_MASKID_WID_MASK;
- } else {
- WrMask = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET);
- }
-
- return WrMask;
-}
-
-/****************************************************************************/
-/**
-*
-* This function returns Read ID Mask in ID Mask register.
-*
-* @param InstancePtr is a pointer to the XAxiPmon instance.
-*
-* @return RdMask is the required Read ID Mask in ID Mask register.
-*
-* @note
-* If ID masking for read is of 32 bits(for Zynq MP APM) width then
-* 32 bit XAPM_RIDMASK_OFFSET contents are returned or if it is 16 bit
-* width then higher 16 bits of XAPM_IDMASK_OFFSET register
-* are returned.
-*
-*****************************************************************************/
-u32 XAxiPmon_GetReadIdMask(XAxiPmon *InstancePtr)
-{
-
- u32 RdMask;
- u32 RegVal;
- /*
- * Assert the arguments.
- */
- Xil_AssertNonvoid(InstancePtr != NULL);
- Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
- if (InstancePtr->Config.Is32BitFiltering == 0U)
- {
- RegVal = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_IDMASK_OFFSET);
- RegVal = RegVal & XAPM_MASKID_RID_MASK;
- RdMask = RegVal >> 16;
- } else {
- RdMask = XAxiPmon_ReadReg(InstancePtr->Config.BaseAddress,
- XAPM_RIDMASK_OFFSET);
- }
-
- return RdMask;
-}
-/** @} */