From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 525864825B0 for ; Thu, 24 Sep 2026 18:10:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273418; cv=pass; b=PGPl+yf9rDAH2XEjEsLLkB2imj5mGdqIOgGvJ+jaZdfBymkx2mnnPjfxjH/2EQt6BDnsryK/Y4GB9I1knJDWCMWSKBrhFpM8qNjT0pGqQv8YOpy9Idc9SDrIAgI4H/kZGhnAG6ahGbj+RXh+Pq1UZpsPbU0leF8HjDFBLaWZuVk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273418; c=relaxed/simple; bh=stB54yy+rzsgjj1qVzBZEJWnEUOo5dHMeMALr6aQN1E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CUEQqTdbLZQrLh9JtUHHEXMNH94gAfz7OHiJuMy5i+Yqa1tes9+bEH75AqPzj2QwREwXTwZGQ99VgKQxlJlC3Xl/YcSuL5JzmPaew6xe5vIqLB/CaXT3doiUeAGd+QuZBMtYoOjfYG5IYZ6Mwnnx0z1WvNS/PHVulr3IFjfBWd0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=XS45/jq9; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="XS45/jq9" ARC-Seal: i=1; a=rsa-sha256; t=1790273383; cv=none; d=zohomail.com; s=zohoarc; b=Prvo8vPSiRC2rtEmaXCZ2++3F4q9K0AERKcunrxIO6bIO8m///uAquGoC4WsycZHASYkEoinIc/Jd514reUUbvwwiSvbKteEM/Dsz7NEkAPVNS+OMMzLJ83MAsGiwygWP/xr0AuK7ismeHmJ/XhcBZg3YKLOFn8T6KPcUIvljrU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273383; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=tgZWphGgU/74z0QaLxGpjKzaewG66DZ1iM4zlbILEjk=; b=kSxaH7tFzV9xwk3QBPNMzVwLI+H3nOdcwL8hhbQL2g8JMif84nDfPqQ+nxEJihKlqzggPbFWFCNkiMXgACITESRS4pave8Nujk8DhzsR3mBMzXhbBhfs5yay07Q8OwVZBrVbkPOMw1l5RX5Nc1t/TpsykAjIrx7nlM739SBRmck= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273383; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=tgZWphGgU/74z0QaLxGpjKzaewG66DZ1iM4zlbILEjk=; b=XS45/jq9YKKOwqSeMI5YQoFW6EL3F+Uf/BVfLkbzooNQzcGStv/OEX8NdKgNRfJC INAQ6MGHQXCjBax/TvF81UXwYOuM7zsqP3/MQxVCczDW6dVwGWYZNX4eXLutdtJrXFB yrFMpBfnhWbuk9GWWy0Oma+bnov0hRiShJ8+xEoI= Received: by smtp.zohomail.com with SMTPS id 1790273382146144.7467675855312; Thu, 24 Sep 2026 11:09:42 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:18 +0100 Subject: [PATCH v10 01/15] drm/panfrost: Move shrinker initialization and unplug one level down Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-1-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6389; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=stB54yy+rzsgjj1qVzBZEJWnEUOo5dHMeMALr6aQN1E=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdYahf0IDQ7CcIj2ZGPCJFK3w6ptELTHyHjM ZOq0itZWq2JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWAAKCRAOJn5M7lND PVVIC/9WDbUMMttNz0bAMvhMqchUrnowCpnRkcRpkTzTwGpJUJstCjo1kGcYPSTOSkITEdiP4H/ eAXjAmrTT84Rec2cvVLbTselCZ3zmiyQ4nJJFjvkdjdzH4xTo4GOv9OIxNmHHqOmwSCP8FwMmZ1 6TCQiGqUKkLzmPSlkMnXVkok42yY7Kf56shHiSG4fJVwWTA3+AwqadVtcj81UxJT7te9gqISpCq r3TB1Drc40PvVMk5NR34UfvCNzLDEYeCMJGX14jcn9aHQhudNrGWRCmA6iFODG2gv6bMT6bh1K3 CU11yPnfNKjIaAlQXJJgvX3oxvLUJ/e1G3HcPHLK4XGQW3//Y/kCBTR6NaeNbNmB6JP6+Q7NKje TdLka8gRkSQuj1IA39I0Qto9ctjCaQEGF+ndHb5LBCdKe97zo+7+o0zCoJTB2Rgl4TkM9uA+aLz jxgK2FGnGRMtV0x1OwaX14YRGx8pAgfqemnE0CMShpTAVIYjMmtKpN0FA7lL5luno2uEQ= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Since the moment we call drm_dev_register() the device should be in a position to accept jobs, so it's best if the shrinker is already initialized by then. On top of that, make shrinker functions take an panfrost_device pointer like other functions in the same sequence and rename them accordingly. Essentially mimic the init/fini behaviour in Panthor. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 8 +++++++- drivers/gpu/drm/panfrost/panfrost_drv.c | 6 ------ drivers/gpu/drm/panfrost/panfrost_gem.c | 26 ++++++++++++++------= ---- drivers/gpu/drm/panfrost/panfrost_gem.h | 7 ++++--- drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 8 ++------ 5 files changed, 28 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 485349faf251..05c40d5a20b5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -280,9 +280,14 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_job; =20 - panfrost_gem_init(pfdev); + err =3D panfrost_gem_init(pfdev); + if (err) + goto out_perfcnt; =20 return 0; + +out_perfcnt: + panfrost_perfcnt_fini(pfdev); out_job: panfrost_jm_fini(pfdev); out_mmu: @@ -304,6 +309,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); panfrost_mmu_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 96a66d673ba6..9882a3ede75f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -1003,14 +1003,9 @@ static int panfrost_probe(struct platform_device *pd= ev) if (err < 0) goto err_out1; =20 - err =3D panfrost_gem_shrinker_init(&pfdev->base); - if (err) - goto err_out2; =20 return 0; =20 -err_out2: - drm_dev_unregister(&pfdev->base); err_out1: pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); @@ -1024,7 +1019,6 @@ static void panfrost_remove(struct platform_device *p= dev) struct panfrost_device *pfdev =3D platform_get_drvdata(pdev); =20 drm_dev_unregister(&pfdev->base); - panfrost_gem_shrinker_cleanup(&pfdev->base); =20 pm_runtime_get_sync(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 3a7fce428898..f39c0f50ed4f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -15,20 +15,24 @@ #include "panfrost_gem.h" #include "panfrost_mmu.h" =20 -void panfrost_gem_init(struct panfrost_device *pfdev) +int panfrost_gem_init(struct panfrost_device *pfdev) { - int err; + if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && panfrost_transparent_hugep= age) { + int err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); + + if (drm_gem_get_huge_mnt(&pfdev->base)) + drm_info(&pfdev->base, "Using Transparent Hugepage\n"); + else if (err) + drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", + err); + } =20 - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && - !panfrost_transparent_hugepage) - return; + return panfrost_gem_shrinker_init(pfdev); +} =20 - err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); - if (drm_gem_get_huge_mnt(&pfdev->base)) - drm_info(&pfdev->base, "Using Transparent Hugepage\n"); - else if (err) - drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", - err); +void panfrost_gem_fini(struct panfrost_device *pfdev) +{ + panfrost_gem_shrinker_fini(pfdev); } =20 #ifdef CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panf= rost/panfrost_gem.h index 79d4377019e9..5c823cdbd980 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -129,7 +129,8 @@ drm_mm_node_to_panfrost_mapping(struct drm_mm_node *nod= e) return container_of(node, struct panfrost_gem_mapping, mmnode); } =20 -void panfrost_gem_init(struct panfrost_device *pfdev); +int panfrost_gem_init(struct panfrost_device *pfdev); +void panfrost_gem_fini(struct panfrost_device *pfdev); =20 struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, = size_t size); =20 @@ -154,8 +155,8 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); =20 -int panfrost_gem_shrinker_init(struct drm_device *dev); -void panfrost_gem_shrinker_cleanup(struct drm_device *dev); +int panfrost_gem_shrinker_init(struct panfrost_device *pfdev); +void panfrost_gem_shrinker_fini(struct panfrost_device *pfdev); =20 void panfrost_gem_set_label(struct drm_gem_object *obj, const char *label); int panfrost_gem_sync(struct drm_gem_object *obj, u32 type, diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index 2fe967a90bcb..fefae87535d6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -95,10 +95,8 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, st= ruct shrink_control *sc) * * This function registers and sets up the panfrost shrinker. */ -int panfrost_gem_shrinker_init(struct drm_device *dev) +int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) { - struct panfrost_device *pfdev =3D to_panfrost_device(dev); - pfdev->shrinker =3D shrinker_alloc(0, "drm-panfrost"); if (!pfdev->shrinker) return -ENOMEM; @@ -118,10 +116,8 @@ int panfrost_gem_shrinker_init(struct drm_device *dev) * * This function unregisters the panfrost shrinker. */ -void panfrost_gem_shrinker_cleanup(struct drm_device *dev) +void panfrost_gem_shrinker_fini(struct panfrost_device *pfdev) { - struct panfrost_device *pfdev =3D to_panfrost_device(dev); - if (pfdev->shrinker) shrinker_free(pfdev->shrinker); } --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 ED6C34A43FF for ; Thu, 24 Sep 2026 18:10:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273423; cv=pass; b=RWj5B5h/7h5uUSeLUdLo7L75NxqvfjWPkADLl0cIJsaTSmODww8seOax5dOOl0ODgRfMHN7+ePbADzn2GsssAMgCFQzOlXZRK7GfiMIhAF3vQ69z+3VvyqT3poKnlpL/rh+CabPBLWpht3QcAN3IUhu3a8m5EYEtthgu0nOX84Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273423; c=relaxed/simple; bh=BseDd5ptshL8O0X6ZZAknqhIzPZMy2A4L4RfHDWk90U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tjAFXdOYLHPA6S3bO74gYVHdSCtTubjN++H/XTwvXGqutFGybRtiHoD+plSaaaPCzjcLxpuj3pfVlzufJTVNbjFA4dUd4BIAdmDHs+kMGQktr/AqQiWaix2bc7p3jMcZ+c9yNbJRZYDjpinmoSs4pt6l5stLXxFyfVBFkV0/lhY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=h6gQ1FDw; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="h6gQ1FDw" ARC-Seal: i=1; a=rsa-sha256; t=1790273389; cv=none; d=zohomail.com; s=zohoarc; b=K8hOOPtZJVYnAiqOg/Prw7yfjSb1hYihdsfjevKA6i+NpwqXjvHb0hVLFJSXjBhCM4zgCqQTPX+4+3xWLbmxqXbYB5f8R0KcOsQ26sTMmUGcFhh/rkIKBhmaM7dshQKVss9wmm45O2O9GJUrg7YT/qILo7GaziBGDR3+NWNP/tg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273389; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=LZw4Kt2mQuWgyKmlrDPFTNJYeu3IN02ygsBncDd+4ds=; b=GmKOb3GkbJjWPibp09VO0V2r+GQPcV33YCNtc8C7OaFm1C9BBdm1574gynaOmT+pcgX6DUmNBW0grkEpxgvRLGL2wDE3VuJq3Uq86f8uSfRB3hQv8ABPWlvMZ8J2aIIJk+kZsfwflEWDu8D7qnZlK6MfrTfqGhk51dirVVS4ocA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273389; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=LZw4Kt2mQuWgyKmlrDPFTNJYeu3IN02ygsBncDd+4ds=; b=h6gQ1FDwfe3G46/1MxyDNV9w22MSydSobawr2SobZze6UTAFS3zjWdcvVsuV61W0 JoEZIX8BrfrjPyfZBIbX7BUb1VsiliDzgw1SpTHTBsfVQxnHslWAuiT42L/s/xhQoNs RKTsg/xVTKrMGUpRQZ3iNZ6UYqD/8yIJR5N/phaI= Received: by smtp.zohomail.com with SMTPS id 1790273387940533.0015023493623; Thu, 24 Sep 2026 11:09:47 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:19 +0100 Subject: [PATCH v10 02/15] drm/panfrost: Move lock and modparam initialisations into their subsystems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-2-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7189; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=BseDd5ptshL8O0X6ZZAknqhIzPZMy2A4L4RfHDWk90U=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdYqRo0nqnfSdTouonr5Ss5TPaLKAFQEGYh6 fmRcyMtZuqJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWAAKCRAOJn5M7lND PbiiC/9wDTNujfIwOWbuP2TiSGJXUvaDjn+26LZ/FlW54Bv5OBgDo3y7Ruka7bYEQL1LzpRuUav UnY6xdtLehcFUsJPXm838sTTdr1Y3zfPprEEPOoZRNiBc/VyiU0/hUNj8DoPFwO8d18fc3XEd2Y BBgT4bLz2/1C1PFE0NJwCVwx4igqLAK1TYYkDsPcfitZ8sdu5nugBxApXTBANKZQ54cYSf6k4Q2 LahJWlV17jyv0maWklS+cD6gFCpUqx4SHEb1Tdd9q6lr2yTl1BBgIygjmZB1MFKp6FULot6mBW8 0+s8Zn5++TivGZulkGbElW9V9RdaTiPfvjqvjAFb/daeuJE2NmvwL9Yj8vS/4ndWKSYc5rhAHg3 QMr+GSqFRIPw4N24oGypBlDInuPKJsYv2UIZPtUBBDqDlIdDqGAT7e9CWw2Gf+RVp5TUYRg2Ye4 0ec1xyhXoRr9kvKPbKDDZeFfnfS+yvhkT5PzJ5KXpUwVYNRjvtjKgUiDBs06ViUcVnzIo= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The device init function feels a bit cluttered with things that should be done in the specific subsystems where those locks and lists are being used. Same goes for module parameters, it's best to limit them to the subsystems where they're relevant. Then we can also discard panfrost_drv.h since the transparent_huge_page doesn't need to be accessed elsewhere. We can also simplify the creation of a mount point, because drm_gem_get_huge_mnt() would never return NULL if drm_gem_huge_mnt_create() returns 0 when kernel is built with support for transparent huge pages. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 7 ------- drivers/gpu/drm/panfrost/panfrost_drv.c | 10 ---------- drivers/gpu/drm/panfrost/panfrost_drv.h | 9 --------- drivers/gpu/drm/panfrost/panfrost_gem.c | 19 +++++++++++++------ drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 3 +++ drivers/gpu/drm/panfrost/panfrost_gpu.c | 2 ++ drivers/gpu/drm/panfrost/panfrost_job.c | 1 + drivers/gpu/drm/panfrost/panfrost_mmu.c | 3 +++ 8 files changed, 22 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 05c40d5a20b5..c1a2e93a2b9b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -216,13 +216,6 @@ int panfrost_device_init(struct panfrost_device *pfdev) { int err; =20 - mutex_init(&pfdev->sched_lock); - INIT_LIST_HEAD(&pfdev->as_lru_list); - - spin_lock_init(&pfdev->as_lock); - - spin_lock_init(&pfdev->cycle_counter.lock); - #ifdef CONFIG_DEBUG_FS mutex_init(&pfdev->debugfs.gems_lock); INIT_LIST_HEAD(&pfdev->debugfs.gems_list); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 9882a3ede75f..59af79a534fa 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -21,7 +21,6 @@ #include =20 #include "panfrost_device.h" -#include "panfrost_drv.h" #include "panfrost_gem.h" #include "panfrost_mmu.h" #include "panfrost_job.h" @@ -955,12 +954,6 @@ static const struct drm_driver panfrost_drm_driver =3D= { #endif }; =20 -#ifdef CONFIG_TRANSPARENT_HUGEPAGE -bool panfrost_transparent_hugepage =3D true; -module_param_named(transparent_hugepage, panfrost_transparent_hugepage, bo= ol, 0400); -MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point = with Transparent Hugepage enabled (true =3D default)"); -#endif - static int panfrost_probe(struct platform_device *pdev) { struct panfrost_device *pfdev; @@ -979,9 +972,6 @@ static int panfrost_probe(struct platform_device *pdev) =20 pfdev->coherent =3D device_get_dma_attr(&pdev->dev) =3D=3D DEV_DMA_COHERE= NT; =20 - mutex_init(&pfdev->shrinker_lock); - INIT_LIST_HEAD(&pfdev->shrinker_list); - err =3D panfrost_device_init(pfdev); if (err) { if (err !=3D -EPROBE_DEFER) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.h b/drivers/gpu/drm/panf= rost/panfrost_drv.h deleted file mode 100644 index a2277ec61aab..000000000000 --- a/drivers/gpu/drm/panfrost/panfrost_drv.h +++ /dev/null @@ -1,9 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 or MIT */ -/* Copyright 2025 Amazon.com, Inc. or its affiliates */ - -#ifndef __PANFROST_DRV_H__ -#define __PANFROST_DRV_H__ - -extern bool panfrost_transparent_hugepage; - -#endif diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index f39c0f50ed4f..383ac8cd5645 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -11,20 +11,27 @@ #include #include #include "panfrost_device.h" -#include "panfrost_drv.h" #include "panfrost_gem.h" #include "panfrost_mmu.h" =20 +#ifdef CONFIG_TRANSPARENT_HUGEPAGE +static bool panfrost_transparent_hugepage =3D true; +module_param_named(transparent_hugepage, panfrost_transparent_hugepage, bo= ol, 0400); +MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point = with Transparent Hugepage enabled (true =3D default)"); +#else +#define panfrost_transparent_hugepage false +#endif + int panfrost_gem_init(struct panfrost_device *pfdev) { - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && panfrost_transparent_hugep= age) { + if (panfrost_transparent_hugepage) { int err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); =20 - if (drm_gem_get_huge_mnt(&pfdev->base)) + if (err) + drm_warn(&pfdev->base, + "Can't use Transparent Hugepage (%d)\n", err); + else drm_info(&pfdev->base, "Using Transparent Hugepage\n"); - else if (err) - drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", - err); } =20 return panfrost_gem_shrinker_init(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index fefae87535d6..72cd7a165e6d 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -97,6 +97,9 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, str= uct shrink_control *sc) */ int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) { + mutex_init(&pfdev->shrinker_lock); + INIT_LIST_HEAD(&pfdev->shrinker_list); + pfdev->shrinker =3D shrinker_alloc(0, "drm-panfrost"); if (!pfdev->shrinker) return -ENOMEM; diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panf= rost/panfrost_gpu.c index 7d555e63e21a..8a15ccce08e9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -516,6 +516,8 @@ int panfrost_gpu_init(struct panfrost_device *pfdev) { int err; =20 + spin_lock_init(&pfdev->cycle_counter.lock); + err =3D panfrost_gpu_soft_reset(pfdev); if (err) return err; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index d59b4863b8ad..476c936b54e6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -874,6 +874,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) =20 INIT_WORK(&pfdev->reset.work, panfrost_reset_work); spin_lock_init(&js->job_lock); + mutex_init(&pfdev->sched_lock); =20 js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->base.dev), = "job"); if (js->irq < 0) diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 4a3162c3b659..5c393ed6e310 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -955,6 +955,9 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) { int err; =20 + INIT_LIST_HEAD(&pfdev->as_lru_list); + spin_lock_init(&pfdev->as_lock); + pfdev->mmu_irq =3D platform_get_irq_byname(to_platform_device(pfdev->base= .dev), "mmu"); if (pfdev->mmu_irq < 0) return pfdev->mmu_irq; --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 92FFA3BBFC4 for ; Thu, 24 Sep 2026 18:10:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273429; cv=pass; b=GkaHi02VoQcvNiPafsKrjpCMpLBiNj3i3SipKKCeJy3t4ZziYUYaF6Rrl/T3FySjHC1jKx5BWoG7xXpBj2lmFCS8tAwM2vHpdoxt6Si8CyTM7fDHjSqiD69IAWyksxZKzXs4ZCigBdrTQDMpyUzBqlnc3mepYd858MSL67jMS2U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273429; c=relaxed/simple; bh=KpBZvM+jDCQcDp+jAb4hb9VNZO+PYTWBYmA084H6WNg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CjsxRH4ARoQ7XYr35iM0OVAvaHj1xKr0jGzr1CrdnDKTqiFUDJhJaufZAD1co+we2CAUA9Q33ggEsx7KrpQymJo3bixgiZ9GlRcZN5h+p7NChEb1xAbpCqHEiKwQN/28UYO7zIRVa94/SRcB3rllFV5g9hCzQ6wBTZwcvQPCZO0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=ggN5c0au; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="ggN5c0au" ARC-Seal: i=1; a=rsa-sha256; t=1790273395; cv=none; d=zohomail.com; s=zohoarc; b=gOJcYBRCN/yKnbRxVa9V/Um7VKF+ilGP8ZINmWNi1JQD8PjkfKelHrRs2imVwy2T0gAFWwSx04BteNJeZOAUP8zrxv8bs4gy2UCAqtmZomauknd9gaT+BzKBgpnjqSEfvhKc4lCuX+/2NGPmr0m4gyCLRzlfRj8zMcNpjCx+zVk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273395; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=qA5nkyPf4OsAk/8123sJ/LUfYJEvp6UZplI2BJVIXLE=; b=hvD/H0Qv6LzeXcdlmj5PYjBDObnq3VnUWXEOtl8kKrBGovsWv4dI56f8DhnVBQWJ6EBOkP7GT1G7LRLjIscxXPr1HjKTDxWd+6clPm6YtbyEA5yjWWXNi+bkeQO7yzJLzPyjhY2G6+3Hojc1jRzQqJga6/d2Vthq7swrgbvtyPQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273395; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qA5nkyPf4OsAk/8123sJ/LUfYJEvp6UZplI2BJVIXLE=; b=ggN5c0auLGazX9SD2ddsInE5nBeUGuaRon2E3NC/dV8zHzNSGXF4t/dr3enY6SXN 9jPQGS40vsqG1dLID04XFMaJY3nejRulXP0MQIo0XwrwjWNxKZUZav5oUzzqwq+RC0c 0hHYwSNAAfCqToFzcEp+RU+vC2+59r5TzYqnBOjA= Received: by smtp.zohomail.com with SMTPS id 179027339361030.039944484668922; Thu, 24 Sep 2026 11:09:53 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:20 +0100 Subject: [PATCH v10 03/15] drm/panfrost: Move debugfs initialisation to relevant subsystems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-3-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12684; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=KpBZvM+jDCQcDp+jAb4hb9VNZO+PYTWBYmA084H6WNg=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdYnEDymry4feVQVZirzDIzs99fCQ2kB5GuZ kKKvua3KQiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWAAKCRAOJn5M7lND PaXtDACM++U7Q7JZjDPjutAI9gNn/HG0KJT8yva7b+dpoOXyutvswGNwflWaSmjHFg/DCFRSOio XaURCQAm0WAA/v7dLG144Ax/FB6lHEj3tAAeTdnlL+WgtdFsHYkhF6hBP7vvgLzWdjO4xFLe8nG PUgnrsvJBP6ZFJcBG0s2qm+Ybp4leMOPDwFBL2NDsf+t4was5CYvaqxSb6DbhJ7t7IUL5BAjm85 lqfnDtzAk9rTexQ9hZcwzmXj4YcYxn0whkiV8LpTyt11nR4CpaH8uHnJncE6LhQxxNY96+BJcLL Azzwwj9ITmUKNfzbAPvsLKb+hZuSfwf6iiQEmnAHjrqPv7hCt/RbnWWRodBdSZprid7u/BMufVG XrZozD8IesgPdC2DfLyg5oBdK+oPz/8yg1H1DQB2nwymiYiqZeu0zd/Qf15wvMzorLsqB8g04Z8 P8rzk+zA+bm93Dq6vI5K9sbz1aj30sgqdIj/g21h2AdsFjiZxosmRdn8b2AqrlOXx5BNE= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Because debugfs knobs are a device interface, and also the different knobs deal with specific subsystems, it's best to move their initialisations away from panfrost_drv.c and into the subsystem they provide information about. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 8 ++ drivers/gpu/drm/panfrost/panfrost_device.h | 4 + drivers/gpu/drm/panfrost/panfrost_drv.c | 129 +------------------------= ---- drivers/gpu/drm/panfrost/panfrost_gem.c | 29 ++++++- drivers/gpu/drm/panfrost/panfrost_gem.h | 3 +- drivers/gpu/drm/panfrost/panfrost_job.c | 99 ++++++++++++++++++++++ drivers/gpu/drm/panfrost/panfrost_job.h | 4 + 7 files changed, 144 insertions(+), 132 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index c1a2e93a2b9b..5bf528f41278 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -561,3 +561,11 @@ EXPORT_GPL_DEV_PM_OPS(panfrost_pm_ops) =3D { RUNTIME_PM_OPS(panfrost_device_runtime_suspend, panfrost_device_runtime_r= esume, NULL) SYSTEM_SLEEP_PM_OPS(panfrost_device_suspend, panfrost_device_resume) }; + +#ifdef CONFIG_DEBUG_FS +void panfrost_device_debugfs_init(struct drm_minor *minor) +{ + panfrost_gem_debugfs_init(minor); + panfrost_sched_debugfs_init(minor); +} +#endif // CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index 1fe1554f2652..a0b9a2145fc9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -341,4 +341,8 @@ panfrost_device_schedule_reset(struct panfrost_device *= pfdev) queue_work(pfdev->reset.wq, &pfdev->reset.work); } =20 +#ifdef CONFIG_DEBUG_FS +void panfrost_device_debugfs_init(struct drm_minor *minor); +#endif // CONFIG_DEBUG_FS + #endif diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 59af79a534fa..55fc22e8d4d4 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -792,133 +792,6 @@ static const struct file_operations panfrost_drm_driv= er_fops =3D { .show_fdinfo =3D drm_show_fdinfo, }; =20 -#ifdef CONFIG_DEBUG_FS -static int panthor_gems_show(struct seq_file *m, void *data) -{ - struct drm_info_node *node =3D m->private; - struct panfrost_device *pfdev =3D to_panfrost_device(node->minor->dev); - - panfrost_gem_debugfs_print_bos(pfdev, m); - - return 0; -} - -static void show_panfrost_jm_ctx(struct panfrost_jm_ctx *jm_ctx, u32 handl= e, - struct seq_file *m) -{ - struct drm_device *ddev =3D ((struct drm_info_node *)m->private)->minor->= dev; - const char *prio =3D "UNKNOWN"; - - static const char * const prios[] =3D { - [DRM_SCHED_PRIORITY_HIGH] =3D "HIGH", - [DRM_SCHED_PRIORITY_NORMAL] =3D "NORMAL", - [DRM_SCHED_PRIORITY_LOW] =3D "LOW", - }; - - if (jm_ctx->slot_entity[0].priority !=3D - jm_ctx->slot_entity[1].priority) - drm_warn(ddev, "Slot priorities should be the same in a single context"); - - if (jm_ctx->slot_entity[0].priority < ARRAY_SIZE(prios)) - prio =3D prios[jm_ctx->slot_entity[0].priority]; - - seq_printf(m, " JM context %u: priority %s\n", handle, prio); -} - -static int show_file_jm_ctxs(struct panfrost_file_priv *pfile, - struct seq_file *m) -{ - struct panfrost_jm_ctx *jm_ctx; - unsigned long i; - - xa_lock(&pfile->jm_ctxs); - xa_for_each(&pfile->jm_ctxs, i, jm_ctx) { - jm_ctx =3D panfrost_jm_ctx_get(jm_ctx); - xa_unlock(&pfile->jm_ctxs); - show_panfrost_jm_ctx(jm_ctx, i, m); - panfrost_jm_ctx_put(jm_ctx); - xa_lock(&pfile->jm_ctxs); - } - xa_unlock(&pfile->jm_ctxs); - - return 0; -} - -static struct drm_info_list panthor_debugfs_list[] =3D { - {"gems", - panthor_gems_show, 0, NULL}, -}; - -static int panthor_gems_debugfs_init(struct drm_minor *minor) -{ - drm_debugfs_create_files(panthor_debugfs_list, - ARRAY_SIZE(panthor_debugfs_list), - minor->debugfs_root, minor); - - return 0; -} - -static int show_each_file(struct seq_file *m, void *arg) -{ - struct drm_info_node *node =3D (struct drm_info_node *)m->private; - struct drm_device *ddev =3D node->minor->dev; - int (*show)(struct panfrost_file_priv *, struct seq_file *) =3D - node->info_ent->data; - struct drm_file *file; - int ret; - - ret =3D mutex_lock_interruptible(&ddev->filelist_mutex); - if (ret) - return ret; - - list_for_each_entry(file, &ddev->filelist, lhead) { - struct task_struct *task; - struct panfrost_file_priv *pfile =3D file->driver_priv; - struct pid *pid; - - /* - * Although we have a valid reference on file->pid, that does - * not guarantee that the task_struct who called get_pid() is - * still alive (e.g. get_pid(current) =3D> fork() =3D> exit()). - * Therefore, we need to protect this ->comm access using RCU. - */ - rcu_read_lock(); - pid =3D rcu_dereference(file->pid); - task =3D pid_task(pid, PIDTYPE_TGID); - seq_printf(m, "client_id %8llu pid %8d command %s:\n", - file->client_id, pid_nr(pid), - task ? task->comm : ""); - rcu_read_unlock(); - - ret =3D show(pfile, m); - if (ret < 0) - break; - - seq_puts(m, "\n"); - } - - mutex_unlock(&ddev->filelist_mutex); - return ret; -} - -static struct drm_info_list panfrost_sched_debugfs_list[] =3D { - { "sched_ctxs", show_each_file, 0, show_file_jm_ctxs }, -}; - -static void panfrost_sched_debugfs_init(struct drm_minor *minor) -{ - drm_debugfs_create_files(panfrost_sched_debugfs_list, - ARRAY_SIZE(panfrost_sched_debugfs_list), - minor->debugfs_root, minor); -} - -static void panfrost_debugfs_init(struct drm_minor *minor) -{ - panthor_gems_debugfs_init(minor); - panfrost_sched_debugfs_init(minor); -} -#endif - /* * Panfrost driver version: * - 1.0 - initial interface @@ -950,7 +823,7 @@ static const struct drm_driver panfrost_drm_driver =3D { .gem_prime_import =3D panfrost_gem_prime_import, .gem_prime_import_sg_table =3D panfrost_gem_prime_import_sg_table, #ifdef CONFIG_DEBUG_FS - .debugfs_init =3D panfrost_debugfs_init, + .debugfs_init =3D panfrost_device_debugfs_init, #endif }; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 383ac8cd5645..518f24549b9d 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -9,6 +9,7 @@ #include =20 #include +#include #include #include "panfrost_device.h" #include "panfrost_gem.h" @@ -735,8 +736,8 @@ static void panfrost_gem_debugfs_bo_print(struct panfro= st_gem_object *bo, totals->reclaimable +=3D resident_size; } =20 -void panfrost_gem_debugfs_print_bos(struct panfrost_device *pfdev, - struct seq_file *m) +static void panfrost_gem_debugfs_print_bos(struct panfrost_device *pfdev, + struct seq_file *m) { struct gem_size_totals totals =3D {0}; struct panfrost_gem_object *bo; @@ -756,4 +757,28 @@ void panfrost_gem_debugfs_print_bos(struct panfrost_de= vice *pfdev, seq_printf(m, "Total size: %zd, Total resident: %zd, Total reclaimable: %= zd\n", totals.size, totals.resident, totals.reclaimable); } + +static int panfrost_gems_show(struct seq_file *m, void *data) +{ + struct drm_info_node *node =3D m->private; + struct panfrost_device *pfdev =3D to_panfrost_device(node->minor->dev); + + panfrost_gem_debugfs_print_bos(pfdev, m); + + return 0; +} + +static struct drm_info_list panfrost_debugfs_list[] =3D { + {"gems", + panfrost_gems_show, 0, NULL}, +}; + +int panfrost_gem_debugfs_init(struct drm_minor *minor) +{ + drm_debugfs_create_files(panfrost_debugfs_list, + ARRAY_SIZE(panfrost_debugfs_list), + minor->debugfs_root, minor); + + return 0; +} #endif diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panf= rost/panfrost_gem.h index 5c823cdbd980..3008afcf4bff 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -164,8 +164,7 @@ int panfrost_gem_sync(struct drm_gem_object *obj, u32 t= ype, void panfrost_gem_internal_set_label(struct drm_gem_object *obj, const cha= r *label); =20 #ifdef CONFIG_DEBUG_FS -void panfrost_gem_debugfs_print_bos(struct panfrost_device *pfdev, - struct seq_file *m); +int panfrost_gem_debugfs_init(struct drm_minor *minor); #endif =20 #endif /* __PANFROST_GEM_H__ */ diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 476c936b54e6..00fb36c577df 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include =20 @@ -1138,3 +1140,100 @@ int panfrost_jm_ctx_destroy(struct drm_file *file, = u32 handle) panfrost_jm_ctx_put(jm_ctx); return 0; } + +#ifdef CONFIG_DEBUG_FS +static void show_panfrost_jm_ctx(struct panfrost_jm_ctx *jm_ctx, u32 handl= e, + struct seq_file *m) +{ + struct drm_device *ddev =3D ((struct drm_info_node *)m->private)->minor->= dev; + const char *prio =3D "UNKNOWN"; + + static const char * const prios[] =3D { + [DRM_SCHED_PRIORITY_HIGH] =3D "HIGH", + [DRM_SCHED_PRIORITY_NORMAL] =3D "NORMAL", + [DRM_SCHED_PRIORITY_LOW] =3D "LOW", + }; + + if (jm_ctx->slot_entity[0].priority !=3D + jm_ctx->slot_entity[1].priority) + drm_warn(ddev, "Slot priorities should be the same in a single context"); + + if (jm_ctx->slot_entity[0].priority < ARRAY_SIZE(prios)) + prio =3D prios[jm_ctx->slot_entity[0].priority]; + + seq_printf(m, " JM context %u: priority %s\n", handle, prio); +} + +static int show_file_jm_ctxs(struct panfrost_file_priv *pfile, + struct seq_file *m) +{ + struct panfrost_jm_ctx *jm_ctx; + unsigned long i; + + xa_lock(&pfile->jm_ctxs); + xa_for_each(&pfile->jm_ctxs, i, jm_ctx) { + jm_ctx =3D panfrost_jm_ctx_get(jm_ctx); + xa_unlock(&pfile->jm_ctxs); + show_panfrost_jm_ctx(jm_ctx, i, m); + panfrost_jm_ctx_put(jm_ctx); + xa_lock(&pfile->jm_ctxs); + } + xa_unlock(&pfile->jm_ctxs); + + return 0; +} + +static int show_each_file(struct seq_file *m, void *arg) +{ + struct drm_info_node *node =3D (struct drm_info_node *)m->private; + struct drm_device *ddev =3D node->minor->dev; + int (*show)(struct panfrost_file_priv *, struct seq_file *) =3D + node->info_ent->data; + struct drm_file *file; + int ret; + + ret =3D mutex_lock_interruptible(&ddev->filelist_mutex); + if (ret) + return ret; + + list_for_each_entry(file, &ddev->filelist, lhead) { + struct task_struct *task; + struct panfrost_file_priv *pfile =3D file->driver_priv; + struct pid *pid; + + /* + * Although we have a valid reference on file->pid, that does + * not guarantee that the task_struct who called get_pid() is + * still alive (e.g. get_pid(current) =3D> fork() =3D> exit()). + * Therefore, we need to protect this ->comm access using RCU. + */ + rcu_read_lock(); + pid =3D rcu_dereference(file->pid); + task =3D pid_task(pid, PIDTYPE_TGID); + seq_printf(m, "client_id %8llu pid %8d command %s:\n", + file->client_id, pid_nr(pid), + task ? task->comm : ""); + rcu_read_unlock(); + + ret =3D show(pfile, m); + if (ret < 0) + break; + + seq_puts(m, "\n"); + } + + mutex_unlock(&ddev->filelist_mutex); + return ret; +} + +static struct drm_info_list panfrost_sched_debugfs_list[] =3D { + { "sched_ctxs", show_each_file, 0, show_file_jm_ctxs }, +}; + +void panfrost_sched_debugfs_init(struct drm_minor *minor) +{ + drm_debugfs_create_files(panfrost_sched_debugfs_list, + ARRAY_SIZE(panfrost_sched_debugfs_list), + minor->debugfs_root, minor); +} +#endif diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panf= rost/panfrost_job.h index c3f57e41a571..3e3b9717838f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.h +++ b/drivers/gpu/drm/panfrost/panfrost_job.h @@ -74,4 +74,8 @@ int panfrost_job_get_slot(struct panfrost_job *job); int panfrost_job_push(struct panfrost_job *job); void panfrost_job_put(struct panfrost_job *job); =20 +#ifdef CONFIG_DEBUG_FS +void panfrost_sched_debugfs_init(struct drm_minor *minor); +#endif + #endif --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 E184B4A92F8 for ; Thu, 24 Sep 2026 18:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273435; cv=pass; b=QwOxpIHTLaawg9uKZ/4gEqeK5b8dH87QY6y/oA3E8J3dNJv+XyvwmqdM8M6GY7TH8M6+9NlfsqJ3CIQ8oIGYif1SXOghEdDfOX8WCZaMB30Q/Ix6ZrxcDdqjWxqEB3jH6bXk5wsPownshQnQCI3eNTRPbOGCKyarFSueXXDgaKQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273435; c=relaxed/simple; bh=ZbKj/0+gldpyeLSSMbRlmpp9mm9nCUYXI4PymrPfLzQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y7xntV4AQoN/PHUxsOkKaZwa59Tfm/L0avvm5ClYPIiqZOJwS2dwspdSlSUclwQgwg5Iay/Bn/eSt25G1pg8M+t/vmfjwvI9fn49WOoL8vb1GyIkdZySDHGj+HBdm5b9G054UXUp6DGkGrrlsJ4btka2/5vf60Vgu70B+bY1FiI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=FXulUgFI; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="FXulUgFI" ARC-Seal: i=1; a=rsa-sha256; t=1790273401; cv=none; d=zohomail.com; s=zohoarc; b=QVRSoFDHNCskrtHBne6J4TTB+NL6moYfGTkKn2TZ3l7VXI65alfI/UVtKVwH1ujQjMIYjqPRCfTOUSvYXj4Tvnxzk9YdrhWbmz7mvilqaIFK5fSZR+B8ERDBjqhiScjBp6YBNiEYN4zz28I2HLZ6pWmKqVW7GD3awPDxoYTN7wk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273401; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=5tcaP2IVkF4SV3ksstD6wFI9LNYjrG0cIcTQTiq6ocI=; b=bLaXNAhfOoWW6PHMPWz4Eb8ziDgqJhVSnce43UqsGUOMNYgl3FG6SCMcYImkgLhcTb+f3AcmM4Ug4hdtCNzU595u3G11sPIVsMEOPLU13wosLCMthKbznHhx6lI4J6mgFyCSZEvjRvA5VNMM0Qc34kVvPgYDTbAdsj4bP6X+T98= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273401; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=5tcaP2IVkF4SV3ksstD6wFI9LNYjrG0cIcTQTiq6ocI=; b=FXulUgFIpKm5tOBwYBt42+D5t3ceBMNYTriyyH6JzdCYAE0POTfA5jRppvAIzBrR kmfRxNvFL2OWSWWsbLwK7oIZ+1nqYONLqrbiu5BFEnjuT6gJTnDjC8Po06zCm1LE31C r45FTBs0wxTfWeWhR1EhZUiu+08IgTg5Z+VK3lCk= Received: by smtp.zohomail.com with SMTPS id 1790273399588786.1947085940815; Thu, 24 Sep 2026 11:09:59 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:21 +0100 Subject: [PATCH v10 04/15] drm/panfrost: Skip NULL checks for clock enable/disabling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-4-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1586; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=ZbKj/0+gldpyeLSSMbRlmpp9mm9nCUYXI4PymrPfLzQ=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdYDX7lYzsQDQ0uDE/EecNI1RZGrA8b7JeV0 uD6c0lD0JCJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWAAKCRAOJn5M7lND PZmpC/9GQFQauXugJH4dm2CXAeSc8KCGvTug0EdfCGeBedc5aciWfVhGipJUp6xKClclWtbP3N0 kPbg2+9gNqz02Uc8O5NiF1WC18N8kMVaI3p7WGIzjR4t40N7aqV+i88KyOyQCYIPPYBLlZBP52Z 0pcDItzO3ZEYc3nnjiCZ2YURisqxgIgJNpJ9dliMgOFmC5Fr1E1vOq/kPoB5I8nSdh7IKU+NQwz aCmrpw20BmJy4bzbqaNkXvgaE18+2gGH5SlAZEzxBD2wT33yy6YnS/1TizbPUvEqDVGMSQXVVKT hZPHQguF9mQLvAeOBS0XzVoaAwnwUdB4C0VR+1Wdq/eyomjTahJIPduM7rpdXscOlc8Qmjhwwol X+/V0AJGmAaCEhbaJayxTa0oO+YwCtpKq990SKB75Z/xXRTXj0HZB3gp+3xtVINZFk80qPf6rXC P6DKjrRJyRbghxuB1XyO3n1hqIY9r82MfPaWyx490RpEVFGBOVxDY93vLHj8PyeA5oth0= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The clk_* API can deal with NULL clock objects, so we can do away with NULL checks in client code. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 5bf528f41278..b3a53504bd01 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -510,11 +510,9 @@ static int panfrost_device_resume(struct device *dev) if (ret) goto err_clk; =20 - if (pfdev->bus_clock) { - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; - } + ret =3D clk_enable(pfdev->bus_clock); + if (ret) + goto err_bus_clk; } =20 ret =3D pm_runtime_force_resume(dev); @@ -524,7 +522,7 @@ static int panfrost_device_resume(struct device *dev) return 0; =20 err_resume: - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS) && pfdev->bus_clock) + if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) clk_disable(pfdev->bus_clock); err_bus_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) @@ -545,9 +543,7 @@ static int panfrost_device_suspend(struct device *dev) return ret; =20 if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - if (pfdev->bus_clock) - clk_disable(pfdev->bus_clock); - + clk_disable(pfdev->bus_clock); clk_disable(pfdev->clock); } =20 --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 DE1DE49B5AD for ; Thu, 24 Sep 2026 18:10:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273441; cv=pass; b=MuOzOjrW5Vw2Z33zkqk1ti9QIo7X0Nt6NZiYfkoE00zP463HKS93/pUbzwanwL7NPtXqJovkaacpwwVTukLc4v5utRvM/L1OgzxtcYyO7OPlk2AWTX5BpJHFJDRA4W9EkYt5VwfahhA7Q24gWeT4LfXmq6xiRbVRSqJpNyYE8jg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273441; c=relaxed/simple; bh=gjre2d//pLL35O2CFo/5bmFFpp2uslvlgfO9zx+gAgY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y+xTJKbPuF785plhM+TO3u+QWr8WaoqjI6a7D7E6Q0BedIw34G7Xih7VzpUJNJSChoD6jzs05wSPkYuF0V/qL//Wcilf/boeT0/IfkdrD5sRB7h6z5QH0pAVRo2mp9AUZDVo13UMBCdBmtnNxy/ppwJ97tPeo+DcwYza9WdbWKU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=cClYqDG4; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="cClYqDG4" ARC-Seal: i=1; a=rsa-sha256; t=1790273407; cv=none; d=zohomail.com; s=zohoarc; b=My0CIGUlKBP8OM9fu7ri1hgSWL1uUCvT31nOE2ClZQZW6hoXF1LEOs32BzVuPn5CkA76xhWFq0e8CSKu2xw//KkbpBfdksssziQjf2lSuaE+oW3K0WBft9/ua/zFvpWSfYFIafcp4Usow6zjvYv0biz5Sz8sghDILX6HN62c0bs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273407; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=qigAaY9WXoJkoUdhy+BS7+ht2S8XyDcYsJXfsXz1pnY=; b=dCXIO2cFqUp5wSwl979SsVNINKTcxJ6az8MpXjsSV5XTS4nDZ6GIGdXOSY7HGDx0OF7GZcbXQWCdU3ZHhy5i2ZF8LDY9PPy8kms/QWSE1BRBGzYqCONAi9Smhidv2CD8CYVpBkRrTsUawdkR9q1MguHiYnKwwI2YQJf+xPNuzjc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273407; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qigAaY9WXoJkoUdhy+BS7+ht2S8XyDcYsJXfsXz1pnY=; b=cClYqDG4Eu93PPYyJO3R9+iiizSQdOIRvPVPOtJp6ePSRn5ASGSJ7fTFS/B2BLnH N618DIGgRRWt7ANJnyOVTBUACVH3zC8Vqt6IuipiKG7oMXPcQ/YN3SoKotBZ/Q3EXXe fpA1ievGcDqVtlg+biujI2nKXjziyEN1PUi69VUg= Received: by smtp.zohomail.com with SMTPS id 1790273405278186.28737005661958; Thu, 24 Sep 2026 11:10:05 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:22 +0100 Subject: [PATCH v10 05/15] drm/panfrost: Consolidate device clock management and reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-5-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6334; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=gjre2d//pLL35O2CFo/5bmFFpp2uslvlgfO9zx+gAgY=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdYvKVgHn1RyPqngf7f1D4Kq6ZkhlkJw2Z2q LSJXTjabZeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWAAKCRAOJn5M7lND PZeFDACUsM1HJEGavjIVQilFHfoQM4YZBV6JhAQjUV4Auc+0mJj7yOBOs/6FCmzkqHoBXjJjrRx euLHCYnLPP34YoCJibnBPjnMUH+qC5S5h1wRFT/6swzz/qcGuP4vZjkRqKOo7X3Favee3k86z8B ofCuWt+Z2KA3gT+RnPT6vw0WNDOxRA5KxOUbH+wJJmFpphCGMIBEPBDclyhg5duaNswONe0PuBD ZiMK+ks3V7I0ccARKKXz17QRdOC8ztx4sqYj5rk/KWrPwo4SnDhw1ls3HBsmXVoQXfEGGS1GVT3 wufkcUFrsqsYXbXqQdjp6vGTMyWBsAq4ZkVJfcCZMVKYzRKiGC8pyMLlYueCbo1XNFvpCJlXhK6 xKGGVnlhrQ7/7xYMBwmbHyucJROyLYwRrc7BioeZKKxNB3JEQeLoa2o5UciGXGqskdB6bBYFeYY xAh7TkLX1ilRVpKCXUd5LvIcHeK/K50005Q3yyqEwzrUe+8e5nuv8OqoMP4FMfs3BCnRE= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Gather all clock enables and disables into a single function to avoid repetitions between driver init/fini and device resume/suspend, since these clocks are always handled in bulk. Also do clk (un)prepares and dis/enables at the same time, since the clk_prepare_* family of functions can simply increase the refcnt of an already prepared clock. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 118 +++++++++++++------------= ---- 1 file changed, 52 insertions(+), 66 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index b3a53504bd01..9f2b1967a398 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -34,10 +34,46 @@ static void panfrost_reset_fini(struct panfrost_device = *pfdev) reset_control_assert(pfdev->rstc); } =20 -static int panfrost_clk_init(struct panfrost_device *pfdev) +static int panfrost_clks_enable(struct panfrost_device *pfdev, bool on_res= ume) { int err; + + err =3D clk_prepare_enable(pfdev->clock); + if (err) + return err; + + err =3D clk_prepare_enable(pfdev->bus_clock); + if (err) + goto disable_clock; + + if (on_resume) { + err =3D clk_prepare_enable(pfdev->bus_ace_clock); + if (err) + goto disable_bus_clock; + } + + return 0; + +disable_bus_clock: + clk_disable_unprepare(pfdev->bus_clock); +disable_clock: + clk_disable_unprepare(pfdev->clock); + + return err; +} + +static void panfrost_clks_disable(struct panfrost_device *pfdev, bool on_s= uspend) +{ + if (on_suspend) + clk_disable_unprepare(pfdev->bus_ace_clock); + clk_disable_unprepare(pfdev->bus_clock); + clk_disable_unprepare(pfdev->clock); +} + +static int panfrost_clk_init(struct panfrost_device *pfdev) +{ unsigned long rate; + int err; =20 pfdev->clock =3D devm_clk_get(pfdev->base.dev, NULL); if (IS_ERR(pfdev->clock)) { @@ -48,53 +84,31 @@ static int panfrost_clk_init(struct panfrost_device *pf= dev) rate =3D clk_get_rate(pfdev->clock); dev_info(pfdev->base.dev, "clock rate =3D %lu\n", rate); =20 - err =3D clk_prepare_enable(pfdev->clock); - if (err) - return err; - pfdev->bus_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus"); if (IS_ERR(pfdev->bus_clock)) { - dev_err(pfdev->base.dev, "get bus_clock failed %ld\n", - PTR_ERR(pfdev->bus_clock)); err =3D PTR_ERR(pfdev->bus_clock); - goto disable_clock; + dev_err(pfdev->base.dev, "get bus_clock failed %d\n", err); + return err; } =20 if (pfdev->bus_clock) { rate =3D clk_get_rate(pfdev->bus_clock); dev_info(pfdev->base.dev, "bus_clock rate =3D %lu\n", rate); - - err =3D clk_prepare_enable(pfdev->bus_clock); - if (err) - goto disable_clock; } =20 pfdev->bus_ace_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus_ace"= ); if (IS_ERR(pfdev->bus_ace_clock)) { err =3D PTR_ERR(pfdev->bus_ace_clock); dev_err(pfdev->base.dev, "get bus_ace_clock failed %d\n", err); - goto disable_bus_clock; + return err; } =20 - err =3D clk_prepare_enable(pfdev->bus_ace_clock); - if (err) - goto disable_bus_clock; - - return 0; - -disable_bus_clock: - clk_disable_unprepare(pfdev->bus_clock); -disable_clock: - clk_disable_unprepare(pfdev->clock); - - return err; + return panfrost_clks_enable(pfdev, true); } =20 static void panfrost_clk_fini(struct panfrost_device *pfdev) { - clk_disable_unprepare(pfdev->bus_ace_clock); - clk_disable_unprepare(pfdev->bus_clock); - clk_disable_unprepare(pfdev->clock); + panfrost_clks_disable(pfdev, true); } =20 static int panfrost_regulator_init(struct panfrost_device *pfdev) @@ -436,34 +450,17 @@ static int panfrost_device_runtime_resume(struct devi= ce *dev) if (ret) return ret; =20 - ret =3D clk_enable(pfdev->clock); - if (ret) - goto err_clk; - - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; - - ret =3D clk_enable(pfdev->bus_ace_clock); - if (ret) - goto err_bus_ace_clk; + ret =3D panfrost_clks_enable(pfdev, true); + if (ret) { + reset_control_assert(pfdev->rstc); + return ret; + } } =20 panfrost_device_reset(pfdev, true); panfrost_devfreq_resume(pfdev); =20 return 0; - -err_bus_ace_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - clk_disable(pfdev->bus_clock); -err_bus_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - clk_disable(pfdev->clock); -err_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - reset_control_assert(pfdev->rstc); - return ret; } =20 static int panfrost_device_runtime_suspend(struct device *dev) @@ -480,9 +477,7 @@ static int panfrost_device_runtime_suspend(struct devic= e *dev) panfrost_gpu_power_off(pfdev); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) { - clk_disable(pfdev->bus_ace_clock); - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); + panfrost_clks_disable(pfdev, true); reset_control_assert(pfdev->rstc); } =20 @@ -506,13 +501,9 @@ static int panfrost_device_resume(struct device *dev) } =20 if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - ret =3D clk_enable(pfdev->clock); + ret =3D panfrost_clks_enable(pfdev, false); if (ret) goto err_clk; - - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; } =20 ret =3D pm_runtime_force_resume(dev); @@ -523,10 +514,7 @@ static int panfrost_device_resume(struct device *dev) =20 err_resume: if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->bus_clock); -err_bus_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->clock); + panfrost_clks_disable(pfdev, false); err_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); @@ -542,10 +530,8 @@ static int panfrost_device_suspend(struct device *dev) if (ret) return ret; =20 - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); - } + if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) + panfrost_clks_disable(pfdev, false); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 15B9049B5AD for ; Thu, 24 Sep 2026 18:10:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273447; cv=pass; b=HWBGeoYSakfMxm+CsOa4vEurii1caARHK8Yvssa3M2VyofyHBknuXpYzaYdglVyQNNzWGaUwSlwVOUrIbWXirkTn3HEYqrknA33Pe7ZG0MDKu7sJLGH58wXS4Ixccd7lqsjv3240bcxBI99904PcgM7/G/EGZhAsJTCPkbqYpPU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273447; c=relaxed/simple; bh=9YjbT6utFzW22vI9oiisbYmsMjIEN+KJP+dzW+mgYcA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n4+3BOTEcJU+QeZuzUSlyX3TbhSRZkqQi38dHllN8cT85WmvJJzjPOx1CyIS8IUH4StvXHimN9dTWRPhhJPIeL8Aad/QhEOgBpxUZq8//W/rPcaJkITwNFeR26vlDaVynRKpwzoLhK0pBXgF/UzsjVlmX7QJyRzW7nlsnRmtOwg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=dO1zpDpX; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="dO1zpDpX" ARC-Seal: i=1; a=rsa-sha256; t=1790273413; cv=none; d=zohomail.com; s=zohoarc; b=ja/o3FaSGgYmj5WY+R689otiilfYb8SmzWsACos8Qk67ZmsPiECR93++v1VAYxQ3nyGD7ds2rdnFMK1kW3hfDJe8QOxYafZV9Yl+2fw/UQw7dhqHfe3i7s5B3Bd/Xdv6k1uklUyypoxqR1Y0KldpsfxH8mWsRknD/5XUiodztbk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273413; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=qcM3/nFqy/NUZZdZNA3Y+KqKX0ifYF1aFycWvpQlz7o=; b=DvPt03MbTgyLKzIY8p2y2FhvwomRPaoYo5ied7a5c4QOV3iFgeUGgyVmurxVlew2KIYtdMj/J/tKZL5sgIOm9gYXONUyXgMt2c49aakM3geyRKdVt2cUJy1lroAJLaAgmsyABRo1Omq9hTKnIhjxOtvCTyAuttFeVLvQJmQA6eA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273413; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qcM3/nFqy/NUZZdZNA3Y+KqKX0ifYF1aFycWvpQlz7o=; b=dO1zpDpXqNIH/hQEH25vz5LPH5wE17aITcIcrCR2EVl/nHqUoyZEOs+KEhcWOFU1 2DvsDAzY2N3dMgRAGA8h+lTW1jeFoO6u+abTbZ2pZQomL6bwxxNB69H3XF3K8RJtMq2 RaQ3P6wFPy0eRy8/bTmj8eNcbuRZQa26DGtskHL8= Received: by smtp.zohomail.com with SMTPS id 1790273412417157.94252670530898; Thu, 24 Sep 2026 11:10:12 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:23 +0100 Subject: [PATCH v10 06/15] drm/panfrost: Fix PM refcnt and autosuspend issues at device probe/remove Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-6-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3393; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=9YjbT6utFzW22vI9oiisbYmsMjIEN+KJP+dzW+mgYcA=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdY74H/LPvM7LMvuoOAV7I+ZaAP0G+8mMDQe uSPHLaBRt6JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWAAKCRAOJn5M7lND PbGOC/0YFYFUp9g/KN2UaYR0Fmblft0iUxxM398IwzwpV3R70qkRBuhFBPQ0mGkK5LpNKpRHi6e LXsgR04RPLHnwcUiOrm/ydrcZRw2GwFHtzhdXx7zGLKQKXdzlpW/CkPVwYskZQgous2p4aS5Eqy PdrMYWvIVrbjnIijHc00AqDJT9TDybtkJrnzz2t6Ks7aCJTx8NP6r9YngxK1HrBVYA+2Jjp7Don dBIWB6Yu/+eVL8frCrmP7LV1Hnu1kbh1mDrmoPZ5xFRpKlR5U/KVycWG/ydUOekFsezs2NQtfA1 D+4qVffD14UTZhSDDyNfIxveJvapwDdjx2xffrZg4tBSS7OBdpNGdm78Ep0wl0jE0wJi9yqgH77 w31jJf6MFWY1emE5gBklRtM4kiHTfa3PkRdgo1yjcoR1ajMWpwO/pPeuLawheiMjfVvNyVO6GRH 5ub9ggt79/lhtnN/i96zthKTlx5b2grUuZHwGIT1ptrJxSKY6OeobNwAEO2xTLaHK+ADM= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D During device probe(), failure to do a PM get() will leave the usage_count set to 0, which is the value assigned at device creation time. That means when the autosuspend delay expires, runtime suspend callback won't be invoked, so the device will remain powered on forever. On top of that, failure to call PM put() during device unplug means Panfrost device's PM usage_count increases monotonically for every new module reload. The outcome of both of the above meant that: - Devfreq OPP transition notifications would be printed all the time, even when no jobs are being submitted. This quickly fills the kernel ring buffer with junk. - Because MMU interrupts are only enabled when the device is reset, the very first job targeting the tiler heap BO after device probe() would always time out, since the driver's PM runtime resume callback would not be invoked. To fix the above: - Manually adjust the PM refcnt at device probe and removal time. - Ensure pm_runtime_dont_use_autosuspend is called in the wind-down path. - Call pm_runtime_put_autosuspend() when device is ready to accept jobs - Move pm_runtime_set_suspended() before panfrost_device_fini() so that resource unwinding happens in the opposite order as initialisation. Signed-off-by: Adri=C3=A1n Larumbe Fixes: 635430797d3f ("drm/panfrost: Rework runtime PM initialization") Fixes: 876b15d2c88d ("drm/panfrost: Fix module unload") Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_drv.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 55fc22e8d4d4..02ddd391231c 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -852,8 +852,13 @@ static int panfrost_probe(struct platform_device *pdev) goto err_out0; } =20 + /* The reason we must manually set the PM status and usage counter is + * we have just powered the device up but did not go through the PM + * runtime resume callback, so we need to update these ourselves. + */ pm_runtime_set_active(pfdev->base.dev); pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_get_noresume(pfdev->base.dev); pm_runtime_enable(pfdev->base.dev); pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ pm_runtime_use_autosuspend(pfdev->base.dev); @@ -866,13 +871,16 @@ static int panfrost_probe(struct platform_device *pde= v) if (err < 0) goto err_out1; =20 + pm_runtime_put_autosuspend(pfdev->base.dev); =20 return 0; =20 err_out1: + pm_runtime_dont_use_autosuspend(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); - panfrost_device_fini(pfdev); + pm_runtime_put_noidle(pfdev->base.dev); pm_runtime_set_suspended(pfdev->base.dev); + panfrost_device_fini(pfdev); err_out0: return err; } @@ -884,9 +892,11 @@ static void panfrost_remove(struct platform_device *pd= ev) drm_dev_unregister(&pfdev->base); =20 pm_runtime_get_sync(pfdev->base.dev); + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); - panfrost_device_fini(pfdev); pm_runtime_set_suspended(pfdev->base.dev); + panfrost_device_fini(pfdev); } =20 static ssize_t profiling_show(struct device *dev, --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 C9A924A9D62 for ; Thu, 24 Sep 2026 18:10:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273451; cv=pass; b=EMmDGJ+uhEHDhhM7SJDJ8Jr6K9gzuxGiDqwyUF8qcq2Re5oR1MnL3ZXdTo7sFvTmTCCya6MlAdJ5HnoXJPwkmqmIDKBx0HI8+phCTZLq70LEQg3w0lmfLHEDd6WQ6QNFTq7sGxOw53yNE6gtzknGL0y2kRHxXjAvngxCwbnniMM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273451; c=relaxed/simple; bh=rGbyQBkNbY5a1OXBSal5Mure3AlHLFxQtfgc5Bhzvks=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eUwDZlVdWn1R/jp1bX6pIp0OqFupjzp1sNir8ATzh01bKxzOYN53iP40Nx1C/TFzQfg1wdTdpnO3XnsiiEEJWvO+zrXrxrOgD88bwJd8t0Xy4cZ4CDMclmfkkvmsZrIptuNxKic7ueru8QVu4rYUO8j0DInnMFk+NACKxEjrbyI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Eb+Bogmd; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Eb+Bogmd" ARC-Seal: i=1; a=rsa-sha256; t=1790273419; cv=none; d=zohomail.com; s=zohoarc; b=QSEb7Y0izsvKaD8UVI6nSClfcVT2WsrPW1+TblKU+JV7OgMR6orydKJtOg6Pi33y7lkH6LLmIEcGijOcTUIKqZxVjCYV/5IJMq9sS+q4UOzta8RE1NhJ9CIE/aiXuWfxsy60/EKzqT3IliEtxiP5QISFztGM005NZrDn9HYbAX8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273419; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=YLJJEy7HObDD1CKVtOGtdrfPLM+ZQOVKX8SKLnJRFuQ=; b=KPV4zdGHC/kinmfwbGDamm4ba5NRXpQ8OLJrSFd8RWBZfjRxpBSr6VLFb/3MTTB7z18QvEk8NuOZzFStg1G3QpFuvNXuRXS26U55O4V552yxuREFi3Z4V8zeHXopBiiDL+dprNn7QY39d4uyt1nzLF/Wi053KPxthDUHkjpa/wM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273419; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=YLJJEy7HObDD1CKVtOGtdrfPLM+ZQOVKX8SKLnJRFuQ=; b=Eb+Bogmdyo6aTVydEyjwhcelVkDjxEtk+Z1chcl7SH/cofdi9nm3kygcLOgGFx3F nsTnoI9x7GFUMQf4++RKwy24iyt+7p5+613oJY4p+pqaoGYgB9m7qO9mk8O05zewDKj f07j8VNxlFY+htxus3nAJH4kXiz9Thq8U9oaXAhg= Received: by smtp.zohomail.com with SMTPS id 1790273418665543.5553975028979; Thu, 24 Sep 2026 11:10:18 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:24 +0100 Subject: [PATCH v10 07/15] drm/panfrost: Explicitly enable MMU interrupts at device init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-7-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1801; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=rGbyQBkNbY5a1OXBSal5Mure3AlHLFxQtfgc5Bhzvks=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZaJO1zNk4ZgtNB7zNOy6xgoSwpw8rlJ583 YHF4+k/PH+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND PV8tC/9cLSGtU7HpjiRjzTOTUpEImyzmb3cEBBV3UCqQLLVjWiWRXb5oSIFl1z8KxeYNSmB+HDt f22qbAfB+mmQOXeFB7QF9rGUMtPQqTZBrpVtaRotY1+EmMu+iju/vdxEH8h30xu7HmMIHmHMbPu +bKFtkVJyKOSVxq9ktIZqeebLZSv4+54BrYpf2tH442klDwzUPybBOzziG6DMmvauRtuGBOgBWY 2fOs6vM7moYBLdAzmxGKFtfDU5D+5KyB9+l0H+OIyOazOBhTlrREmzZODUM05j0uV/Sg0A4Ht+/ 3vaVakLsLPWPD8jUoHeVdMAjB3NEf13gnADCwMB+PFFQ2O3vMElgtTP8/gNp+G9c8m6tVchYc75 aRBHWacpkPMBlm3+IOfXgZc4LKvuw94rqJ4Zrjou7vwj1btqZy6edbWpaoh+iGTDkynudg6f84d Oi8C8wssPhlfWFI/U51mpCtePjvBielbK4A7axMICyhdiyG6OX/phXQ2zoghbQKfaIsF0= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Because the device must be in a position to accept jobs between the time drm_dev_register() is called and autosuspend first kicks in, there's a very narrow window inbetween during which jobs targeting the tiler buffer object would time out, since the device's PM status is 'Active', but no MMU interrupts were enabled at device initialisation time. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe Fixes: 73e467f60acd ("drm/panfrost: Consolidate reset handling") --- drivers/gpu/drm/panfrost/panfrost_mmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 5c393ed6e310..faa62643caf1 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -336,6 +336,12 @@ void panfrost_mmu_as_put(struct panfrost_device *pfdev= , struct panfrost_mmu *mmu WARN_ON(atomic_read(&mmu->as_count) < 0); } =20 +static void panfrost_mmu_enable_interrupts(struct panfrost_device *pfdev) +{ + mmu_write(pfdev, MMU_INT_CLEAR, ~0); + mmu_write(pfdev, MMU_INT_MASK, ~0); +} + void panfrost_mmu_reset(struct panfrost_device *pfdev) { struct panfrost_mmu *mmu, *mmu_tmp; @@ -355,8 +361,7 @@ void panfrost_mmu_reset(struct panfrost_device *pfdev) =20 spin_unlock(&pfdev->as_lock); =20 - mmu_write(pfdev, MMU_INT_CLEAR, ~0); - mmu_write(pfdev, MMU_INT_MASK, ~0); + panfrost_mmu_enable_interrupts(pfdev); } =20 static size_t get_pgsize(u64 addr, size_t size, size_t *count) @@ -973,6 +978,8 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) return err; } =20 + panfrost_mmu_enable_interrupts(pfdev); + return 0; } =20 --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 B11FE4AA59A for ; Thu, 24 Sep 2026 18:10:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273460; cv=pass; b=rkGEPDwv6Zo7g+zKJWpfG2VRHc/en2NWlk08boPv4QSFrIePvDFqXYo4nO6DkOP7YZDghBr/1MijScR6jRLCBqwcf8aiNWPnW87vWQGNibe03trdzfFwOnDCNZVsJSCu2ky4wcD/a6dehkBSpQ2UMTuXwYs2r3bcitEjqIdld9w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273460; c=relaxed/simple; bh=5lhOVXQZup+E3Rx2DZM+/coFT9uP8Ke0U5hX3WPESxE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hNjyaQUBbAA1DUxpvNZ4U6uYPbSDBGf6Sy8UCwDEyENdOXMeuR8LMVQ1fmIPVOleKC8QitDbJ+hkIeOy0FhRnEt2ZwdhMd6SGXLXS/3c+56zKnkX0agLPyE7yO6voW4+kohGBgUk0CB5thLkAqlVqGYg1SkG5IMvTK3Vt8fMfrg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=fI1qdBJB; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="fI1qdBJB" ARC-Seal: i=1; a=rsa-sha256; t=1790273425; cv=none; d=zohomail.com; s=zohoarc; b=ldl/MqTGybXADH88ZA6vA1SFiO6eOkmETO1olpiubiONZ1uVx3vL/RTnn9XDUVX1XKiMA9tNEsf47ametpZjSbq440iw2fqHOf/mWXt4VqTzDQyRdF+nIsR0dpRshGj6MeQAs0uEemnW3K1vyhDnFS6jQFkG/IMZwrWvzsjpjRc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273425; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=6O0y7YHB5eYuiFJy4FE91xQeeayyLqa5GzNXokwz1uU=; b=JGevWE2YeXTQDfk9n4+1yXbV3BWtXvtgu85YOrpb84VN8FTGHouwYDO32NvzXyYS2W5BQB9YGQwxZvMt3+66ouGyW+/RGrU9jXrVRYOSMN6k+VGPJ/htWKLoIxOQ47vxZyjLwjuZzUkG5MhcPck5F6DmAruWD9Ca2T5cTDDEVO4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273425; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=6O0y7YHB5eYuiFJy4FE91xQeeayyLqa5GzNXokwz1uU=; b=fI1qdBJB1/gBQNDYmx+nD+DJ0IJfO8es8q5XORMYiuMfcE+utQoqeMDR4UlVOxai 4I7t/DiviIND1nNcuqcKuw7FUszJXMnPL2qAWOlQxmGajjYC5AnWXRjy4gruB+WybLq QJ9GtvxP3qMgH6ObqawLRy7zULrtu6hLErSVUKtw= Received: by smtp.zohomail.com with SMTPS id 1790273424541916.4231231614267; Thu, 24 Sep 2026 11:10:24 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:25 +0100 Subject: [PATCH v10 08/15] drm/panfrost: Move all DRM device initialisation into device_init() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-8-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5733; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=5lhOVXQZup+E3Rx2DZM+/coFT9uP8Ke0U5hX3WPESxE=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZlkhG9Z1EaqYQ4Dm5mOq37cOAplMn5rPan t1jLmReJSWJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND PSMaDACuOLKonzc/p0k29nV79c+L2mJYlMAYdzDFMt4hxFe+Ju+x3M58w4kbuZm8RAJSOLpmYYQ 6LxmtfDh532FSaBfWQtIDjxh+zNEDZG3lo9860VEu92XXrgpQT+EP9zfsJ2YeGWJJBJ04Wyzrr/ BGp2jUYGMyahjIIUL2j9k3gt8Ma2UOq90Cm3gHdiQv5AfyUsU26rajXyAS8ZDCcwSbLY/LihO3h 8bdQMmtKqnmbrXKjcVqgVaE3vhFXtIJ+XS+KfciBk3GISKBPCIYqhWqCbIRbIT8Qh2pl1JQXkk8 mbOirMwGCttmVaoMYqoesKvdsRhZZCsV6riTAI+SpWtuoWpOCFyn76Qugm2/ffjdosAbADUcTmp ZqMooru7AqTEb0j1Ea6Z9wVP9RumnADYv/feF+lDrcl0LT+d0k5SMjaeZSRW/fp9fplb0wmOGt5 LtvYhFhClqieBuaQwPFXoFL2src59USHqyFwHwthDa8AQFhHb3gRt/QdWB68PHBrtwsss= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Ideally the probe() function will do as little as possible, and all device initialisation and registration should happen inside the panfrost device subsystem, just like it's done in Panthor. This also simplifies resource unwinding in the error path. Do the same thing for DRM driver remove, as in, sweep most of the action into panfrost_device_fini(), just like we did for device probe. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 41 ++++++++++++++++++++++++ drivers/gpu/drm/panfrost/panfrost_drv.c | 51 +-------------------------= ---- 2 files changed, 42 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 9f2b1967a398..d531bada62f6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -8,6 +8,7 @@ #include #include #include +#include =20 #include "panfrost_device.h" #include "panfrost_devfreq.h" @@ -230,6 +231,12 @@ int panfrost_device_init(struct panfrost_device *pfdev) { int err; =20 + pfdev->comp =3D of_device_get_match_data(pfdev->base.dev); + if (!pfdev->comp) + return -ENODEV; + + pfdev->coherent =3D device_get_dma_attr(pfdev->base.dev) =3D=3D DEV_DMA_C= OHERENT; + #ifdef CONFIG_DEBUG_FS mutex_init(&pfdev->debugfs.gems_lock); INIT_LIST_HEAD(&pfdev->debugfs.gems_list); @@ -291,8 +298,35 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_perfcnt; =20 + /* The reason we must manually set the PM status and usage counter is + * we have just powered the device up but did not go through the PM + * runtime resume callback, so we need to update these ourselves. + */ + pm_runtime_set_active(pfdev->base.dev); + pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_get_noresume(pfdev->base.dev); + pm_runtime_enable(pfdev->base.dev); + pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ + pm_runtime_use_autosuspend(pfdev->base.dev); + + /* + * Register the DRM device with the core and the connectors with + * sysfs + */ + err =3D drm_dev_register(&pfdev->base, 0); + if (err < 0) + goto err_disable_rpm; + + pm_runtime_put_autosuspend(pfdev->base.dev); + return 0; =20 +err_disable_rpm: + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_disable(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); + pm_runtime_set_suspended(pfdev->base.dev); + panfrost_gem_fini(pfdev); out_perfcnt: panfrost_perfcnt_fini(pfdev); out_job: @@ -316,6 +350,13 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { + pm_runtime_get_sync(pfdev->base.dev); + + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_disable(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); + pm_runtime_set_suspended(pfdev->base.dev); + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 02ddd391231c..f77780c72a1a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -830,7 +830,6 @@ static const struct drm_driver panfrost_drm_driver =3D { static int panfrost_probe(struct platform_device *pdev) { struct panfrost_device *pfdev; - int err; =20 pfdev =3D devm_drm_dev_alloc(&pdev->dev, &panfrost_drm_driver, struct panfrost_device, base); @@ -839,50 +838,7 @@ static int panfrost_probe(struct platform_device *pdev) =20 platform_set_drvdata(pdev, pfdev); =20 - pfdev->comp =3D of_device_get_match_data(&pdev->dev); - if (!pfdev->comp) - return -ENODEV; - - pfdev->coherent =3D device_get_dma_attr(&pdev->dev) =3D=3D DEV_DMA_COHERE= NT; - - err =3D panfrost_device_init(pfdev); - if (err) { - if (err !=3D -EPROBE_DEFER) - dev_err(&pdev->dev, "Fatal error during GPU init\n"); - goto err_out0; - } - - /* The reason we must manually set the PM status and usage counter is - * we have just powered the device up but did not go through the PM - * runtime resume callback, so we need to update these ourselves. - */ - pm_runtime_set_active(pfdev->base.dev); - pm_runtime_mark_last_busy(pfdev->base.dev); - pm_runtime_get_noresume(pfdev->base.dev); - pm_runtime_enable(pfdev->base.dev); - pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ - pm_runtime_use_autosuspend(pfdev->base.dev); - - /* - * Register the DRM device with the core and the connectors with - * sysfs - */ - err =3D drm_dev_register(&pfdev->base, 0); - if (err < 0) - goto err_out1; - - pm_runtime_put_autosuspend(pfdev->base.dev); - - return 0; - -err_out1: - pm_runtime_dont_use_autosuspend(pfdev->base.dev); - pm_runtime_disable(pfdev->base.dev); - pm_runtime_put_noidle(pfdev->base.dev); - pm_runtime_set_suspended(pfdev->base.dev); - panfrost_device_fini(pfdev); -err_out0: - return err; + return panfrost_device_init(pfdev); } =20 static void panfrost_remove(struct platform_device *pdev) @@ -891,11 +847,6 @@ static void panfrost_remove(struct platform_device *pd= ev) =20 drm_dev_unregister(&pfdev->base); =20 - pm_runtime_get_sync(pfdev->base.dev); - pm_runtime_dont_use_autosuspend(pfdev->base.dev); - pm_runtime_put_noidle(pfdev->base.dev); - pm_runtime_disable(pfdev->base.dev); - pm_runtime_set_suspended(pfdev->base.dev); panfrost_device_fini(pfdev); } =20 --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 D17594AB1A5 for ; Thu, 24 Sep 2026 18:11:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273466; cv=pass; b=nHZmSE/CEZ0QbjO8EW2v+HAnwScbk0vYkKYT6WOz07wSi8XgqC4ZV/qd0LQSBxS9b0obGbdi8cVfzQyvxEYHajLeLHLM70pDPz3k0gfmJs3e+Xc//d6D7JMTP3oBpniJRQCHKq6xpn2Zgl6uqhPTOKxrOEDYGS/MsAR0e0RZ+gU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273466; c=relaxed/simple; bh=jfnaD7OhoWMHnuX7Wt42p9Iz6j/oSc1hvb6/iC6KKqs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KZpV360sHtjxUBGrePWDcMoSXlS4nR0yUBBwdRu1sFI8hPzFyzLPErF60LBA1Pe0ue/Ibowgfb8wmrHRogUwZtM74Rl86KlEOYd8dfDFM3fVZ+5uB73PCLBZQS3tgiGpaEPQd7f5Sfmli81QroaU2LlG7c7uOOgvSDXvUd0Elnc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Yy8F/eqD; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Yy8F/eqD" ARC-Seal: i=1; a=rsa-sha256; t=1790273431; cv=none; d=zohomail.com; s=zohoarc; b=CLW6kt5V3tN145zz9RMsb3vhxMAOsKstvB5IbFTOOZZPUIPq0nN27sl5avM8+SiwRVj7kM29XLM6L1RetHrAaplB9r02PYXFfHFgEOizdGtzEOMzSOKNsp6cXxE7Aex+qY1lRttEN1dXxKta5UUVLfp3NQ0q4HlKJELnVbsm7TY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273431; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=WGZqj8I3PYqtK1XojY7l/9Se3j42ujPk2rp3W3Jcudg=; b=Cg3KUavL/sXiwzPr93vj6z2tRWiag0X7WghYq8ShCx6cNjXboBADjNlZzpFqHYJLOmILYNInLKiSsDCJisVUW3ARbXOtlup3jHNU0ZSW4vroL0RVbFwMxq6gJTXhMI4gTdcKlIciiRXgTPtPc4MyIxodeESwxvzZ5bVVC7GZafc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273431; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=WGZqj8I3PYqtK1XojY7l/9Se3j42ujPk2rp3W3Jcudg=; b=Yy8F/eqDDam9QQMTQLyUJWI92gQj0HBNV3oJJodzqgIvLPGbS4oxGq4fTqgZQvT0 zot0nImfM4yuF7f8CbtZRsRXC6Gw4qwP1wM64S03lHpv2QjCAfEAnTcMQ3HchAv40Qz hf7pulqVLFiheMWiFopv+RjwmL99zfrUU4LvHcNc= Received: by smtp.zohomail.com with SMTPS id 1790273430339196.4844061871114; Thu, 24 Sep 2026 11:10:30 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:26 +0100 Subject: [PATCH v10 09/15] drm/panfrost: Add warning messages to fatal error conditions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-9-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1571; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=jfnaD7OhoWMHnuX7Wt42p9Iz6j/oSc1hvb6/iC6KKqs=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZO2jAPDdoGbukJCzm2XR9CsVKmFUIsUPur oBt112045SJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND Pd/aDACzX2DHvHwM5FwYRxQ35mVzuxCjn6k+42YsycBOTrCq1XHOKipZadqbjRuabW9KlViK84t jQLSH2pGiQjEo0lU0cYZBBbYHUMHc9HMLaH5OfDu86PWqRrRQjni/ytgXP675Hi8d7WPhiSgCLy LuFOKvo2xPmfagBb72mb//q5hwr4V0jbijtgNqzq73xH3nNlO5LLqs89iYC7Y5KxgQlomiWk54T 89QwKQurl0YTSrnCXiMP/yloTzGnei9KDETtDIKhKM/GOoNm6wLCTY1/2NCoe+Skd/AwvmwAdZW KJBeLJUdI786TMOMkkyB/JK9ffmbm6YYYqANmfJWGPWmEo4hpH9/Q9BTETT7DYmvVtb/dv6aPsB llyjvCZnIlZzky+8NhjyF0FI/875vtwrThAfwNke3MmcDowv11b/tc4jJybdMxjYTVWitghSOvW fdKSFjMi0dUH3f6iL96Fj1HRez85rOzR0akhXQ9z+qVtatAPMiCcpFaX04w+IiF2y/LKA= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Rather than just failing silently, let's warn the user of device remove not being able to take an PM reference or the PM suspend path still reporting inflight jobs. Neither situation should ever happen. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index d531bada62f6..e6de71e99ab4 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -9,6 +9,7 @@ #include #include #include +#include =20 #include "panfrost_device.h" #include "panfrost_devfreq.h" @@ -350,7 +351,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { - pm_runtime_get_sync(pfdev->base.dev); + drm_WARN_ON(&pfdev->base, pm_runtime_get_sync(pfdev->base.dev) < 0); =20 pm_runtime_dont_use_autosuspend(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); @@ -508,7 +509,7 @@ static int panfrost_device_runtime_suspend(struct devic= e *dev) { struct panfrost_device *pfdev =3D dev_get_drvdata(dev); =20 - if (!panfrost_jm_is_idle(pfdev)) + if (drm_WARN_ON(&pfdev->base, !panfrost_jm_is_idle(pfdev))) return -EBUSY; =20 panfrost_devfreq_suspend(pfdev); --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 3F3274AA41E for ; Thu, 24 Sep 2026 18:11:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273470; cv=pass; b=uZKa/S1gkUwgk5s+P7tbowXohAg/IEgH8xEhRg1d1LM5wOY6Y79+Ou4Z/ttE/q8e/YxqDcfD9TUDsFICUeNXjNCcvJ5k3pder8sb70vMuJtIOUqU5FfmGm5vKSWIIP0FeNdY4RbO4/VEaIXJfBjKynmdPpr60xppYwWlRIP6RGw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273470; c=relaxed/simple; bh=dCZp07NerU8D42mSnPseZzmMAYpKZeDxLr3cwlbPZjQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tsJUmcqzYSG/gOX/VO8wsop2axwl6wA4H6OiifKGwCBspCnzEUOaJRu1f1T4ii9Fbu5wnXQcj6TidNcmH/sHDCc+XxQFH9O9hbZvh8ezk+icRsi3CBBD0uUp1hpBXZbUU5l2rw/D+E4Hh9vcIdoK1prBCHyGoxnzgnbKvRAAuFo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=RlryaJYb; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="RlryaJYb" ARC-Seal: i=1; a=rsa-sha256; t=1790273437; cv=none; d=zohomail.com; s=zohoarc; b=i1FREIrN9hfnksC6TSO38b4C4Zd0Vhf6mW87A0y/xKzN+bqrAbiC2L637xbiHobQiRGTdJG+b5PL7mhOPssxHq7eqGV3eXPSmioPa6uhboTEITfaOydaEWLSvmUICgUDK7YLylEkzATrwEf3HAlNHs49gBpPFVIgqOBATHniPqA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273437; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=FgBUfr7XdfPX5KK6ThKAqxZq8TJ6+L7WggmETMJZkoE=; b=PEFNvT7hYd6Iz702OcIHd/CIYUNQ9UOy+Nz/zIMtzm7pkTLSeL6vPa1SLGLXL6DjFdFbKPq6SzBKG9RcZwYa2ijdj3+kIdEpcE2XXiHq/5Xc6RSCjzM2zI1Eli84eRU0N3WFzd4o3Gf2pHhbHdJPW5L3Y4tWor9umKkANIX+A4g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273437; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=FgBUfr7XdfPX5KK6ThKAqxZq8TJ6+L7WggmETMJZkoE=; b=RlryaJYbRjLHyCld6hpLQ89ZKdkGT5ZTeYhbXoFxXrt3UIkNedK/gZMbFFpxem74 VcmY/LMFQejCMnpwyT8z0R57vCjW+haIJVS56taDS7ZcxvehKf6T+v2StyJBAmlzwzQ L4BMKECe+B+dhWrQO6PA7tbBV5e6KSn3Xoa162Wc= Received: by smtp.zohomail.com with SMTPS id 1790273436022304.710715791776; Thu, 24 Sep 2026 11:10:36 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:27 +0100 Subject: [PATCH v10 10/15] drm/panfrost: Add debugfs knob for manually triggering a GPU reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-10-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2966; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=dCZp07NerU8D42mSnPseZzmMAYpKZeDxLr3cwlbPZjQ=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZcWl58rHtc0EzLcd0cJ6nXUkP+2oJToLXE 4WGjAXZWWeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND PbWZC/4118W5fqOq9h9eq6BfUbOnkW5oD95fCwq/F5gb8P/ki72EynY+0if1taSXgLz3DGlaUE1 eAhdy0FEBfbRleGF8+TO5m0S8Sk5/2LgYpmVLW56xJKLa6CjCZRZ3fKpsqAxS4vjywmswfLCZ4O BOa8BXeiI/U6IWIpwJoqG190r/WsSaV0Kt07oL4JIv64dzQmubTDDRWsCeoENK10zUc+2htNy5r 2UZQpYNAWA0CiaMvckHA3weGCtbvyTBC11AhY39kE60GejSojfItgH0CBZijwOnT959Wb+kGOfd BqV55Qe3CaKEq4DRuy57P15kkW1Qeys8qYh2SDab79UZGDoRC3bUCN37FlctVmQXtxBpR3wg1F3 r2cnof8NyAfjmnaRH+ZFd4LPJ6s5TF5VXBNvI5aHaPQlW7ByhDiAFKntSR8Q9b6mN3lxeu723pI iPCvjoX29/Ky2WQf1UdU/exYZ7hh1st2X9ieH6EONR0Ep4ngASrJ3uO8XnLlMPxcHBaKE= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D This will be of great help when testing potential races between the GPU reset sequence and other parts of the code accessing HW registers. We must also disable the reset work item rather than simply cancelling it, to prevent the knob from triggering another reset when the device is being removed. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 42 ++++++++++++++++++++++++++= ++++ drivers/gpu/drm/panfrost/panfrost_job.c | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index e6de71e99ab4..fd5046b363e9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -2,6 +2,7 @@ /* Copyright 2018 Marty E. Plummer */ /* Copyright 2019 Linaro, Ltd, Rob Herring */ =20 +#include #include #include #include @@ -587,9 +588,50 @@ EXPORT_GPL_DEV_PM_OPS(panfrost_pm_ops) =3D { }; =20 #ifdef CONFIG_DEBUG_FS +static int reset_get(void *data, u64 *val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + + *val =3D atomic_read(&pfdev->reset.pending); + return 0; +} + +static int reset_set(void *data, u64 val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + int ret =3D pm_runtime_get_if_active(pfdev->base.dev); + + if (!ret) + return 0; + + panfrost_device_schedule_reset(pfdev); + flush_work(&pfdev->reset.work); + + /* ret < 0 means runtime PM for the device is disabled, so we + * only need to return the PM reference in the opposite case + */ + if (ret > 0) + pm_runtime_put(pfdev->base.dev); + + return 0; +} + +DEFINE_DEBUGFS_ATTRIBUTE(panfrost_reset_debugfs_fops, + reset_get, reset_set, + "0x%08llx\n"); + +static void panfrost_reset_debugfs_init(struct drm_minor *minor) +{ + debugfs_create_file("reset", 0600, minor->debugfs_root, + minor->dev, &panfrost_reset_debugfs_fops); +} + void panfrost_device_debugfs_init(struct drm_minor *minor) { panfrost_gem_debugfs_init(minor); panfrost_sched_debugfs_init(minor); + panfrost_reset_debugfs_init(minor); } #endif // CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 00fb36c577df..ab65786bf63b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -932,7 +932,7 @@ void panfrost_jm_fini(struct panfrost_device *pfdev) drm_sched_fini(&js->queue[j].sched); } =20 - cancel_work_sync(&pfdev->reset.work); + disable_work_sync(&pfdev->reset.work); destroy_workqueue(pfdev->reset.wq); } =20 --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 EFCA54AB1D1 for ; Thu, 24 Sep 2026 18:11:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273476; cv=pass; b=kEDdbWqN6JdzuqKGCltyF+1NtQw0/al6BqOECFyk0k3s9RaLlmvrrkagU6FhXr3aqcGrn+rJNFrtXbaJDp9l/6uGLP1kESswcHcYwMqn9aQK/fqIMqDlvZTN7vZ45zbFFgDetEbMNcc2H2aBQND89Grsy3JYBYS1VHCbC6Ptqw8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273476; c=relaxed/simple; bh=1NC6JbP9YeSjejJ7XZFftPMwKC3c1jXoMn6zNAHeTm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j702XpexRl0jselltYYYx83/DlmXCShE0YxAC57IRjJZVN95sHhegyFKOZr4EC6E/CB73hB59+kDJUMoZHUJbCdYwuf2EZM4jYaXYiMywYYum1b7F+EcCNLKiKS4GnaZTB+w2lt9kr1UEKu6JNsvNvZaYFfPqGWFPkYJ0rC4Uvk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=YDiN3lzu; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="YDiN3lzu" ARC-Seal: i=1; a=rsa-sha256; t=1790273443; cv=none; d=zohomail.com; s=zohoarc; b=jPUG/5i6LyBIzT+JmFKrrunuFFdNfV5Wk6QIiQhRXqMAt31aoGeG2HYSmggiUlY7k6m3X7uNv512MEoVyLmOjajDOUfyrnHkX3DhYu6yhIY7C0uSUqLoAc/TQCPuRLSZObRboqV5YRxuqAhx2i2XM4IVIXvorigZ/Y2SmI96iaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273443; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=3zLgjT3JfLXHkpzJh4PbWNTcLr4FUqsFF57+vQ+BFbA=; b=lII49lJ1adxWD01K+McVjrZLHN9AXPpQ7iDsqowY5pzbG9e8Rq7BhHWcpx5kNRlo/u4U5bYdGY5joDeA3egDbJiBgHiRcHDlz3i1j2yTJzh3xwj+ZfU/P6+swfmZWLgPBaL9nAeE4eBerq92rojWX4bLApAG4OSD444vAJyz1Qo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273443; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=3zLgjT3JfLXHkpzJh4PbWNTcLr4FUqsFF57+vQ+BFbA=; b=YDiN3lzuvOmnSgB/pcm3S0catOm7DqDveA6tlppobObNXQLTw8hRIcAtcegSTaIn IZh0C1rs6mqojDGbD9QFWKjaiekQ/8U8pnl5hch44ygIdgXxyL1wtwfh5mKgsrHrSL6 ngnnXrKXArWZwqP6xeYJoqEIkrz4SRBDP+iqb5Y8= Received: by smtp.zohomail.com with SMTPS id 1790273441590316.4413442865384; Thu, 24 Sep 2026 11:10:41 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:28 +0100 Subject: [PATCH v10 11/15] drm/panfrost: Move perfcnt GPU disable sequence into a helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-11-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2775; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=1NC6JbP9YeSjejJ7XZFftPMwKC3c1jXoMn6zNAHeTm0=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZmw9F63qbTpP/DmFt7LJoCxHL5oZIzO5cL K8tWIWKVnWJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND PSiHDACpjWjcb++OfhUtMdnCoeyJfo0U1uGZddXoOsjQJ1VnK8ax4HfqLKpe2G+R5aK+AJRYOTM 2uQAUzJ0YEi2trmTdmQWhCqYFwJrRIuDgwEUcLvwIFAdrEPCKyCmjlaI7ZSjCY86JMv4YKcocQ0 vUUFUZxBZM+eYTaDMot/8UvwYrAe+CkDVdRjVHtzvADv7B/EjpaS9IIpPsErzTUaC/69izirZTe Jhg1NmYfmqBeuowTg8mCnDEBrKgzIBXm56gqCpBfF5KksVXVrBygRiPl9ujd2zHcxwT+hZ1xRbY FCujcNk866jUNNQxm/o2nPgiab0W3VCelTD3oZsRPwdPhyaWbSNpy+D4WMyl7OP6sFI6Onfkgz/ PSftm9PCyJKwVVM98RuZY9l9P6IZmIKuYBA++4FCxyurkz/9+CRJiONBhJ2Ajp7uG0adzF5n2Rk rQa27WaAC77xyZSLibwhZy0lZoH/92Qiry0s4BsjwxIcZ4m/nx/fWiri6V/kmPdMI0aU0= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Just for the sake of avoiding repetition. Reviewed-by: Steven Price Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 31 ++++++++++++-------------= ---- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index 7020c0192e18..f71534e741b6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -35,6 +35,16 @@ struct panfrost_perfcnt { struct completion dump_comp; }; =20 +static void panfrost_perfcnt_hw_disable(struct panfrost_device *pfdev) +{ + gpu_write(pfdev, GPU_PERFCNT_CFG, + GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); + gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0x0); + gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0x0); + gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0x0); + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); +} + void panfrost_perfcnt_clean_cache_done(struct panfrost_device *pfdev) { complete(&pfdev->perfcnt->dump_comp); @@ -193,12 +203,7 @@ static int panfrost_perfcnt_disable_locked(struct panf= rost_device *pfdev, if (user !=3D perfcnt->user) return -EINVAL; =20 - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0x0); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0x0); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0x0); - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); - gpu_write(pfdev, GPU_PERFCNT_CFG, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); + panfrost_perfcnt_hw_disable(pfdev); =20 perfcnt->user =3D NULL; drm_gem_vunmap(&perfcnt->mapping->obj->base.base, &map); @@ -327,12 +332,7 @@ int panfrost_perfcnt_init(struct panfrost_device *pfde= v) perfcnt->bosize =3D size; =20 /* Start with everything disabled. */ - gpu_write(pfdev, GPU_PERFCNT_CFG, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + panfrost_perfcnt_hw_disable(pfdev); =20 init_completion(&perfcnt->dump_comp); mutex_init(&perfcnt->lock); @@ -344,10 +344,5 @@ int panfrost_perfcnt_init(struct panfrost_device *pfde= v) void panfrost_perfcnt_fini(struct panfrost_device *pfdev) { /* Disable everything before leaving. */ - gpu_write(pfdev, GPU_PERFCNT_CFG, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + panfrost_perfcnt_hw_disable(pfdev); } --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 7DE524A6CFC for ; Thu, 24 Sep 2026 18:11:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273484; cv=pass; b=op9pzFm6mqS8ypU4ndd0dZb0x4YoSPi/X4IBTVlmwamxAtdjo9DMooOwu8eWVzWc1vBvDUCxcOuWUNRRZ+/Rr7EI6ajwUBdJ71313/COyLYMEeOkRkdZhsTmYAx6jRCF1f/nynfdp9O8j9UKzVeUoKMVySEcqUkA9VTIIQk6l6o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273484; c=relaxed/simple; bh=t0pKAbH0SA2araO3s4z8ycC80JiA92CZd/FQ3/v+S5g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rDcck4jUve2gtZ38m5aWpi3j4BOicN8C/4cE8NzWW155hed1+RPoreR5ewdSzNiE1AXPuKdORDGx/WVE3/ZtWrmvc09L3bXxTC5IewsT6z8BIfJPmkh5pr8XJ6/hM/s9ukXJ1aOUl/8KJzaZqsf4ZgvDPutK0ra+fprjcORe2eA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Udyzymsm; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Udyzymsm" ARC-Seal: i=1; a=rsa-sha256; t=1790273448; cv=none; d=zohomail.com; s=zohoarc; b=McnGQpY+6XYneNEGQL29hTgeIITEtTVzgLlyIMu7vLhVJ+h+RBUntQ0cjS3PJycxVan1vL9AkeBe8J+p46bJgg2MF0hFNEIV8SADK/NZj5ZuL35EMupnXjtjxKNX5/8j6hfaOganxueiDExzVXMWX9IeOZYOdU4OnD7LLj/Te4Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273448; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z6RRS3cshQwsXc3rA/U7BvQ2XdAR4lAqGHrehoKydrQ=; b=Bg4ZWdfE7f9s7MtFh8xrCxvXoy/xKyvgWXnw8E10XMqxMtlicvaUVx4IYKxdxa9/v2TrVtR4kk2ZCF8pM0bMInv9nVig82KFxNhS3f1Jx5u4KKJ/XV+FOUtiPKBhHXj5ERA8Jk5VUrYXmZGO1SEL2f6Mlp+HCs/gujncEMBLTLg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273448; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=Z6RRS3cshQwsXc3rA/U7BvQ2XdAR4lAqGHrehoKydrQ=; b=Udyzymsm4E2hQ1fHrRdvhdsOX7PMjPZynSGWZfWrvmh6eSaE6aIYYu4frt19CvxA rq4SHixRz4afnubhhGD0KDcn79bEmc5jjI+sQo7v6/hpRvecMVxCx30T1wFETgcaEs6 axkEd0lj+yrIQmYXTWpdZOA0QWpLkPusYl4uYjWg= Received: by smtp.zohomail.com with SMTPS id 1790273446941450.9724938594469; Thu, 24 Sep 2026 11:10:46 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:29 +0100 Subject: [PATCH v10 12/15] drm/panfrost: Skip cache flush/invalidate when enabling perfcnt Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-12-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1716; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=t0pKAbH0SA2araO3s4z8ycC80JiA92CZd/FQ3/v+S5g=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZjvyW3F2YcXi7lUVv8ElgN/A3cYLT55Izq DNlDkFvimiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND PQSKC/94MNfPevFpReWzuA27iTpvNNV67rCqn+2eSW2KOorPejYEo89L7+ho7jDvZs7iaIqkLfz qcadu7tRYDRVLtWu4n4Vd0VG2B7hjprS8y9Y0J4wLZS9VXXU5EkmDcAFAqqlsTvk8z2RPpokH04 ny1YPnH4rX8MAS66EDELGt1yDVAw5Kje9QcPlSvjhGo/RYwA+SvYte/SVnCIGk2gKl1MIz46TZH +Ntb6wC8NpkAP4lyusyNXaws07MxnpIyfdYxLoru0YUWhbOtCppN4CUdqs4hKZL1HB911rXXG1w QWEWin7eVcuER8iGoyfK+iZ18KKm352C/V8pQQP4K7DeJCjdZtb7974nhWKI1XGVJb4bY1E1Tw+ tl9VIMJC6RbldE0nQ5Vc/YWHlFv0pXx8XeAhlOZKgh4GMkVrGbnB3CKzPYARhhuZobWjmNLNLHm vAh+cPk0ERQm3n7PrYiJGpZg7HcJdQGUnyZsiya8mDAL0Le3sCsdiHexmDRGc/+OpgGAg= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The GPU cache flush/invalidate operation is unnecessary. First off, the GPU doesn't read off the perfcnt sample buffer, only writes into it, so an invalidate doesn't make a difference. Then flushing GPU caches after each sample has been written is enough for the CPU to see updated values. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index f71534e741b6..ffc77121070e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -124,21 +124,10 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer"); =20 /* - * Invalidate the cache and clear the counters to start from a fresh - * state. + * Clear the counters to start from a fresh state. */ - reinit_completion(&pfdev->perfcnt->dump_comp); - gpu_write(pfdev, GPU_INT_CLEAR, - GPU_IRQ_CLEAN_CACHES_COMPLETED | - GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); - gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_INV_CACHES); - ret =3D wait_for_completion_timeout(&pfdev->perfcnt->dump_comp, - msecs_to_jiffies(1000)); - if (!ret) { - ret =3D -ETIMEDOUT; - goto err_vunmap; - } =20 ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); if (ret < 0) --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (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 2CE934A99C4 for ; Thu, 24 Sep 2026 18:11:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273486; cv=pass; b=LhSRrh9HAJnnQINksMs+LAHAx/5rWwnRv66lJdlppnQy/Husddvm5HrnOH3c7Ctuo7lfPaiDVopCPug1PWgzYTheLSmbPADCkKupyrJotBCrT5v9CX6TBGs8d2ReQtn9lHt/1N7/aixtSwbwKE7wlHdG/hC4FpBh0jEQ5tA5KVI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273486; c=relaxed/simple; bh=ylClgdA4qjN8YjgAXTrojrPeuTeRxcjN/yXHiltT8+A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oJamq3qkZrEO7J6cKlAtKNUc7FjvanjH4bP4ePP8vMTU4x071qY2/oV1vbtNVpREBFweomAzpVnMCBs9yi6kEAunkAUbFwzIQk5J3SIz1FRoH6q83N90dWZjQ905uOLpblXJEzqwcnFtz4lx38CIfIhvE5xMldcTqvgyKLkeQVs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=Awnez2wU; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="Awnez2wU" ARC-Seal: i=1; a=rsa-sha256; t=1790273453; cv=none; d=zohomail.com; s=zohoarc; b=d54TQ6UeWywUn8/3muW7cN9ztxVf5vmiGbqO9DK5KOro7OsRtcYYWu5LxCGaeyIuTSCaCJcfXzHAbc66NhswMcj5V4h2dyt8iYaemq44WuZIPolbjhgUHWJvUfi3s9GsE1KeX3e2HrL6goXlRDlePQNR5BtRhKp61gopjFQTZus= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273453; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=rne2vTyla1RUI4gVDThBMRFsSeWjoijKTX5hYO0ZMA0=; b=LJON/idyglAqfjVj57uRR8+2D9aBxtgzUGFIqETUPuGMIhc+wZF5X1U1QrduK+UOKmRah6Gih7v5QYU0PdmMolF7hdOshwDs+97LZ9SpQm5Poi1OFb0jUSdWS1Rlzsf59R7OmsmdDa+JnLVjPJceeE2WNkwMxhyBmr5BSbZ4RDk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273453; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=rne2vTyla1RUI4gVDThBMRFsSeWjoijKTX5hYO0ZMA0=; b=Awnez2wUiOPOE3vfAOZ5Dd8SyVY2L804wRPInqCCNTt/DWYu5vG0gIwkugJsx4hz +IvBMykIm5OEBgkE+Hvztz/9YU9YmcE/o38ahoOge5YWNQs/RvliCt1pVywLK4nd93x ZgWIy/EXVzyIijDjpcDxXfv+ng8VTgZyy6rB7x+0= Received: by smtp.zohomail.com with SMTPS id 1790273453071413.66637539009946; Thu, 24 Sep 2026 11:10:53 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:30 +0100 Subject: [PATCH v10 13/15] drm/panfrost: Avoid cache flush after perfcnt sample in fully coherent systems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-13-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1088; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=ylClgdA4qjN8YjgAXTrojrPeuTeRxcjN/yXHiltT8+A=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZlu3A6rVuhWiSZjmaLZTsGTxKgiaoLTIYa 81H6KktgcOJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND Pd6SDAC9FivzQjyum+mY0vUF9A7OV4wl/CJ7SR+kuSi8AeUp+42vLyMgmmvTAcfUMcM9ExKj/rP h0DQ+Jbdjj3UxLLB2W8KhfzB+IjO4emt7sIcUAIU4oSwcEpC+VyF+zh2YWw9DLDwC4tSnOcjSuG mAD3cSNgxFGzx8pf36EjN+HyNJtky44gz3oH6NaOyWCJFyxe2IfqqfijHuw9y3cUC/eHo0AHwFX TCYa0Zg/yEQFdRZYfh67H/YDLyJEMtX+f+/L+IQHNpwVNM4DyyK9mIVvjbio6/G3M7qMPAm14sV g+Hu1WFrlE8vEQrqaJ94SKcrBzvAkRiuF/fT2GrkBpn5UFhS2Ypu+S1N/u+57hzLi/ChUgwZa9V fFLXByCxrLQCuZKY7O+4fs5/vhLcockp7nY8fwOKNxX2r7HxTbIfF6mEDUwLJwOU06REdJB2J2P 0Vlg2bE3UA/2dzOGsP6/sJGHpfToAlG5izWLXeeS8WEgLsSc/5alhgMO3iN59U5RjvKgM= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D If the GPU and CPU are fully coherent, then there's no need to flush the GPU caches after a perfcnt sample is made available. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index ffc77121070e..b3f71d7fd82a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -52,7 +52,10 @@ void panfrost_perfcnt_clean_cache_done(struct panfrost_d= evice *pfdev) =20 void panfrost_perfcnt_sample_done(struct panfrost_device *pfdev) { - gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_CACHES); + if (pfdev->features.selected_coherency !=3D COHERENCY_ACE) + gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_CACHES); + else + complete(&pfdev->perfcnt->dump_comp); } =20 static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev) --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 8321E4A6CFC for ; Thu, 24 Sep 2026 18:11:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273492; cv=pass; b=meO+qCbzC+Zk2XmglUVenOD0OWrqPRcmi5eATmNhYJ2H1RZYS6q5xkGd67LHWdhskFE82ldEgi85ZnyikQJwsns1tfm5n7AEnuuXelcirtq8lYcgU+05SN9M28ODLgnaXEkRrEHbsy03MzTO32PlwlhMIEQTm9oHLunnYL2nmXc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273492; c=relaxed/simple; bh=lC6Y5eZm/uMZrlAIi3lGByC1w461KxkiA3Reum0Cxyc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gtNE0VTeXP6KQWrotwQ3TgEjU66IGaQWcteyUUNRek9t+eNIY8oE9mrSv8H1GBE/rDqBca/G0u3rxoCQaHiCxfvaIjunS6RA6WkEEDuP6PI2lAgPy3nv9p9e92K9CuIDeG8dZz4YEMM8VuAN2LM4Gl8mD3VfK+4VGBTBlLxOqJE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=KYQsZbsC; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="KYQsZbsC" ARC-Seal: i=1; a=rsa-sha256; t=1790273459; cv=none; d=zohomail.com; s=zohoarc; b=b4TpBQRq2OpvCkf68GK7Ic0ttPHVfyhHzDPLD21HDxc6srjn6KRwrTGif9hLAQTmt2glieEJ5qqt5/CIT1owwvtGZ4hVBaSz55eKcMo6Id2mggraZ4QyZ1wrLl1Y7KCs9VpdyypoRodIShgYYtwVLgKy0bmy7ci59yXCfzXG5BE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273459; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=BHKexhH9+GVjIT9SqmYjvfoX5uAseU6q/THZLuja+Ac=; b=ituBu4tmZ8IHx+UWIOqTh6rlsnts8eWlEtErI95WchItYoB7VBdLN7VhZUmmn2IH5YcB9e2HtI90v18QpkXZsBQyg36o7HFM3Ehk3x9y+B+Z/FnGhRJCP/LXO1Rx0+Ux0znOUd+Y1vUETKe43W3BxkX6sQQcOGI5TpFp1LtJHK4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273459; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=BHKexhH9+GVjIT9SqmYjvfoX5uAseU6q/THZLuja+Ac=; b=KYQsZbsCkY94r4BtU8r4eEsn1G3feVYSsesWdheWqKtEFDHumIFIie2C5hdcukCA znXO2Mf/uvF6SzoHEQmAs8KuhZczQOUUoF85jdW9QBkzIXMZpDAGID2/0KMmUAQx0bq Lqkof9Gv0LWmFez+oMjwHZvoJBS4MozJXiaAB8sY= Received: by smtp.zohomail.com with SMTPS id 1790273458499988.3211694048925; Thu, 24 Sep 2026 11:10:58 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:31 +0100 Subject: [PATCH v10 14/15] drm/panfrost: Introduce a reset lock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-14-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3001; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=lC6Y5eZm/uMZrlAIi3lGByC1w461KxkiA3Reum0Cxyc=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZ6bMw0w1li37Mc53e8LREqxJlXRi4h2cNX KIod6LgCEiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND Pe/EC/4lX6J/d/H8kFdS1ty/HGCiSnyIF8xyW+QLM0Cr/shKbeZBCRUI1REWYamHami2Ufhtkgo btwM+dv29YApcNEwVddYQ9EzCu1w6nylZBQrFCCd5AZH0Mx2aE0n3XBA1n0nVmCr/VmjERJ2T9i ZTvqcxviYtYnqCwFlhHFQ2mGaXnKaEPM3KhXvjvz7HYHU4ED9oC/jMunIAJO/0g9H4w7okKZkow GzfUZklJ48oo+fV+j1ZJJWIMEVd5IFx8c2oBsNaLt83TlAhlZAZh4K5eYEozmYKdBNjhJoCKtNG 7S12uM3t2ZCwxh2wbfnRDRFo1+zDq4XkTyF+sE2UjUME4TQWGbbGF4te5+OP7VSicaq+OZSlLOB KuTPpzpFwRyxgvGGPYd+kdDBei3rXuSJ+KZzySOSIANJdCdk2usERaLU+flBjnr7TpksZ3k3WHo Rx9ecTfo4qpxWzE67lt+3TPYnfI2W5B3Im0Y/bMBmgKgIe2tR1NndvMgVKu/0vkyvGE5Y= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D So as to avoid accessing HW register while a reset is ongoing, a read/write semaphore that envelopes the reset sequence will help driver entry points avoid racing with it. For now, the only such racy entry point is the ioctl that returns the current GPU timestmap. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 2 ++ drivers/gpu/drm/panfrost/panfrost_device.h | 1 + drivers/gpu/drm/panfrost/panfrost_drv.c | 9 ++++++--- drivers/gpu/drm/panfrost/panfrost_job.c | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index fd5046b363e9..801ca07ccb28 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -473,6 +473,8 @@ bool panfrost_exception_needs_reset(const struct panfro= st_device *pfdev, =20 void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int) { + guard(rwsem_write)(&pfdev->reset.lock); + panfrost_gpu_soft_reset(pfdev); =20 panfrost_gpu_power_on(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index a0b9a2145fc9..63452febb1cf 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -165,6 +165,7 @@ struct panfrost_device { struct { struct workqueue_struct *wq; struct work_struct work; + struct rw_semaphore lock; atomic_t pending; } reset; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index f77780c72a1a..571a26b84126 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -41,9 +41,12 @@ static int panfrost_ioctl_query_timestamp(struct panfros= t_device *pfdev, if (ret) return ret; =20 - panfrost_cycle_counter_get(pfdev); - *arg =3D panfrost_timestamp_read(pfdev); - panfrost_cycle_counter_put(pfdev); + /* We should not read timestamp register while the GPU is being reset */ + scoped_guard(rwsem_read, &pfdev->reset.lock) { + panfrost_cycle_counter_get(pfdev); + *arg =3D panfrost_timestamp_read(pfdev); + panfrost_cycle_counter_put(pfdev); + } =20 pm_runtime_put(pfdev->base.dev); return 0; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index ab65786bf63b..4ddf4b722ddf 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -877,6 +877,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) INIT_WORK(&pfdev->reset.work, panfrost_reset_work); spin_lock_init(&js->job_lock); mutex_init(&pfdev->sched_lock); + init_rwsem(&pfdev->reset.lock); =20 js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->base.dev), = "job"); if (js->irq < 0) --=20 2.55.0 From nobody Fri Sep 25 13:17:03 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (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 CA8484A386D for ; Thu, 24 Sep 2026 18:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273499; cv=pass; b=MSXlBklq0neFUR4yhJbsQy7NAJb5T5vcncQfpJ6d/lRnGmj4oVrSdLm/0hwllr/5tzyhR4YJH+vEkOLEZKe5Izd3JW0IUnWIH45WKsHQ1j94o3eWUsz87dwNYqPFPr07Ncv6KofrGNq+E+ZX6Ma/SkYADa4C0MhepKjx3GZj3z0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790273499; c=relaxed/simple; bh=fr8A5rOzYlWd53PWW3R67Vucgp8tQFqn7KnBcY0nUG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NzO+Czv8374fB/w9YbFajMFNpH8dyub77uCisHho45mbWpxaRME5X4B8FexyCewDYqj9th8LEl8IwYAgzyNyW0EVkk1rPPXgoMO13raXFp2Sg0jU5nMlK/Rqvzs8cmOhdGECShqDbS2nPoAL5oUNAfd3kVrz2ojE/zkK1zG104o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=YjhKYoGD; arc=pass smtp.client-ip=165.173.182.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="YjhKYoGD" ARC-Seal: i=1; a=rsa-sha256; t=1790273465; cv=none; d=zohomail.com; s=zohoarc; b=WUErFZMDk5ZTkpr+ch/wXVRrnnkzmzBbUwKZ/AYb5QONum5KRIqhOj050Q0kupodELKeOSZorrS0oTdgpE0dtlJiOiVSMzPXOfm1Apvxc4ckGldfwdo72th29R+sxHF9RiD83Uh0R9I/KJFcX78/TVpDtQ5sJrGKQGoeEljs+lU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790273465; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=HtXaaVHStmqXh+vt1a/Y1wX6CwPDilAocWr/3vOH1Xs=; b=KeDBSNK1EamqvtcTzKm00DarxNhhS3gcs9PO0z/vsnFKfgcMCsBvYI3Dsaz25Gz6dV+W4jh6FiU6+0cHT1YKtC1VF2cuNFpZssMI4Ap95hOtWstYN6Y1irrgT8prI852Uzel2ymFwPjnsgyozbJI66JCY0sZHdIWAPq1z3GEQrk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1790273465; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=HtXaaVHStmqXh+vt1a/Y1wX6CwPDilAocWr/3vOH1Xs=; b=YjhKYoGD74GF5eiAQRMAiOleG6L2aeKf/gbao5VQs8zMSe2rXMqx0NJrnX8oDZ9w +8Cq2LPTYQbdYlkBcjGOqXUFisCKPnZ5H20gcIL6t2dymca38xJX3BI2VktUKWycySE og26KVOUjtOd+D6/gDMi+kxa+dbwN3yzalmQAcXE= Received: by smtp.zohomail.com with SMTPS id 1790273464048209.66059778559736; Thu, 24 Sep 2026 11:11:04 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Thu, 24 Sep 2026 19:09:32 +0100 Subject: [PATCH v10 15/15] drm/panfrost: Fix races between perfcnt and reset sequence Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-claude-fixes-v10-15-755929b3cc19@collabora.com> References: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> In-Reply-To: <20260924-claude-fixes-v10-0-755929b3cc19@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=14027; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=fr8A5rOzYlWd53PWW3R67Vucgp8tQFqn7KnBcY0nUG8=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtWdZUuB5RjKX6juJ5YeeQLvMzK0UZLyqsZZTm VQ7WgPvYdeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarVnWQAKCRAOJn5M7lND PeKqDACrVbvtUpiR814wUhHbqeZdQCtezUbIIPGzIzvL+CVe/hLYcu1ed+GWNCVh1dmmD9JiQP8 Et51dGL5n3pwmFaCxGG00EfKqApQD/PcQGp6FNoeaodV81jKCFFHkdZGiNptwbjfyGrkrKPyXAe XSRPWr0QubGuAFGRr8edhz36p0m0phNIR3F8xRlck9P1KPbCDHm+c/MJrlltvo6stuWNm6NS2dT p84THlOTLSRGRy1J5XVtb6MJPt2Ul5HJPRZZSKr/8PAHc7HgtIo8DrNA4UgxknRNYHCgTJMHlJG 5rufXWsMUD2le81ldTPxhjPVZPofHgCap+ySA7uwoWDPsUkfI3mK3FLQx1oXMf1mlFrnkWMu0U7 yIhh6KRsaa/QQPhKlAR3PQV6tvfjEzrepg+5a4NXEuTflWSSm4teT2adz3f7b657Z6UWTqmDfFN gHSTaEWx3ov1HCD3aiFNYGI8DwBLgHTfJbxB09R/xSXzu+mZizU5QsaRePxsXaXsOfEcQ= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Formerly, the reset sequence would race with panfrost_mmu_as_put() when tearing down a perfcnt session. On top of that, poking GPU registers to program a perfcnt session or obtaining a dump might lead to undefined behaviour when done at the same time a reset was ongoing. Use the reset r/w semaphore to govern access to the hardware at reset time. On top of that, expand the DRM uAPI for the perfcnt DUMP operation so that userspace can be made aware of a reset having happened. UM needs to know about this condition because counter data is inaccurate after a reset, so the best approach is simply to try again. The new perfcnt-aware reset sequence also takes care to reestablish perfcnt to its original configuration if there was an enabled session, or else flags the current session as dead if that failed. Also bump DRM driver minor to reflect the new DUMP IOCTL req field. Fixes: 73e467f60acd ("drm/panfrost: Consolidate reset handling") Fixes: 7786fd108777 ("drm/panfrost: Expose performance counters through uns= table ioctls") Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 2 + drivers/gpu/drm/panfrost/panfrost_drv.c | 3 +- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 200 ++++++++++++++++++++----= ---- drivers/gpu/drm/panfrost/panfrost_perfcnt.h | 1 + include/uapi/drm/panfrost_drm.h | 8 +- 5 files changed, 155 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 801ca07ccb28..98de04362517 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -483,6 +483,8 @@ void panfrost_device_reset(struct panfrost_device *pfde= v, bool enable_job_int) panfrost_jm_reset_interrupts(pfdev); if (enable_job_int) panfrost_jm_enable_interrupts(pfdev); + + panfrost_perfcnt_reset(pfdev); } =20 static int panfrost_device_runtime_resume(struct device *dev) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 571a26b84126..de9b1c115181 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -808,6 +808,7 @@ static const struct file_operations panfrost_drm_driver= _fops =3D { * - 1.6 - adds PANFROST_BO_MAP_WB, PANFROST_IOCTL_SYNC_BO, * PANFROST_IOCTL_QUERY_BO_INFO and * DRM_PANFROST_PARAM_SELECTED_COHERENCY + * - 1.7 - adds PERFCNT_DUMP req state field */ static const struct drm_driver panfrost_drm_driver =3D { .driver_features =3D DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ, @@ -820,7 +821,7 @@ static const struct drm_driver panfrost_drm_driver =3D { .name =3D "panfrost", .desc =3D "panfrost DRM", .major =3D 1, - .minor =3D 6, + .minor =3D 7, =20 .gem_create_object =3D panfrost_gem_create_object, .gem_prime_import =3D panfrost_gem_prime_import, diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index b3f71d7fd82a..91983d450c24 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -11,6 +11,7 @@ #include #include #include +#include =20 #include "panfrost_device.h" #include "panfrost_features.h" @@ -28,21 +29,31 @@ =20 struct panfrost_perfcnt { struct panfrost_gem_mapping *mapping; + unsigned int counterset; size_t bosize; void *buf; struct panfrost_file_priv *user; struct mutex lock; struct completion dump_comp; + unsigned int state; + bool owns_as_ref; }; =20 static void panfrost_perfcnt_hw_disable(struct panfrost_device *pfdev) { + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + gpu_write(pfdev, GPU_PERFCNT_CFG, GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0x0); gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0x0); gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0x0); gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + + if (perfcnt->owns_as_ref) { + panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); + perfcnt->owns_as_ref =3D false; + } } =20 void panfrost_perfcnt_clean_cache_done(struct panfrost_device *pfdev) @@ -58,25 +69,100 @@ void panfrost_perfcnt_sample_done(struct panfrost_devi= ce *pfdev) complete(&pfdev->perfcnt->dump_comp); } =20 -static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev) +static int panfrost_perfcnt_hw_enable(struct panfrost_device *pfdev) { - u64 gpuva; + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + u32 cfg, as; int ret; =20 - reinit_completion(&pfdev->perfcnt->dump_comp); - gpuva =3D pfdev->perfcnt->mapping->mmnode.start << PAGE_SHIFT; - gpu_write(pfdev, GPU_PERFCNT_BASE_LO, lower_32_bits(gpuva)); - gpu_write(pfdev, GPU_PERFCNT_BASE_HI, upper_32_bits(gpuva)); - gpu_write(pfdev, GPU_INT_CLEAR, - GPU_IRQ_CLEAN_CACHES_COMPLETED | - GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); - gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_SAMPLE); + drm_WARN_ON(&pfdev->base, perfcnt->owns_as_ref); + + ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); + if (ret < 0) + return ret; + + perfcnt->owns_as_ref =3D true; + + as =3D ret; + cfg =3D GPU_PERFCNT_CFG_AS(as) | + GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_MANUAL); + + /* + * Bifrost GPUs have 2 set of counters, but we're only interested by + * the first one for now. + */ + if (panfrost_model_is_bifrost(pfdev)) + cfg |=3D GPU_PERFCNT_CFG_SETSEL(perfcnt->counterset); + + gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0xffffffff); + gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0xffffffff); + gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0xffffffff); + + /* + * Due to PRLAM-8186 we need to disable the Tiler before we enable HW + * counters. + */ + if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + else + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + + gpu_write(pfdev, GPU_PERFCNT_CFG, cfg); + + if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + + return 0; +} + +static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev, u32= *state) +{ + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + u64 gpuva =3D perfcnt->mapping->mmnode.start << PAGE_SHIFT; + int ret; + + scoped_guard(rwsem_read, &pfdev->reset.lock) { + *state =3D perfcnt->state; + if (perfcnt->state & PANFROST_PERFCNT_SESSION_DEAD) + return -EIO; + + perfcnt->state =3D 0; + + reinit_completion(&pfdev->perfcnt->dump_comp); + + gpu_write(pfdev, GPU_PERFCNT_BASE_LO, lower_32_bits(gpuva)); + gpu_write(pfdev, GPU_PERFCNT_BASE_HI, upper_32_bits(gpuva)); + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_CLEAN_CACHES_COMPLETED | + GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_SAMPLE); + } + + /* + * Here we release the reset semaphore because perfcnt should not get in = the way + * of a HW reset. Besides, a legitimate reset might be issued during the = wait. + */ ret =3D wait_for_completion_interruptible_timeout(&pfdev->perfcnt->dump_c= omp, msecs_to_jiffies(1000)); + + /* A reset might come through in the gap between the completion returning= and the following + * check, but because no sample was produced, we don't care to relay the = state back to UM + */ if (!ret) - ret =3D -ETIMEDOUT; - else if (ret > 0) - ret =3D 0; + return -ETIMEDOUT; + + scoped_guard(rwsem_read, &pfdev->reset.lock) { + u32 new_state =3D perfcnt->state; + + *state |=3D new_state; + if (new_state & PANFROST_PERFCNT_SESSION_DEAD) + return -EIO; + + perfcnt->state =3D 0; + + /* If we faced a reset during our SAMPLE, the user needs to try again. */ + if (new_state & PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET) + return -EAGAIN; + } =20 return ret; } @@ -87,9 +173,8 @@ static int panfrost_perfcnt_enable_locked(struct panfros= t_device *pfdev, { struct panfrost_file_priv *user =3D file_priv->driver_priv; struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; - struct iosys_map map; struct drm_gem_shmem_object *bo; - u32 cfg, as; + struct iosys_map map; int ret; =20 if (user =3D=3D perfcnt->user) @@ -122,54 +207,29 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, ret =3D drm_gem_vmap(&bo->base, &map); if (ret) goto err_put_mapping; + perfcnt->buf =3D map.vaddr; + perfcnt->counterset =3D counterset; =20 panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer"); =20 - /* - * Clear the counters to start from a fresh state. - */ - gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); - gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); - - ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); - if (ret < 0) - goto err_vunmap; - - as =3D ret; - cfg =3D GPU_PERFCNT_CFG_AS(as) | - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_MANUAL); - - /* - * Bifrost GPUs have 2 set of counters, but we're only interested by - * the first one for now. - */ - if (panfrost_model_is_bifrost(pfdev)) - cfg |=3D GPU_PERFCNT_CFG_SETSEL(counterset); - - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0xffffffff); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0xffffffff); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0xffffffff); - - /* - * Due to PRLAM-8186 we need to disable the Tiler before we enable HW - * counters. - */ - if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); - else - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + /* + * Clear the counters to start from a fresh state. + */ + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); =20 - gpu_write(pfdev, GPU_PERFCNT_CFG, cfg); + ret =3D panfrost_perfcnt_hw_enable(pfdev); + if (ret) + goto err_vunmap; =20 - if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + perfcnt->user =3D user; + } =20 /* The BO ref is retained by the mapping. */ drm_gem_object_put(&bo->base); =20 - perfcnt->user =3D user; - return 0; =20 err_vunmap: @@ -195,13 +255,14 @@ static int panfrost_perfcnt_disable_locked(struct pan= frost_device *pfdev, if (user !=3D perfcnt->user) return -EINVAL; =20 - panfrost_perfcnt_hw_disable(pfdev); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + panfrost_perfcnt_hw_disable(pfdev); + perfcnt->user =3D NULL; + } =20 - perfcnt->user =3D NULL; drm_gem_vunmap(&perfcnt->mapping->obj->base.base, &map); perfcnt->buf =3D NULL; panfrost_gem_close(&perfcnt->mapping->obj->base.base, file_priv); - panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); panfrost_gem_mapping_put(perfcnt->mapping); perfcnt->mapping =3D NULL; pm_runtime_put_autosuspend(pfdev->base.dev); @@ -249,13 +310,16 @@ int panfrost_ioctl_perfcnt_dump(struct drm_device *de= v, void *data, if (ret) return ret; =20 + if (req->pad) + return -EINVAL; + mutex_lock(&perfcnt->lock); if (perfcnt->user !=3D file_priv->driver_priv) { ret =3D -EINVAL; goto out; } =20 - ret =3D panfrost_perfcnt_dump_locked(pfdev); + ret =3D panfrost_perfcnt_dump_locked(pfdev, &req->state); if (ret) goto out; =20 @@ -338,3 +402,25 @@ void panfrost_perfcnt_fini(struct panfrost_device *pfd= ev) /* Disable everything before leaving. */ panfrost_perfcnt_hw_disable(pfdev); } + +void panfrost_perfcnt_reset(struct panfrost_device *pfdev) +{ + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + + if (drm_WARN_ON(&pfdev->base, !perfcnt)) + return; + + lockdep_assert_held(&pfdev->reset.lock); + + if (!perfcnt->user) + return; + + /* All active AS are released during the MMU post_reset. */ + perfcnt->owns_as_ref =3D false; + perfcnt->state |=3D PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET; + if (panfrost_perfcnt_hw_enable(pfdev)) + perfcnt->state |=3D PANFROST_PERFCNT_SESSION_DEAD; + + /* Unblock pending sample requests. */ + complete(&perfcnt->dump_comp); +} diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.h b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.h index 8bbcf5f5fb33..8b9bc704b634 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.h +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.h @@ -14,5 +14,6 @@ int panfrost_ioctl_perfcnt_enable(struct drm_device *dev,= void *data, struct drm_file *file_priv); int panfrost_ioctl_perfcnt_dump(struct drm_device *dev, void *data, struct drm_file *file_priv); +void panfrost_perfcnt_reset(struct panfrost_device *pfdev); =20 #endif diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_dr= m.h index 50d5337f35ef..97e001040543 100644 --- a/include/uapi/drm/panfrost_drm.h +++ b/include/uapi/drm/panfrost_drm.h @@ -47,7 +47,7 @@ extern "C" { * them for anything but debugging purpose. */ #define DRM_IOCTL_PANFROST_PERFCNT_ENABLE DRM_IOW(DRM_COMMAND_BASE + DRM_P= ANFROST_PERFCNT_ENABLE, struct drm_panfrost_perfcnt_enable) -#define DRM_IOCTL_PANFROST_PERFCNT_DUMP DRM_IOW(DRM_COMMAND_BASE + DRM_PA= NFROST_PERFCNT_DUMP, struct drm_panfrost_perfcnt_dump) +#define DRM_IOCTL_PANFROST_PERFCNT_DUMP DRM_IOWR(DRM_COMMAND_BASE + DRM_P= ANFROST_PERFCNT_DUMP, struct drm_panfrost_perfcnt_dump) =20 #define PANFROST_JD_REQ_FS (1 << 0) #define PANFROST_JD_REQ_CYCLE_COUNT (1 << 1) @@ -270,8 +270,14 @@ struct drm_panfrost_perfcnt_enable { __u32 counterset; }; =20 +/* Perfcnt dump state as influenced by a HW reset */ +#define PANFROST_PERFCNT_SESSION_DEAD (1 << 0) +#define PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET (1 << 1) + struct drm_panfrost_perfcnt_dump { __u64 buf_ptr; + __u32 state; + __u32 pad; /* MBZ */ }; =20 /* madvise provides a way to tell the kernel in case a buffers contents --=20 2.55.0