|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* Copyright (c) 2010 University of Tennessee
|
|
Packit |
577717 |
* Contributed by Vince Weaver <vweaver1@utk.edu>
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
Packit |
577717 |
* of this software and associated documentation files (the "Software"), to deal
|
|
Packit |
577717 |
* in the Software without restriction, including without limitation the rights
|
|
Packit |
577717 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
Packit |
577717 |
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
Packit |
577717 |
* subject to the following conditions:
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* The above copyright notice and this permission notice shall be included in all
|
|
Packit |
577717 |
* copies or substantial portions of the Software.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
Packit |
577717 |
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
Packit |
577717 |
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
Packit |
577717 |
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
Packit |
577717 |
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
Packit |
577717 |
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* This file is part of libpfm, a performance monitoring support library for
|
|
Packit |
577717 |
* applications on Linux.
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* the various event names are the same as those given in the
|
|
Packit |
577717 |
* file linux-2.6/arch/arm/kernel/perf_event.c
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* Cortex A8 Event Table
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
static const arm_entry_t arm_cortex_a8_pe []={
|
|
Packit |
577717 |
{.name = "PMNC_SW_INCR",
|
|
Packit |
577717 |
.code = 0x00,
|
|
Packit |
577717 |
.desc = "Incremented by writes to the Software Increment Register"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "IFETCH_MISS",
|
|
Packit |
577717 |
.code = 0x01,
|
|
Packit |
577717 |
.desc = "Instruction fetches that cause lowest-level cache miss"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "ITLB_MISS",
|
|
Packit |
577717 |
.code = 0x02,
|
|
Packit |
577717 |
.desc = "Instruction fetches that cause lowest-level TLB miss"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "DCACHE_REFILL",
|
|
Packit |
577717 |
.code = 0x03,
|
|
Packit |
577717 |
.desc = "Data read or writes that cause lowest-level cache miss"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "DCACHE_ACCESS",
|
|
Packit |
577717 |
.code = 0x04,
|
|
Packit |
577717 |
.desc = "Data read or writes that cause lowest-level cache access"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "DTLB_REFILL",
|
|
Packit |
577717 |
.code = 0x05,
|
|
Packit |
577717 |
.desc = "Data read or writes that cause lowest-level TLB refill"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "DREAD",
|
|
Packit |
577717 |
.code = 0x06,
|
|
Packit |
577717 |
.desc = "Data read architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "DWRITE",
|
|
Packit |
577717 |
.code = 0x07,
|
|
Packit |
577717 |
.desc = "Data write architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "INSTR_EXECUTED",
|
|
Packit |
577717 |
.code = 0x08,
|
|
Packit |
577717 |
.desc = "Instructions architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "EXC_TAKEN",
|
|
Packit |
577717 |
.code = 0x09,
|
|
Packit |
577717 |
.desc = "Counts each exception taken"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "EXC_EXECUTED",
|
|
Packit |
577717 |
.code = 0x0a,
|
|
Packit |
577717 |
.desc = "Exception returns architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CID_WRITE",
|
|
Packit |
577717 |
.code = 0x0b,
|
|
Packit |
577717 |
.desc = "Instruction writes to Context ID Register, architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_WRITE",
|
|
Packit |
577717 |
.code = 0x0c,
|
|
Packit |
577717 |
.desc = "Software change of PC. Equivalent to branches"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_IMM_BRANCH",
|
|
Packit |
577717 |
.code = 0x0d,
|
|
Packit |
577717 |
.desc = "Immediate branches architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_PROC_RETURN",
|
|
Packit |
577717 |
.code = 0x0e,
|
|
Packit |
577717 |
.desc = "Procedure returns architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "UNALIGNED_ACCESS",
|
|
Packit |
577717 |
.code = 0x0f,
|
|
Packit |
577717 |
.desc = "Unaligned accesses architecturally executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_BRANCH_MIS_PRED",
|
|
Packit |
577717 |
.code = 0x10,
|
|
Packit |
577717 |
.desc = "Branches mispredicted or not predicted"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CLOCK_CYCLES", /* this isn't in the Cortex-A8 tech doc */
|
|
Packit |
577717 |
.code = 0x11, /* but is in linux kernel */
|
|
Packit |
577717 |
.desc = "Clock cycles"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_BRANCH_MIS_USED",
|
|
Packit |
577717 |
.code = 0x12,
|
|
Packit |
577717 |
.desc = "Branches that could have been predicted"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "WRITE_BUFFER_FULL",
|
|
Packit |
577717 |
.code = 0x40,
|
|
Packit |
577717 |
.desc = "Cycles Write buffer full"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L2_STORE_MERGED",
|
|
Packit |
577717 |
.code = 0x41,
|
|
Packit |
577717 |
.desc = "Stores merged in L2"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L2_STORE_BUFF",
|
|
Packit |
577717 |
.code = 0x42,
|
|
Packit |
577717 |
.desc = "Bufferable store transactions to L2"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L2_ACCESS",
|
|
Packit |
577717 |
.code = 0x43,
|
|
Packit |
577717 |
.desc = "Accesses to L2 cache"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L2_CACHE_MISS",
|
|
Packit |
577717 |
.code = 0x44,
|
|
Packit |
577717 |
.desc = "L2 cache misses"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "AXI_READ_CYCLES",
|
|
Packit |
577717 |
.code = 0x45,
|
|
Packit |
577717 |
.desc = "Cycles with active AXI read channel transactions"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "AXI_WRITE_CYCLES",
|
|
Packit |
577717 |
.code = 0x46,
|
|
Packit |
577717 |
.desc = "Cycles with Active AXI write channel transactions"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "MEMORY_REPLAY",
|
|
Packit |
577717 |
.code = 0x47,
|
|
Packit |
577717 |
.desc = "Memory replay events"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "UNALIGNED_ACCESS_REPLAY",
|
|
Packit |
577717 |
.code = 0x48,
|
|
Packit |
577717 |
.desc = "Unaligned accesses causing replays"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L1_DATA_MISS",
|
|
Packit |
577717 |
.code = 0x49,
|
|
Packit |
577717 |
.desc = "L1 data misses due to hashing algorithm"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L1_INST_MISS",
|
|
Packit |
577717 |
.code = 0x4a,
|
|
Packit |
577717 |
.desc = "L1 instruction misses due to hashing algorithm"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L1_DATA_COLORING",
|
|
Packit |
577717 |
.code = 0x4b,
|
|
Packit |
577717 |
.desc = "L1 data access where page color alias occurs"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L1_NEON_DATA",
|
|
Packit |
577717 |
.code = 0x4c,
|
|
Packit |
577717 |
.desc = "NEON accesses that hit in L1 cache"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L1_NEON_CACH_DATA",
|
|
Packit |
577717 |
.code = 0x4d,
|
|
Packit |
577717 |
.desc = "NEON cache accesses for L1 cache"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L2_NEON",
|
|
Packit |
577717 |
.code = 0x4e,
|
|
Packit |
577717 |
.desc = "L2 accesses caused by NEON"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L2_NEON_HIT",
|
|
Packit |
577717 |
.code = 0x4f,
|
|
Packit |
577717 |
.desc = "L2 hits caused by NEON"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "L1_INST",
|
|
Packit |
577717 |
.code = 0x50,
|
|
Packit |
577717 |
.desc = "L1 instruction cache accesses"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_RETURN_MIS_PRED",
|
|
Packit |
577717 |
.code = 0x51,
|
|
Packit |
577717 |
.desc = "Return stack mispredictions"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_BRANCH_FAILED",
|
|
Packit |
577717 |
.code = 0x52,
|
|
Packit |
577717 |
.desc = "Branch prediction failures"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_BRANCH_TAKEN",
|
|
Packit |
577717 |
.code = 0x53,
|
|
Packit |
577717 |
.desc = "Branches predicted taken"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PC_BRANCH_EXECUTED",
|
|
Packit |
577717 |
.code = 0x54,
|
|
Packit |
577717 |
.desc = "Taken branches executed"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "OP_EXECUTED",
|
|
Packit |
577717 |
.code = 0x55,
|
|
Packit |
577717 |
.desc = "Operations executed (includes sub-ops in multi-cycle instructions)"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CYCLES_INST_STALL",
|
|
Packit |
577717 |
.code = 0x56,
|
|
Packit |
577717 |
.desc = "Cycles no instruction is available for issue"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CYCLES_INST",
|
|
Packit |
577717 |
.code = 0x57,
|
|
Packit |
577717 |
.desc = "Number of instructions issued in cycle"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CYCLES_NEON_DATA_STALL",
|
|
Packit |
577717 |
.code = 0x58,
|
|
Packit |
577717 |
.desc = "Cycles stalled waiting on NEON MRC data"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CYCLES_NEON_INST_STALL",
|
|
Packit |
577717 |
.code = 0x59,
|
|
Packit |
577717 |
.desc = "Cycles stalled due to full NEON queues"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "NEON_CYCLES",
|
|
Packit |
577717 |
.code = 0x5a,
|
|
Packit |
577717 |
.desc = "Cycles NEON and integer processors both not idle"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PMU0_EVENTS",
|
|
Packit |
577717 |
.code = 0x70,
|
|
Packit |
577717 |
.desc = "External PMUEXTIN[0] event"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PMU1_EVENTS",
|
|
Packit |
577717 |
.code = 0x71,
|
|
Packit |
577717 |
.desc = "External PMUEXTIN[1] event"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "PMU_EVENTS",
|
|
Packit |
577717 |
.code = 0x72,
|
|
Packit |
577717 |
.desc = "External PMUEXTIN[0] or PMUEXTIN[1] event"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
{.name = "CPU_CYCLES",
|
|
Packit |
577717 |
.code = 0xff,
|
|
Packit |
577717 |
.desc = "CPU cycles"
|
|
Packit |
577717 |
},
|
|
Packit |
577717 |
};
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#define ARM_CORTEX_A8_EVENT_COUNT (sizeof(arm_cortex_a8_pe)/sizeof(arm_entry_t))
|