ARCv2: perf: Support sampling events using overflow interrupts
authorAlexey Brodkin <abrodkin@synopsys.com>
Mon, 24 Aug 2015 10:48:06 +0000 (13:48 +0300)
committerVineet Gupta <vgupta@synopsys.com>
Thu, 27 Aug 2015 09:27:43 +0000 (14:57 +0530)
commit36481cf7fbcc666699d54cb267088d2b415ff164
tree165f1f7529f38786e7523a33395bf6da33beacc9
parent1fe8bfa5ff3b2e97f26add89b20768fb7c4188c0
ARCv2: perf: Support sampling events using overflow interrupts

In times of ARC 700 performance counters didn't have support of
interrupt an so for ARC we only had support of non-sampling events.

Put simply only "perf stat" was functional.

Now with ARC HS we have support of interrupts in performance counters
which this change introduces support of.

ARC performance counters act in the following way in regard of
interrupts generation.
 [1] A counter counts starting from value set in PCT_COUNT register pair
 [2] Once counter reaches value set in PCT_INT_CNT interrupt is raised

Basic setup look like this:
 [1] PCT_COUNT = 0;
 [2] PCT_INT_CNT = __limit_value__;
 [3] Enable interrupts for that counter and let it run
 [4] Let counter reach its limit
 [5] Handle interrupt when it happens

Note that PCT HW block is build in CPU core and so ints interrupt
line (which is basically OR of all counters IRQs) is wired directly to
top-level IRQC. That means do de-assert PCT interrupt it's required to
reset IRQs from all counters that have reached their limit values.

Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/include/asm/perf_event.h
arch/arc/kernel/perf_event.c