Re: [PATCH V4 2/4] drivers/perf: imx_ddr: Add ddr performance counter support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 05, 2019 at 09:58:38AM -0500, Zhi Li wrote:
> On Fri, Apr 5, 2019 at 9:38 AM Will Deacon <will.deacon@xxxxxxx> wrote:
> > On Fri, Apr 05, 2019 at 09:34:38AM -0500, Zhi Li wrote:
> > > On Thu, Apr 4, 2019 at 6:17 AM Will Deacon <will.deacon@xxxxxxx> wrote:
> > > > On Fri, Feb 15, 2019 at 06:03:11PM +0000, Frank Li wrote:
> > > > > Add ddr performance monitor support for iMX8QXP
> > > > >
> > > > > There are 4 counters for ddr perfomance events.
> > > > > counter 0 is dedicated for cycles.
> > > > > you choose any up to 3 no cycles events.
> > > > >
> > > > > for example:
> > > > >
> > > > > perf stat -a -e ddr0/read-access/,ddr0/write-access/,ddr0/precharge/ ls
> > > > > perf stat -a -e ddr0/cycles/,ddr0/read-access/,ddr0/write-access/ ls
> > > >
> > > > Could you elaborate a bit on DDR_CAP_AXI_ID, please? Specifically, how
> 
> Only imx845 have AXID filter capability now.
> 
> > > > does the COUNTER_DPCR1 register work and what happens if I specify two
> > > > simultaneous events with different values in config1? I'm a little wary
> 
> There are difference match register for each event.
> 1. Read event with config 1 A
> 2. Read event with config 1 B
> 
> 1 will show read count with filter A
> 2 will show read count with filter B.

Thanks, that makes sense, but I can't see how that corresponds to the code
in the patch:

+static void ddr_perf_event_start(struct perf_event *event, int flags)
+{
+	struct ddr_pmu *pmu = to_ddr_pmu(event->pmu);
+	struct hw_perf_event *hwc = &event->hw;
+	int counter = hwc->idx;
+
+	if (pmu->flags & DDR_CAP_AXI_ID) {
+		if (event->attr.config == EVENT_AXI_READ ||
+		    event->attr.config == EVENT_AXI_WRITE) {
+			int val = event->attr.config1;
+
+			writel(val, pmu->base + COUNTER_DPCR1);
+		}
+	}
+
+	local64_set(&hwc->prev_count, 0);
+
+	ddr_perf_event_enable(pmu, event->attr.config, counter, true);

ddr_perf_event_enable() does what you'd expect, and uses hwc->idx to
allocate a counter, but the code before it just always writes to DPCR1.

What am I missing?

Will



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux