[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250826141235.000028b8@huawei.com>
Date: Tue, 26 Aug 2025 14:12:35 +0100
From: Jonathan Cameron <Jonathan.Cameron@...wei.com>
To: Yushan Wang <wangyushan12@...wei.com>
CC: <will@...nel.org>, <mark.rutland@....com>,
<linux-arm-kernel@...ts.infradead.org>, <linux-kernel@...r.kernel.org>,
<robin.murphy@....com>, <yangyicong@...wei.com>, <liuyonglong@...wei.com>,
<wanghuiqiang@...wei.com>, <prime.zeng@...ilicon.com>,
<hejunhao3@...artners.com>
Subject: Re: [PATCH v2 7/9] drivers/perf: hisi: Add support for L3C PMU v3
On Thu, 21 Aug 2025 21:50:47 +0800
Yushan Wang <wangyushan12@...wei.com> wrote:
> From: Yicong Yang <yangyicong@...ilicon.com>
>
> This patch adds support for L3C PMU v3. The v3 L3C PMU supports
> an extended events space which can be controlled in up to 2 extra
> address spaces with separate overflow interrupts. The layout
> of the control/event registers are kept the same. The extended events
> with original ones together cover the monitoring job of all transactions
> on L3C.
>
> The extended events is specified with `ext=[1|2]` option for the
> driver to distinguish, like below:
>
> perf stat -e hisi_sccl0_l3c0_0/event=<event_id>,ext=1/
>
> Currently only event option using config bit [7, 0]. There's
> still plenty unused space. Make ext using config [16, 17] and
> reserve bit [15, 8] for event option for future extension.
>
> With the capability of extra counters, number of counters for HiSilicon
> uncore PMU could reach up to 24, the usedmap is extended accordingly.
>
> The hw_perf_event::event_base is initialized to the base MMIO
> address of the event and will be used for later control,
> overflow handling and counts readout.
>
> We still make use of the Uncore PMU framework for handling the
> events and interrupt migration on CPU hotplug. The framework's
> cpuhp callback will handle the event migration and interrupt
> migration of orginial event, if PMU supports extended events
> then the interrupt of extended events is migrated to the same
> CPU choosed by the framework.
>
> A new HID of HISI0215 is used for this version of L3C PMU.
>
> Signed-off-by: Yicong Yang <yangyicong@...ilicon.com>
> Co-developed-by: Yushan Wang <wangyushan12@...wei.com>
> Signed-off-by: Yushan Wang <wangyushan12@...wei.com>
One minor formatting thing I missed in internal reviews. With that
tidied up (check other patches for this as well)
Acked-by: Jonathan Cameron <jonathan.cameron@...wei.com>
>
> static void hisi_l3c_pmu_stop_counters(struct hisi_pmu *l3c_pmu)
> {
> + struct hisi_l3c_pmu *hisi_l3c_pmu = to_hisi_l3c_pmu(l3c_pmu);
> + unsigned long *used_mask = l3c_pmu->pmu_events.used_mask;
> + unsigned long bit = find_first_bit(used_mask, l3c_pmu->num_counters);
> u32 val;
> + int i;
>
> /*
> - * Clear perf_enable bit in L3C_PERF_CTRL register to stop counting
> - * for all enabled counters.
> + * Check if any counter belongs to the normal range (instead of ext
> + * range). If so, stop it.
> */
> - val = readl(l3c_pmu->base + L3C_PERF_CTRL);
> - val &= ~(L3C_PERF_CTRL_EN);
> - writel(val, l3c_pmu->base + L3C_PERF_CTRL);
> + if (bit < L3C_NR_COUNTERS) {
> + val = readl(l3c_pmu->base + L3C_PERF_CTRL);
> + val &= ~(L3C_PERF_CTRL_EN);
Brackets not adding anything here and inconsistently applied.
Please clean these up.
> + writel(val, l3c_pmu->base + L3C_PERF_CTRL);
> + }
> +
> + /* If not, do stop it on ext ranges. */
> + for (i = 0; i < hisi_l3c_pmu->ext_num; i++) {
> + bit = find_next_bit(used_mask, L3C_NR_COUNTERS * (i + 2),
> + L3C_NR_COUNTERS * (i + 1));
> + if (L3C_CNTR_EXT(bit) != i + 1)
> + continue;
> +
> + val = readl(hisi_l3c_pmu->ext_base[i] + L3C_PERF_CTRL);
> + val &= ~L3C_PERF_CTRL_EN;
> + writel(val, hisi_l3c_pmu->ext_base[i] + L3C_PERF_CTRL);
> + }
> }
Powered by blists - more mailing lists