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 5, 2019 at 10:03 AM Will Deacon <will.deacon@xxxxxxx> wrote:
>
> 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?

I double check with our IC design team. My previous answer is wrong.
Only one DPCR1. It will impact all event EVENT_AXI_READ and  EVENT_AXI_WRITE.

Thank means just choose one config1 for event EVENT_AXI_READ or EVENT_AXI_WRITE

best regards
Frank Li

>
> 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