From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63EC040FD87 for ; Tue, 26 May 2026 14:54:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779807271; cv=none; b=eUeXRWWeOwmJQednWnEaljDEIfMu3NhlqGLP2ILga2+HQnJlTiKMYqCopOHlaXNR6DLUkFZqM6ucQbPmIXCOwSP7jtyqE1z4QdXakMU57gaDdO6Bwnt39vOqNQ1z8yz2BbIpoXM8FuEXWE+PKlosiuVZNoabFz0iwJITywoGXho= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779807271; c=relaxed/simple; bh=hyrFkFzkzD+MUxTw7yo4GiZmyqLvABtBfs/PeL1NUYo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b5ceCegPHBOECxAi/0BNMKCN1NSOhgpENJow11+NaWDoeLwh0SbTYwdEQx48fLuDkAHEOjnVKym9wwnLY46xc2xB2nhmG2Rww0aUt65daHbHoew3V+zy8sjchMz/VK3o0wANWuyhjqP+fex/e7/UDj2jb9IFd2AumMEG82vkd24= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=huMLx3Dv; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=M+S7nlzA; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="huMLx3Dv"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="M+S7nlzA" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64QCsB3K2554534 for ; Tue, 26 May 2026 14:54:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=wsfd0typLWI CJGnKJ2SYwAC6QidCQBdD4Z53MfilGF8=; b=huMLx3Dv/JfyKtd1s0iBRg7B9El ThDXQBfy3CQpvyDsTb49KVDFBlA7psdYfBaFbTp1NYCgFzjd3K/DVHZVRwe7CgnR NObX6Lh6Y1uINoGZF0SjTXc11OzKzHqv+UJ2ONe1TRLBSstifAGxLkKQJCuJd3aW udReUFGxDRJFhja8D7wYS2Rni84kcOhKKuo8Otl5Yy4vtn/tZ6YAHwbuCTbHJqVo r6freYCvgbUUs+jbnXZbgniQRQASvyaayXCjayxJEibo4j1OejRYuPcQdzqPL5Kp wgDw4/403UsgV8PNlPiY3PRuO5vFWA3qjawjK9U2hTCNrRqaifyxoksaBOQ== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ed5v3te02-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 26 May 2026 14:54:28 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-365e70c39d0so10381520a91.0 for ; Tue, 26 May 2026 07:54:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779807267; x=1780412067; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wsfd0typLWICJGnKJ2SYwAC6QidCQBdD4Z53MfilGF8=; b=M+S7nlzAcx9rbvMX9q32pzXQLQpL3fFXjrQsaHl/UYD+QDzddelq28TnZvPxEBtiTv UG79B/vdpW1x3skJV8NiRB98tMPpxzzuXiwlR37IBoN80VoCp7ICisZZeLxgd/CNWUXF sJ3TOJfUMiX4KRRRh8L9Kmz/5W/FzOsEjB5fs1CD2YTNqD3I4YlMwrq2X7x/bPV3j/zJ 52OFqgvY25WgHbgyd7LNOuMaxehfJ7mAECzSBx4ylDhBUMd1i6+BNTmwsRVhb1V5nzn/ T7jFoeKIvGTWFYrCpmlqbDnbRCJod85dKSj9ELuYqai0QDFymkR/wLO0FPHvqOI6bOny RwUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779807267; x=1780412067; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wsfd0typLWICJGnKJ2SYwAC6QidCQBdD4Z53MfilGF8=; b=gkr5xdoSemDZQRpp3q7P9Vrh3vvXfX9HYX5yHFNVMZYYRz2/QWCgRYTylrTNbVAVxs Z/KmjJY3LtWZfIkYzjQGxq/IUjOKgMCIFDTjWduCM5Hlq1XNA2zHG5KcTE27WAeh8jjI rh7mmqzNkIJIbrQkLEJzHDfoYQrL53X3IpXP+tJK2E5d9w6fzOzeEJgkIlU3tCy1ms0Z bJUkza/+JbU6qNfafEbbh+EZbkv5sXp+yUcovhgrEKY3hrbIasiuiNm/3VYH2gjwBAy1 7mo6huW1oh1QEPvlYXqwbjoaUY3zyfgMadQea/1jloRoufP+cg1AW63bZ8aeytwZH9jx XNJw== X-Forwarded-Encrypted: i=1; AFNElJ9D+3NSKwq4PqFtwZdoJ09mZMVQWOZCnJ6QWLFD1B+DecegDD/6Hz1KuW2Hv9jiO13ko0nRj+ksnf8rDFA=@vger.kernel.org X-Gm-Message-State: AOJu0YyHu2UwE6l2YgfdmpbcUmX3IW9iMPMheQyVECoaUi2BkaeFK0LD FAFhOAIkWWdw0qBiyfcQIKDh7YaJs5ZFo0OO9PEJ8YqS1NckUc+GAMkogQWE6tUeLkQQdsbQFli eZp9dBc5bZt3nXN91/MD08OLVc6RwzcS1P2qGxySxZKJSa7R9x9UaY/9blGhP0egdr9w= X-Gm-Gg: Acq92OHT0pR0hr9j5LMTSzlx2Ex9BnTodrVWPoLDEhod6Xs7fXGaiydyNVthpJsW4/c a7tQHwwHeq3iYukpj2+WtEs1C+fratzfc/JqHTU+1MIbe5XKg9377V/r7UsSXsUhMHIpXJeYxlP RdNkS6j6QiY/4WhImOyQs23cRhMz1sYyQRbcuNJKHMI2wUVHTnvcwBZaDVrx6v4OoHiMORRhHZs q+9yauKZb5EGlLWOdFGMokR2LceeXsYQzwmZORXx4K667dlArhFNGbUKVtZVdOcR1vCSIvM93c9 vpfCZNu7cXITG6ws2/DU4c06Pgrgpw6GTiT0bpx0LkCcbYU7DJYjEfA5SXWo8sNa10P3qmaPXi3 Au2ugahid0cvvsxwSpgxfwx5AnP7tzmf9 X-Received: by 2002:a17:90b:5208:b0:35d:a5cb:95c1 with SMTP id 98e67ed59e1d1-36a676287b9mr18465091a91.23.1779807267153; Tue, 26 May 2026 07:54:27 -0700 (PDT) X-Received: by 2002:a17:90b:5208:b0:35d:a5cb:95c1 with SMTP id 98e67ed59e1d1-36a676287b9mr18465049a91.23.1779807266534; Tue, 26 May 2026 07:54:26 -0700 (PDT) Received: from localhost ([2601:1c0:5000:d5c:4ec8:83f5:8254:6891]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36b09698b0asm969355a91.3.2026.05.26.07.54.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 May 2026 07:54:26 -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 , Anna Maniscalco , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v10 16/16] drm/msm/a6xx: Allow IFPC with perfcntr stream Date: Tue, 26 May 2026 07:50:50 -0700 Message-ID: <20260526145137.160554-17-robin.clark@oss.qualcomm.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260526145137.160554-1-robin.clark@oss.qualcomm.com> References: <20260526145137.160554-1-robin.clark@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI2MDEyNyBTYWx0ZWRfX6Yp4C9HBU5OJ L6ueyYQJMsojY7SXsu8nobeWLAYkGyswaDF7mpbrhGnGibZvNMH+pjxzI2kNvgQZTVyqF7JWaZu PKwMCcYhwaE2Naix60aJFdmMX00ya/3tgSWZagRxTeHKUl5g9j+Z9r68WdvLBJ5CwtGccHfLTNr +s4kjUTCiFD7w9/skHwYgf4SN0Idajc+g+Tlte03Jg7BFpGUfuMk9sZj58wV/1uid4dL2Q6tkZR 2RcDaB3r7MSFuUdBY1RSaD2sl9LIwVCFR/19ygE+kpO5+PnMIJiY0vpDNysmpprKnJranUEhcIz wW0c3kol2iG0GUoy4sDS8mxf3P+HnFL9QeaFywlehFfvuoeKu56f9eyCrkhFQ2HEGZ4hXJ2sI/a 2hN73pkuaKEzTGtAUcHqgCoC9h5eQ1YLfxs02+DsRkOHo7/c0l/geYso3Lafd8Djsq1ibqjIsBU MaDzB+8Py4iBBwHap1w== X-Authority-Analysis: v=2.4 cv=Zc4t8MVA c=1 sm=1 tr=0 ts=6a15b424 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=xqWC_Br6kY4A:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=pGLkceISAAAA:8 a=5obZvuzjGUYrwyXX1KsA:9 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-ORIG-GUID: ug4i48_E0R_ygfK3cPTlBRfCceZL88IL X-Proofpoint-GUID: ug4i48_E0R_ygfK3cPTlBRfCceZL88IL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-26_03,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 impostorscore=0 bulkscore=0 adultscore=0 phishscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605260127 Now that the dynamic pwrup reglist has SEL reg values to restore appended, so that SEL regs are restored on IFPC exit, we can stop completely disabling IFPC while global counter sampling is active. To accomplish this, we re-use sysprof_setup() with a force_on param to inhibit IFPC specifically while the counter regs are being read, while leaving IFPC enabled the rest of the time. Signed-off-by: Rob Clark Reviewed-by: Anna Maniscalco Reviewed-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 4 ++-- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 2 +- drivers/gpu/drm/msm/msm_gpu.h | 10 ++-------- drivers/gpu/drm/msm/msm_perfcntr.c | 8 ++++++++ drivers/gpu/drm/msm/msm_submitqueue.c | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c index aba08fb76249..0a7d49a2c877 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -2034,9 +2034,9 @@ static int a6xx_gmu_get_irq(struct a6xx_gmu *gmu, struct platform_device *pdev, return irq; } -void a6xx_gmu_sysprof_setup(struct msm_gpu *gpu) +void a6xx_gmu_sysprof_setup(struct msm_gpu *gpu, bool force_on) { - bool sysprof = msm_gpu_sysprof_no_ifpc(gpu); + bool sysprof = msm_gpu_sysprof_no_ifpc(gpu) || force_on; struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); struct a6xx_gmu *gmu = &a6xx_gpu->gmu; diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h index b72fb58bf223..f60a0801a62d 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h @@ -281,7 +281,7 @@ void a6xx_gmu_clear_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state); int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node); int a6xx_gmu_wrapper_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node); void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu); -void a6xx_gmu_sysprof_setup(struct msm_gpu *gpu); +void a6xx_gmu_sysprof_setup(struct msm_gpu *gpu, bool force_on); void a6xx_preempt_init(struct msm_gpu *gpu); void a6xx_preempt_hw_init(struct msm_gpu *gpu); diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index 22cbafe75a07..3d8f1ea5335b 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -93,7 +93,7 @@ struct msm_gpu_funcs { * for cmdstream that is buffered in this FIFO upstream of the CP fw. */ bool (*progress)(struct msm_gpu *gpu, struct msm_ringbuffer *ring); - void (*sysprof_setup)(struct msm_gpu *gpu); + void (*sysprof_setup)(struct msm_gpu *gpu, bool force_on); /* Configure perfcntr SELect regs: */ void (*perfcntr_configure)(struct msm_gpu *gpu, struct msm_ringbuffer *ring, @@ -378,13 +378,7 @@ msm_gpu_sysprof_no_perfcntr_zap(struct msm_gpu *gpu) static inline bool msm_gpu_sysprof_no_ifpc(struct msm_gpu *gpu) { - /* - * For now, this is the same condition as disabling perfcntr clears - * on context switch. But once kernel perfcntr IFPC support is in - * place, we will only need to disable IFPC for legacy userspace - * setting SYSPROF param. - */ - return msm_gpu_sysprof_no_perfcntr_zap(gpu); + return refcount_read(&gpu->sysprof_active) > 1; } /* diff --git a/drivers/gpu/drm/msm/msm_perfcntr.c b/drivers/gpu/drm/msm/msm_perfcntr.c index 0a6f8039f610..ce65b1160955 100644 --- a/drivers/gpu/drm/msm/msm_perfcntr.c +++ b/drivers/gpu/drm/msm/msm_perfcntr.c @@ -258,6 +258,10 @@ sample_worker(struct kthread_work *work) return; } + /* Inhibit IFPC while accessing registers: */ + if (gpu->funcs->sysprof_setup) + gpu->funcs->sysprof_setup(gpu, true); + if (gpu->funcs->perfcntr_flush) gpu->funcs->perfcntr_flush(gpu); @@ -292,6 +296,10 @@ sample_worker(struct kthread_work *work) } } + /* Re-enable IFPC: */ + if (gpu->funcs->sysprof_setup) + gpu->funcs->sysprof_setup(gpu, false); + smp_store_release(&stream->fifo.head, head); wake_up_all(&stream->poll_wq); } diff --git a/drivers/gpu/drm/msm/msm_submitqueue.c b/drivers/gpu/drm/msm/msm_submitqueue.c index a58fe41602c6..1a5a77b28016 100644 --- a/drivers/gpu/drm/msm/msm_submitqueue.c +++ b/drivers/gpu/drm/msm/msm_submitqueue.c @@ -42,7 +42,7 @@ int msm_context_set_sysprof(struct msm_context *ctx, struct msm_gpu *gpu, int sy /* Some gpu families require additional setup for sysprof */ if (gpu->funcs->sysprof_setup) - gpu->funcs->sysprof_setup(gpu); + gpu->funcs->sysprof_setup(gpu, false); ctx->sysprof = sysprof; -- 2.54.0