On Thu, Nov 16, 2023 at 10:24 AM Ji Sheng Teoh <jisheng.teoh@xxxxxxxxxxxxxxxx> wrote: > > This patch adds support for StarFive's StarLink PMU (Performance > Monitor Unit). StarLink PMU integrates one or more CPU cores with > a shared L3 memory system. The PMU supports overflow interrupt, > up to 16 programmable 64bit event counters, and an independent > 64bit cycle counter. StarLink PMU is accessed via MMIO. > > Example Perf stat output: > [root@user]# perf stat -a -e /starfive_starlink_pmu/cycles/ \ > -e /starfive_starlink_pmu/read_miss/ \ > -e /starfive_starlink_pmu/read_hit/ \ > -e /starfive_starlink_pmu/release_request/ \ > -e /starfive_starlink_pmu/write_hit/ \ > -e /starfive_starlink_pmu/write_miss/ \ > -e /starfive_starlink_pmu/write_request/ \ > -e /starfive_starlink_pmu/writeback/ \ > -e /starfive_starlink_pmu/read_request/ \ > -- openssl speed rsa2048 > Doing 2048 bits private rsa's for 10s: 5 2048 bits private RSA's in > 2.84s > Doing 2048 bits public rsa's for 10s: 169 2048 bits public RSA's in > 2.42s > version: 3.0.11 > built on: Tue Sep 19 13:02:31 2023 UTC > options: bn(64,64) > CPUINFO: N/A > sign verify sign/s verify/s > rsa 2048 bits 0.568000s 0.014320s 1.8 69.8 > ///////// > Performance counter stats for 'system wide': > > 649991998 starfive_starlink_pmu/cycles/ > 1009690 starfive_starlink_pmu/read_miss/ > 1079750 starfive_starlink_pmu/read_hit/ > 2089405 starfive_starlink_pmu/release_request/ > 129 starfive_starlink_pmu/write_hit/ > 70 starfive_starlink_pmu/write_miss/ > 194 starfive_starlink_pmu/write_request/ > 150080 starfive_starlink_pmu/writeback/ > 2089423 starfive_starlink_pmu/read_request/ > > 27.062755678 seconds time elapsed > > Signed-off-by: Ji Sheng Teoh <jisheng.teoh@xxxxxxxxxxxxxxxx> > --- > drivers/perf/Kconfig | 9 + > drivers/perf/Makefile | 1 + > drivers/perf/starfive_starlink_pmu.c | 654 +++++++++++++++++++++++++++ > include/linux/cpuhotplug.h | 1 + > 4 files changed, 665 insertions(+) > create mode 100644 drivers/perf/starfive_starlink_pmu.c > > diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig > index 273d67ecf6d2..41278742ef88 100644 > --- a/drivers/perf/Kconfig > +++ b/drivers/perf/Kconfig > @@ -86,6 +86,15 @@ config RISCV_PMU_SBI > full perf feature support i.e. counter overflow, privilege mode > filtering, counter configuration. > > +config STARFIVE_STARLINK_PMU > + depends on ARCH_STARFIVE > + bool "StarFive StarLink PMU" > + help > + Provide support for StarLink Performance Monitor Unit. > + StarLink Performance Monitor Unit integrates one or more cores with > + an L3 memory system. The L3 cache events are added into perf event > + subsystem, allowing monitoring of various L3 cache perf events. > + > config ARM_PMU_ACPI > depends on ARM_PMU && ACPI > def_bool y > diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile > index 16b3ec4db916..e2153aee1e04 100644 > --- a/drivers/perf/Makefile > +++ b/drivers/perf/Makefile > @@ -15,6 +15,7 @@ obj-$(CONFIG_QCOM_L3_PMU) += qcom_l3_pmu.o > obj-$(CONFIG_RISCV_PMU) += riscv_pmu.o > obj-$(CONFIG_RISCV_PMU_LEGACY) += riscv_pmu_legacy.o > obj-$(CONFIG_RISCV_PMU_SBI) += riscv_pmu_sbi.o > +obj-$(CONFIG_STARFIVE_STARLINK_PMU) += starfive_starlink_pmu.o > obj-$(CONFIG_THUNDERX2_PMU) += thunderx2_pmu.o > obj-$(CONFIG_XGENE_PMU) += xgene_pmu.o > obj-$(CONFIG_ARM_SPE_PMU) += arm_spe_pmu.o > diff --git a/drivers/perf/starfive_starlink_pmu.c b/drivers/perf/starfive_starlink_pmu.c > new file mode 100644 > index 000000000000..272896ab1ade > --- /dev/null > +++ b/drivers/perf/starfive_starlink_pmu.c > @@ -0,0 +1,654 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * StarFive's StarLink PMU driver > + * > + * Copyright (C) 2023 StarFive Technology Co., Ltd. > + * > + * Author: Ji Sheng Teoh <jisheng.teoh@xxxxxxxxxxxxxxxx> > + * > + */ > + > +#define STARLINK_PMU_PDEV_NAME "starfive_starlink_pmu" > +#define pr_fmt(fmt) STARLINK_PMU_PDEV_NAME ": " fmt > + > +#include <linux/bitmap.h> > +#include <linux/cpu_pm.h> > +#include <linux/io.h> > +#include <linux/irq.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/of_device.h> You probably don't need this header and the implicit includes it makes are dropped now in linux-next. Please check what you actually need and make them explicit. Rob