From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 701EECD4F3D for ; Wed, 20 May 2026 16:25:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C6D8C10E415; Wed, 20 May 2026 16:25:12 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="KDU+Oz7Z"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="M2ayk5ZO"; dkim-atps=neutral Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F5ED10E429 for ; Wed, 20 May 2026 16:25:11 +0000 (UTC) Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64KGASrd446929 for ; Wed, 20 May 2026 16:25:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=qcppdkim1; bh=xWvFKbWyubO7b4hnhrQE5blwoWWt0CB31mv OpMNc7G8=; b=KDU+Oz7ZoFOt/qPmVBLUi2HhXPkfwrXDwMiRhpsvtwgoq9KIMKe cOLJjUeTdH4BV9KsmmL9oSLud9cy281PkG5opaopSIQb+SQKZR/MfLGDrXEJ8Wo8 6eUIlo5D6AwsnFvKDn5hnFH+TtLnJlxnBneY7BQWzUpBpsW1BkNg9pg3JtSJ1EYE D871KDmZWUEaSXusedQvJSRkIiQQefdQCKx+iwGfWwvQbsBpg4+R3ntTH2/Ff7hX Cg2HJlgjHYSfPdCaxFpu0m2Yv0AX3BuNf98JUkQGOcghg5F7rmOMgiQAZZX7+O1H +hxZ+/DTAsibgwVUPAFk09d8xmEzHA66epw== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e9anrhj1v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 20 May 2026 16:25:10 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-368edd5fec4so5648191a91.0 for ; Wed, 20 May 2026 09:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779294309; x=1779899109; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=xWvFKbWyubO7b4hnhrQE5blwoWWt0CB31mvOpMNc7G8=; b=M2ayk5ZODBCfgsvNvq8yfnNcRHAiHbDJKjCwFjAHESAIG0fcpwaumXm6qyUImFO2Om hAhYzcDgjB3mR5WKQpwMnCP3MKIcj3IXsVzzpu+xVAYcMVFqKQZVp5aKd9O/u00zYhdA h2JfspeQicySRxXe6MD4WDBsaO/ukCHk3EhOoGeWheYRAkKGwa9HyJomxNqF5Xm5a31f 3NmyG+kRt43FUc1OPQuE1RJ0AYZjnL7q6vEyb9oc1cDSflBqpqDiiRhTl2KL1a4xKCKC WZPZSlI9v6mQR4Cav59SFDeQkLL6vmnChGzowFG6uRmiOTuB5jtMtmMpMTA9S+zjo2Xp jd/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779294309; x=1779899109; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=xWvFKbWyubO7b4hnhrQE5blwoWWt0CB31mvOpMNc7G8=; b=a5t9mYLq+lP/kAuCih8igbrjOdNJxtSX7iz7Ar4JtsswV5S6S8UnHYkDsgnyZ1wykn l2fr88/VVBQecyNoh0dXTW+QIYzfmKnpCHx4LQmT6Lw5+JWITb+fN9GsLV0Wz03GtWNV b1c4Srj2T1z1BN3gt+HY5JcjrVyGSqLAR9frR9kUZDm9dCloV84JkAfS7IMCBTT3QdGA TSY0kJxMTk4wTC74QMXUmftWO0iHfuGVC7fhDGNjUmUaWpX6/CuC+kqMepEhcXs02HVk uDg1uCHhaTe0kIAdMoAJPFFhDCqqtCyxUB/gU4Gb40RCieuOPKFefiEOsiFo9uhdlKY7 NWmQ== X-Gm-Message-State: AOJu0YygGW0KROgA52kwiJ7Xk8pkldr00uFW16RVa7RFJHnnvgZDYhA1 saQxLbajkh4VvaZxrbCBFq+KG9cWOC6dmUlYGXg0rq2Z5deY4ZoeJao0iUz9koYMy8y0SLdjr1n 3bciQbzrcAMy/90OHAwxXlkcUWv1q4sZPR255kiPrdRGRgf7BoqULW66egHSvWjPZ8SIp4xlGDH f1XC8= X-Gm-Gg: Acq92OEFeH598g9ZP235kYyWy8PiwVUjNyBiRT3QZtzhey1LMl+xS9GLdSNdjkFw9Ru lVDQLUKB/inDiYoXtVBA78emRrF1iJkyTHFULYjrHgH6d01iawl/eN0QXN9F8tc6o6FczekAZBL uocLRvm9ElfRuSbCXWT9Ckai++cLsnIgi32013zwJKdiZCSJRL9gIYvJBnlyXumjhBSjr3FU/s2 fVtaS//UU3grqlRY+X00IGM3S/bIY8zcyzsf0ZEbQBJcLhCV2PrA2rpMaU2c0QynlS7+hq8k17f yZTeVVJyQgM6IZVoM834NtQvdqom/GO2pLdvacmFqg+dKC4ppVfFEyubER3ZLQGq1L41h5Fj3lf m3dYj+zemjsQV1i7kZWhTKIaSx79UNpjK X-Received: by 2002:a17:90b:3a83:b0:35f:b3fe:18dc with SMTP id 98e67ed59e1d1-36951b782c8mr23220845a91.19.1779294309315; Wed, 20 May 2026 09:25:09 -0700 (PDT) X-Received: by 2002:a17:90b:3a83:b0:35f:b3fe:18dc with SMTP id 98e67ed59e1d1-36951b782c8mr23220809a91.19.1779294308642; Wed, 20 May 2026 09:25:08 -0700 (PDT) Received: from localhost ([2601:1c0:5000:d5c:4ec8:83f5:8254:6891]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-369e383b31bsm3781877a91.2.2026.05.20.09.25.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 09:25:07 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Akhil P Oommen , Rob Clark , Abhinav Kumar , Bill Wendling , David Airlie , Dmitry Baryshkov , Jessica Zhang , Justin Stitt , Konrad Dybcio , linux-kernel@vger.kernel.org (open list), llvm@lists.linux.dev (open list:CLANG/LLVM BUILD SUPPORT:Keyword:\b(?i:clang|llvm)\b), Maarten Lankhorst , Marijn Suijten , Maxime Ripard , Nathan Chancellor , Nick Desaulniers , Sean Paul , Simona Vetter , Thomas Zimmermann Subject: [PATCH v8 00/16] drm/msm: Add PERFCNTR_CONFIG ioctl Date: Wed, 20 May 2026 09:23:47 -0700 Message-ID: <20260520162454.18391-1-robin.clark@oss.qualcomm.com> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-GUID: AfBC0EEn1br03legXJKXgl-NXIIYzpKX X-Proofpoint-ORIG-GUID: AfBC0EEn1br03legXJKXgl-NXIIYzpKX X-Authority-Analysis: v=2.4 cv=UuJT8ewB c=1 sm=1 tr=0 ts=6a0de066 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=xqWC_Br6kY4A:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=e5mUnYsNAAAA:8 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=y2SdjSjt7DsdxN5ViJQA:9 a=uKXjsCUrEbL0IQVhDsJ9:22 a=Vxmtnl_E_bksehYqCbjh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIwMDE1OSBTYWx0ZWRfX6kgJrGvo2F+H Hpompe6iqt1SYr5q/tBVDUOAuwTJaHX1N9tpEv+x/vgR4NrSeSR6aKQmjqGz1s2VnS1UHaPQFnP CQ+McFs5aVaMrrSEQ8jJieQRMlORaN77262keAaBz++/LEFt+xMY8f2fLEBQcVoBwa0+/nTwqfX Wi7+MNKwE89tABccFRaZbUOc/Nys/0/AZ57ZMXSLp0I8nshmSsQnYz8XEMv/n36UI4cQzUw7elV qm+nTxYSh7vIsD68m/Lmbzgmb1Lo0Jfc3Y2OQsQiSEXTLjhw2VcsdwAFnQrCuvdzmgni8k9aSx6 6e/4XSUoBnAEAMvdp4OF1CuN0MI302clmvt3Ag7Xvq8PJ3iY1FFzkL2P3sXRBcF/ESS+ytIt1W6 Kp8f0XH7HwdN0PbrSoZX6/C8fvy2a73V1zQwI6gp9GP1qmMOoFVqtDt5nnF5XTDC1gxKKQACf5T 7A+/CQxXhunUESRdp7Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-20_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605200159 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Add a new PERFCNTR_CONFIG ioctl, serving two functions: 1. Global counter collection (restricted to perfmon_capable()) using the MSM_PERFCNTR_STREAM flag. Global counter sampling is, global, across contexts. Only a single global counter stream is allowed at a time. 2. Reserve counters for local counter collection. Local counter collection is local to a cmdstream (GEM_SUBMIT), and as such is allowed in all processes without additional privileges. The kernel enforces that counters assigned for global counter collection do not conflict with counters reserved for local counter collection, and visa versa. Since local counter collection is scoped to a single cmd- stream, multiple UMD processes can overlap in their reserved counters. But cannot conflict with global counter usage. In the case of local counter collection, the UMD is still responsible for programming the corresponding SELect registers, and sampling the counter values, from it's cmdstream. But by performing the reservation step, the UMD protects itself from the kernel trying to use the same SEL/counter regs for global counter collection. For global counter collection, the kernel programs SEL regs, and sets up a timer for counter sampling. Userspace reads out the sampled values from the returned perfcntr stream fd. Releasing the global perfcntr stream is simply a matter of close()ing the fd. The final two patches wire up the needed support for global counter stream collection while IFPC is active, and drops disabling of IFPC. The mesa side of this is at: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41158 igt test at: https://gitlab.freedesktop.org/robclark/igt-gpu-tools/-/commits/perfcntrs wiki page about the design: https://gitlab.freedesktop.org/drm/msm/-/wikis/adreno:-perfcounter-UABI Changes in v8: - json fixes [Akhil] - Use dma_wmb() [Akhil] - Use kzalloc_obj() where possible - Link to v7: https://lore.kernel.org/all/20260518190735.16236-1-robin.clark@oss.qualcomm.com Changes in v7: - Use smp_load_acquire() for fifo_count_to_end() [Akhil] - Defer installing stream_fd until end [Akhil] - Link to v6: https://lore.kernel.org/all/20260514134052.361771-1-robin.clark@oss.qualcomm.com/ Changes in v6: - Reword comment [Anna] - Link to v5: https://lore.kernel.org/all/20260511130017.96867-1-robin.clark@oss.qualcomm.com/ Changes in v5: - Drop unnecessary runpm in ioctl path - Link to v4: https://lore.kernel.org/all/20260506171127.133572-1-robin.clark@oss.qualcomm.com Changes in v4: - Fix null ptr deref on older gens without perfcntr support [Claude] - Add upper limit to userspace controlled FIFO size [Claude] - Fix nr_regs calculation [Claude] - Link to v3: https://lore.kernel.org/all/20260504190751.61052-1-robin.clark@oss.qualcomm.com/ Changes in v3: - Fix loop counter issue spotted by Claude review - Add MSM_PERFCNTR_UPDATE flag to ask kernel to return the actual # of available counters in case of -E2BIG - Proper barriers for modifying pwrup_Link - Link to v2: https://lore.kernel.org/all/20260424151140.104093-1-robin.clark@oss.qualcomm.com Changes in v2: - Rework makefile magic based on Dmitry's suggestion, and add a2xx/a5xx perfcntr tables (although only a6xx+ is supported at this point) - Fix compile error for compilers that are picky about a struct that only contains a flex array - Drop a6xx_idle() under gpu->lock in a6xx_perfcntr_configure(), replace with perfcntr_fence that sel_worker can check - Add a7xx+ pwrup_reglist support for restoring SELect regs on exit from IFPC. (a6xx doesn't support IFPC, and the pwrup_reglist works a bit differently) - Stop disabling IFPC when global counter stream is active. - Link to v1: https://lore.kernel.org/all/20260420222621.417276-1-robin.clark@oss.qualcomm.com/ Rob Clark (16): drm/msm: Remove obsolete perf infrastructure drm/msm: Allow CAP_PERFMON for setting SYSPROF drm/msm/adreno: Sync registers from mesa drm/msm/registers: Sync gen_header.py from mesa drm/msm/registers: Add perfcntr json drm/msm: Add a6xx+ perfcntr tables drm/msm: Add sysprof accessors drm/msm/a6xx: Add yield & flush helper drm/msm: Add per-context perfcntr state drm/msm: Add basic perfcntr infrastructure drm/msm/a6xx+: Add support to configure perfcntrs drm/msm/a8xx: Add perfcntr flush sequence drm/msm: Add PERFCNTR_CONFIG ioctl drm/msm/a6xx: Increase pwrup_reglist size drm/msm/a6xx: Append SEL regs to dyn pwrup reglist drm/msm/a6xx: Allow IFPC with perfcntr stream drivers/gpu/drm/msm/Makefile | 27 +- drivers/gpu/drm/msm/adreno/a2xx_gpu.c | 7 - drivers/gpu/drm/msm/adreno/a3xx_gpu.c | 16 - drivers/gpu/drm/msm/adreno/a4xx_gpu.c | 3 - drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 16 +- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 10 +- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 217 +- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 15 +- drivers/gpu/drm/msm/adreno/a6xx_preempt.c | 2 +- drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 33 +- drivers/gpu/drm/msm/adreno/a8xx_preempt.c | 2 +- drivers/gpu/drm/msm/adreno/adreno_device.c | 8 +- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 7 +- drivers/gpu/drm/msm/msm_debugfs.c | 6 - drivers/gpu/drm/msm/msm_drv.c | 2 +- drivers/gpu/drm/msm/msm_drv.h | 13 +- drivers/gpu/drm/msm/msm_gpu.c | 119 +- drivers/gpu/drm/msm/msm_gpu.h | 104 +- drivers/gpu/drm/msm/msm_perf.c | 235 -- drivers/gpu/drm/msm/msm_perfcntr.c | 647 +++++ drivers/gpu/drm/msm/msm_perfcntr.h | 155 ++ drivers/gpu/drm/msm/msm_ringbuffer.h | 2 + drivers/gpu/drm/msm/msm_submitqueue.c | 3 +- .../msm/registers/adreno/a2xx_perfcntrs.json | 109 + drivers/gpu/drm/msm/registers/adreno/a3xx.xml | 8 +- drivers/gpu/drm/msm/registers/adreno/a5xx.xml | 141 +- .../msm/registers/adreno/a5xx_perfcntrs.json | 128 + drivers/gpu/drm/msm/registers/adreno/a6xx.xml | 1300 ++++++----- .../msm/registers/adreno/a6xx_descriptors.xml | 71 +- .../drm/msm/registers/adreno/a6xx_enums.xml | 3 + .../msm/registers/adreno/a6xx_perfcntrs.json | 112 + .../msm/registers/adreno/a7xx_perfcntrs.json | 228 ++ .../msm/registers/adreno/a8xx_descriptors.xml | 96 +- .../msm/registers/adreno/a8xx_perfcntrs.json | 240 ++ .../msm/registers/adreno/a8xx_perfcntrs.xml | 1929 +++++++++++++++ .../msm/registers/adreno/adreno_common.xml | 42 + .../drm/msm/registers/adreno/adreno_pm4.xml | 50 +- drivers/gpu/drm/msm/registers/gen_header.py | 2079 +++++++++-------- include/uapi/drm/msm_drm.h | 48 + 39 files changed, 6021 insertions(+), 2212 deletions(-) delete mode 100644 drivers/gpu/drm/msm/msm_perf.c create mode 100644 drivers/gpu/drm/msm/msm_perfcntr.c create mode 100644 drivers/gpu/drm/msm/msm_perfcntr.h create mode 100644 drivers/gpu/drm/msm/registers/adreno/a2xx_perfcntrs.json create mode 100644 drivers/gpu/drm/msm/registers/adreno/a5xx_perfcntrs.json create mode 100644 drivers/gpu/drm/msm/registers/adreno/a6xx_perfcntrs.json create mode 100644 drivers/gpu/drm/msm/registers/adreno/a7xx_perfcntrs.json create mode 100644 drivers/gpu/drm/msm/registers/adreno/a8xx_perfcntrs.json create mode 100644 drivers/gpu/drm/msm/registers/adreno/a8xx_perfcntrs.xml -- 2.54.0