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 946E0CD4851 for ; Thu, 14 May 2026 13:54:09 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BE14710F1F9; Thu, 14 May 2026 13:54:08 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="I9pgVHti"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fspeL8MR"; 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 EE0E910E298 for ; Thu, 14 May 2026 13:54:07 +0000 (UTC) Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64EBeqXu2239254 for ; Thu, 14 May 2026 13:54:07 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=UfNdfXL9HFmBgf8J4W1GiVknjJBwcKvLIPV YPC3419o=; b=I9pgVHtinYWTOfU5xSAu2koTsED3qjnLsFWnZNXdgIrmw0xEsbl cOaV5qe1G/vDgTAPdEUxlt1V1JwhUIaRIFcqGcDHsMN223IU8JH2Qz1C2ciqxA1o cVr7XXLhf/qaLNL4GWol+FPh0sz+2WluV/zKKqNHrDefH5I+ETqeP20Qajwa40wK 0wXIH5ZhTZn3dFSXPSwJYzZIk0RPjeHmejZ6EVhkEXapwLnqOhTrWx3jEWHn9X15 i//pwG9dgH7HcM1DumFNU1F0Ed9V64ij+1mOEBs8vOW0XwJNLE1Ec3ero0y4TL1B ktPfyMtNa5cYAK1ctlETyCVYlLaWadSJICA== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e566bj0xv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 14 May 2026 13:54:06 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ba5f794825so67007875ad.0 for ; Thu, 14 May 2026 06:54:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778766846; x=1779371646; 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=UfNdfXL9HFmBgf8J4W1GiVknjJBwcKvLIPVYPC3419o=; b=fspeL8MR0ybIgWJXw7RYtMifHUN1gHKRsPC8crWPjhpK2jM/ZA9WbW4GsaU736W37J s8eV33gRlZnf5mf980aKqkSgDbcqgAT02c4+SSJ7pxRwrP8Plkobpl0TLfhPKUhHpXio j2UaHRlCX+lljjMD887jNxeXCIVeIyvVZG8MXd+BrlTWGmDdcnECxoqKhUf0nBzcxuk9 8e/nyu1B0vhZEd+XsCStAyG7Ke61t+e2xR/oY+XlJN+d3rEmfxfIlzxgL+CqiD8/h1RE 536JDvbElzJkdOkpOE061AGUmP2TbdSvCFuhzK7xVzBv3yCXoVgeJ6NJGNNSjEK/7TK7 r1Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778766846; x=1779371646; 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=UfNdfXL9HFmBgf8J4W1GiVknjJBwcKvLIPVYPC3419o=; b=DO3xMHTxPREGLE1GdRUsZpA2RVEOSV8RZp9ZhN5uDvAb8tFaDONjMPNlg6CugyovxS H1qm93p00Zw/fzeytBwpqDB5yydtN9Jt62mA2fWUjRVqd5mAFBiC7TrqrJkoKaU1e7Lw ucey7q1esQMK6tWNOhFxYTLDHf9E3Lf+XqX3wtjDuXDCFobzI5XRMx683NN5ofrXW+oU mf9d5Gti/N63qXV2jpsoCljIwpMGA8T5YSs4uHYzwx/8zBScfh6mwhWYX9LVhOuaOVsq +f/wjk9On+Nyk/V4XAmymT6btwMCO1jQ0tQ3hr6fu0R4P5eLrazjJaV/Boi56ul6102Z bjJA== X-Gm-Message-State: AOJu0YzwcdWxvR3pjWtZEfRWs2jN22x3cLC7Z4By2OF2H+9Y4rU60Vy7 ok9N/mxHv6H16KBtP7DC+hxjhiGyA97Q+utfZdP50eLCYSwhmx6W5HdjiGnDkfoGCbc/eA964c3 dwbVMHh/La1Sa3o7crpoq84NSLT6QTftAqhrRBUlrFgcJIhTafIoFzv113oqd+59qZM3Aq8n2rn FuT/Q= X-Gm-Gg: Acq92OERbR3aMom6Ek6FmmUUJa57NTiB07/LbX3md7FFVSIpDlFa8PoFsCnhQI7M0D2 Qc3S8WXwB0BN/SACF0c2r4qhhOeP1B1XX+DChDTMBYpMLQoFallgDDIN0l/zEkyTv+7QJBynDmX gcetVXPB2OEPVf7hx9dPfybOpJAjH+HW/dg3SATzKt0L5+sAPNc438u4IhOmr8f0OoHgIH1m4eu ARCLGLzIw476376reonbdcPPkt36kzl6w8Lz3BflRkhcGE5m/Rd7BravBlEnqswRNPtnflC1SJM ONYfvIUdFiRP/8umWUa1eEs6tGEDLaXi8N0asFEWmbys+H1ov2cwkAKKZeLBSW/Euebm9Y7sSFE HwiCfpJEXut8Ahs4kZwLk+h5WKLT9OdOS X-Received: by 2002:a17:903:8cd:b0:2bd:6727:d68d with SMTP id d9443c01a7336-2bd6727d7d0mr23343685ad.23.1778766845264; Thu, 14 May 2026 06:54:05 -0700 (PDT) X-Received: by 2002:a17:903:8cd:b0:2bd:6727:d68d with SMTP id d9443c01a7336-2bd6727d7d0mr23343215ad.23.1778766844707; Thu, 14 May 2026 06:54:04 -0700 (PDT) Received: from localhost ([2601:1c0:5000:d5c:4ec8:83f5:8254:6891]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5bd5fe67sm28572595ad.3.2026.05.14.06.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 May 2026 06:54:04 -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 , Anna Maniscalco , 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 v6 00/16] drm/msm: Add PERFCNTR_CONFIG ioctl Date: Thu, 14 May 2026 06:39:48 -0700 Message-ID: <20260514134052.361771-1-robin.clark@oss.qualcomm.com> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-ORIG-GUID: rOT2PDGYDJauWOkPYUMszfhNrlNlOosZ X-Authority-Analysis: v=2.4 cv=WsMb99fv c=1 sm=1 tr=0 ts=6a05d3ff cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=xqWC_Br6kY4A:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=e5mUnYsNAAAA:8 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=y2SdjSjt7DsdxN5ViJQA:9 a=324X-CrmTo6CU4MGRt3R:22 a=Vxmtnl_E_bksehYqCbjh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTE0MDE0MCBTYWx0ZWRfX0bb0WEb4Gm4A R6If0NgXMdAowpK8noydmhXw1Trqk6KlEcca17SrA7p+ulTQ8ppFzBSxLS8UjhGLRImFSPtxjeV Huf3+oI0waLOGz/wGciwJyQRLVYlrvYYiJHX8ZsbHLcbZwTF+y5d/GIm+reazbv+Fa9D6D38BVk E8nm/sQca7edvz9zJN3JttaYeBliFb10uHjbWE2xkb/BiKOIrya2RZEvl77KJJ5PvrT8CgGliK6 QlWaYecqzplmT80/Z6tPc7WvfvjP0RHqbMkkzySvEyqxdbkiY/xkXfVzxV/0mRqxRNO0LcEXB0o S2MfxV1t2PaVylGn7UcqvFW0PfPu1yTAOkdZLJoNBrf5Ao2Txhpj9/+WO6PpsIiwSQ6jk0cqeOw 4PMFG4LJyzJG7jHPPlvAwcLt46lGnPTzfmfLpRK9mwPqyeMng6h8DSzGr533+QajXPKesL6IM/s WwbusURB9J4OImlppHg== X-Proofpoint-GUID: rOT2PDGYDJauWOkPYUMszfhNrlNlOosZ 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-14_03,2026-05-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 malwarescore=0 phishscore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605140140 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 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 | 650 ++++++ 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 | 105 + .../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, 6017 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