From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2ED7A606A326 for ; Mon, 2 Nov 2026 23:43:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=l0ghYop+; dkim=pass (2048-bit key, unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20260707 header.b=VdzUlRiY DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To:From: Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=iW1jHeD6LfP09QZRz308ADKG9DMznSnn7QotCcpmuLc=; b=l0ghYop+bDcRk5txejM38XwNme /KLOUDpCX+y7zLGHxzXpXhi15Up5mHr07SuETZnadidvUHD22Ye96M9+98iVgWK2+IVCQNvSYAMTC eU9WjYZ+ui3p+7K4sg9A5ciE+R2QEJHQJeNCVduZGEbgqLJ6o0sEgsf5OL0UsuY7H6e5rJoTzjdU6 i/edZ6HZfwlyQKcGLccPLIq9eQrktyKrEDucXZ19/B5bzLRbRQqjEWxVBYXzaMAmK7HlQDuDixms9 80Zi7A2DgxOpyckA+JuMzkEJh9U+hMX7Zga8GBxo6hyMUp29eDXVjfhV3zDfNIJf2Tlt5oHW9K8C1 Rt6p+xhw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xO1gY-00000000fkr-0ckv; Mon, 02 Nov 2026 23:43:30 +0000 Received: from mail-dy1-x1348.google.com ([2607:f8b0:4864:20::1348]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xO1gR-00000000ffb-2XCZ for linux-arm-kernel@lists.infradead.org; Mon, 02 Nov 2026 23:43:29 +0000 Received: by mail-dy1-x1348.google.com with SMTP id 5a478bee46e88-33c35f5ca6cso8011606eec.1 for ; Mon, 02 Nov 2026 15:43:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20260707; t=1793663002; x=1794267802; darn=lists.infradead.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=iW1jHeD6LfP09QZRz308ADKG9DMznSnn7QotCcpmuLc=; b=VdzUlRiYlR1aFxNpC+c6WKi86rYTbRudhoGQHCLkN+A3f7k9nmj1fzo+XHkTnXyNCi 1B7Fclf1yo9fOccxx2dDG9TCN1EQSfx1YbgH7EX3uLNowVHOGvXA90nAUfdIfuI07OGJ xPp8lWHwKQbkAg+ISvAfvTWIicujWyzu4VNR1OI9FJZNaMyQDvwHAoJZlGu5fZ00qj1J G0FIB4PZzeSqZYuz7wzVy1CWbZw19HyqWQ05hIBIxKhPAPiFD8P9LXb7yd2CmRZmFzoO q7k+MfqFqEqLBY3lUWToiRj64XP7nwNNwUmzvBUckGWIMo70Ufpo4UkiJmWtnCNSCdWm ZK5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793663002; x=1794267802; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=iW1jHeD6LfP09QZRz308ADKG9DMznSnn7QotCcpmuLc=; b=hP95y7cte/HN+4ucQUj4Rol5P7P3lKXycuF2xv9ZO7tsdPj1lNIHACoqoVgUBzw4Im C1/xso8Hy+BtyldkVLuin6PXLpyrBK60qm3LJOaAcfBXjAodc98IPE1aCNBI7Tmi5xK3 /DkvMM94/nqFd1gGNyCvvEYANJVmD5JTe9x8JIKEk5agtaVs3SbBGAbDkCXADS23A7Iv YGX5EZtOQM0dPgoHyS0AI6N7Byfx9clRpCbUGETOgA2MyHaO+ua17Xs2Y3lFjDtzGeT9 /OdxZ03IxdSkcvnmCrek9TMb6zH/keab2tOKvuSaJ9xUlJFROrgOpW+fS+uvMQQHgSJG 7i2g== X-Forwarded-Encrypted: i=1; AKwUvBxhyoLNDysAW7u5MvXdp7FqEJRJ3Q2mIAWD7DhjtzUXnX2YzNDnz6TMU7RmiFZktvjmBeTxXaxViPgr8tWf8BzS@lists.infradead.org X-Gm-Message-State: APuU4Z+anuuuD9mmo4vtl3QsA5B/LitHuaSSE6WuvSwHe57pXIMzw3wL MlFcjUZ5oaRecjAQP4zMFuv0CAIhBh1P8KmJFDhUXxU8J9JNxflvvIp+TrBrmKbzcvqgwxmRXTX TFY/vC3sKGQ== X-Received: from dyah26-n2.prod.google.com ([2002:a05:693c:83da:20b0:366:badf:c468]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:82a:b0:351:dbc:b663 with SMTP id 5a478bee46e88-36a4244f9f6mr19682324eec.31.1793663001732; Mon, 02 Nov 2026 15:43:21 -0800 (PST) Date: Mon, 2 Nov 2026 15:43:01 -0800 In-Reply-To: <20261102234301.2242242-1-irogers@google.com> X-Archived-By: Mime-Version: 1.0 References: <20261102234301.2242242-1-irogers@google.com> X-Mailer: git-send-email 2.56.0.385.gac671c819a-goog Message-ID: <20261102234301.2242242-4-irogers@google.com> Subject: [PATCH v15 3/3] perf: Add Raspberry Pi 5 (BCM2712) AXI PMU support From: Ian Rogers To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Dom Cobley Cc: Jonathan Corbet , "=?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?=" , Stefan Wahren , Ray Jui , Scott Branden , bcm-kernel-feedback-list@broadcom.com, linux-perf-users@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Ian Rogers Content-Type: text/plain; charset="UTF-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261102_154323_707634_519207E1 X-CRM114-Status: GOOD ( 18.25 ) X-Spam-Score: -9.5 (---------) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" X-Spam-Status: No, score=-26.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 Extend the Raspberry Pi AXI PMU driver to support the Broadcom BCM2712 used in the Raspberry Pi 5. As on earlier chips, the System monitor is accessed directly via MMIO and the VPU monitor via the firmware mailbox. BCM2712 has 6-bit AXI master IDs. The System bus names in Broadcom's documentation describe the set-top box variant of the chip, so they were checked by measurement on C0 and D0 boards. RP1 traffic (PCIe2) appears on the port documented as BSTM_TOP, SD/eMMC with DMA0 and DMA1 on the one documented as SRC, and the WiFi SDIO controller on the one documented as ARB3; these are named rp1, sd_dma and sdio_wifi here. >From BCM2712 D0, three System monitor ports (XPT, PCIE_01 and HVDP) are removed and the remaining ones renumbered, with the external PCIe moving to the ARGON_TOP port. The bus watchers also match a full AXI ID under a mask: 10-bit ID and mask fields on the System monitor, and 6-bit fields holding the master ID directly on the VPU monitor. D0 is detected at probe by whether the ID mask field is writable, and selects its own bus table and filter encoding. Co-developed-by: Dom Cobley Signed-off-by: Dom Cobley Signed-off-by: Ian Rogers --- .../admin-guide/perf/rpi-axi-pmu.rst | 35 +- drivers/perf/Kconfig | 2 +- drivers/perf/rpi_axi_pmu.c | 1230 ++++++++++++++++- 3 files changed, 1262 insertions(+), 5 deletions(-) diff --git a/Documentation/admin-guide/perf/rpi-axi-pmu.rst b/Documentation/admin-guide/perf/rpi-axi-pmu.rst index d47ac3d6f2c2..596a35f94805 100644 --- a/Documentation/admin-guide/perf/rpi-axi-pmu.rst +++ b/Documentation/admin-guide/perf/rpi-axi-pmu.rst @@ -4,8 +4,8 @@ Broadcom Raspberry Pi AXI Performance Monitoring Unit (PMU) ============================================================== -Broadcom BCM2835 and BCM2711 SoCs used in Raspberry Pi boards include two AXI -bus-watcher performance monitor blocks: +Broadcom BCM2835, BCM2711, and BCM2712 SoCs used in Raspberry Pi boards include +two AXI bus-watcher performance monitor blocks: - **System monitor** (``monitor=0``): Observes the primary System AXI fabric and is read directly via MMIO. @@ -51,6 +51,7 @@ Counter Suffix Width Description 7 rtrans 32-bit Read data beats 8 rmax 28-bit Maximum read transaction latency (cycles) 9 rpend 8-bit Pending read transactions (instantaneous level) +10 ratrans 32-bit Read address transactions (BCM2712 only) ======= ======== ====== ======================================================= Level Counters (``*max`` and ``rpend``) @@ -110,6 +111,36 @@ BCM2711 (8), ``PCIE`` (9), ``DMA2`` (18), ``GIGE`` (23), ``GISB_AXI`` (28), ``ARM`` (30), and ``EMMCSTB`` (31). +BCM2712 (C0 and D0) +------------------- + +BCM2712 D0 removes three unused set-top-box System fabric ports (``xpt``, +``pcie_01``, and ``hvdp``) and renumbers the remaining ports; the driver +detects D0 at probe time via the bus-watcher AXI ID mask field and exposes the +matching sysfs event table. + +- **BCM2712 C0 System buses (0..12):** ``vpu_uc`` (0), ``display_top`` (1), + ``v3d`` (2), ``arm`` (3), ``xpt`` (4), ``rp1`` (5), ``pcie_01`` (6), + ``argon_top`` (7), ``sdio_wifi`` (8), ``sd_dma`` (9), ``hvdp`` (10), + ``per`` (11), ``system_l2`` (12). +- **BCM2712 D0 System buses (0..9):** ``vpu_uc`` (0), ``display_top`` (1), + ``v3d`` (2), ``arm`` (3), ``rp1`` (4), ``argon_top`` (5), ``sdio_wifi`` (6), + ``sd_dma`` (7), ``per`` (8), ``system_l2`` (9). +- **VPU buses (0..13):** Same ``0..13`` layout as BCM2711. +- **6-bit AXI master ID filters (1..63):** ``VPU_UC0`` (1), ``VPU_IC0`` (2), + ``VPU_DC0`` (3), ``VPU_UC1`` (4), ``VPU_IC1`` (5), ``VPU_DC1`` (6), + ``VPU_L2`` (8), ``DMA2`` (9), ``VPU_DEBUG`` (10), ``ARM`` (11), + ``DMA0`` (12), ``DMA1`` (13), ``RAAGA`` (14), ``BBSI`` (16), ``PCIE0`` (18), + ``PCIE1`` (19), ``PCIE2`` (20, RP1), ``UMR`` (27), ``SAGE`` (28), + ``HVDP`` (29), ``BSP`` (30), ``HVS`` (32), ``HVS_WMK`` (33), ``MOP0`` (34), + ``MOP1`` (35), ``MBVN`` (36), ``DSI`` (37), ``XPT`` (38), ``EMMC0`` (39, + WiFi), ``GENET`` (40), ``USB`` (41), ``ARGON`` (42), ``UNICAM`` (43), + ``PISP`` (44), ``PISPFE`` (45), ``JPEG`` (46), ``EMMC1`` (47), + ``EMMC2`` (48, SD card), ``TRC`` (52), ``BSTM0`` (53), ``BSTM1`` (54), + ``BSTM0_SEC`` (55), ``BSTM1_SEC`` (56), ``AIO`` (57), ``MAP`` (58), + ``SYS_DMA`` (59), ``MMUCACHE0`` (60), ``MMUCACHE1`` (61), + ``MPUCACHE0`` (62), ``MPUCACHE1`` (63). + Examples ======== diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig index c1d7d64caba2..a84feca1e8ba 100644 --- a/drivers/perf/Kconfig +++ b/drivers/perf/Kconfig @@ -333,7 +333,7 @@ config RPI_AXI_PMU help Enable support for the Raspberry Pi AXI Performance Monitor. This provides access to the System and VideoCore performance - counters on Broadcom BCM2835 and BCM2711 platforms. + counters on Broadcom BCM2835, BCM2711, and BCM2712 platforms. The System monitor is read directly via MMIO, while the VideoCore VPU monitor is polled every 100ms via the Raspberry Pi firmware diff --git a/drivers/perf/rpi_axi_pmu.c b/drivers/perf/rpi_axi_pmu.c index f194b8633e43..3135bbcfeb61 100644 --- a/drivers/perf/rpi_axi_pmu.c +++ b/drivers/perf/rpi_axi_pmu.c @@ -62,10 +62,12 @@ * enum rpi_axi_chip - Supported Broadcom SoC generations * @CHIP_BCM2835: BCM2835 / BCM2836 / BCM2837 (RPi 1-3, CM 1-3, Zero/W) * @CHIP_BCM2711: BCM2711 (RPi 4, CM 4) + * @CHIP_BCM2712: BCM2712 (RPi 5, CM 5) */ enum rpi_axi_chip { CHIP_BCM2835 = 0, CHIP_BCM2711, + CHIP_BCM2712, }; /** @@ -123,6 +125,68 @@ enum bcm2835_system_bus { BCM2835_SB_MAX, }; +/** + * enum bcm2712_system_bus - AXI buses monitored by the system monitor on BCM2712 C0 (RPi 5) + * @BCM2712_SB_VPU_UC: VPU uncached bus + * @BCM2712_SB_DISPLAY_TOP: Display (HVS) bus + * @BCM2712_SB_V3D: V3D GPU bus + * @BCM2712_SB_ARM: Arm CPU cluster bus + * @BCM2712_SB_XPT: XPT bus (unused on Raspberry Pi) + * @BCM2712_SB_RP1: RP1 south bridge on PCIe2 (BSTM_TOP in Broadcom documentation) + * @BCM2712_SB_PCIE_01: External PCIe bus + * @BCM2712_SB_ARGON_TOP: HEVC decoder and PiSP back end bus + * @BCM2712_SB_SDIO_WIFI: WiFi SDIO controller bus (ARB3 in Broadcom documentation) + * @BCM2712_SB_SD_DMA: SD/eMMC, DMA0 and DMA1 bus (SRC in Broadcom documentation) + * @BCM2712_SB_HVDP: HVDP bus (unused on Raspberry Pi) + * @BCM2712_SB_PER: Peripheral access bus + * @BCM2712_SB_SYSTEM_L2: System L2 cache bus + * @BCM2712_SB_MAX: Number of buses + */ +enum bcm2712_system_bus { + BCM2712_SB_VPU_UC = 0, + BCM2712_SB_DISPLAY_TOP = 1, + BCM2712_SB_V3D = 2, + BCM2712_SB_ARM = 3, + BCM2712_SB_XPT = 4, + BCM2712_SB_RP1 = 5, + BCM2712_SB_PCIE_01 = 6, + BCM2712_SB_ARGON_TOP = 7, + BCM2712_SB_SDIO_WIFI = 8, + BCM2712_SB_SD_DMA = 9, + BCM2712_SB_HVDP = 10, + BCM2712_SB_PER = 11, + BCM2712_SB_SYSTEM_L2 = 12, + BCM2712_SB_MAX, +}; + +/** + * enum bcm2712d0_system_bus - AXI buses monitored by the system monitor on BCM2712 D0 and later + * @BCM2712D0_SB_VPU_UC: VPU uncached bus + * @BCM2712D0_SB_DISPLAY_TOP: Display (HVS) bus + * @BCM2712D0_SB_V3D: V3D GPU bus + * @BCM2712D0_SB_ARM: Arm CPU cluster bus + * @BCM2712D0_SB_RP1: RP1 south bridge on PCIe2 + * @BCM2712D0_SB_ARGON_TOP: HEVC decoder, PiSP back end and external PCIe bus + * @BCM2712D0_SB_SDIO_WIFI: WiFi SDIO controller bus + * @BCM2712D0_SB_SD_DMA: SD/eMMC, DMA0 and DMA1 bus + * @BCM2712D0_SB_PER: Peripheral access bus + * @BCM2712D0_SB_SYSTEM_L2: System L2 cache bus + * @BCM2712D0_SB_MAX: Number of buses + */ +enum bcm2712d0_system_bus { + BCM2712D0_SB_VPU_UC = 0, + BCM2712D0_SB_DISPLAY_TOP = 1, + BCM2712D0_SB_V3D = 2, + BCM2712D0_SB_ARM = 3, + BCM2712D0_SB_RP1 = 4, + BCM2712D0_SB_ARGON_TOP = 5, + BCM2712D0_SB_SDIO_WIFI = 6, + BCM2712D0_SB_SD_DMA = 7, + BCM2712D0_SB_PER = 8, + BCM2712D0_SB_SYSTEM_L2 = 9, + BCM2712D0_SB_MAX, +}; + /** * enum bcm2835_vpu_bus - AXI buses monitored by VPU Monitor on BCM2835 (RPi 1-3) * @BCM2835_VB_VPU1_D_L2: VideoCore VPU Core 1 Data L2 cache bus @@ -403,6 +467,116 @@ enum bcm2711_filter { BCM2711_FLT_MAX, }; +/** + * enum bcm2712_filter - AXI master ID filter options for BCM2712 (RPi 5) + * @BCM2712_FLT_0: Disable master ID filtering (monitor all traffic on bus) + * @BCM2712_FLT_VPU_UC0: VPU Uncached 0 master ID + * @BCM2712_FLT_VPU_IC0: VPU I-Cache 0 master ID + * @BCM2712_FLT_VPU_DC0: VPU D-Cache 0 master ID + * @BCM2712_FLT_VPU_UC1: VPU Uncached 1 master ID + * @BCM2712_FLT_VPU_IC1: VPU I-Cache 1 master ID + * @BCM2712_FLT_VPU_DC1: VPU D-Cache 1 master ID + * @BCM2712_FLT_VPU_L2: VPU L2 Cache master ID + * @BCM2712_FLT_DMA2: DMA2 master ID + * @BCM2712_FLT_VPU_DEBUG: VPU Debug master ID + * @BCM2712_FLT_ARM: Arm Quad-Core CPU Cluster master ID + * @BCM2712_FLT_DMA0: DMA0 master ID + * @BCM2712_FLT_DMA1: DMA1 master ID + * @BCM2712_FLT_RAAGA: RAAGA Audio Engine master ID + * @BCM2712_FLT_BBSI: BBSI master ID + * @BCM2712_FLT_PCIE0: PCIe 0 master ID + * @BCM2712_FLT_PCIE1: PCIe 1 master ID + * @BCM2712_FLT_PCIE2: PCIe 2 (RP1) master ID + * @BCM2712_FLT_UMR: UMR master ID + * @BCM2712_FLT_SAGE: SAGE master ID + * @BCM2712_FLT_HVDP: HVDP master ID + * @BCM2712_FLT_BSP: BSP master ID + * @BCM2712_FLT_HVS: Hardware Video Scaler (HVS) display engine master ID + * @BCM2712_FLT_HVS_WMK: HVS Watermark master ID + * @BCM2712_FLT_MOP0: MOP0 master ID + * @BCM2712_FLT_MOP1: MOP1 master ID + * @BCM2712_FLT_MBVN: MBVN master ID + * @BCM2712_FLT_DSI: DSI Display Interface master ID + * @BCM2712_FLT_XPT: XPT master ID + * @BCM2712_FLT_EMMC0: SD/eMMC Controller 0 master ID + * @BCM2712_FLT_GENET: Gigabit Ethernet Controller master ID + * @BCM2712_FLT_USB: USB Controller master ID + * @BCM2712_FLT_ARGON: Argon master ID + * @BCM2712_FLT_UNICAM: Unicam master ID + * @BCM2712_FLT_PISP: ISP master ID + * @BCM2712_FLT_PISPFE: ISP Front End master ID + * @BCM2712_FLT_JPEG: JPEG decoder master ID + * @BCM2712_FLT_EMMC1: SD/eMMC 1 master ID + * @BCM2712_FLT_EMMC2: SD/eMMC 2 master ID + * @BCM2712_FLT_TRC: TRC master ID + * @BCM2712_FLT_BSTM0: BSTM0 master ID + * @BCM2712_FLT_BSTM1: BSTM1 master ID + * @BCM2712_FLT_BSTM0_SEC: BSTM0 Secure master ID + * @BCM2712_FLT_BSTM1_SEC: BSTM1 Secure master ID + * @BCM2712_FLT_AIO: AIO master ID + * @BCM2712_FLT_MAP: MAP master ID + * @BCM2712_FLT_SYS_DMA: System DMA master ID + * @BCM2712_FLT_MMUCACHE0: MMU Cache 0 master ID + * @BCM2712_FLT_MMUCACHE1: MMU Cache 1 master ID + * @BCM2712_FLT_MPUCACHE0: MPU Cache 0 master ID + * @BCM2712_FLT_MPUCACHE1: MPU Cache 1 master ID + * @BCM2712_FLT_MAX: Maximum filter ID count for BCM2712 + */ +enum bcm2712_filter { + BCM2712_FLT_0 = 0, + BCM2712_FLT_VPU_UC0 = 1, + BCM2712_FLT_VPU_IC0 = 2, + BCM2712_FLT_VPU_DC0 = 3, + BCM2712_FLT_VPU_UC1 = 4, + BCM2712_FLT_VPU_IC1 = 5, + BCM2712_FLT_VPU_DC1 = 6, + BCM2712_FLT_VPU_L2 = 8, + BCM2712_FLT_DMA2 = 9, + BCM2712_FLT_VPU_DEBUG = 10, + BCM2712_FLT_ARM = 11, + BCM2712_FLT_DMA0 = 12, + BCM2712_FLT_DMA1 = 13, + BCM2712_FLT_RAAGA = 14, + BCM2712_FLT_BBSI = 16, + BCM2712_FLT_PCIE0 = 18, + BCM2712_FLT_PCIE1 = 19, + BCM2712_FLT_PCIE2 = 20, + BCM2712_FLT_UMR = 27, + BCM2712_FLT_SAGE = 28, + BCM2712_FLT_HVDP = 29, + BCM2712_FLT_BSP = 30, + BCM2712_FLT_HVS = 32, + BCM2712_FLT_HVS_WMK = 33, + BCM2712_FLT_MOP0 = 34, + BCM2712_FLT_MOP1 = 35, + BCM2712_FLT_MBVN = 36, + BCM2712_FLT_DSI = 37, + BCM2712_FLT_XPT = 38, + BCM2712_FLT_EMMC0 = 39, + BCM2712_FLT_GENET = 40, + BCM2712_FLT_USB = 41, + BCM2712_FLT_ARGON = 42, + BCM2712_FLT_UNICAM = 43, + BCM2712_FLT_PISP = 44, + BCM2712_FLT_PISPFE = 45, + BCM2712_FLT_JPEG = 46, + BCM2712_FLT_EMMC1 = 47, + BCM2712_FLT_EMMC2 = 48, + BCM2712_FLT_TRC = 52, + BCM2712_FLT_BSTM0 = 53, + BCM2712_FLT_BSTM1 = 54, + BCM2712_FLT_BSTM0_SEC = 55, + BCM2712_FLT_BSTM1_SEC = 56, + BCM2712_FLT_AIO = 57, + BCM2712_FLT_MAP = 58, + BCM2712_FLT_SYS_DMA = 59, + BCM2712_FLT_MMUCACHE0 = 60, + BCM2712_FLT_MMUCACHE1 = 61, + BCM2712_FLT_MPUCACHE0 = 62, + BCM2712_FLT_MPUCACHE1 = 63, + BCM2712_FLT_MAX = 64, +}; + /* Hardware register offsets & control bitwise constants */ #define GEN_CTRL 0x00 #define GEN_CTL_ENABLE_BIT BIT(0) @@ -440,6 +614,13 @@ enum bcm2711_filter { #define BW_CTRL_BUS_WATCH_MASK GENMASK(4, 0) #define BW_CTRL_BUS_FILTER_SHIFT 8 #define BW_CTRL_BUS_FILTER_MASK GENMASK(12, 8) +#define BW_CTRL_2712_FILTER_MASK GENMASK(13, 8) +#define BW_CTRL_AXI_ID GENMASK(17, 8) +#define BW_CTRL_AXI_ID_MASK GENMASK(27, 18) +#define AXI_ID_MASTER GENMASK(8, 3) +/* The D0 VPU monitor has a 6-bit ID holding the master directly, with its own mask */ +#define BW_CTRL_VPU_ID GENMASK(13, 8) +#define BW_CTRL_VPU_ID_MASK GENMASK(23, 18) /* * RPI_AXI_PMU_TIMER_INTERVAL determines the background polling frequency @@ -612,6 +793,7 @@ static int rpi_axi_hw_events__get_alloc_event_idx(struct rpi_axi_hw_events *hw_e * @pmu: Core Linux perf PMU structure * @pdev: Owning platform_device pointer * @chip: Detected Broadcom SoC generation (CHIP_BCM2835) + * @axi_id_mask: Bus watchers match a full AXI ID under a mask (BCM2712 D0) * @firmware: Raspberry Pi firmware handle for VideoCore mailbox calls (BCM2835-BCM2711) * @cpu: CPU core assigned to process uncore PMU events * @cpuhp_node: Dynamic CPU hotplug instance node @@ -628,6 +810,7 @@ struct rpi_axi_pmu { struct pmu pmu; struct platform_device *pdev; enum rpi_axi_chip chip; + bool axi_id_mask; struct rpi_firmware *firmware; int cpu; struct hlist_node cpuhp_node; @@ -690,6 +873,15 @@ static bool config_is_valid(struct rpi_axi_pmu *pmu, __u64 config) if (filter >= BCM2711_FLT_MAX) return false; break; + case CHIP_BCM2712: + if (mon == MON_SYSTEM && + bus >= (pmu->axi_id_mask ? BCM2712D0_SB_MAX : BCM2712_SB_MAX)) + return false; + if (mon == MON_VPU && bus >= BCM2711_VB_MAX) + return false; + if (filter >= BCM2712_FLT_MAX) + return false; + break; } return counter < CNT_MAX; @@ -1910,6 +2102,995 @@ static const struct attribute_group rpi_axi_pmu_bcm2711_events_group = { .is_visible = rpi_axi_pmu_events_is_visible, }; +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_atwait, bcm2712_vpu_vpu1_d_l2_atwait, "monitor=1,bus=0,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_atrans, bcm2712_vpu_vpu1_d_l2_atrans, "monitor=1,bus=0,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_amax, bcm2712_vpu_vpu1_d_l2_amax, "monitor=1,bus=0,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_wwait, bcm2712_vpu_vpu1_d_l2_wwait, "monitor=1,bus=0,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_wtrans, bcm2712_vpu_vpu1_d_l2_wtrans, "monitor=1,bus=0,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_wmax, bcm2712_vpu_vpu1_d_l2_wmax, "monitor=1,bus=0,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_rwait, bcm2712_vpu_vpu1_d_l2_rwait, "monitor=1,bus=0,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_rtrans, bcm2712_vpu_vpu1_d_l2_rtrans, "monitor=1,bus=0,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_rmax, bcm2712_vpu_vpu1_d_l2_rmax, "monitor=1,bus=0,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_rpend, bcm2712_vpu_vpu1_d_l2_rpend, "monitor=1,bus=0,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_l2_ratrans, bcm2712_vpu_vpu1_d_l2_ratrans, "monitor=1,bus=0,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_atwait, bcm2712_vpu_vpu0_d_l2_atwait, "monitor=1,bus=1,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_atrans, bcm2712_vpu_vpu0_d_l2_atrans, "monitor=1,bus=1,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_amax, bcm2712_vpu_vpu0_d_l2_amax, "monitor=1,bus=1,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_wwait, bcm2712_vpu_vpu0_d_l2_wwait, "monitor=1,bus=1,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_wtrans, bcm2712_vpu_vpu0_d_l2_wtrans, "monitor=1,bus=1,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_wmax, bcm2712_vpu_vpu0_d_l2_wmax, "monitor=1,bus=1,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_rwait, bcm2712_vpu_vpu0_d_l2_rwait, "monitor=1,bus=1,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_rtrans, bcm2712_vpu_vpu0_d_l2_rtrans, "monitor=1,bus=1,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_rmax, bcm2712_vpu_vpu0_d_l2_rmax, "monitor=1,bus=1,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_rpend, bcm2712_vpu_vpu0_d_l2_rpend, "monitor=1,bus=1,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_l2_ratrans, bcm2712_vpu_vpu0_d_l2_ratrans, "monitor=1,bus=1,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_atwait, bcm2712_vpu_vpu1_i_l2_atwait, "monitor=1,bus=2,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_atrans, bcm2712_vpu_vpu1_i_l2_atrans, "monitor=1,bus=2,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_amax, bcm2712_vpu_vpu1_i_l2_amax, "monitor=1,bus=2,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_wwait, bcm2712_vpu_vpu1_i_l2_wwait, "monitor=1,bus=2,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_wtrans, bcm2712_vpu_vpu1_i_l2_wtrans, "monitor=1,bus=2,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_wmax, bcm2712_vpu_vpu1_i_l2_wmax, "monitor=1,bus=2,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_rwait, bcm2712_vpu_vpu1_i_l2_rwait, "monitor=1,bus=2,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_rtrans, bcm2712_vpu_vpu1_i_l2_rtrans, "monitor=1,bus=2,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_rmax, bcm2712_vpu_vpu1_i_l2_rmax, "monitor=1,bus=2,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_rpend, bcm2712_vpu_vpu1_i_l2_rpend, "monitor=1,bus=2,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_l2_ratrans, bcm2712_vpu_vpu1_i_l2_ratrans, "monitor=1,bus=2,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_atwait, bcm2712_vpu_vpu0_i_l2_atwait, "monitor=1,bus=3,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_atrans, bcm2712_vpu_vpu0_i_l2_atrans, "monitor=1,bus=3,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_amax, bcm2712_vpu_vpu0_i_l2_amax, "monitor=1,bus=3,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_wwait, bcm2712_vpu_vpu0_i_l2_wwait, "monitor=1,bus=3,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_wtrans, bcm2712_vpu_vpu0_i_l2_wtrans, "monitor=1,bus=3,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_wmax, bcm2712_vpu_vpu0_i_l2_wmax, "monitor=1,bus=3,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_rwait, bcm2712_vpu_vpu0_i_l2_rwait, "monitor=1,bus=3,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_rtrans, bcm2712_vpu_vpu0_i_l2_rtrans, "monitor=1,bus=3,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_rmax, bcm2712_vpu_vpu0_i_l2_rmax, "monitor=1,bus=3,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_rpend, bcm2712_vpu_vpu0_i_l2_rpend, "monitor=1,bus=3,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_l2_ratrans, bcm2712_vpu_vpu0_i_l2_ratrans, "monitor=1,bus=3,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_atwait, bcm2712_vpu_system_l2_atwait, "monitor=1,bus=4,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_atrans, bcm2712_vpu_system_l2_atrans, "monitor=1,bus=4,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_amax, bcm2712_vpu_system_l2_amax, "monitor=1,bus=4,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_wwait, bcm2712_vpu_system_l2_wwait, "monitor=1,bus=4,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_wtrans, bcm2712_vpu_system_l2_wtrans, "monitor=1,bus=4,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_wmax, bcm2712_vpu_system_l2_wmax, "monitor=1,bus=4,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_rwait, bcm2712_vpu_system_l2_rwait, "monitor=1,bus=4,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_rtrans, bcm2712_vpu_system_l2_rtrans, "monitor=1,bus=4,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_rmax, bcm2712_vpu_system_l2_rmax, "monitor=1,bus=4,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_rpend, bcm2712_vpu_system_l2_rpend, "monitor=1,bus=4,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_system_l2_ratrans, bcm2712_vpu_system_l2_ratrans, "monitor=1,bus=4,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_atwait, bcm2712_vpu_dma_l2_atwait, "monitor=1,bus=5,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_atrans, bcm2712_vpu_dma_l2_atrans, "monitor=1,bus=5,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_amax, bcm2712_vpu_dma_l2_amax, "monitor=1,bus=5,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_wwait, bcm2712_vpu_dma_l2_wwait, "monitor=1,bus=5,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_wtrans, bcm2712_vpu_dma_l2_wtrans, "monitor=1,bus=5,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_wmax, bcm2712_vpu_dma_l2_wmax, "monitor=1,bus=5,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_rwait, bcm2712_vpu_dma_l2_rwait, "monitor=1,bus=5,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_rtrans, bcm2712_vpu_dma_l2_rtrans, "monitor=1,bus=5,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_rmax, bcm2712_vpu_dma_l2_rmax, "monitor=1,bus=5,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_rpend, bcm2712_vpu_dma_l2_rpend, "monitor=1,bus=5,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_dma_l2_ratrans, bcm2712_vpu_dma_l2_ratrans, "monitor=1,bus=5,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_atwait, bcm2712_vpu_vpu1_d_uc_atwait, "monitor=1,bus=6,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_atrans, bcm2712_vpu_vpu1_d_uc_atrans, "monitor=1,bus=6,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_amax, bcm2712_vpu_vpu1_d_uc_amax, "monitor=1,bus=6,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_wwait, bcm2712_vpu_vpu1_d_uc_wwait, "monitor=1,bus=6,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_wtrans, bcm2712_vpu_vpu1_d_uc_wtrans, "monitor=1,bus=6,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_wmax, bcm2712_vpu_vpu1_d_uc_wmax, "monitor=1,bus=6,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_rwait, bcm2712_vpu_vpu1_d_uc_rwait, "monitor=1,bus=6,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_rtrans, bcm2712_vpu_vpu1_d_uc_rtrans, "monitor=1,bus=6,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_rmax, bcm2712_vpu_vpu1_d_uc_rmax, "monitor=1,bus=6,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_rpend, bcm2712_vpu_vpu1_d_uc_rpend, "monitor=1,bus=6,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_d_uc_ratrans, bcm2712_vpu_vpu1_d_uc_ratrans, "monitor=1,bus=6,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_atwait, bcm2712_vpu_vpu0_d_uc_atwait, "monitor=1,bus=7,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_atrans, bcm2712_vpu_vpu0_d_uc_atrans, "monitor=1,bus=7,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_amax, bcm2712_vpu_vpu0_d_uc_amax, "monitor=1,bus=7,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_wwait, bcm2712_vpu_vpu0_d_uc_wwait, "monitor=1,bus=7,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_wtrans, bcm2712_vpu_vpu0_d_uc_wtrans, "monitor=1,bus=7,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_wmax, bcm2712_vpu_vpu0_d_uc_wmax, "monitor=1,bus=7,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_rwait, bcm2712_vpu_vpu0_d_uc_rwait, "monitor=1,bus=7,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_rtrans, bcm2712_vpu_vpu0_d_uc_rtrans, "monitor=1,bus=7,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_rmax, bcm2712_vpu_vpu0_d_uc_rmax, "monitor=1,bus=7,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_rpend, bcm2712_vpu_vpu0_d_uc_rpend, "monitor=1,bus=7,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_d_uc_ratrans, bcm2712_vpu_vpu0_d_uc_ratrans, "monitor=1,bus=7,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_atwait, bcm2712_vpu_vpu1_i_uc_atwait, "monitor=1,bus=8,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_atrans, bcm2712_vpu_vpu1_i_uc_atrans, "monitor=1,bus=8,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_amax, bcm2712_vpu_vpu1_i_uc_amax, "monitor=1,bus=8,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_wwait, bcm2712_vpu_vpu1_i_uc_wwait, "monitor=1,bus=8,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_wtrans, bcm2712_vpu_vpu1_i_uc_wtrans, "monitor=1,bus=8,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_wmax, bcm2712_vpu_vpu1_i_uc_wmax, "monitor=1,bus=8,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_rwait, bcm2712_vpu_vpu1_i_uc_rwait, "monitor=1,bus=8,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_rtrans, bcm2712_vpu_vpu1_i_uc_rtrans, "monitor=1,bus=8,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_rmax, bcm2712_vpu_vpu1_i_uc_rmax, "monitor=1,bus=8,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_rpend, bcm2712_vpu_vpu1_i_uc_rpend, "monitor=1,bus=8,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu1_i_uc_ratrans, bcm2712_vpu_vpu1_i_uc_ratrans, "monitor=1,bus=8,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_atwait, bcm2712_vpu_vpu0_i_uc_atwait, "monitor=1,bus=9,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_atrans, bcm2712_vpu_vpu0_i_uc_atrans, "monitor=1,bus=9,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_amax, bcm2712_vpu_vpu0_i_uc_amax, "monitor=1,bus=9,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_wwait, bcm2712_vpu_vpu0_i_uc_wwait, "monitor=1,bus=9,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_wtrans, bcm2712_vpu_vpu0_i_uc_wtrans, "monitor=1,bus=9,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_wmax, bcm2712_vpu_vpu0_i_uc_wmax, "monitor=1,bus=9,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_rwait, bcm2712_vpu_vpu0_i_uc_rwait, "monitor=1,bus=9,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_rtrans, bcm2712_vpu_vpu0_i_uc_rtrans, "monitor=1,bus=9,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_rmax, bcm2712_vpu_vpu0_i_uc_rmax, "monitor=1,bus=9,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_rpend, bcm2712_vpu_vpu0_i_uc_rpend, "monitor=1,bus=9,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu0_i_uc_ratrans, bcm2712_vpu_vpu0_i_uc_ratrans, "monitor=1,bus=9,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_atwait, bcm2712_vpu_vpu_uc_atwait, "monitor=1,bus=10,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_atrans, bcm2712_vpu_vpu_uc_atrans, "monitor=1,bus=10,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_amax, bcm2712_vpu_vpu_uc_amax, "monitor=1,bus=10,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_wwait, bcm2712_vpu_vpu_uc_wwait, "monitor=1,bus=10,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_wtrans, bcm2712_vpu_vpu_uc_wtrans, "monitor=1,bus=10,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_wmax, bcm2712_vpu_vpu_uc_wmax, "monitor=1,bus=10,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_rwait, bcm2712_vpu_vpu_uc_rwait, "monitor=1,bus=10,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_rtrans, bcm2712_vpu_vpu_uc_rtrans, "monitor=1,bus=10,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_rmax, bcm2712_vpu_vpu_uc_rmax, "monitor=1,bus=10,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_rpend, bcm2712_vpu_vpu_uc_rpend, "monitor=1,bus=10,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_vpu_uc_ratrans, bcm2712_vpu_vpu_uc_ratrans, "monitor=1,bus=10,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_atwait, bcm2712_vpu_l2_out_atwait, "monitor=1,bus=11,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_atrans, bcm2712_vpu_l2_out_atrans, "monitor=1,bus=11,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_amax, bcm2712_vpu_l2_out_amax, "monitor=1,bus=11,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_wwait, bcm2712_vpu_l2_out_wwait, "monitor=1,bus=11,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_wtrans, bcm2712_vpu_l2_out_wtrans, "monitor=1,bus=11,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_wmax, bcm2712_vpu_l2_out_wmax, "monitor=1,bus=11,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_rwait, bcm2712_vpu_l2_out_rwait, "monitor=1,bus=11,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_rtrans, bcm2712_vpu_l2_out_rtrans, "monitor=1,bus=11,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_rmax, bcm2712_vpu_l2_out_rmax, "monitor=1,bus=11,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_rpend, bcm2712_vpu_l2_out_rpend, "monitor=1,bus=11,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_l2_out_ratrans, bcm2712_vpu_l2_out_ratrans, "monitor=1,bus=11,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_atwait, bcm2712_vpu_dma_uc_atwait, "monitor=1,bus=12,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_atrans, bcm2712_vpu_dma_uc_atrans, "monitor=1,bus=12,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_amax, bcm2712_vpu_dma_uc_amax, "monitor=1,bus=12,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_wwait, bcm2712_vpu_dma_uc_wwait, "monitor=1,bus=12,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_wtrans, bcm2712_vpu_dma_uc_wtrans, "monitor=1,bus=12,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_wmax, bcm2712_vpu_dma_uc_wmax, "monitor=1,bus=12,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_rwait, bcm2712_vpu_dma_uc_rwait, "monitor=1,bus=12,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_rtrans, bcm2712_vpu_dma_uc_rtrans, "monitor=1,bus=12,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_rmax, bcm2712_vpu_dma_uc_rmax, "monitor=1,bus=12,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_rpend, bcm2712_vpu_dma_uc_rpend, "monitor=1,bus=12,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_dma_uc_ratrans, bcm2712_vpu_dma_uc_ratrans, "monitor=1,bus=12,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_atwait, bcm2712_vpu_l2_in_atwait, "monitor=1,bus=13,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_atrans, bcm2712_vpu_l2_in_atrans, "monitor=1,bus=13,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_amax, bcm2712_vpu_l2_in_amax, "monitor=1,bus=13,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_wwait, bcm2712_vpu_l2_in_wwait, "monitor=1,bus=13,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_wtrans, bcm2712_vpu_l2_in_wtrans, "monitor=1,bus=13,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_wmax, bcm2712_vpu_l2_in_wmax, "monitor=1,bus=13,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_rwait, bcm2712_vpu_l2_in_rwait, "monitor=1,bus=13,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_rtrans, bcm2712_vpu_l2_in_rtrans, "monitor=1,bus=13,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_rmax, bcm2712_vpu_l2_in_rmax, "monitor=1,bus=13,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_rpend, bcm2712_vpu_l2_in_rpend, "monitor=1,bus=13,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_l2_in_ratrans, bcm2712_vpu_l2_in_ratrans, "monitor=1,bus=13,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_uc_atwait, bcm2712_vpu_uc_atwait, "monitor=0,bus=0,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_uc_atrans, bcm2712_vpu_uc_atrans, "monitor=0,bus=0,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_uc_amax, bcm2712_vpu_uc_amax, "monitor=0,bus=0,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_uc_wwait, bcm2712_vpu_uc_wwait, "monitor=0,bus=0,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_uc_wtrans, bcm2712_vpu_uc_wtrans, "monitor=0,bus=0,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_uc_wmax, bcm2712_vpu_uc_wmax, "monitor=0,bus=0,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_uc_rwait, bcm2712_vpu_uc_rwait, "monitor=0,bus=0,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_uc_rtrans, bcm2712_vpu_uc_rtrans, "monitor=0,bus=0,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_uc_rmax, bcm2712_vpu_uc_rmax, "monitor=0,bus=0,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_uc_rpend, bcm2712_vpu_uc_rpend, "monitor=0,bus=0,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_uc_ratrans, bcm2712_vpu_uc_ratrans, "monitor=0,bus=0,counter=10"); +PMU_EVENT_ATTR_STRING(display_top_atwait, bcm2712_display_top_atwait, "monitor=0,bus=1,counter=0"); +PMU_EVENT_ATTR_STRING(display_top_atrans, bcm2712_display_top_atrans, "monitor=0,bus=1,counter=1"); +PMU_EVENT_ATTR_STRING(display_top_amax, bcm2712_display_top_amax, "monitor=0,bus=1,counter=2"); +PMU_EVENT_ATTR_STRING(display_top_wwait, bcm2712_display_top_wwait, "monitor=0,bus=1,counter=3"); +PMU_EVENT_ATTR_STRING(display_top_wtrans, bcm2712_display_top_wtrans, "monitor=0,bus=1,counter=4"); +PMU_EVENT_ATTR_STRING(display_top_wmax, bcm2712_display_top_wmax, "monitor=0,bus=1,counter=5"); +PMU_EVENT_ATTR_STRING(display_top_rwait, bcm2712_display_top_rwait, "monitor=0,bus=1,counter=6"); +PMU_EVENT_ATTR_STRING(display_top_rtrans, bcm2712_display_top_rtrans, "monitor=0,bus=1,counter=7"); +PMU_EVENT_ATTR_STRING(display_top_rmax, bcm2712_display_top_rmax, "monitor=0,bus=1,counter=8"); +PMU_EVENT_ATTR_STRING(display_top_rpend, bcm2712_display_top_rpend, "monitor=0,bus=1,counter=9"); +PMU_EVENT_ATTR_STRING(display_top_ratrans, bcm2712_display_top_ratrans, "monitor=0,bus=1,counter=10"); +PMU_EVENT_ATTR_STRING(v3d_atwait, bcm2712_v3d_atwait, "monitor=0,bus=2,counter=0"); +PMU_EVENT_ATTR_STRING(v3d_atrans, bcm2712_v3d_atrans, "monitor=0,bus=2,counter=1"); +PMU_EVENT_ATTR_STRING(v3d_amax, bcm2712_v3d_amax, "monitor=0,bus=2,counter=2"); +PMU_EVENT_ATTR_STRING(v3d_wwait, bcm2712_v3d_wwait, "monitor=0,bus=2,counter=3"); +PMU_EVENT_ATTR_STRING(v3d_wtrans, bcm2712_v3d_wtrans, "monitor=0,bus=2,counter=4"); +PMU_EVENT_ATTR_STRING(v3d_wmax, bcm2712_v3d_wmax, "monitor=0,bus=2,counter=5"); +PMU_EVENT_ATTR_STRING(v3d_rwait, bcm2712_v3d_rwait, "monitor=0,bus=2,counter=6"); +PMU_EVENT_ATTR_STRING(v3d_rtrans, bcm2712_v3d_rtrans, "monitor=0,bus=2,counter=7"); +PMU_EVENT_ATTR_STRING(v3d_rmax, bcm2712_v3d_rmax, "monitor=0,bus=2,counter=8"); +PMU_EVENT_ATTR_STRING(v3d_rpend, bcm2712_v3d_rpend, "monitor=0,bus=2,counter=9"); +PMU_EVENT_ATTR_STRING(v3d_ratrans, bcm2712_v3d_ratrans, "monitor=0,bus=2,counter=10"); +PMU_EVENT_ATTR_STRING(arm_atwait, bcm2712_arm_atwait, "monitor=0,bus=3,counter=0"); +PMU_EVENT_ATTR_STRING(arm_atrans, bcm2712_arm_atrans, "monitor=0,bus=3,counter=1"); +PMU_EVENT_ATTR_STRING(arm_amax, bcm2712_arm_amax, "monitor=0,bus=3,counter=2"); +PMU_EVENT_ATTR_STRING(arm_wwait, bcm2712_arm_wwait, "monitor=0,bus=3,counter=3"); +PMU_EVENT_ATTR_STRING(arm_wtrans, bcm2712_arm_wtrans, "monitor=0,bus=3,counter=4"); +PMU_EVENT_ATTR_STRING(arm_wmax, bcm2712_arm_wmax, "monitor=0,bus=3,counter=5"); +PMU_EVENT_ATTR_STRING(arm_rwait, bcm2712_arm_rwait, "monitor=0,bus=3,counter=6"); +PMU_EVENT_ATTR_STRING(arm_rtrans, bcm2712_arm_rtrans, "monitor=0,bus=3,counter=7"); +PMU_EVENT_ATTR_STRING(arm_rmax, bcm2712_arm_rmax, "monitor=0,bus=3,counter=8"); +PMU_EVENT_ATTR_STRING(arm_rpend, bcm2712_arm_rpend, "monitor=0,bus=3,counter=9"); +PMU_EVENT_ATTR_STRING(arm_ratrans, bcm2712_arm_ratrans, "monitor=0,bus=3,counter=10"); +PMU_EVENT_ATTR_STRING(xpt_atwait, bcm2712_xpt_atwait, "monitor=0,bus=4,counter=0"); +PMU_EVENT_ATTR_STRING(xpt_atrans, bcm2712_xpt_atrans, "monitor=0,bus=4,counter=1"); +PMU_EVENT_ATTR_STRING(xpt_amax, bcm2712_xpt_amax, "monitor=0,bus=4,counter=2"); +PMU_EVENT_ATTR_STRING(xpt_wwait, bcm2712_xpt_wwait, "monitor=0,bus=4,counter=3"); +PMU_EVENT_ATTR_STRING(xpt_wtrans, bcm2712_xpt_wtrans, "monitor=0,bus=4,counter=4"); +PMU_EVENT_ATTR_STRING(xpt_wmax, bcm2712_xpt_wmax, "monitor=0,bus=4,counter=5"); +PMU_EVENT_ATTR_STRING(xpt_rwait, bcm2712_xpt_rwait, "monitor=0,bus=4,counter=6"); +PMU_EVENT_ATTR_STRING(xpt_rtrans, bcm2712_xpt_rtrans, "monitor=0,bus=4,counter=7"); +PMU_EVENT_ATTR_STRING(xpt_rmax, bcm2712_xpt_rmax, "monitor=0,bus=4,counter=8"); +PMU_EVENT_ATTR_STRING(xpt_rpend, bcm2712_xpt_rpend, "monitor=0,bus=4,counter=9"); +PMU_EVENT_ATTR_STRING(xpt_ratrans, bcm2712_xpt_ratrans, "monitor=0,bus=4,counter=10"); +PMU_EVENT_ATTR_STRING(rp1_atwait, bcm2712_rp1_atwait, "monitor=0,bus=5,counter=0"); +PMU_EVENT_ATTR_STRING(rp1_atrans, bcm2712_rp1_atrans, "monitor=0,bus=5,counter=1"); +PMU_EVENT_ATTR_STRING(rp1_amax, bcm2712_rp1_amax, "monitor=0,bus=5,counter=2"); +PMU_EVENT_ATTR_STRING(rp1_wwait, bcm2712_rp1_wwait, "monitor=0,bus=5,counter=3"); +PMU_EVENT_ATTR_STRING(rp1_wtrans, bcm2712_rp1_wtrans, "monitor=0,bus=5,counter=4"); +PMU_EVENT_ATTR_STRING(rp1_wmax, bcm2712_rp1_wmax, "monitor=0,bus=5,counter=5"); +PMU_EVENT_ATTR_STRING(rp1_rwait, bcm2712_rp1_rwait, "monitor=0,bus=5,counter=6"); +PMU_EVENT_ATTR_STRING(rp1_rtrans, bcm2712_rp1_rtrans, "monitor=0,bus=5,counter=7"); +PMU_EVENT_ATTR_STRING(rp1_rmax, bcm2712_rp1_rmax, "monitor=0,bus=5,counter=8"); +PMU_EVENT_ATTR_STRING(rp1_rpend, bcm2712_rp1_rpend, "monitor=0,bus=5,counter=9"); +PMU_EVENT_ATTR_STRING(rp1_ratrans, bcm2712_rp1_ratrans, "monitor=0,bus=5,counter=10"); +PMU_EVENT_ATTR_STRING(pcie_01_atwait, bcm2712_pcie_01_atwait, "monitor=0,bus=6,counter=0"); +PMU_EVENT_ATTR_STRING(pcie_01_atrans, bcm2712_pcie_01_atrans, "monitor=0,bus=6,counter=1"); +PMU_EVENT_ATTR_STRING(pcie_01_amax, bcm2712_pcie_01_amax, "monitor=0,bus=6,counter=2"); +PMU_EVENT_ATTR_STRING(pcie_01_wwait, bcm2712_pcie_01_wwait, "monitor=0,bus=6,counter=3"); +PMU_EVENT_ATTR_STRING(pcie_01_wtrans, bcm2712_pcie_01_wtrans, "monitor=0,bus=6,counter=4"); +PMU_EVENT_ATTR_STRING(pcie_01_wmax, bcm2712_pcie_01_wmax, "monitor=0,bus=6,counter=5"); +PMU_EVENT_ATTR_STRING(pcie_01_rwait, bcm2712_pcie_01_rwait, "monitor=0,bus=6,counter=6"); +PMU_EVENT_ATTR_STRING(pcie_01_rtrans, bcm2712_pcie_01_rtrans, "monitor=0,bus=6,counter=7"); +PMU_EVENT_ATTR_STRING(pcie_01_rmax, bcm2712_pcie_01_rmax, "monitor=0,bus=6,counter=8"); +PMU_EVENT_ATTR_STRING(pcie_01_rpend, bcm2712_pcie_01_rpend, "monitor=0,bus=6,counter=9"); +PMU_EVENT_ATTR_STRING(pcie_01_ratrans, bcm2712_pcie_01_ratrans, "monitor=0,bus=6,counter=10"); +PMU_EVENT_ATTR_STRING(argon_top_atwait, bcm2712_argon_top_atwait, "monitor=0,bus=7,counter=0"); +PMU_EVENT_ATTR_STRING(argon_top_atrans, bcm2712_argon_top_atrans, "monitor=0,bus=7,counter=1"); +PMU_EVENT_ATTR_STRING(argon_top_amax, bcm2712_argon_top_amax, "monitor=0,bus=7,counter=2"); +PMU_EVENT_ATTR_STRING(argon_top_wwait, bcm2712_argon_top_wwait, "monitor=0,bus=7,counter=3"); +PMU_EVENT_ATTR_STRING(argon_top_wtrans, bcm2712_argon_top_wtrans, "monitor=0,bus=7,counter=4"); +PMU_EVENT_ATTR_STRING(argon_top_wmax, bcm2712_argon_top_wmax, "monitor=0,bus=7,counter=5"); +PMU_EVENT_ATTR_STRING(argon_top_rwait, bcm2712_argon_top_rwait, "monitor=0,bus=7,counter=6"); +PMU_EVENT_ATTR_STRING(argon_top_rtrans, bcm2712_argon_top_rtrans, "monitor=0,bus=7,counter=7"); +PMU_EVENT_ATTR_STRING(argon_top_rmax, bcm2712_argon_top_rmax, "monitor=0,bus=7,counter=8"); +PMU_EVENT_ATTR_STRING(argon_top_rpend, bcm2712_argon_top_rpend, "monitor=0,bus=7,counter=9"); +PMU_EVENT_ATTR_STRING(argon_top_ratrans, bcm2712_argon_top_ratrans, "monitor=0,bus=7,counter=10"); +PMU_EVENT_ATTR_STRING(sdio_wifi_atwait, bcm2712_sdio_wifi_atwait, "monitor=0,bus=8,counter=0"); +PMU_EVENT_ATTR_STRING(sdio_wifi_atrans, bcm2712_sdio_wifi_atrans, "monitor=0,bus=8,counter=1"); +PMU_EVENT_ATTR_STRING(sdio_wifi_amax, bcm2712_sdio_wifi_amax, "monitor=0,bus=8,counter=2"); +PMU_EVENT_ATTR_STRING(sdio_wifi_wwait, bcm2712_sdio_wifi_wwait, "monitor=0,bus=8,counter=3"); +PMU_EVENT_ATTR_STRING(sdio_wifi_wtrans, bcm2712_sdio_wifi_wtrans, "monitor=0,bus=8,counter=4"); +PMU_EVENT_ATTR_STRING(sdio_wifi_wmax, bcm2712_sdio_wifi_wmax, "monitor=0,bus=8,counter=5"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rwait, bcm2712_sdio_wifi_rwait, "monitor=0,bus=8,counter=6"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rtrans, bcm2712_sdio_wifi_rtrans, "monitor=0,bus=8,counter=7"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rmax, bcm2712_sdio_wifi_rmax, "monitor=0,bus=8,counter=8"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rpend, bcm2712_sdio_wifi_rpend, "monitor=0,bus=8,counter=9"); +PMU_EVENT_ATTR_STRING(sdio_wifi_ratrans, bcm2712_sdio_wifi_ratrans, "monitor=0,bus=8,counter=10"); +PMU_EVENT_ATTR_STRING(sd_dma_atwait, bcm2712_sd_dma_atwait, "monitor=0,bus=9,counter=0"); +PMU_EVENT_ATTR_STRING(sd_dma_atrans, bcm2712_sd_dma_atrans, "monitor=0,bus=9,counter=1"); +PMU_EVENT_ATTR_STRING(sd_dma_amax, bcm2712_sd_dma_amax, "monitor=0,bus=9,counter=2"); +PMU_EVENT_ATTR_STRING(sd_dma_wwait, bcm2712_sd_dma_wwait, "monitor=0,bus=9,counter=3"); +PMU_EVENT_ATTR_STRING(sd_dma_wtrans, bcm2712_sd_dma_wtrans, "monitor=0,bus=9,counter=4"); +PMU_EVENT_ATTR_STRING(sd_dma_wmax, bcm2712_sd_dma_wmax, "monitor=0,bus=9,counter=5"); +PMU_EVENT_ATTR_STRING(sd_dma_rwait, bcm2712_sd_dma_rwait, "monitor=0,bus=9,counter=6"); +PMU_EVENT_ATTR_STRING(sd_dma_rtrans, bcm2712_sd_dma_rtrans, "monitor=0,bus=9,counter=7"); +PMU_EVENT_ATTR_STRING(sd_dma_rmax, bcm2712_sd_dma_rmax, "monitor=0,bus=9,counter=8"); +PMU_EVENT_ATTR_STRING(sd_dma_rpend, bcm2712_sd_dma_rpend, "monitor=0,bus=9,counter=9"); +PMU_EVENT_ATTR_STRING(sd_dma_ratrans, bcm2712_sd_dma_ratrans, "monitor=0,bus=9,counter=10"); +PMU_EVENT_ATTR_STRING(hvdp_atwait, bcm2712_hvdp_atwait, "monitor=0,bus=10,counter=0"); +PMU_EVENT_ATTR_STRING(hvdp_atrans, bcm2712_hvdp_atrans, "monitor=0,bus=10,counter=1"); +PMU_EVENT_ATTR_STRING(hvdp_amax, bcm2712_hvdp_amax, "monitor=0,bus=10,counter=2"); +PMU_EVENT_ATTR_STRING(hvdp_wwait, bcm2712_hvdp_wwait, "monitor=0,bus=10,counter=3"); +PMU_EVENT_ATTR_STRING(hvdp_wtrans, bcm2712_hvdp_wtrans, "monitor=0,bus=10,counter=4"); +PMU_EVENT_ATTR_STRING(hvdp_wmax, bcm2712_hvdp_wmax, "monitor=0,bus=10,counter=5"); +PMU_EVENT_ATTR_STRING(hvdp_rwait, bcm2712_hvdp_rwait, "monitor=0,bus=10,counter=6"); +PMU_EVENT_ATTR_STRING(hvdp_rtrans, bcm2712_hvdp_rtrans, "monitor=0,bus=10,counter=7"); +PMU_EVENT_ATTR_STRING(hvdp_rmax, bcm2712_hvdp_rmax, "monitor=0,bus=10,counter=8"); +PMU_EVENT_ATTR_STRING(hvdp_rpend, bcm2712_hvdp_rpend, "monitor=0,bus=10,counter=9"); +PMU_EVENT_ATTR_STRING(hvdp_ratrans, bcm2712_hvdp_ratrans, "monitor=0,bus=10,counter=10"); +PMU_EVENT_ATTR_STRING(per_atwait, bcm2712_per_atwait, "monitor=0,bus=11,counter=0"); +PMU_EVENT_ATTR_STRING(per_atrans, bcm2712_per_atrans, "monitor=0,bus=11,counter=1"); +PMU_EVENT_ATTR_STRING(per_amax, bcm2712_per_amax, "monitor=0,bus=11,counter=2"); +PMU_EVENT_ATTR_STRING(per_wwait, bcm2712_per_wwait, "monitor=0,bus=11,counter=3"); +PMU_EVENT_ATTR_STRING(per_wtrans, bcm2712_per_wtrans, "monitor=0,bus=11,counter=4"); +PMU_EVENT_ATTR_STRING(per_wmax, bcm2712_per_wmax, "monitor=0,bus=11,counter=5"); +PMU_EVENT_ATTR_STRING(per_rwait, bcm2712_per_rwait, "monitor=0,bus=11,counter=6"); +PMU_EVENT_ATTR_STRING(per_rtrans, bcm2712_per_rtrans, "monitor=0,bus=11,counter=7"); +PMU_EVENT_ATTR_STRING(per_rmax, bcm2712_per_rmax, "monitor=0,bus=11,counter=8"); +PMU_EVENT_ATTR_STRING(per_rpend, bcm2712_per_rpend, "monitor=0,bus=11,counter=9"); +PMU_EVENT_ATTR_STRING(per_ratrans, bcm2712_per_ratrans, "monitor=0,bus=11,counter=10"); +PMU_EVENT_ATTR_STRING(system_l2_atwait, bcm2712_system_l2_atwait, "monitor=0,bus=12,counter=0"); +PMU_EVENT_ATTR_STRING(system_l2_atrans, bcm2712_system_l2_atrans, "monitor=0,bus=12,counter=1"); +PMU_EVENT_ATTR_STRING(system_l2_amax, bcm2712_system_l2_amax, "monitor=0,bus=12,counter=2"); +PMU_EVENT_ATTR_STRING(system_l2_wwait, bcm2712_system_l2_wwait, "monitor=0,bus=12,counter=3"); +PMU_EVENT_ATTR_STRING(system_l2_wtrans, bcm2712_system_l2_wtrans, "monitor=0,bus=12,counter=4"); +PMU_EVENT_ATTR_STRING(system_l2_wmax, bcm2712_system_l2_wmax, "monitor=0,bus=12,counter=5"); +PMU_EVENT_ATTR_STRING(system_l2_rwait, bcm2712_system_l2_rwait, "monitor=0,bus=12,counter=6"); +PMU_EVENT_ATTR_STRING(system_l2_rtrans, bcm2712_system_l2_rtrans, "monitor=0,bus=12,counter=7"); +PMU_EVENT_ATTR_STRING(system_l2_rmax, bcm2712_system_l2_rmax, "monitor=0,bus=12,counter=8"); +PMU_EVENT_ATTR_STRING(system_l2_rpend, bcm2712_system_l2_rpend, "monitor=0,bus=12,counter=9"); +PMU_EVENT_ATTR_STRING(system_l2_ratrans, bcm2712_system_l2_ratrans, "monitor=0,bus=12,counter=10"); +PMU_EVENT_ATTR_STRING(vpu_uc_atwait, bcm2712d0_vpu_uc_atwait, "monitor=0,bus=0,counter=0"); +PMU_EVENT_ATTR_STRING(vpu_uc_atrans, bcm2712d0_vpu_uc_atrans, "monitor=0,bus=0,counter=1"); +PMU_EVENT_ATTR_STRING(vpu_uc_amax, bcm2712d0_vpu_uc_amax, "monitor=0,bus=0,counter=2"); +PMU_EVENT_ATTR_STRING(vpu_uc_wwait, bcm2712d0_vpu_uc_wwait, "monitor=0,bus=0,counter=3"); +PMU_EVENT_ATTR_STRING(vpu_uc_wtrans, bcm2712d0_vpu_uc_wtrans, "monitor=0,bus=0,counter=4"); +PMU_EVENT_ATTR_STRING(vpu_uc_wmax, bcm2712d0_vpu_uc_wmax, "monitor=0,bus=0,counter=5"); +PMU_EVENT_ATTR_STRING(vpu_uc_rwait, bcm2712d0_vpu_uc_rwait, "monitor=0,bus=0,counter=6"); +PMU_EVENT_ATTR_STRING(vpu_uc_rtrans, bcm2712d0_vpu_uc_rtrans, "monitor=0,bus=0,counter=7"); +PMU_EVENT_ATTR_STRING(vpu_uc_rmax, bcm2712d0_vpu_uc_rmax, "monitor=0,bus=0,counter=8"); +PMU_EVENT_ATTR_STRING(vpu_uc_rpend, bcm2712d0_vpu_uc_rpend, "monitor=0,bus=0,counter=9"); +PMU_EVENT_ATTR_STRING(vpu_uc_ratrans, bcm2712d0_vpu_uc_ratrans, "monitor=0,bus=0,counter=10"); +PMU_EVENT_ATTR_STRING(display_top_atwait, bcm2712d0_display_top_atwait, "monitor=0,bus=1,counter=0"); +PMU_EVENT_ATTR_STRING(display_top_atrans, bcm2712d0_display_top_atrans, "monitor=0,bus=1,counter=1"); +PMU_EVENT_ATTR_STRING(display_top_amax, bcm2712d0_display_top_amax, "monitor=0,bus=1,counter=2"); +PMU_EVENT_ATTR_STRING(display_top_wwait, bcm2712d0_display_top_wwait, "monitor=0,bus=1,counter=3"); +PMU_EVENT_ATTR_STRING(display_top_wtrans, bcm2712d0_display_top_wtrans, "monitor=0,bus=1,counter=4"); +PMU_EVENT_ATTR_STRING(display_top_wmax, bcm2712d0_display_top_wmax, "monitor=0,bus=1,counter=5"); +PMU_EVENT_ATTR_STRING(display_top_rwait, bcm2712d0_display_top_rwait, "monitor=0,bus=1,counter=6"); +PMU_EVENT_ATTR_STRING(display_top_rtrans, bcm2712d0_display_top_rtrans, "monitor=0,bus=1,counter=7"); +PMU_EVENT_ATTR_STRING(display_top_rmax, bcm2712d0_display_top_rmax, "monitor=0,bus=1,counter=8"); +PMU_EVENT_ATTR_STRING(display_top_rpend, bcm2712d0_display_top_rpend, "monitor=0,bus=1,counter=9"); +PMU_EVENT_ATTR_STRING(display_top_ratrans, bcm2712d0_display_top_ratrans, "monitor=0,bus=1,counter=10"); +PMU_EVENT_ATTR_STRING(v3d_atwait, bcm2712d0_v3d_atwait, "monitor=0,bus=2,counter=0"); +PMU_EVENT_ATTR_STRING(v3d_atrans, bcm2712d0_v3d_atrans, "monitor=0,bus=2,counter=1"); +PMU_EVENT_ATTR_STRING(v3d_amax, bcm2712d0_v3d_amax, "monitor=0,bus=2,counter=2"); +PMU_EVENT_ATTR_STRING(v3d_wwait, bcm2712d0_v3d_wwait, "monitor=0,bus=2,counter=3"); +PMU_EVENT_ATTR_STRING(v3d_wtrans, bcm2712d0_v3d_wtrans, "monitor=0,bus=2,counter=4"); +PMU_EVENT_ATTR_STRING(v3d_wmax, bcm2712d0_v3d_wmax, "monitor=0,bus=2,counter=5"); +PMU_EVENT_ATTR_STRING(v3d_rwait, bcm2712d0_v3d_rwait, "monitor=0,bus=2,counter=6"); +PMU_EVENT_ATTR_STRING(v3d_rtrans, bcm2712d0_v3d_rtrans, "monitor=0,bus=2,counter=7"); +PMU_EVENT_ATTR_STRING(v3d_rmax, bcm2712d0_v3d_rmax, "monitor=0,bus=2,counter=8"); +PMU_EVENT_ATTR_STRING(v3d_rpend, bcm2712d0_v3d_rpend, "monitor=0,bus=2,counter=9"); +PMU_EVENT_ATTR_STRING(v3d_ratrans, bcm2712d0_v3d_ratrans, "monitor=0,bus=2,counter=10"); +PMU_EVENT_ATTR_STRING(arm_atwait, bcm2712d0_arm_atwait, "monitor=0,bus=3,counter=0"); +PMU_EVENT_ATTR_STRING(arm_atrans, bcm2712d0_arm_atrans, "monitor=0,bus=3,counter=1"); +PMU_EVENT_ATTR_STRING(arm_amax, bcm2712d0_arm_amax, "monitor=0,bus=3,counter=2"); +PMU_EVENT_ATTR_STRING(arm_wwait, bcm2712d0_arm_wwait, "monitor=0,bus=3,counter=3"); +PMU_EVENT_ATTR_STRING(arm_wtrans, bcm2712d0_arm_wtrans, "monitor=0,bus=3,counter=4"); +PMU_EVENT_ATTR_STRING(arm_wmax, bcm2712d0_arm_wmax, "monitor=0,bus=3,counter=5"); +PMU_EVENT_ATTR_STRING(arm_rwait, bcm2712d0_arm_rwait, "monitor=0,bus=3,counter=6"); +PMU_EVENT_ATTR_STRING(arm_rtrans, bcm2712d0_arm_rtrans, "monitor=0,bus=3,counter=7"); +PMU_EVENT_ATTR_STRING(arm_rmax, bcm2712d0_arm_rmax, "monitor=0,bus=3,counter=8"); +PMU_EVENT_ATTR_STRING(arm_rpend, bcm2712d0_arm_rpend, "monitor=0,bus=3,counter=9"); +PMU_EVENT_ATTR_STRING(arm_ratrans, bcm2712d0_arm_ratrans, "monitor=0,bus=3,counter=10"); +PMU_EVENT_ATTR_STRING(rp1_atwait, bcm2712d0_rp1_atwait, "monitor=0,bus=4,counter=0"); +PMU_EVENT_ATTR_STRING(rp1_atrans, bcm2712d0_rp1_atrans, "monitor=0,bus=4,counter=1"); +PMU_EVENT_ATTR_STRING(rp1_amax, bcm2712d0_rp1_amax, "monitor=0,bus=4,counter=2"); +PMU_EVENT_ATTR_STRING(rp1_wwait, bcm2712d0_rp1_wwait, "monitor=0,bus=4,counter=3"); +PMU_EVENT_ATTR_STRING(rp1_wtrans, bcm2712d0_rp1_wtrans, "monitor=0,bus=4,counter=4"); +PMU_EVENT_ATTR_STRING(rp1_wmax, bcm2712d0_rp1_wmax, "monitor=0,bus=4,counter=5"); +PMU_EVENT_ATTR_STRING(rp1_rwait, bcm2712d0_rp1_rwait, "monitor=0,bus=4,counter=6"); +PMU_EVENT_ATTR_STRING(rp1_rtrans, bcm2712d0_rp1_rtrans, "monitor=0,bus=4,counter=7"); +PMU_EVENT_ATTR_STRING(rp1_rmax, bcm2712d0_rp1_rmax, "monitor=0,bus=4,counter=8"); +PMU_EVENT_ATTR_STRING(rp1_rpend, bcm2712d0_rp1_rpend, "monitor=0,bus=4,counter=9"); +PMU_EVENT_ATTR_STRING(rp1_ratrans, bcm2712d0_rp1_ratrans, "monitor=0,bus=4,counter=10"); +PMU_EVENT_ATTR_STRING(argon_top_atwait, bcm2712d0_argon_top_atwait, "monitor=0,bus=5,counter=0"); +PMU_EVENT_ATTR_STRING(argon_top_atrans, bcm2712d0_argon_top_atrans, "monitor=0,bus=5,counter=1"); +PMU_EVENT_ATTR_STRING(argon_top_amax, bcm2712d0_argon_top_amax, "monitor=0,bus=5,counter=2"); +PMU_EVENT_ATTR_STRING(argon_top_wwait, bcm2712d0_argon_top_wwait, "monitor=0,bus=5,counter=3"); +PMU_EVENT_ATTR_STRING(argon_top_wtrans, bcm2712d0_argon_top_wtrans, "monitor=0,bus=5,counter=4"); +PMU_EVENT_ATTR_STRING(argon_top_wmax, bcm2712d0_argon_top_wmax, "monitor=0,bus=5,counter=5"); +PMU_EVENT_ATTR_STRING(argon_top_rwait, bcm2712d0_argon_top_rwait, "monitor=0,bus=5,counter=6"); +PMU_EVENT_ATTR_STRING(argon_top_rtrans, bcm2712d0_argon_top_rtrans, "monitor=0,bus=5,counter=7"); +PMU_EVENT_ATTR_STRING(argon_top_rmax, bcm2712d0_argon_top_rmax, "monitor=0,bus=5,counter=8"); +PMU_EVENT_ATTR_STRING(argon_top_rpend, bcm2712d0_argon_top_rpend, "monitor=0,bus=5,counter=9"); +PMU_EVENT_ATTR_STRING(argon_top_ratrans, bcm2712d0_argon_top_ratrans, "monitor=0,bus=5,counter=10"); +PMU_EVENT_ATTR_STRING(sdio_wifi_atwait, bcm2712d0_sdio_wifi_atwait, "monitor=0,bus=6,counter=0"); +PMU_EVENT_ATTR_STRING(sdio_wifi_atrans, bcm2712d0_sdio_wifi_atrans, "monitor=0,bus=6,counter=1"); +PMU_EVENT_ATTR_STRING(sdio_wifi_amax, bcm2712d0_sdio_wifi_amax, "monitor=0,bus=6,counter=2"); +PMU_EVENT_ATTR_STRING(sdio_wifi_wwait, bcm2712d0_sdio_wifi_wwait, "monitor=0,bus=6,counter=3"); +PMU_EVENT_ATTR_STRING(sdio_wifi_wtrans, bcm2712d0_sdio_wifi_wtrans, "monitor=0,bus=6,counter=4"); +PMU_EVENT_ATTR_STRING(sdio_wifi_wmax, bcm2712d0_sdio_wifi_wmax, "monitor=0,bus=6,counter=5"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rwait, bcm2712d0_sdio_wifi_rwait, "monitor=0,bus=6,counter=6"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rtrans, bcm2712d0_sdio_wifi_rtrans, "monitor=0,bus=6,counter=7"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rmax, bcm2712d0_sdio_wifi_rmax, "monitor=0,bus=6,counter=8"); +PMU_EVENT_ATTR_STRING(sdio_wifi_rpend, bcm2712d0_sdio_wifi_rpend, "monitor=0,bus=6,counter=9"); +PMU_EVENT_ATTR_STRING(sdio_wifi_ratrans, bcm2712d0_sdio_wifi_ratrans, "monitor=0,bus=6,counter=10"); +PMU_EVENT_ATTR_STRING(sd_dma_atwait, bcm2712d0_sd_dma_atwait, "monitor=0,bus=7,counter=0"); +PMU_EVENT_ATTR_STRING(sd_dma_atrans, bcm2712d0_sd_dma_atrans, "monitor=0,bus=7,counter=1"); +PMU_EVENT_ATTR_STRING(sd_dma_amax, bcm2712d0_sd_dma_amax, "monitor=0,bus=7,counter=2"); +PMU_EVENT_ATTR_STRING(sd_dma_wwait, bcm2712d0_sd_dma_wwait, "monitor=0,bus=7,counter=3"); +PMU_EVENT_ATTR_STRING(sd_dma_wtrans, bcm2712d0_sd_dma_wtrans, "monitor=0,bus=7,counter=4"); +PMU_EVENT_ATTR_STRING(sd_dma_wmax, bcm2712d0_sd_dma_wmax, "monitor=0,bus=7,counter=5"); +PMU_EVENT_ATTR_STRING(sd_dma_rwait, bcm2712d0_sd_dma_rwait, "monitor=0,bus=7,counter=6"); +PMU_EVENT_ATTR_STRING(sd_dma_rtrans, bcm2712d0_sd_dma_rtrans, "monitor=0,bus=7,counter=7"); +PMU_EVENT_ATTR_STRING(sd_dma_rmax, bcm2712d0_sd_dma_rmax, "monitor=0,bus=7,counter=8"); +PMU_EVENT_ATTR_STRING(sd_dma_rpend, bcm2712d0_sd_dma_rpend, "monitor=0,bus=7,counter=9"); +PMU_EVENT_ATTR_STRING(sd_dma_ratrans, bcm2712d0_sd_dma_ratrans, "monitor=0,bus=7,counter=10"); +PMU_EVENT_ATTR_STRING(per_atwait, bcm2712d0_per_atwait, "monitor=0,bus=8,counter=0"); +PMU_EVENT_ATTR_STRING(per_atrans, bcm2712d0_per_atrans, "monitor=0,bus=8,counter=1"); +PMU_EVENT_ATTR_STRING(per_amax, bcm2712d0_per_amax, "monitor=0,bus=8,counter=2"); +PMU_EVENT_ATTR_STRING(per_wwait, bcm2712d0_per_wwait, "monitor=0,bus=8,counter=3"); +PMU_EVENT_ATTR_STRING(per_wtrans, bcm2712d0_per_wtrans, "monitor=0,bus=8,counter=4"); +PMU_EVENT_ATTR_STRING(per_wmax, bcm2712d0_per_wmax, "monitor=0,bus=8,counter=5"); +PMU_EVENT_ATTR_STRING(per_rwait, bcm2712d0_per_rwait, "monitor=0,bus=8,counter=6"); +PMU_EVENT_ATTR_STRING(per_rtrans, bcm2712d0_per_rtrans, "monitor=0,bus=8,counter=7"); +PMU_EVENT_ATTR_STRING(per_rmax, bcm2712d0_per_rmax, "monitor=0,bus=8,counter=8"); +PMU_EVENT_ATTR_STRING(per_rpend, bcm2712d0_per_rpend, "monitor=0,bus=8,counter=9"); +PMU_EVENT_ATTR_STRING(per_ratrans, bcm2712d0_per_ratrans, "monitor=0,bus=8,counter=10"); +PMU_EVENT_ATTR_STRING(system_l2_atwait, bcm2712d0_system_l2_atwait, "monitor=0,bus=9,counter=0"); +PMU_EVENT_ATTR_STRING(system_l2_atrans, bcm2712d0_system_l2_atrans, "monitor=0,bus=9,counter=1"); +PMU_EVENT_ATTR_STRING(system_l2_amax, bcm2712d0_system_l2_amax, "monitor=0,bus=9,counter=2"); +PMU_EVENT_ATTR_STRING(system_l2_wwait, bcm2712d0_system_l2_wwait, "monitor=0,bus=9,counter=3"); +PMU_EVENT_ATTR_STRING(system_l2_wtrans, bcm2712d0_system_l2_wtrans, "monitor=0,bus=9,counter=4"); +PMU_EVENT_ATTR_STRING(system_l2_wmax, bcm2712d0_system_l2_wmax, "monitor=0,bus=9,counter=5"); +PMU_EVENT_ATTR_STRING(system_l2_rwait, bcm2712d0_system_l2_rwait, "monitor=0,bus=9,counter=6"); +PMU_EVENT_ATTR_STRING(system_l2_rtrans, bcm2712d0_system_l2_rtrans, "monitor=0,bus=9,counter=7"); +PMU_EVENT_ATTR_STRING(system_l2_rmax, bcm2712d0_system_l2_rmax, "monitor=0,bus=9,counter=8"); +PMU_EVENT_ATTR_STRING(system_l2_rpend, bcm2712d0_system_l2_rpend, "monitor=0,bus=9,counter=9"); +PMU_EVENT_ATTR_STRING(system_l2_ratrans, bcm2712d0_system_l2_ratrans, "monitor=0,bus=9,counter=10"); + +static struct attribute *bcm2712_events[] = { + &bcm2712_vpu_uc_atwait.attr.attr, + &bcm2712_vpu_uc_atrans.attr.attr, + &bcm2712_vpu_uc_amax.attr.attr, + &bcm2712_vpu_uc_wwait.attr.attr, + &bcm2712_vpu_uc_wtrans.attr.attr, + &bcm2712_vpu_uc_wmax.attr.attr, + &bcm2712_vpu_uc_rwait.attr.attr, + &bcm2712_vpu_uc_rtrans.attr.attr, + &bcm2712_vpu_uc_rmax.attr.attr, + &bcm2712_vpu_uc_rpend.attr.attr, + &bcm2712_vpu_uc_ratrans.attr.attr, + &bcm2712_display_top_atwait.attr.attr, + &bcm2712_display_top_atrans.attr.attr, + &bcm2712_display_top_amax.attr.attr, + &bcm2712_display_top_wwait.attr.attr, + &bcm2712_display_top_wtrans.attr.attr, + &bcm2712_display_top_wmax.attr.attr, + &bcm2712_display_top_rwait.attr.attr, + &bcm2712_display_top_rtrans.attr.attr, + &bcm2712_display_top_rmax.attr.attr, + &bcm2712_display_top_rpend.attr.attr, + &bcm2712_display_top_ratrans.attr.attr, + &bcm2712_v3d_atwait.attr.attr, + &bcm2712_v3d_atrans.attr.attr, + &bcm2712_v3d_amax.attr.attr, + &bcm2712_v3d_wwait.attr.attr, + &bcm2712_v3d_wtrans.attr.attr, + &bcm2712_v3d_wmax.attr.attr, + &bcm2712_v3d_rwait.attr.attr, + &bcm2712_v3d_rtrans.attr.attr, + &bcm2712_v3d_rmax.attr.attr, + &bcm2712_v3d_rpend.attr.attr, + &bcm2712_v3d_ratrans.attr.attr, + &bcm2712_arm_atwait.attr.attr, + &bcm2712_arm_atrans.attr.attr, + &bcm2712_arm_amax.attr.attr, + &bcm2712_arm_wwait.attr.attr, + &bcm2712_arm_wtrans.attr.attr, + &bcm2712_arm_wmax.attr.attr, + &bcm2712_arm_rwait.attr.attr, + &bcm2712_arm_rtrans.attr.attr, + &bcm2712_arm_rmax.attr.attr, + &bcm2712_arm_rpend.attr.attr, + &bcm2712_arm_ratrans.attr.attr, + &bcm2712_xpt_atwait.attr.attr, + &bcm2712_xpt_atrans.attr.attr, + &bcm2712_xpt_amax.attr.attr, + &bcm2712_xpt_wwait.attr.attr, + &bcm2712_xpt_wtrans.attr.attr, + &bcm2712_xpt_wmax.attr.attr, + &bcm2712_xpt_rwait.attr.attr, + &bcm2712_xpt_rtrans.attr.attr, + &bcm2712_xpt_rmax.attr.attr, + &bcm2712_xpt_rpend.attr.attr, + &bcm2712_xpt_ratrans.attr.attr, + &bcm2712_rp1_atwait.attr.attr, + &bcm2712_rp1_atrans.attr.attr, + &bcm2712_rp1_amax.attr.attr, + &bcm2712_rp1_wwait.attr.attr, + &bcm2712_rp1_wtrans.attr.attr, + &bcm2712_rp1_wmax.attr.attr, + &bcm2712_rp1_rwait.attr.attr, + &bcm2712_rp1_rtrans.attr.attr, + &bcm2712_rp1_rmax.attr.attr, + &bcm2712_rp1_rpend.attr.attr, + &bcm2712_rp1_ratrans.attr.attr, + &bcm2712_pcie_01_atwait.attr.attr, + &bcm2712_pcie_01_atrans.attr.attr, + &bcm2712_pcie_01_amax.attr.attr, + &bcm2712_pcie_01_wwait.attr.attr, + &bcm2712_pcie_01_wtrans.attr.attr, + &bcm2712_pcie_01_wmax.attr.attr, + &bcm2712_pcie_01_rwait.attr.attr, + &bcm2712_pcie_01_rtrans.attr.attr, + &bcm2712_pcie_01_rmax.attr.attr, + &bcm2712_pcie_01_rpend.attr.attr, + &bcm2712_pcie_01_ratrans.attr.attr, + &bcm2712_argon_top_atwait.attr.attr, + &bcm2712_argon_top_atrans.attr.attr, + &bcm2712_argon_top_amax.attr.attr, + &bcm2712_argon_top_wwait.attr.attr, + &bcm2712_argon_top_wtrans.attr.attr, + &bcm2712_argon_top_wmax.attr.attr, + &bcm2712_argon_top_rwait.attr.attr, + &bcm2712_argon_top_rtrans.attr.attr, + &bcm2712_argon_top_rmax.attr.attr, + &bcm2712_argon_top_rpend.attr.attr, + &bcm2712_argon_top_ratrans.attr.attr, + &bcm2712_sdio_wifi_atwait.attr.attr, + &bcm2712_sdio_wifi_atrans.attr.attr, + &bcm2712_sdio_wifi_amax.attr.attr, + &bcm2712_sdio_wifi_wwait.attr.attr, + &bcm2712_sdio_wifi_wtrans.attr.attr, + &bcm2712_sdio_wifi_wmax.attr.attr, + &bcm2712_sdio_wifi_rwait.attr.attr, + &bcm2712_sdio_wifi_rtrans.attr.attr, + &bcm2712_sdio_wifi_rmax.attr.attr, + &bcm2712_sdio_wifi_rpend.attr.attr, + &bcm2712_sdio_wifi_ratrans.attr.attr, + &bcm2712_sd_dma_atwait.attr.attr, + &bcm2712_sd_dma_atrans.attr.attr, + &bcm2712_sd_dma_amax.attr.attr, + &bcm2712_sd_dma_wwait.attr.attr, + &bcm2712_sd_dma_wtrans.attr.attr, + &bcm2712_sd_dma_wmax.attr.attr, + &bcm2712_sd_dma_rwait.attr.attr, + &bcm2712_sd_dma_rtrans.attr.attr, + &bcm2712_sd_dma_rmax.attr.attr, + &bcm2712_sd_dma_rpend.attr.attr, + &bcm2712_sd_dma_ratrans.attr.attr, + &bcm2712_hvdp_atwait.attr.attr, + &bcm2712_hvdp_atrans.attr.attr, + &bcm2712_hvdp_amax.attr.attr, + &bcm2712_hvdp_wwait.attr.attr, + &bcm2712_hvdp_wtrans.attr.attr, + &bcm2712_hvdp_wmax.attr.attr, + &bcm2712_hvdp_rwait.attr.attr, + &bcm2712_hvdp_rtrans.attr.attr, + &bcm2712_hvdp_rmax.attr.attr, + &bcm2712_hvdp_rpend.attr.attr, + &bcm2712_hvdp_ratrans.attr.attr, + &bcm2712_per_atwait.attr.attr, + &bcm2712_per_atrans.attr.attr, + &bcm2712_per_amax.attr.attr, + &bcm2712_per_wwait.attr.attr, + &bcm2712_per_wtrans.attr.attr, + &bcm2712_per_wmax.attr.attr, + &bcm2712_per_rwait.attr.attr, + &bcm2712_per_rtrans.attr.attr, + &bcm2712_per_rmax.attr.attr, + &bcm2712_per_rpend.attr.attr, + &bcm2712_per_ratrans.attr.attr, + &bcm2712_system_l2_atwait.attr.attr, + &bcm2712_system_l2_atrans.attr.attr, + &bcm2712_system_l2_amax.attr.attr, + &bcm2712_system_l2_wwait.attr.attr, + &bcm2712_system_l2_wtrans.attr.attr, + &bcm2712_system_l2_wmax.attr.attr, + &bcm2712_system_l2_rwait.attr.attr, + &bcm2712_system_l2_rtrans.attr.attr, + &bcm2712_system_l2_rmax.attr.attr, + &bcm2712_system_l2_rpend.attr.attr, + &bcm2712_system_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_atwait.attr.attr, + &bcm2712_vpu_vpu1_d_l2_atrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_amax.attr.attr, + &bcm2712_vpu_vpu1_d_l2_wwait.attr.attr, + &bcm2712_vpu_vpu1_d_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_wmax.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rwait.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rmax.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rpend.attr.attr, + &bcm2712_vpu_vpu1_d_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_atwait.attr.attr, + &bcm2712_vpu_vpu0_d_l2_atrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_amax.attr.attr, + &bcm2712_vpu_vpu0_d_l2_wwait.attr.attr, + &bcm2712_vpu_vpu0_d_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_wmax.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rwait.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rmax.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rpend.attr.attr, + &bcm2712_vpu_vpu0_d_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_atwait.attr.attr, + &bcm2712_vpu_vpu1_i_l2_atrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_amax.attr.attr, + &bcm2712_vpu_vpu1_i_l2_wwait.attr.attr, + &bcm2712_vpu_vpu1_i_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_wmax.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rwait.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rmax.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rpend.attr.attr, + &bcm2712_vpu_vpu1_i_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_atwait.attr.attr, + &bcm2712_vpu_vpu0_i_l2_atrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_amax.attr.attr, + &bcm2712_vpu_vpu0_i_l2_wwait.attr.attr, + &bcm2712_vpu_vpu0_i_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_wmax.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rwait.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rmax.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rpend.attr.attr, + &bcm2712_vpu_vpu0_i_l2_ratrans.attr.attr, + &bcm2712_vpu_system_l2_atwait.attr.attr, + &bcm2712_vpu_system_l2_atrans.attr.attr, + &bcm2712_vpu_system_l2_amax.attr.attr, + &bcm2712_vpu_system_l2_wwait.attr.attr, + &bcm2712_vpu_system_l2_wtrans.attr.attr, + &bcm2712_vpu_system_l2_wmax.attr.attr, + &bcm2712_vpu_system_l2_rwait.attr.attr, + &bcm2712_vpu_system_l2_rtrans.attr.attr, + &bcm2712_vpu_system_l2_rmax.attr.attr, + &bcm2712_vpu_system_l2_rpend.attr.attr, + &bcm2712_vpu_system_l2_ratrans.attr.attr, + &bcm2712_vpu_dma_l2_atwait.attr.attr, + &bcm2712_vpu_dma_l2_atrans.attr.attr, + &bcm2712_vpu_dma_l2_amax.attr.attr, + &bcm2712_vpu_dma_l2_wwait.attr.attr, + &bcm2712_vpu_dma_l2_wtrans.attr.attr, + &bcm2712_vpu_dma_l2_wmax.attr.attr, + &bcm2712_vpu_dma_l2_rwait.attr.attr, + &bcm2712_vpu_dma_l2_rtrans.attr.attr, + &bcm2712_vpu_dma_l2_rmax.attr.attr, + &bcm2712_vpu_dma_l2_rpend.attr.attr, + &bcm2712_vpu_dma_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_atwait.attr.attr, + &bcm2712_vpu_vpu1_d_uc_atrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_amax.attr.attr, + &bcm2712_vpu_vpu1_d_uc_wwait.attr.attr, + &bcm2712_vpu_vpu1_d_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_wmax.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rwait.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rmax.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rpend.attr.attr, + &bcm2712_vpu_vpu1_d_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_atwait.attr.attr, + &bcm2712_vpu_vpu0_d_uc_atrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_amax.attr.attr, + &bcm2712_vpu_vpu0_d_uc_wwait.attr.attr, + &bcm2712_vpu_vpu0_d_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_wmax.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rwait.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rmax.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rpend.attr.attr, + &bcm2712_vpu_vpu0_d_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_atwait.attr.attr, + &bcm2712_vpu_vpu1_i_uc_atrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_amax.attr.attr, + &bcm2712_vpu_vpu1_i_uc_wwait.attr.attr, + &bcm2712_vpu_vpu1_i_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_wmax.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rwait.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rmax.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rpend.attr.attr, + &bcm2712_vpu_vpu1_i_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_atwait.attr.attr, + &bcm2712_vpu_vpu0_i_uc_atrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_amax.attr.attr, + &bcm2712_vpu_vpu0_i_uc_wwait.attr.attr, + &bcm2712_vpu_vpu0_i_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_wmax.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rwait.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rmax.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rpend.attr.attr, + &bcm2712_vpu_vpu0_i_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu_uc_atwait.attr.attr, + &bcm2712_vpu_vpu_uc_atrans.attr.attr, + &bcm2712_vpu_vpu_uc_amax.attr.attr, + &bcm2712_vpu_vpu_uc_wwait.attr.attr, + &bcm2712_vpu_vpu_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu_uc_wmax.attr.attr, + &bcm2712_vpu_vpu_uc_rwait.attr.attr, + &bcm2712_vpu_vpu_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu_uc_rmax.attr.attr, + &bcm2712_vpu_vpu_uc_rpend.attr.attr, + &bcm2712_vpu_vpu_uc_ratrans.attr.attr, + &bcm2712_vpu_l2_out_atwait.attr.attr, + &bcm2712_vpu_l2_out_atrans.attr.attr, + &bcm2712_vpu_l2_out_amax.attr.attr, + &bcm2712_vpu_l2_out_wwait.attr.attr, + &bcm2712_vpu_l2_out_wtrans.attr.attr, + &bcm2712_vpu_l2_out_wmax.attr.attr, + &bcm2712_vpu_l2_out_rwait.attr.attr, + &bcm2712_vpu_l2_out_rtrans.attr.attr, + &bcm2712_vpu_l2_out_rmax.attr.attr, + &bcm2712_vpu_l2_out_rpend.attr.attr, + &bcm2712_vpu_l2_out_ratrans.attr.attr, + &bcm2712_vpu_dma_uc_atwait.attr.attr, + &bcm2712_vpu_dma_uc_atrans.attr.attr, + &bcm2712_vpu_dma_uc_amax.attr.attr, + &bcm2712_vpu_dma_uc_wwait.attr.attr, + &bcm2712_vpu_dma_uc_wtrans.attr.attr, + &bcm2712_vpu_dma_uc_wmax.attr.attr, + &bcm2712_vpu_dma_uc_rwait.attr.attr, + &bcm2712_vpu_dma_uc_rtrans.attr.attr, + &bcm2712_vpu_dma_uc_rmax.attr.attr, + &bcm2712_vpu_dma_uc_rpend.attr.attr, + &bcm2712_vpu_dma_uc_ratrans.attr.attr, + &bcm2712_vpu_l2_in_atwait.attr.attr, + &bcm2712_vpu_l2_in_atrans.attr.attr, + &bcm2712_vpu_l2_in_amax.attr.attr, + &bcm2712_vpu_l2_in_wwait.attr.attr, + &bcm2712_vpu_l2_in_wtrans.attr.attr, + &bcm2712_vpu_l2_in_wmax.attr.attr, + &bcm2712_vpu_l2_in_rwait.attr.attr, + &bcm2712_vpu_l2_in_rtrans.attr.attr, + &bcm2712_vpu_l2_in_rmax.attr.attr, + &bcm2712_vpu_l2_in_rpend.attr.attr, + &bcm2712_vpu_l2_in_ratrans.attr.attr, + NULL, +}; + +static struct attribute *bcm2712d0_events[] = { + &bcm2712d0_vpu_uc_atwait.attr.attr, + &bcm2712d0_vpu_uc_atrans.attr.attr, + &bcm2712d0_vpu_uc_amax.attr.attr, + &bcm2712d0_vpu_uc_wwait.attr.attr, + &bcm2712d0_vpu_uc_wtrans.attr.attr, + &bcm2712d0_vpu_uc_wmax.attr.attr, + &bcm2712d0_vpu_uc_rwait.attr.attr, + &bcm2712d0_vpu_uc_rtrans.attr.attr, + &bcm2712d0_vpu_uc_rmax.attr.attr, + &bcm2712d0_vpu_uc_rpend.attr.attr, + &bcm2712d0_vpu_uc_ratrans.attr.attr, + &bcm2712d0_display_top_atwait.attr.attr, + &bcm2712d0_display_top_atrans.attr.attr, + &bcm2712d0_display_top_amax.attr.attr, + &bcm2712d0_display_top_wwait.attr.attr, + &bcm2712d0_display_top_wtrans.attr.attr, + &bcm2712d0_display_top_wmax.attr.attr, + &bcm2712d0_display_top_rwait.attr.attr, + &bcm2712d0_display_top_rtrans.attr.attr, + &bcm2712d0_display_top_rmax.attr.attr, + &bcm2712d0_display_top_rpend.attr.attr, + &bcm2712d0_display_top_ratrans.attr.attr, + &bcm2712d0_v3d_atwait.attr.attr, + &bcm2712d0_v3d_atrans.attr.attr, + &bcm2712d0_v3d_amax.attr.attr, + &bcm2712d0_v3d_wwait.attr.attr, + &bcm2712d0_v3d_wtrans.attr.attr, + &bcm2712d0_v3d_wmax.attr.attr, + &bcm2712d0_v3d_rwait.attr.attr, + &bcm2712d0_v3d_rtrans.attr.attr, + &bcm2712d0_v3d_rmax.attr.attr, + &bcm2712d0_v3d_rpend.attr.attr, + &bcm2712d0_v3d_ratrans.attr.attr, + &bcm2712d0_arm_atwait.attr.attr, + &bcm2712d0_arm_atrans.attr.attr, + &bcm2712d0_arm_amax.attr.attr, + &bcm2712d0_arm_wwait.attr.attr, + &bcm2712d0_arm_wtrans.attr.attr, + &bcm2712d0_arm_wmax.attr.attr, + &bcm2712d0_arm_rwait.attr.attr, + &bcm2712d0_arm_rtrans.attr.attr, + &bcm2712d0_arm_rmax.attr.attr, + &bcm2712d0_arm_rpend.attr.attr, + &bcm2712d0_arm_ratrans.attr.attr, + &bcm2712d0_rp1_atwait.attr.attr, + &bcm2712d0_rp1_atrans.attr.attr, + &bcm2712d0_rp1_amax.attr.attr, + &bcm2712d0_rp1_wwait.attr.attr, + &bcm2712d0_rp1_wtrans.attr.attr, + &bcm2712d0_rp1_wmax.attr.attr, + &bcm2712d0_rp1_rwait.attr.attr, + &bcm2712d0_rp1_rtrans.attr.attr, + &bcm2712d0_rp1_rmax.attr.attr, + &bcm2712d0_rp1_rpend.attr.attr, + &bcm2712d0_rp1_ratrans.attr.attr, + &bcm2712d0_argon_top_atwait.attr.attr, + &bcm2712d0_argon_top_atrans.attr.attr, + &bcm2712d0_argon_top_amax.attr.attr, + &bcm2712d0_argon_top_wwait.attr.attr, + &bcm2712d0_argon_top_wtrans.attr.attr, + &bcm2712d0_argon_top_wmax.attr.attr, + &bcm2712d0_argon_top_rwait.attr.attr, + &bcm2712d0_argon_top_rtrans.attr.attr, + &bcm2712d0_argon_top_rmax.attr.attr, + &bcm2712d0_argon_top_rpend.attr.attr, + &bcm2712d0_argon_top_ratrans.attr.attr, + &bcm2712d0_sdio_wifi_atwait.attr.attr, + &bcm2712d0_sdio_wifi_atrans.attr.attr, + &bcm2712d0_sdio_wifi_amax.attr.attr, + &bcm2712d0_sdio_wifi_wwait.attr.attr, + &bcm2712d0_sdio_wifi_wtrans.attr.attr, + &bcm2712d0_sdio_wifi_wmax.attr.attr, + &bcm2712d0_sdio_wifi_rwait.attr.attr, + &bcm2712d0_sdio_wifi_rtrans.attr.attr, + &bcm2712d0_sdio_wifi_rmax.attr.attr, + &bcm2712d0_sdio_wifi_rpend.attr.attr, + &bcm2712d0_sdio_wifi_ratrans.attr.attr, + &bcm2712d0_sd_dma_atwait.attr.attr, + &bcm2712d0_sd_dma_atrans.attr.attr, + &bcm2712d0_sd_dma_amax.attr.attr, + &bcm2712d0_sd_dma_wwait.attr.attr, + &bcm2712d0_sd_dma_wtrans.attr.attr, + &bcm2712d0_sd_dma_wmax.attr.attr, + &bcm2712d0_sd_dma_rwait.attr.attr, + &bcm2712d0_sd_dma_rtrans.attr.attr, + &bcm2712d0_sd_dma_rmax.attr.attr, + &bcm2712d0_sd_dma_rpend.attr.attr, + &bcm2712d0_sd_dma_ratrans.attr.attr, + &bcm2712d0_per_atwait.attr.attr, + &bcm2712d0_per_atrans.attr.attr, + &bcm2712d0_per_amax.attr.attr, + &bcm2712d0_per_wwait.attr.attr, + &bcm2712d0_per_wtrans.attr.attr, + &bcm2712d0_per_wmax.attr.attr, + &bcm2712d0_per_rwait.attr.attr, + &bcm2712d0_per_rtrans.attr.attr, + &bcm2712d0_per_rmax.attr.attr, + &bcm2712d0_per_rpend.attr.attr, + &bcm2712d0_per_ratrans.attr.attr, + &bcm2712d0_system_l2_atwait.attr.attr, + &bcm2712d0_system_l2_atrans.attr.attr, + &bcm2712d0_system_l2_amax.attr.attr, + &bcm2712d0_system_l2_wwait.attr.attr, + &bcm2712d0_system_l2_wtrans.attr.attr, + &bcm2712d0_system_l2_wmax.attr.attr, + &bcm2712d0_system_l2_rwait.attr.attr, + &bcm2712d0_system_l2_rtrans.attr.attr, + &bcm2712d0_system_l2_rmax.attr.attr, + &bcm2712d0_system_l2_rpend.attr.attr, + &bcm2712d0_system_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_atwait.attr.attr, + &bcm2712_vpu_vpu1_d_l2_atrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_amax.attr.attr, + &bcm2712_vpu_vpu1_d_l2_wwait.attr.attr, + &bcm2712_vpu_vpu1_d_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_wmax.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rwait.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rmax.attr.attr, + &bcm2712_vpu_vpu1_d_l2_rpend.attr.attr, + &bcm2712_vpu_vpu1_d_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_atwait.attr.attr, + &bcm2712_vpu_vpu0_d_l2_atrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_amax.attr.attr, + &bcm2712_vpu_vpu0_d_l2_wwait.attr.attr, + &bcm2712_vpu_vpu0_d_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_wmax.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rwait.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rmax.attr.attr, + &bcm2712_vpu_vpu0_d_l2_rpend.attr.attr, + &bcm2712_vpu_vpu0_d_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_atwait.attr.attr, + &bcm2712_vpu_vpu1_i_l2_atrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_amax.attr.attr, + &bcm2712_vpu_vpu1_i_l2_wwait.attr.attr, + &bcm2712_vpu_vpu1_i_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_wmax.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rwait.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rmax.attr.attr, + &bcm2712_vpu_vpu1_i_l2_rpend.attr.attr, + &bcm2712_vpu_vpu1_i_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_atwait.attr.attr, + &bcm2712_vpu_vpu0_i_l2_atrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_amax.attr.attr, + &bcm2712_vpu_vpu0_i_l2_wwait.attr.attr, + &bcm2712_vpu_vpu0_i_l2_wtrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_wmax.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rwait.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rtrans.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rmax.attr.attr, + &bcm2712_vpu_vpu0_i_l2_rpend.attr.attr, + &bcm2712_vpu_vpu0_i_l2_ratrans.attr.attr, + &bcm2712_vpu_system_l2_atwait.attr.attr, + &bcm2712_vpu_system_l2_atrans.attr.attr, + &bcm2712_vpu_system_l2_amax.attr.attr, + &bcm2712_vpu_system_l2_wwait.attr.attr, + &bcm2712_vpu_system_l2_wtrans.attr.attr, + &bcm2712_vpu_system_l2_wmax.attr.attr, + &bcm2712_vpu_system_l2_rwait.attr.attr, + &bcm2712_vpu_system_l2_rtrans.attr.attr, + &bcm2712_vpu_system_l2_rmax.attr.attr, + &bcm2712_vpu_system_l2_rpend.attr.attr, + &bcm2712_vpu_system_l2_ratrans.attr.attr, + &bcm2712_vpu_dma_l2_atwait.attr.attr, + &bcm2712_vpu_dma_l2_atrans.attr.attr, + &bcm2712_vpu_dma_l2_amax.attr.attr, + &bcm2712_vpu_dma_l2_wwait.attr.attr, + &bcm2712_vpu_dma_l2_wtrans.attr.attr, + &bcm2712_vpu_dma_l2_wmax.attr.attr, + &bcm2712_vpu_dma_l2_rwait.attr.attr, + &bcm2712_vpu_dma_l2_rtrans.attr.attr, + &bcm2712_vpu_dma_l2_rmax.attr.attr, + &bcm2712_vpu_dma_l2_rpend.attr.attr, + &bcm2712_vpu_dma_l2_ratrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_atwait.attr.attr, + &bcm2712_vpu_vpu1_d_uc_atrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_amax.attr.attr, + &bcm2712_vpu_vpu1_d_uc_wwait.attr.attr, + &bcm2712_vpu_vpu1_d_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_wmax.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rwait.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rmax.attr.attr, + &bcm2712_vpu_vpu1_d_uc_rpend.attr.attr, + &bcm2712_vpu_vpu1_d_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_atwait.attr.attr, + &bcm2712_vpu_vpu0_d_uc_atrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_amax.attr.attr, + &bcm2712_vpu_vpu0_d_uc_wwait.attr.attr, + &bcm2712_vpu_vpu0_d_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_wmax.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rwait.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rmax.attr.attr, + &bcm2712_vpu_vpu0_d_uc_rpend.attr.attr, + &bcm2712_vpu_vpu0_d_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_atwait.attr.attr, + &bcm2712_vpu_vpu1_i_uc_atrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_amax.attr.attr, + &bcm2712_vpu_vpu1_i_uc_wwait.attr.attr, + &bcm2712_vpu_vpu1_i_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_wmax.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rwait.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rmax.attr.attr, + &bcm2712_vpu_vpu1_i_uc_rpend.attr.attr, + &bcm2712_vpu_vpu1_i_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_atwait.attr.attr, + &bcm2712_vpu_vpu0_i_uc_atrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_amax.attr.attr, + &bcm2712_vpu_vpu0_i_uc_wwait.attr.attr, + &bcm2712_vpu_vpu0_i_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_wmax.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rwait.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rmax.attr.attr, + &bcm2712_vpu_vpu0_i_uc_rpend.attr.attr, + &bcm2712_vpu_vpu0_i_uc_ratrans.attr.attr, + &bcm2712_vpu_vpu_uc_atwait.attr.attr, + &bcm2712_vpu_vpu_uc_atrans.attr.attr, + &bcm2712_vpu_vpu_uc_amax.attr.attr, + &bcm2712_vpu_vpu_uc_wwait.attr.attr, + &bcm2712_vpu_vpu_uc_wtrans.attr.attr, + &bcm2712_vpu_vpu_uc_wmax.attr.attr, + &bcm2712_vpu_vpu_uc_rwait.attr.attr, + &bcm2712_vpu_vpu_uc_rtrans.attr.attr, + &bcm2712_vpu_vpu_uc_rmax.attr.attr, + &bcm2712_vpu_vpu_uc_rpend.attr.attr, + &bcm2712_vpu_vpu_uc_ratrans.attr.attr, + &bcm2712_vpu_l2_out_atwait.attr.attr, + &bcm2712_vpu_l2_out_atrans.attr.attr, + &bcm2712_vpu_l2_out_amax.attr.attr, + &bcm2712_vpu_l2_out_wwait.attr.attr, + &bcm2712_vpu_l2_out_wtrans.attr.attr, + &bcm2712_vpu_l2_out_wmax.attr.attr, + &bcm2712_vpu_l2_out_rwait.attr.attr, + &bcm2712_vpu_l2_out_rtrans.attr.attr, + &bcm2712_vpu_l2_out_rmax.attr.attr, + &bcm2712_vpu_l2_out_rpend.attr.attr, + &bcm2712_vpu_l2_out_ratrans.attr.attr, + &bcm2712_vpu_dma_uc_atwait.attr.attr, + &bcm2712_vpu_dma_uc_atrans.attr.attr, + &bcm2712_vpu_dma_uc_amax.attr.attr, + &bcm2712_vpu_dma_uc_wwait.attr.attr, + &bcm2712_vpu_dma_uc_wtrans.attr.attr, + &bcm2712_vpu_dma_uc_wmax.attr.attr, + &bcm2712_vpu_dma_uc_rwait.attr.attr, + &bcm2712_vpu_dma_uc_rtrans.attr.attr, + &bcm2712_vpu_dma_uc_rmax.attr.attr, + &bcm2712_vpu_dma_uc_rpend.attr.attr, + &bcm2712_vpu_dma_uc_ratrans.attr.attr, + &bcm2712_vpu_l2_in_atwait.attr.attr, + &bcm2712_vpu_l2_in_atrans.attr.attr, + &bcm2712_vpu_l2_in_amax.attr.attr, + &bcm2712_vpu_l2_in_wwait.attr.attr, + &bcm2712_vpu_l2_in_wtrans.attr.attr, + &bcm2712_vpu_l2_in_wmax.attr.attr, + &bcm2712_vpu_l2_in_rwait.attr.attr, + &bcm2712_vpu_l2_in_rtrans.attr.attr, + &bcm2712_vpu_l2_in_rmax.attr.attr, + &bcm2712_vpu_l2_in_rpend.attr.attr, + &bcm2712_vpu_l2_in_ratrans.attr.attr, + NULL, +}; + +static const struct attribute_group rpi_axi_pmu_bcm2712_events_group = { + .name = "events", + .attrs = bcm2712_events, + .is_visible = rpi_axi_pmu_events_is_visible, +}; + +static const struct attribute_group rpi_axi_pmu_bcm2712d0_events_group = { + .name = "events", + .attrs = bcm2712d0_events, + .is_visible = rpi_axi_pmu_events_is_visible, +}; + static const struct attribute_group *rpi_axi_pmu_bcm2835_attr_groups[] = { &rpi_axi_pmu_format_group, &rpi_axi_pmu_bcm2835_events_group, @@ -1924,6 +3105,20 @@ static const struct attribute_group *rpi_axi_pmu_bcm2711_attr_groups[] = { NULL, }; +static const struct attribute_group *rpi_axi_pmu_bcm2712_attr_groups[] = { + &rpi_axi_pmu_format_group, + &rpi_axi_pmu_bcm2712_events_group, + &rpi_axi_pmu_cpumask_group, + NULL, +}; + +static const struct attribute_group *rpi_axi_pmu_bcm2712d0_attr_groups[] = { + &rpi_axi_pmu_format_group, + &rpi_axi_pmu_bcm2712d0_events_group, + &rpi_axi_pmu_cpumask_group, + NULL, +}; + /** * rpi_axi_pmu__validate_event() - Validates single event resource capability * @pmu: Pointer to core PMU struct @@ -2085,6 +3280,19 @@ static void set_bus_watcher_control(struct rpi_axi_pmu *pmu, enum monitor mon, i } } +static u32 rpi_axi_pmu_filter_bits(struct rpi_axi_pmu *pmu, enum monitor mon, int filter) +{ + if (pmu->axi_id_mask && mon == MON_VPU) + return FIELD_PREP(BW_CTRL_VPU_ID, filter) | + FIELD_PREP(BW_CTRL_VPU_ID_MASK, GENMASK(5, 0)); + if (pmu->axi_id_mask) + return FIELD_PREP(BW_CTRL_AXI_ID, FIELD_PREP(AXI_ID_MASTER, filter)) | + FIELD_PREP(BW_CTRL_AXI_ID_MASK, AXI_ID_MASTER); + if (pmu->chip == CHIP_BCM2712) + return FIELD_PREP(BW_CTRL_2712_FILTER_MASK, filter); + return FIELD_PREP(BW_CTRL_BUS_FILTER_MASK, filter); +} + /** * rpi_axi_pmu_enable_bus_watcher() - Enables a hardware bus watcher unit * @pmu: Pointer to PMU context @@ -2104,7 +3312,7 @@ static void rpi_axi_pmu_enable_bus_watcher(struct rpi_axi_pmu *pmu, enum monitor ((bus << BW_CTRL_BUS_WATCH_SHIFT) & BW_CTRL_BUS_WATCH_MASK); if (filter) { bus_control |= BW_CTRL_ENABLE_ID_FILTER_BIT; - bus_control |= FIELD_PREP(BW_CTRL_BUS_FILTER_MASK, filter); + bus_control |= rpi_axi_pmu_filter_bits(pmu, mon, filter); } if (!pmu->monitor[mon].hw_events.monitor_running) { set_monitor_control(pmu, mon, GEN_CTL_RESET_BIT); @@ -2759,6 +3967,16 @@ static int rpi_axi_pmu__init(struct rpi_axi_pmu *pmu, struct platform_device *pd } } + /* Only BCM2712 D0 and later implement the AXI ID mask field */ + if (pmu->chip == CHIP_BCM2712 && pmu->monitor[MON_SYSTEM].base_address) { + void __iomem *ctrl = pmu->monitor[MON_SYSTEM].base_address + BW0_CTRL; + u32 old = readl(ctrl); + + writel(BW_CTRL_AXI_ID_MASK, ctrl); + pmu->axi_id_mask = !!(readl(ctrl) & BW_CTRL_AXI_ID_MASK); + writel(old, ctrl); + } + if (pmu->monitor[MON_VPU].use_mailbox_interface && !rpi_axi_pmu_vpu_accessible(pmu)) { dev_warn(dev, "VPU monitor not accessible through firmware\n"); @@ -2780,7 +3998,11 @@ static int rpi_axi_pmu__init(struct rpi_axi_pmu *pmu, struct platform_device *pd goto err_teardown; } - if (pmu->chip == CHIP_BCM2711) + if (pmu->chip == CHIP_BCM2712 && pmu->axi_id_mask) + pmu->pmu.attr_groups = (const struct attribute_group **)rpi_axi_pmu_bcm2712d0_attr_groups; + else if (pmu->chip == CHIP_BCM2712) + pmu->pmu.attr_groups = (const struct attribute_group **)rpi_axi_pmu_bcm2712_attr_groups; + else if (pmu->chip == CHIP_BCM2711) pmu->pmu.attr_groups = (const struct attribute_group **)rpi_axi_pmu_bcm2711_attr_groups; else pmu->pmu.attr_groups = (const struct attribute_group **)rpi_axi_pmu_bcm2835_attr_groups; @@ -2866,6 +4088,10 @@ static const struct of_device_id rpi_axi_pmu_match[] = { .compatible = "brcm,bcm2711-axiperf", .data = (void *)CHIP_BCM2711, }, + { + .compatible = "brcm,bcm2712-axiperf", + .data = (void *)CHIP_BCM2712, + }, { } }; MODULE_DEVICE_TABLE(of, rpi_axi_pmu_match); -- 2.56.0.385.gac671c819a-goog