62 if (cycleCode == PERF_HW_INVALID_EVENT_TYPE) {
69 for (i = 0; i < eventNum; i++) {
72 if (!VALID_PERIOD(event->period)) {
73 PRINT_ERR(
"Config period: 0x%x invalid, should be in (%#x, %#x)\n", event->period,
74 PERIOD_CALC(CCNT_PERIOD_UPPER_BOUND), PERIOD_CALC(CCNT_PERIOD_LOWER_BOUND));
79 UINT32 eventId = armPmu->
mapEvent(event->eventId, PERF_EVENT_TO_CODE);
80 if (eventId == PERF_HW_INVALID_EVENT_TYPE) {
83 event->eventId = eventId;
86 if (event->eventId == cycleCode) {
87 event->counter = cycleCounter;
89 event->counter = counter;
93 if (counter >= maxCounter) {
94 PRINT_ERR(
"max events: %u excluding cycle event\n", maxCounter - 1);
98 PRINT_DEBUG(
"Perf Config %u eventId = 0x%x, counter = 0x%x, period = 0x%x\n", i, event->eventId, event->counter,
117 for (i = 0; i < eventNum; i++) {
121 event->count[cpuid] = 0;
139 for (i = 0; i < eventNum; i++) {
142 PRINT_DEBUG(
"perf stop readCnt value = 0x%x\n", value);
143 event->count[cpuid] += value;
146 UINT32 eventId = armPmu->
mapEvent(event->eventId, PERF_CODE_TO_EVENT);
148 PRINT_DEBUG(
"perf stop is cycle\n");
149 event->count[cpuid] =
event->count[cpuid] << 6;
151 PRINT_DEBUG(
"perf stop eventCount[0x%x] : [%s] = %llu\n", event->eventId,
g_eventName[eventId],
152 event->count[cpuid]);
UINT32 OsGetPmuMaxCounter(VOID)
UINT32 OsGetPmuCounter0(VOID)
UINT32 OsGetPmuCycleCounter(VOID)
@ PERF_COUNT_HW_BRANCH_INSTRUCTIONS
@ PERF_COUNT_HW_DCACHE_MISSES
@ PERF_COUNT_HW_DCACHE_REFERENCES
@ PERF_COUNT_HW_BRANCH_MISSES
@ PERF_COUNT_HW_ICACHE_MISSES
@ PERF_COUNT_HW_ICACHE_REFERENCES
@ PERF_COUNT_HW_CPU_CYCLES
@ PERF_COUNT_HW_INSTRUCTIONS
STATIC INLINE UINT32 ArchCurrCpuid(VOID)
STATIC UINT32 OsPerfHwConfig(VOID)
UINT32 OsPerfHwInit(HwPmu *hwPmu)
STATIC UINT32 OsPerfHwStart(VOID)
STATIC UINT32 OsPerfHwStop(VOID)
STATIC CHAR * g_eventName[PERF_COUNT_HW_MAX]
STATIC CHAR * OsPerfGetEventName(Event *event)
Pmu * OsPerfPmuGet(UINT32 type)
UINT32 OsPerfPmuRegister(Pmu *pmu)
UINT32(* mapEvent)(UINT32 eventType, BOOL reverse)
UINTPTR(* readCnt)(Event *event)
VOID(* setPeriod)(Event *event)
VOID(* enable)(Event *event)
Event per[PERF_MAX_EVENT]
CHAR *(* getName)(Event *event)