mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 00:49:43 +00:00
61e129885a
Signed-off-by: Marek Vasut <marex@denx.de> Cc: Bryan Hundven <bryanhundven@gmail.com> Cc: Michael Schwingen <rincewind@discworld.dascon.de> Cc: Wolfgang Denk <wd@denx.de> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: U-Boot DM <u-boot-dm@lists.denx.de> Cc: Joe Hershberger <joe.hershberger@ni.com>
1358 lines
57 KiB
C
1358 lines
57 KiB
C
/**
|
|
* @file IxPerfProfAcc.h
|
|
*
|
|
* @brief Header file for the IXP400 Perf Prof component (IxPerfProfAcc)
|
|
*
|
|
*
|
|
* @par
|
|
* IXP400 SW Release version 2.0
|
|
*
|
|
* -- Copyright Notice --
|
|
*
|
|
* @par
|
|
* Copyright 2001-2005, Intel Corporation.
|
|
* All rights reserved.
|
|
*
|
|
* @par
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of the Intel Corporation nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* @par
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* @par
|
|
* -- End of Copyright Notice --
|
|
*/
|
|
|
|
/**
|
|
* @defgroup IxPerfProfAcc IXP400 Performance Profiling (IxPerfProfAcc) API
|
|
*
|
|
* @brief IXP400 Performance Profiling Utility component Public API.
|
|
* @li NOTE: Xcycle measurement is not supported in Linux.
|
|
*
|
|
*
|
|
* @{
|
|
*/
|
|
#ifndef IXPERFPROFACC_H
|
|
#define IXPERFPROFACC_H
|
|
|
|
#include "IxOsal.h"
|
|
|
|
#ifdef __linux
|
|
#include <linux/proc_fs.h>
|
|
#endif
|
|
|
|
/*
|
|
* Section for #define
|
|
*/
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @def IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES
|
|
*
|
|
* @brief This is the maximum number of profiling samples allowed, which can be
|
|
* modified according to the user's discretion
|
|
*/
|
|
#define IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES 0xFFFF
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @def IX_PERFPROF_ACC_BUS_PMU_MAX_PECS
|
|
*
|
|
* @brief This is the maximum number of Programmable Event Counters available.
|
|
* This is a hardware specific and fixed value. Do not change.
|
|
*
|
|
*/
|
|
#define IX_PERFPROF_ACC_BUS_PMU_MAX_PECS 7
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @def IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS
|
|
*
|
|
* @brief Max number of measurement allowed. This constant is used when
|
|
* creating storage array for Xcycle. When run in continuous mode,
|
|
* Xcycle will wrap around and re-use buffer.
|
|
*/
|
|
#define IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS 600
|
|
|
|
#ifdef __linux
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @def IX_PERFPROF_ACC_XSCALE_PMU_SYMBOL_ACCURACY
|
|
*
|
|
* @brief Level of accuracy required for matching the PC Address to
|
|
* symbol address. This is used when the XScale PMU time/event
|
|
* sampling functions get the PC address and search for the
|
|
* corresponding symbol address.
|
|
*/
|
|
#define IX_PERFPROF_ACC_XSCALE_PMU_SYMBOL_ACCURACY 0xffff
|
|
|
|
#endif /*__linux*/
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @def IX_PERFPROF_ACC_LOG
|
|
*
|
|
* @brief Mechanism for logging a formatted message for the PerfProfAcc component
|
|
*
|
|
* @param level UINT32 [in] - trace level
|
|
* @param device UINT32 [in] - output device
|
|
* @param str char* [in] - format string, similar to printf().
|
|
* @param a UINT32 [in] - first argument to display
|
|
* @param b UINT32 [in] - second argument to display
|
|
* @param c UINT32 [in] - third argument to display
|
|
* @param d UINT32 [in] - fourth argument to display
|
|
* @param e UINT32 [in] - fifth argument to display
|
|
* @param f UINT32 [in] - sixth argument to display
|
|
*
|
|
* @return none
|
|
*/
|
|
#ifndef NDEBUG
|
|
#define IX_PERFPROF_ACC_LOG(level, device, str, a, b, c, d, e, f)\
|
|
(ixOsalLog (level, device, str, a, b, c, d, e, f))
|
|
#else /*do nothing*/
|
|
#define IX_PERFPROF_ACC_LOG(level, device, str, a, b, c, d, e, f)
|
|
#endif /*ifdef NDEBUG */
|
|
|
|
/*
|
|
* Section for struct
|
|
*/
|
|
|
|
/**
|
|
* @brief contains summary of samples taken
|
|
*
|
|
* Structure contains all details of each program counter value - frequency
|
|
* that PC occurs
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT32 programCounter; /**<the program counter value of the sample*/
|
|
UINT32 freq; /**<the frequency of the occurence of the sample*/
|
|
} IxPerfProfAccXscalePmuSamplePcProfile;
|
|
|
|
/**
|
|
* @brief contains results of a counter
|
|
*
|
|
* Structure contains the results of a counter, which are split into the lower
|
|
* and upper 32 bits of the final count
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT32 lower32BitsEventCount; /**<lower 32bits value of the event counter*/
|
|
UINT32 upper32BitsEventCount; /**<upper 32bits value of the event counter*/
|
|
} IxPerfProfAccXscalePmuEvtCnt;
|
|
|
|
/**
|
|
* @brief contains results of counters and their overflow
|
|
*
|
|
* Structure contains all values of counters and associated overflows. The
|
|
* specific event and clock counters are determined by the user
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT32 clk_value; /**<current value of clock counter*/
|
|
UINT32 clk_samples; /**<number of clock counter overflows*/
|
|
UINT32 event1_value; /**<current value of event 1 counter*/
|
|
UINT32 event1_samples; /**<number of event 1 counter overflows*/
|
|
UINT32 event2_value; /**<current value of event 2 counter*/
|
|
UINT32 event2_samples; /**<number of event 2 counter overflows*/
|
|
UINT32 event3_value; /**<current value of event 3 counter*/
|
|
UINT32 event3_samples; /**<number of event 3 counter overflows*/
|
|
UINT32 event4_value; /**<current value of event 4 counter*/
|
|
UINT32 event4_samples; /**<number of event 4 counter overflows*/
|
|
} IxPerfProfAccXscalePmuResults;
|
|
|
|
/**
|
|
*
|
|
* @brief Results obtained from Xcycle run
|
|
*/
|
|
typedef struct
|
|
{
|
|
float maxIdlePercentage; /**<maximum percentage of Idle cycles*/
|
|
float minIdlePercentage; /**<minimum percentage of Idle cycles*/
|
|
float aveIdlePercentage; /**<average percentage of Idle cycles*/
|
|
UINT32 totalMeasurements; /**<total number of measurement made */
|
|
} IxPerfProfAccXcycleResults;
|
|
|
|
/**
|
|
*
|
|
* @brief Results obtained from running the Bus Pmu component. The results
|
|
* are obtained when the get functions is called.
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT32 statsToGetLower27Bit[IX_PERFPROF_ACC_BUS_PMU_MAX_PECS]; /**<Lower 27 Bit of counter value */
|
|
UINT32 statsToGetUpper32Bit[IX_PERFPROF_ACC_BUS_PMU_MAX_PECS]; /**<Upper 32 Bit of counter value */
|
|
} IxPerfProfAccBusPmuResults;
|
|
|
|
/*
|
|
* Section for enum
|
|
*/
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters1
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 1.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEA_GRANT_SELECT = 1, /**< Select North NPEA grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEB_GRANT_SELECT, /**< Select North NPEB grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEC_GRANT_SELECT, /**< Select North NPEC grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_BUS_IDLE_SELECT, /**< Select North bus idle on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEA_REQ_SELECT, /**< Select North NPEA req on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEB_REQ_SELECT, /**< Select North NPEB req on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_NORTH_NPEC_REQ_SELECT, /**< Select North NPEC req on PEC1*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_GSKT_GRANT_SELECT, /**< Select south gasket grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_ABB_GRANT_SELECT, /**< Select south abb grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_PCI_GRANT_SELECT, /**< Select south pci grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_APB_GRANT_SELECT, /**< Select south apb grant on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_GSKT_REQ_SELECT, /**< Select south gasket request on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_ABB_REQ_SELECT, /**< Select south abb request on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_PCI_REQ_SELECT, /**< Select south pci request on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SOUTH_APB_REQ_SELECT, /**< Select south apb request on PEC1*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_0_HIT_SELECT, /**< Select sdram0 hit on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_1_HIT_SELECT, /**< Select sdram1 hit on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_2_HIT_SELECT, /**< Select sdram2 hit on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_4_MISS_SELECT, /**< Select sdram4 miss on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_5_MISS_SELECT, /**< Select sdram5 miss on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_6_MISS_SELECT, /**< Select sdram6 miss on PEC1*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC1_SDR_7_MISS_SELECT /**< Select sdram7 miss on PEC1*/
|
|
} IxPerfProfAccBusPmuEventCounters1;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters2
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 2.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEA_XFER_SELECT = 24, /**< Select North NPEA transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEB_XFER_SELECT, /**< Select North NPEB transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEC_XFER_SELECT, /**< Select North NPEC transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_BUS_WRITE_SELECT, /**< Select North bus write on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEA_OWN_SELECT, /**< Select North NPEA own on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEB_OWN_SELECT, /**< Select North NPEB own on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_NORTH_NPEC_OWN_SELECT, /**< Select North NPEC own on PEC2*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_GSKT_XFER_SELECT, /**< Select South gasket transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_ABB_XFER_SELECT, /**< Select South abb transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_PCI_XFER_SELECT, /**< Select South pci transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_APB_XFER_SELECT, /**< Select South apb transfer on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_GSKT_OWN_SELECT, /**< Select South gasket own on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_ABB_OWN_SELECT, /**< Select South abb own on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_PCI_OWN_SELECT, /**< Select South pci own on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SOUTH_APB_OWN_SELECT, /**< Select South apb own transfer on PEC2*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_1_HIT_SELECT, /**< Select sdram1 hit on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_2_HIT_SELECT, /**< Select sdram2 hit on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_4_HIT_SELECT, /**< Select sdram4 hit on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_5_MISS_SELECT, /**< Select sdram5 miss on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_6_MISS_SELECT, /**< Select sdram6 miss on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_7_MISS_SELECT, /**< Select sdram7 miss on PEC2*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC2_SDR_0_MISS_SELECT /**< Select sdram0 miss on PEC2*/
|
|
} IxPerfProfAccBusPmuEventCounters2;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters3
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 3.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEA_RETRY_SELECT = 47, /**< Select north NPEA retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEB_RETRY_SELECT, /**< Select north NPEB retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEC_RETRY_SELECT, /**< Select north NPEC retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_BUS_READ_SELECT, /**< Select north bus read on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEA_WRITE_SELECT, /**< Select north NPEA write on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEB_WRITE_SELECT, /**< Select north NPEB write on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_NORTH_NPEC_WRITE_SELECT, /**< Select north NPEC wirte on PEC3*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_GSKT_RETRY_SELECT, /**< Select south gasket retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_ABB_RETRY_SELECT, /**< Select south abb retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_PCI_RETRY_SELECT, /**< Select south pci retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_APB_RETRY_SELECT, /**< Select south apb retry on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_GSKT_WRITE_SELECT, /**< Select south gasket write on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_ABB_WRITE_SELECT, /**< Select south abb write on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_PCI_WRITE_SELECT, /**< Select south pci write on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SOUTH_APB_WRITE_SELECT, /**< Select south apb write on PEC3*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_2_HIT_SELECT, /**< Select sdram2 hit on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_4_HIT_SELECT, /**< Select sdram4 hit on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_5_HIT_SELECT, /**< Select sdram5 hit on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_6_MISS_SELECT, /**< Select sdram6 miss on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_7_MISS_SELECT, /**< Select sdram7 miss on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_0_MISS_SELECT, /**< Select sdram0 miss on PEC3*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC3_SDR_1_MISS_SELECT /**< Select sdram1 miss on PEC3*/
|
|
} IxPerfProfAccBusPmuEventCounters3;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters4
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 4.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_PCI_SPLIT_SELECT = 70, /**< Select south pci split on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_EXP_SPLIT_SELECT, /**< Select south expansion split on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_GRANT_SELECT, /**< Select south apb grant on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_XFER_SELECT, /**< Select south apb transfer on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_GSKT_READ_SELECT, /**< Select south gasket read on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_ABB_READ_SELECT, /**< Select south abb read on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_PCI_READ_SELECT, /**< Select south pci read on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SOUTH_APB_READ_SELECT, /**< Select south apb read on PEC4*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_ABB_SPLIT_SELECT, /**< Select north abb split on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEA_REQ_SELECT, /**< Select north NPEA req on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEA_READ_SELECT, /**< Select north NPEA read on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEB_READ_SELECT, /**< Select north NPEB read on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_NORTH_NPEC_READ_SELECT, /**< Select north NPEC read on PEC4*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_3_HIT_SELECT, /**< Select sdram3 hit on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_4_HIT_SELECT, /**< Select sdram4 hit on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_5_HIT_SELECT, /**< Select sdram5 hit on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_6_HIT_SELECT, /**< Select sdram6 hit on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_7_MISS_SELECT, /**< Select sdram7 miss on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_0_MISS_SELECT, /**< Select sdram0 miss on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_1_MISS_SELECT, /**< Select sdram1 miss on PEC4*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC4_SDR_2_MISS_SELECT /**< Select sdram2 miss on PEC4*/
|
|
} IxPerfProfAccBusPmuEventCounters4;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters5
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 5.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_GRANT_SELECT = 91, /**< Select south abb grant on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_XFER_SELECT, /**< Select south abb transfer on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_RETRY_SELECT, /**< Select south abb retry on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_EXP_SPLIT_SELECT, /**< Select south expansion split on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_REQ_SELECT, /**< Select south abb request on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_ABB_OWN_SELECT, /**< Select south abb own on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SOUTH_BUS_IDLE_SELECT, /**< Select south bus idle on PEC5*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_GRANT_SELECT, /**< Select north NPEB grant on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_XFER_SELECT, /**< Select north NPEB transfer on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_RETRY_SELECT, /**< Select north NPEB retry on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_REQ_SELECT, /**< Select north NPEB request on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_OWN_SELECT, /**< Select north NPEB own on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_WRITE_SELECT, /**< Select north NPEB write on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_NORTH_NPEB_READ_SELECT, /**< Select north NPEB read on PEC5*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_4_HIT_SELECT, /**< Select north sdram4 hit on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_5_HIT_SELECT, /**< Select north sdram5 hit on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_6_HIT_SELECT, /**< Select north sdram6 hit on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_7_HIT_SELECT, /**< Select north sdram7 hit on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_0_MISS_SELECT, /**< Select north sdram0 miss on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_1_MISS_SELECT, /**< Select north sdram1 miss on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_2_MISS_SELECT, /**< Select north sdram2 miss on PEC5*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC5_SDR_3_MISS_SELECT /**< Select north sdram3 miss on PEC5*/
|
|
} IxPerfProfAccBusPmuEventCounters5;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters6
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 6.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_GRANT_SELECT = 113, /**< Select south pci grant on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_XFER_SELECT, /**< Select south pci transfer on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_RETRY_SELECT, /**< Select south pci retry on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_SPLIT_SELECT, /**< Select south pci split on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_REQ_SELECT, /**< Select south pci request on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_PCI_OWN_SELECT, /**< Select south pci own on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SOUTH_BUS_WRITE_SELECT, /**< Select south pci write on PEC6*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_GRANT_SELECT, /**< Select north NPEC grant on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_XFER_SELECT, /**< Select north NPEC transfer on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_RETRY_SELECT, /**< Select north NPEC retry on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_REQ_SELECT, /**< Select north NPEC request on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_OWN_SELECT, /**< Select north NPEC own on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEB_WRITE_SELECT, /**< Select north NPEB write on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_NORTH_NPEC_READ_SELECT, /**< Select north NPEC read on PEC6*/
|
|
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_5_HIT_SELECT, /**< Select sdram5 hit on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_6_HIT_SELECT, /**< Select sdram6 hit on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_7_HIT_SELECT, /**< Select sdram7 hit on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_0_HIT_SELECT, /**< Select sdram0 hit on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_1_MISS_SELECT, /**< Select sdram1 miss on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_2_MISS_SELECT, /**< Select sdram2 miss on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_3_MISS_SELECT, /**< Select sdram3 miss on PEC6*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC6_SDR_4_MISS_SELECT /**< Select sdram4 miss on PEC6*/
|
|
} IxPerfProfAccBusPmuEventCounters6;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuEventCounters7
|
|
*
|
|
* @brief Type of bus pmu events supported on PEC 7.
|
|
*
|
|
* Lists all bus pmu events.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_RETRY_SELECT = 135, /**< Select south apb retry on PEC7*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_REQ_SELECT, /**< Select south apb request on PEC7*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_APB_OWN_SELECT, /**< Select south apb own on PEC7*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC7_SOUTH_BUS_READ_SELECT, /**< Select south bus read on PEC7*/
|
|
IX_PERFPROF_ACC_BUS_PMU_PEC7_CYCLE_COUNT_SELECT /**< Select cycle count on PEC7*/
|
|
} IxPerfProfAccBusPmuEventCounters7;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccXscalePmuEvent
|
|
*
|
|
* @brief Type of xscale pmu events supported
|
|
*
|
|
* Lists all xscale pmu events. The maximum is a default value that the user
|
|
* should not exceed.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_CACHE_MISS=0, /**< cache miss*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_CACHE_INSTRUCTION,/**< cache instruction*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_STALL, /**< event stall*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_INST_TLB_MISS, /**< instruction tlb miss*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_TLB_MISS, /**< data tlb miss*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_BRANCH_EXEC, /**< branch executed*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_BRANCH_MISPREDICT, /**<branch mispredict*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_INST_EXEC, /**< instruction executed*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_FULL_EVERYCYCLE, /**<
|
|
*Stall - data cache
|
|
*buffers are full.
|
|
*This event occurs
|
|
*every cycle where
|
|
*condition present
|
|
*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_ONCE, /**<
|
|
*Stall - data cache buffers are
|
|
*full.This event occurs once
|
|
*for each contiguous sequence
|
|
*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_CACHE_ACCESS, /**< data cache access*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_CACHE_MISS, /**< data cache miss*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_DATA_CACHE_WRITEBACK, /**<data cache
|
|
*writeback
|
|
*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_SW_CHANGE_PC, /**< sw change pc*/
|
|
IX_PERFPROF_ACC_XSCALE_PMU_EVENT_MAX /**< max value*/
|
|
} IxPerfProfAccXscalePmuEvent;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccStatus
|
|
*
|
|
* @brief Invalid Status Definitions
|
|
*
|
|
* These status will be used by the APIs to return to the user.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_STATUS_SUCCESS = IX_SUCCESS, /**< success*/
|
|
IX_PERFPROF_ACC_STATUS_FAIL = IX_FAIL, /**< fail*/
|
|
IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS,/**<another utility in
|
|
*progress
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS, /**<measurement in
|
|
*progress
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_NO_BASELINE, /**<no baseline yet*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_REQUEST_OUT_OF_RANGE, /**<
|
|
* Measurement chosen
|
|
* is out of range
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_SET_FAIL, /**<
|
|
* Cannot set
|
|
* task priority
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_THREAD_CREATE_FAIL, /**<
|
|
* Fail create thread
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_RESTORE_FAIL, /**<
|
|
*cannot restore
|
|
*priority
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_NOT_RUNNING, /**< xcycle not running*/
|
|
IX_PERFPROF_ACC_STATUS_XSCALE_PMU_NUM_INVALID, /**< invalid number
|
|
*entered
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_XSCALE_PMU_EVENT_INVALID, /**< invalid pmu event*/
|
|
IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED, /**<a start process
|
|
*was not called
|
|
*before attempting
|
|
*a stop or results
|
|
*get
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_MODE_ERROR, /**< invalid mode*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC1_ERROR, /**< invalid pec1 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC2_ERROR, /**< invalid pec2 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC3_ERROR, /**< invalid pec3 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC4_ERROR, /**< invalid pec4 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC5_ERROR, /**< invalid pec5 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC6_ERROR, /**< invalid pec6 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC7_ERROR, /**< invalid pec7 entered*/
|
|
IX_PERFPROF_ACC_STATUS_BUS_PMU_START_NOT_CALLED, /**<a start process
|
|
*was not called
|
|
*before attempting
|
|
*a stop
|
|
*/
|
|
IX_PERFPROF_ACC_STATUS_COMPONENT_NOT_SUPPORTED /**<Device or OS does not support component*/
|
|
} IxPerfProfAccStatus;
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @enum IxPerfProfAccBusPmuMode
|
|
*
|
|
* @brief State selection of counters.
|
|
*
|
|
* These states will be used to determine the counters whose values are to be
|
|
* read.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_PERFPROF_ACC_BUS_PMU_MODE_HALT=0, /**< halt state*/
|
|
IX_PERFPROF_ACC_BUS_PMU_MODE_SOUTH, /**< south state*/
|
|
IX_PERFPROF_ACC_BUS_PMU_MODE_NORTH, /**< north state*/
|
|
IX_PERFPROF_ACC_BUS_PMU_MODE_SDRAM /**< SDRAM state*/
|
|
} IxPerfProfAccBusPmuMode;
|
|
|
|
/*
|
|
* Section for prototypes interface functions
|
|
*/
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuEventCountStart(
|
|
BOOL clkCntDiv,
|
|
UINT32 numEvents,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent1,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent2,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent3,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent4 )
|
|
*
|
|
* @brief This API will start the clock and event counting
|
|
*
|
|
* @param clkCntDiv BOOL [in] - enables/disables the clock divider. When
|
|
* true, the divider is enabled and the clock count will be incremented
|
|
* by one at each 64th processor clock cycle. When false, the divider
|
|
* is disabled and the clock count will be incremented at every
|
|
* processor clock cycle.
|
|
* @param numEvents UINT32 [in] - the number of PMU events that are to be
|
|
* monitored as specified by the user. For clock counting only, this
|
|
* is set to zero.
|
|
* @param pmuEvent1 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 1
|
|
* @param pmuEvent2 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 2
|
|
* @param pmuEvent3 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 3
|
|
* @param pmuEvent4 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 4
|
|
*
|
|
* This API will start the clock and xscale PMU event counting. Up to
|
|
* 4 events can be monitored simultaneously. This API has to be called before
|
|
* ixPerfProfAccXscalePmuEventCountStop can be called.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS if clock and events counting are
|
|
* started successfully
|
|
* - IX_PERFPROF_ACC_STATUS_FAIL if unable to start the counting
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_NUM_INVALID if the number of events
|
|
* specified is out of the valid range
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_EVENT_INVALID if the value of the PMU
|
|
* event specified does not exist
|
|
* - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
|
|
* running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXscalePmuEventCountStart(
|
|
BOOL clkCntDiv,
|
|
UINT32 numEvents,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent1,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent2,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent3,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent4 );
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuEventCountStop (
|
|
IxPerfProfAccXscalePmuResults *eventCountStopResults)
|
|
*
|
|
* @brief This API will stop the clock and event counting
|
|
*
|
|
* @param *eventCountStopResults @ref IxPerfProfAccXscalePmuResults [out] - pointer
|
|
* to struct containing results of counters and their overflow. It is the
|
|
* users's responsibility to allocate the memory for this pointer.
|
|
*
|
|
* This API will stop the clock and xscale PMU events that are being counted.
|
|
* The results of the clock and events count will be stored in the pointer
|
|
* allocated by the user. It can only be called once
|
|
* IxPerfProfAccEventCountStart has been called.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS if clock and events counting are
|
|
* stopped successfully
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED if
|
|
* ixPerfProfAccXscalePmuEventCountStart is not called first.
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXscalePmuEventCountStop(
|
|
IxPerfProfAccXscalePmuResults *eventCountStopResults);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuTimeSampStart(
|
|
UINT32 samplingRate,
|
|
BOOL clkCntDiv)
|
|
*
|
|
* @brief Starts the time based sampling
|
|
*
|
|
* @param samplingRate UINT32 [in] - sampling rate is the number of
|
|
* clock counts before a counter overflow interrupt is generated,
|
|
* at which, a sample is taken; the rate specified cannot be greater
|
|
* than the counter size of 32bits or set to zero.
|
|
* @param clkCntDiv BOOL [in] - enables/disables the clock divider. When
|
|
* true, the divider is enabled and the clock count will be incremented
|
|
* by one at each 64th processor clock cycle. When false, the divider
|
|
* is disabled and the clock count will be incremented at every
|
|
* processor clock cycle.
|
|
*
|
|
* This API starts the time based sampling to determine the frequency with
|
|
* which lines of code are being executed. Sampling is done at the rate
|
|
* specified by the user. At each sample,the value of the program counter
|
|
* is determined. Each of these occurrences are recorded to determine the
|
|
* frequency with which the Xscale code is being executed. This API has to be
|
|
* called before ixPerfProfAccXscalePmuTimeSampStop can be called.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS if time based sampling is started
|
|
* successfully
|
|
* - IX_PERFPROF_ACC_STATUS_FAIL if unable to start the sampling
|
|
* - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
|
|
* running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXscalePmuTimeSampStart(
|
|
UINT32 samplingRate,
|
|
BOOL clkCntDiv);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuTimeSampStop(
|
|
IxPerfProfAccXscalePmuEvtCnt *clkCount,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *timeProfile)
|
|
*
|
|
* @brief Stops the time based sampling
|
|
*
|
|
* @param *clkCount @ref IxPerfProfAccXscalePmuEvtCnt [out] - pointer to the
|
|
* struct containing the final clock count and its overflow. It is the
|
|
* user's responsibility to allocate the memory for this pointer.
|
|
* @param *timeProfile @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
|
|
* pointer to the array of profiles for each program counter value;
|
|
* the user should set the size of the array to
|
|
* IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the user's
|
|
* responsibility to allocate the memory for this pointer.
|
|
*
|
|
* This API stops the time based sampling. The results are stored in the
|
|
* pointers allocated by the user. It can only be called once
|
|
* ixPerfProfAccXscalePmuTimeSampStart has been called.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS if time based sampling is stopped
|
|
* successfully
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED if
|
|
* ixPerfProfAccXscalePmuTimeSampStart not called first
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXscalePmuTimeSampStop(
|
|
IxPerfProfAccXscalePmuEvtCnt *clkCount,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *timeProfile);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuEventSampStart(
|
|
UINT32 numEvents,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent1,
|
|
UINT32 eventRate1,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent2,
|
|
UINT32 eventRate2,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent3,
|
|
UINT32 eventRate3,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent4,
|
|
UINT32 eventRate4)
|
|
*
|
|
* @brief Starts the event based sampling
|
|
*
|
|
* @param numEvents UINT32 [in] - the number of PMU events that are
|
|
* to be monitored as specified by the user. The value should be
|
|
* between 1-4 events at a time.
|
|
* @param pmuEvent1 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 1
|
|
* @param eventRate1 UINT32 [in] - sampling rate of counter 1. The rate is
|
|
* the number of events before a sample taken. If 0 is specified, the
|
|
* the full counter value (0xFFFFFFFF) is used. The rate must not be
|
|
* greater than the full counter value.
|
|
* @param pmuEvent2 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 2
|
|
* @param eventRate2 UINT32 [in] - sampling rate of counter 2. The rate is
|
|
* the number of events before a sample taken. If 0 is specified, the
|
|
* full counter value (0xFFFFFFFF) is used. The rate must not be
|
|
* greater than the full counter value.
|
|
* @param pmuEvent3 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 3
|
|
* @param eventRate3 UINT32 [in] - sampling rate of counter 3. The rate is
|
|
* the number of events before a sample taken. If 0 is specified, the
|
|
* full counter value (0xFFFFFFFF) is used. The rate must not be
|
|
* greater than the full counter value.
|
|
* @param pmuEvent4 @ref IxPerfProfAccXscalePmuEvent [in] - the specific PMU
|
|
* event to be monitored by counter 4
|
|
* @param eventRate4 UINT32 [in] - sampling rate of counter 4. The rate is
|
|
* the number of events before a sample taken. If 0 is specified, the
|
|
* full counter value (0xFFFFFFFF) is used. The rate must not be
|
|
* greater than the full counter value.
|
|
*
|
|
* Starts the event based sampling to determine the frequency with
|
|
* which events are being executed. The sampling rate is the number of events,
|
|
* as specified by the user, before a counter overflow interrupt is
|
|
* generated. A sample is taken at each counter overflow interrupt. At each
|
|
* sample,the value of the program counter determines the corresponding
|
|
* location in the code. Each of these occurrences are recorded to determine
|
|
* the frequency with which the Xscale code in each event is executed. This API
|
|
* has to be called before ixPerfProfAccXscalePmuEventSampStop can be called.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS if event based sampling is started
|
|
* successfully
|
|
* - IX_PERFPROF_ACC_STATUS_FAIL if unable to start the sampling
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_NUM_INVALID if the number of events
|
|
* specified is out of the valid range
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_EVENT_INVALID if the value of the
|
|
* PMU event specified does not exist
|
|
* - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
|
|
* running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXscalePmuEventSampStart(
|
|
UINT32 numEvents,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent1,
|
|
UINT32 eventRate1,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent2,
|
|
UINT32 eventRate2,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent3,
|
|
UINT32 eventRate3,
|
|
IxPerfProfAccXscalePmuEvent pmuEvent4,
|
|
UINT32 eventRate4);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuEventSampStop(
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile1,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile2,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile3,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile4)
|
|
*
|
|
* @brief Stops the event based sampling
|
|
*
|
|
* @param *eventProfile1 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
|
|
* pointer to the array of profiles for each program counter value;
|
|
* the user should set the size of the array to
|
|
* IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
|
|
* users's responsibility to allocate memory for this pointer.
|
|
* @param *eventProfile2 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
|
|
* pointer to the array of profiles for each program counter value;
|
|
* the user should set the size of the array to
|
|
* IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
|
|
* users's responsibility to allocate memory for this pointer.
|
|
* @param *eventProfile3 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
|
|
* pointer to the array of profiles for each program counter value;
|
|
* the user should set the size of the array to
|
|
* IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
|
|
* users's responsibility to allocate memory for this pointer.
|
|
* @param *eventProfile4 @ref IxPerfProfAccXscalePmuSamplePcProfile [out] -
|
|
* pointer to the array of profiles for each program counter value;
|
|
* the user should set the size of the array to
|
|
* IX_PERFPROF_ACC_XSCALE_PMU_MAX_PROFILE_SAMPLES. It is the
|
|
* users's responsibility to allocate memory for this pointer.
|
|
*
|
|
* This API stops the event based sampling. The results are stored in the
|
|
* pointers allocated by the user. It can only be called once
|
|
* ixPerfProfAccEventSampStart has been called.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS if event based sampling is stopped
|
|
* successfully
|
|
* - IX_PERFPROF_ACC_STATUS_XSCALE_PMU_START_NOT_CALLED if
|
|
* ixPerfProfAccEventSampStart not called first.
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXscalePmuEventSampStop(
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile1,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile2,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile3,
|
|
IxPerfProfAccXscalePmuSamplePcProfile *eventProfile4);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuResultsGet(IxPerfProfAccXscalePmuResults *results)
|
|
*
|
|
* @brief Reads the current value of the counters and their overflow
|
|
*
|
|
* @param *results @ref IxPerfProfAccXscalePmuResults [out] - pointer to the
|
|
results struct. It is the user's responsibility to allocate memory
|
|
for this pointer
|
|
*
|
|
* This API reads the value of all four event counters and the clock counter,
|
|
* and the associated overflows. It does not give results associated with
|
|
* sampling, i.e. PC and their frequencies. This API can be called at any time
|
|
* once a process has been started. If it is called before a process has started
|
|
* the user should be aware that the values it contains are default values and
|
|
* might be meaningless. The values of the counters are stored in the pointer
|
|
* allocated by the client.
|
|
*
|
|
* @return - none
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC void
|
|
ixPerfProfAccXscalePmuResultsGet(IxPerfProfAccXscalePmuResults *results);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccBusPmuStart(
|
|
IxPerfProfAccBusPmuMode mode,
|
|
IxPerfProfAccBusPmuEventCounters1 pecEvent1,
|
|
IxPerfProfAccBusPmuEventCounters2 pecEvent2,
|
|
IxPerfProfAccBusPmuEventCounters3 pecEvent3,
|
|
IxPerfProfAccBusPmuEventCounters4 pecEvent4,
|
|
IxPerfProfAccBusPmuEventCounters5 pecEvent5,
|
|
IxPerfProfAccBusPmuEventCounters6 pecEvent6,
|
|
IxPerfProfAccBusPmuEventCounters7 pecEvent7)
|
|
* @brief Initializes all the counters and selects events to be monitored.
|
|
*
|
|
* Function initializes all the counters and assigns the events associated
|
|
* with the counters. Users send in the mode and events they want to count.
|
|
* This API verifies if the combination chosen is appropriate
|
|
* and sets all the registers accordingly. Selecting HALT mode will result
|
|
* in an error. User should use ixPerfProfAccBusPmuStop() to HALT.
|
|
*
|
|
*
|
|
* @param mode @ref IxPerfProfAccStateBusPmuMode [in] - Mode selection.
|
|
* @param pecEvent1 @ref IxPerfProfAccBusPmuEventCounters1 [in] - Event for PEC1.
|
|
* @param pecEvent2 @ref IxPerfProfAccBusPmuEventCounters2 [in] - Event for PEC2.
|
|
* @param pecEvent3 @ref IxPerfProfAccBusPmuEventCounters3 [in] - Event for PEC3.
|
|
* @param pecEvent4 @ref IxPerfProfAccBusPmuEventCounters4 [in] - Event for PEC4.
|
|
* @param pecEvent5 @ref IxPerfProfAccBusPmuEventCounters5 [in] - Event for PEC5.
|
|
* @param pecEvent6 @ref IxPerfProfAccBusPmuEventCounters6 [in] - Event for PEC6.
|
|
* @param pecEvent7 @ref IxPerfProfAccBusPmuEventCounters7 [in] - Event for PEC7.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS - Initialization executed
|
|
* successfully.
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_MODE_ERROR - Error in selection of
|
|
* mode. Only NORTH, SOUTH and SDRAM modes are allowed.
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC1_ERROR - Error in selection of
|
|
* event for PEC1
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC2_ERROR - Error in selection of
|
|
* event for PEC2
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC3_ERROR - Error in selection of
|
|
* event for PEC3
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC4_ERROR - Error in selection of
|
|
* event for PEC4
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC5_ERROR - Error in selection of
|
|
* event for PEC5
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC6_ERROR - Error in selection of
|
|
* event for PEC6
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_PEC7_ERROR - Error in selection of
|
|
* event for PEC7
|
|
* - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility
|
|
* is running
|
|
* - IX_PERFPROF_ACC_STATUS_FAIL - Failed to start because interrupt
|
|
* service routine fails to bind.
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
**/
|
|
PUBLIC
|
|
IxPerfProfAccStatus ixPerfProfAccBusPmuStart (
|
|
IxPerfProfAccBusPmuMode mode,
|
|
IxPerfProfAccBusPmuEventCounters1 pecEvent1,
|
|
IxPerfProfAccBusPmuEventCounters2 pecEvent2,
|
|
IxPerfProfAccBusPmuEventCounters3 pecEvent3,
|
|
IxPerfProfAccBusPmuEventCounters4 pecEvent4,
|
|
IxPerfProfAccBusPmuEventCounters5 pecEvent5,
|
|
IxPerfProfAccBusPmuEventCounters6 pecEvent6,
|
|
IxPerfProfAccBusPmuEventCounters7 pecEvent7);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccBusPmuStop(void)
|
|
* @brief Stops all counters.
|
|
*
|
|
* This function stops all the PECs by setting the halt bit in the ESR.
|
|
*
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS - Counters successfully halted.
|
|
* - IX_PERFPROF_ACC_STATUS_FAIL - Counters could'nt be halted.
|
|
* - IX_PERFPROF_ACC_STATUS_BUS_PMU_START_NOT_CALLED - the
|
|
* ixPerfProfAccBusPmuStart() function is not called.
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
**/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccBusPmuStop (void);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccBusPmuResultsGet (
|
|
IxPerfProfAccBusPmuResults *busPmuResults)
|
|
* @brief Gets values of all counters
|
|
*
|
|
* This function is responsible for getting all the counter values from the
|
|
* lower API and putting it into an array for the user.
|
|
*
|
|
* @param *busPmuResults @ref IxPerfProfAccBusPmuResults [out]
|
|
* - Pointer to a structure of arrays to store all counter values.
|
|
*
|
|
* @return none
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
**/
|
|
PUBLIC void
|
|
ixPerfProfAccBusPmuResultsGet (IxPerfProfAccBusPmuResults *BusPmuResults);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccBusPmuPMSRGet (
|
|
UINT32 *pmsrValue)
|
|
* @brief Get values of PMSR
|
|
*
|
|
* This API gets the Previous Master Slave Register
|
|
* value and returns it to the calling function. This value indicates
|
|
* which master or slave accessed the north, south bus or sdram last.
|
|
* The value returned by this function is a 32 bit value and is read
|
|
* from location of an offset 0x0024 of the base value.
|
|
*
|
|
* The PMSR value returned indicate the following:
|
|
* <pre>
|
|
*
|
|
* *************************************************************************************
|
|
* * Bit * Name * Description *
|
|
* * *
|
|
* *************************************************************************************
|
|
* * [31:18] *Reserved* *
|
|
* *************************************************************************************
|
|
* * [17:12] * PSS * Indicates which of the slaves on *
|
|
* * * * ARBS was previously *
|
|
* * * * accessed by the AHBS. *
|
|
* * * * [000001] Expansion Bus *
|
|
* * * * [000010] SDRAM Controller *
|
|
* * * * [000100] PCI *
|
|
* * * * [001000] Queue Manager *
|
|
* * * * [010000] AHB-APB Bridge *
|
|
* * * * [100000] Reserved *
|
|
* *************************************************************************************
|
|
* * [11:8] * PSN * Indicates which of the Slaves on *
|
|
* * * * ARBN was previously *
|
|
* * * * accessed the AHBN. *
|
|
* * * * [0001] SDRAM Controller *
|
|
* * * * [0010] AHB-AHB Bridge *
|
|
* * * * [0100] Reserved *
|
|
* * * * [1000] Reserved *
|
|
* *************************************************************************************
|
|
* * [7:4] * PMS * Indicates which of the Masters on *
|
|
* * * * ARBS was previously *
|
|
* * * * accessing the AHBS. *
|
|
* * * * [0001] Gasket *
|
|
* * * * [0010] AHB-AHB Bridge *
|
|
* * * * [0100] PCI *
|
|
* * * * [1000] APB *
|
|
* *************************************************************************************
|
|
* * [3:0] * PMN * Indicates which of the Masters on *
|
|
* * * * ARBN was previously *
|
|
* * * * accessing the AHBN. *
|
|
* * * * [0001] NPEA *
|
|
* * * * [0010] NPEB *
|
|
* * * * [0100] NPEC *
|
|
* * * * [1000] Reserved *
|
|
* *************************************************************************************
|
|
* </pre>
|
|
*
|
|
* @param *pmsrValue UINT32 [out] - Pointer to return PMSR value. Users need to
|
|
* allocate storage for psmrValue.
|
|
*
|
|
* @return none
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
**/
|
|
PUBLIC void
|
|
ixPerfProfAccBusPmuPMSRGet (
|
|
UINT32 *pmsrValue);
|
|
|
|
|
|
/**
|
|
* The APIs below are specifically used for Xcycle module.
|
|
**/
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXcycleBaselineRun (
|
|
UINT32 *numBaselineCycle)
|
|
*
|
|
* @brief Perform baseline for Xcycle
|
|
*
|
|
* @param *numBaselineCycle UINT32 [out] - pointer to baseline value after
|
|
* calibration. Calling function are responsible for
|
|
* allocating memory space for this pointer.
|
|
*
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
* This function MUST be run before the Xcycle tool can be used. This
|
|
* function must be run immediately when the OS boots up with no other
|
|
* addition programs running.
|
|
* Addition note : This API will measure the time needed to perform
|
|
* a fix amount of CPU instructions (~ 1 second worth of loops) as a
|
|
* highest priority task and with interrupt disabled. The time measured
|
|
* is known as the baseline - interpreted as the shortest time
|
|
* needed to complete the amount of CPU instructions. The baseline is
|
|
* returned as unit of time in 66Mhz clock tick.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS - successful run, result is returned
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_SET_FAIL - failed to change
|
|
* task priority
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_RESTORE_FAIL - failed to
|
|
* restore task priority
|
|
* - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility
|
|
* is running
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS - Xcycle
|
|
* tool has already started
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXcycleBaselineRun(
|
|
UINT32 *numBaselineCycle);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXcycleStart(
|
|
UINT32 numMeasurementsRequested);
|
|
*
|
|
* @brief Start the measurement
|
|
*
|
|
* @param numMeasurementsRequested UINT32 [in] - number of measurements
|
|
* to perform. Value can be 0 to
|
|
* IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS.
|
|
* 0 indicate continuous measurement.
|
|
*
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
*
|
|
* Start the measurements immediately.
|
|
* numMeasurementsRequested specifies number of measurements to run.
|
|
* If numMeasurementsRequested is set to 0, the measurement will
|
|
* be performed continuously until IxPerfProfAccXcycleStop()
|
|
* is called.
|
|
* It is estimated that 1 measurement takes approximately 1 second during
|
|
* low CPU utilization, therefore 128 measurement takes approximately 128 sec.
|
|
* When CPU utilization is high, the measurement will take longer.
|
|
* This function spawn a task the perform the measurement and returns.
|
|
* The measurement may continue even if this function returns.
|
|
*
|
|
* IMPORTANT: Under heavy CPU utilization, the task spawn by this
|
|
* function may starve and fail to respond to stop command. User
|
|
* may need to kill the task manually in this case.
|
|
*
|
|
* There are only IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS
|
|
* storage available so storing is wrapped around if measurements are
|
|
* more than IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS.
|
|
*
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS - successful start, a thread is created
|
|
* in the background to perform measurement.
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_PRIORITY_SET_FAIL - failed to set
|
|
* task priority
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_THREAD_CREATE_FAIL - failed to create
|
|
* thread to perform measurement.
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_NO_BASELINE - baseline is not available
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_REQUEST_OUT_OF_RANGE -
|
|
* value is larger than IX_PERFPROF_ACC_XCYCLE_MAX_NUM_OF_MEASUREMENTS
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS - Xcycle tool
|
|
* has already started
|
|
* - IX_PERFPROF_ACC_STATUS_ANOTHER_UTIL_IN_PROGRESS - another utility is
|
|
* running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXcycleStart (
|
|
UINT32 numMeasurementsRequested);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXcycleStop(void);
|
|
*
|
|
* @brief Stop the Xcycle measurement
|
|
*
|
|
* @param None
|
|
*
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
* Stop Xcycle measurements immediately. If the measurements have stopped
|
|
* or not started, return IX_PERFPROF_STATUS_XCYCLE_MEASUREMENT_NOT_RUNNING.
|
|
* Note: This function does not stop measurement cold. The measurement thread
|
|
* may need a few seconds to complete the last measurement. User needs to use
|
|
* ixPerfProfAccXcycleInProgress() to determine if measurement is indeed
|
|
* completed.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS - successful measurement is stopped
|
|
* - IX_PERFPROF_STATUS_XCYCLE_MEASUREMENT_NOT_RUNNING - no measurement running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXcycleStop(void);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXcycleResultsGet(
|
|
IxPerfProfAccXcycleResults *xcycleResult )
|
|
*
|
|
* @brief Get the results of Xcycle measurement
|
|
*
|
|
* @param *xcycleResult @ref IxPerfProfAccXcycleResults [out] - Pointer to
|
|
* results of last measurements. Calling function are
|
|
* responsible for allocating memory space for this pointer.
|
|
*
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
* Retrieve the results of last measurement. User should use
|
|
* ixPerfProfAccXcycleInProgress() to check if measurement is completed
|
|
* before getting the results.
|
|
*
|
|
* @return
|
|
* - IX_PERFPROF_ACC_STATUS_SUCCESS - successful
|
|
* - IX_PERFPROF_ACC_STATUS_FAIL - result is not complete.
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_NO_BASELINE - baseline is performed
|
|
* - IX_PERFPROF_ACC_STATUS_XCYCLE_MEASUREMENT_IN_PROGRESS - Xcycle
|
|
* tool is still running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC IxPerfProfAccStatus
|
|
ixPerfProfAccXcycleResultsGet (
|
|
IxPerfProfAccXcycleResults *xcycleResult);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXcycleInProgress (void)
|
|
*
|
|
* @brief Check if Xcycle is running
|
|
*
|
|
* @param None
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
* Check if Xcycle measuring task is running.
|
|
*
|
|
* @return
|
|
* - TRUE - Xcycle is running
|
|
* - FALSE - Xcycle is not running
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
PUBLIC BOOL
|
|
ixPerfProfAccXcycleInProgress(void);
|
|
|
|
#ifdef __linux
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuTimeSampCreateProcFile
|
|
*
|
|
* @brief Enables proc file to call module function
|
|
*
|
|
* @param None
|
|
*
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
* This function is declared globally to enable /proc directory system to call
|
|
* and execute the function when the registered file is called. This function is not meant to
|
|
* be called by the user.
|
|
*
|
|
* @return
|
|
* - Length of data written to file.
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
int
|
|
ixPerfProfAccXscalePmuTimeSampCreateProcFile (char *buf, char **start, off_t offset,
|
|
int count, int *eof, void *data);
|
|
|
|
/**
|
|
* @ingroup IxPerfProfAcc
|
|
*
|
|
* @fn ixPerfProfAccXscalePmuEventSampCreateProcFile
|
|
*
|
|
* @brief Enables proc file to call module function
|
|
*
|
|
* @param None
|
|
*
|
|
* Global Data :
|
|
* - None.
|
|
*
|
|
* This function is declared globally to enable /proc directory system to call
|
|
* and execute the function when the registered file is called. This function is not meant to
|
|
* be called by the user.
|
|
*
|
|
* @return
|
|
* - Length of data written to file.
|
|
*
|
|
* @li Reentrant : no
|
|
* @li ISR Callable : no
|
|
*
|
|
*/
|
|
int
|
|
ixPerfProfAccXscalePmuEventSampCreateProcFile (char *buf, char **start, off_t offset,
|
|
int count, int *eof, void *data);
|
|
|
|
|
|
#endif /* ifdef __linux */
|
|
|
|
#endif /* ndef IXPERFPROFACC_H */
|
|
|
|
/**
|
|
*@} defgroup IxPerfProfAcc
|
|
*/
|
|
|
|
|