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 BF23E3DEAF9 for ; Fri, 24 Apr 2026 15:12:28 +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=1777043550; cv=none; b=preVQSklZjLpGae7ykTb8lkn4j0l0D4QLffzcAG3aCq/za9HH9y97MdQk7QpxG2qU+cpLDzZj8PxIea5pGaM2PflI6F1/M5v+B0JdZy5u3SMXMHM7YcRE1a0VuhJslHrvPefzHVgIONk3bdVwb52uqupPQuBgT2vq+gVkWi5NTs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777043550; c=relaxed/simple; bh=SQyIN2lvht2yWROU012olknUSmPQZ8vHuGc5ANUQgvY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GSp/bhcn2CoQjhTRieN+HUktlI2f8340B82oyZUce40XWVhhI4G6TpdAwEcNDHmUnyYZhK1DxgClpwnpRUpD3A/4hSQnKJXlTN8An4W8cR18haMa1qZunWfUHcgRK6hpywyoVquOiYdKdguaHe/VijUZv5n3ZOmYn5pJpq+0e4k= 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=Idw+3XcZ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Qob6OPr9; 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="Idw+3XcZ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Qob6OPr9" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63OF5lIr2710485 for ; Fri, 24 Apr 2026 15:12: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=HLnAwFPOk/J Qm30uB0uKT2zj47gE1NdrqCSNluQVCr4=; b=Idw+3XcZ9HglK+Fam3941GQrCWS RuPu/UMx3L0XxJT8R+rWo3GQWcVa8gehHnZaFvaJhledjNRYHjwmuaLxNf7PG/As hRDSfBGSZqvbOW6BGb216aLfPO0bIsUY0UI7OoFaVuBoRq98O4TQKyj4sZ6ujpm7 Cl1tAMHLGlxtN7KS3kEduj0aWkhPkJczqFxP0JsEp7YFPnitCmtEb5hE3Grj7Z1h t+cbb4yn+9TSKvEgFPHNtZQukl+nJdkLkie0TZHhcKgM5zK6YxSvPClLVk2Su2sF dyGYijVwav1R0gpH3hBCv4VuPAwjZoWg+EVnV38rOoqLYFNb91SOjLXye/Q== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dqqu9vrb4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Apr 2026 15:12:27 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-82f896eb6faso8406560b3a.3 for ; Fri, 24 Apr 2026 08:12:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777043547; x=1777648347; 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=HLnAwFPOk/JQm30uB0uKT2zj47gE1NdrqCSNluQVCr4=; b=Qob6OPr9byecUbVImT2hnnReA1GK0Ix95+9ilUz94OyAnsAoomMrcoFMmoQEAHyzpw xzodLBjnk8Ox2hLv7sScwlozbWQuIkRLvmSX4/Co2JXwywAaEoX6rBWMwoegsePghIzt ezvrsWXfN+Naoxz1etT4ysRBH+URm3b8RKo9rUSBbmGcfgI4EclAmER5uObCd77M9g7Y ef913nW0HWaEjumjBHjgDba6eGX52i/SDAnUNCkFh+Rr9Y4Xe5G637L8zmpedX/+1dTM CnExVc4v1CJ08tyACmzwoFJUrSUCf9O2BIbUdb2wLGXvA9MNeUjUkHAqZe33gOxrqlHZ sbCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777043547; x=1777648347; 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=HLnAwFPOk/JQm30uB0uKT2zj47gE1NdrqCSNluQVCr4=; b=OLGPS3NLEmA2yB0176zr2/OkOAv1pAuXkx1Z2wqkH4d+6lhtAQE/8jPv57P0pyObiB WeRkM0P1HO575qNJSeiN/HiFoGQ6KPqdfplk7EbOBDS0pIpzWLbHNru5yLCYKT4pu1ro bBdpMsGDwkE85eC7VZBd5qy5P0CedrVD0un+p0PI6oOzv8EAIGCMybBdikdk7tlhc2At YsnJVZ+Be/9FvB+RP1m5Cs1XMxWkIiRuht5BOk6wSuoWPOlNIQKm85p685X87mdnOWDw JFUBM7cAEKzDi88zDTPUwbL/DFxuut9XxblujTy0vO9WXfvWKpzFoQ6ybezh8NsRIGzo tHRQ== X-Forwarded-Encrypted: i=1; AFNElJ+B1n+Ojf/XNxQuOePagR3fN4Y1HXGDts8U83dOdhxP7IXyx1Nj5spC6QyY5cAKqdQ34KpWUu5TBnmx0ek=@vger.kernel.org X-Gm-Message-State: AOJu0YwBuKBM/QpHFwsatYWG0Bllpn6UcuYSjkbNygNzfySJzXtIdOvK kVw/0Phd5OrCWDCdlNcCuypgDAxfRkAeN11bQCK0jw3k5vRAiclSNtqFPG8bUZX/iZxdjhKf1LA mZ4okbR5FM3nMKSX7BvftAqfKqWCN7sLuys9lPvIKuVgYBFtJRVRcXHZ4ddCUwaRm6xU= X-Gm-Gg: AeBDietuWvbP0477NRF7IZr/t0nMEDref/18DwZOWMv6ClRG27rZ6tN9S/NM4g9byN+ hDjOT9y+rE9QB+VZ9so/espV9A+sXOM6seedAqyBZwXEx50TfD4WAYEDOmcFe4pd/u+2dnDSlgc 1tiiky2GhwMucYEeSnji8EomfTyklEksMeLTwV5AP1Ll6CHjV4Buzui7VOUxddhji222vOimcjq W7PnzPT1wajCvSF2inxqhUBkQbZ2CT6I1yNEWaE0tjx3OL2oIG4qeVWuB/JjZ3w45K3q2AvTH7o 8ODb2KxO29TZhsZtetQkgZBxQX0r21i14kAdFo5pS6WKUvdR6bOOW8igz7OtC0KzCvFN1BX7sUz nF5SK/q19oBhsT1PodokfnjXolOWGzNe15Eg3ChPqXws= X-Received: by 2002:a05:6a00:8011:b0:81e:12f1:d8a with SMTP id d2e1a72fcca58-82f8c90497bmr34751497b3a.34.1777043546756; Fri, 24 Apr 2026 08:12:26 -0700 (PDT) X-Received: by 2002:a05:6a00:8011:b0:81e:12f1:d8a with SMTP id d2e1a72fcca58-82f8c90497bmr34751449b3a.34.1777043546148; Fri, 24 Apr 2026 08:12:26 -0700 (PDT) Received: from localhost ([2601:1c0:5000:d5c:4ec8:83f5:8254:6891]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82f8ebe40e5sm22200402b3a.42.2026.04.24.08.12.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Apr 2026 08:12:25 -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 , 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 v2 16/16] drm/msm/a6xx: Allow IFPC with perfcntr stream Date: Fri, 24 Apr 2026 08:10:51 -0700 Message-ID: <20260424151140.104093-17-robin.clark@oss.qualcomm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260424151140.104093-1-robin.clark@oss.qualcomm.com> References: <20260424151140.104093-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-GUID: EJCTjwtGUdXwlOEg32aTOguPKZ28pray X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI0MDE0NyBTYWx0ZWRfX1u2PZCCYlNOX 3jCFxxYbBM9Cmf/s1D86H1xT/Je7vwNyFKwDMI8enNVNgNz7rGRQcnAUPG3orZ/2hPB49oy5Sjy 2pILF9bf+5/uPyHwackoDFFjuennUhhPxuiUn/7ulGGA3j+nR7qsFTh3mZ4kPgZVaT/ektIzRSX dKg92PX+yC6isdBYFA49faZfh+L9Spi6ksehC/aBZUtXF2q6EQTqHbw6/9lIyH8V4ZCnT3lj3M+ O7bXpzf6i4sVTKm71d3C++J4rpGWh8N2e5a+TG1Gz8sVVvKgqIu63u4jYEQ9J50iCEJ3GiRmKPw fJtT3wgU4eCqg8Z9Gg/WgB21Co8BVYqYxpdRuLtF26whtk2ou5Ak2usHmPqRYdWp9PkW8L2P5sN prt7pfYUB73FSgPUhcXl77sckQh22Z47Y+M6lvTFnAoH2cL3mK2EhVR+PMq2oaihhQhFpbl7zSq dnhiHOkoN3TCxXVHTIw== X-Proofpoint-ORIG-GUID: EJCTjwtGUdXwlOEg32aTOguPKZ28pray X-Authority-Analysis: v=2.4 cv=QJNYgALL c=1 sm=1 tr=0 ts=69eb885b cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=5obZvuzjGUYrwyXX1KsA:9 a=IoOABgeZipijB_acs4fv:22 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-04-24_01,2026-04-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 bulkscore=0 malwarescore=0 adultscore=0 impostorscore=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604240147 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 --- 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..3fe0f1cda46a 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 f3cc9478b079..eecc71843bed 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h @@ -280,7 +280,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 67f1e84eb631..93124c032dd4 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 8dd919c004a2..891c21be6158 100644 --- a/drivers/gpu/drm/msm/msm_perfcntr.c +++ b/drivers/gpu/drm/msm/msm_perfcntr.c @@ -256,6 +256,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); @@ -290,6 +294,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.53.0