From nobody Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 8BBB83BD63D for ; Fri, 28 Aug 2026 20:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950696; cv=pass; b=lP2Gg8NszqIowI+cim2pvk+ThTiyOtMIdePLTi74i5/2AD1j92RS+yMJKos4OdO6hBQo5lGArSp2S2tY+k34w3jCxd3dYj4vST1XbdM14z4ep0vRqgzyxMvSq0Pmn+SNXPgzXiS5atPfE0LIgjq11sMNYzUOm8FuJB6r45XBONc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950696; c=relaxed/simple; bh=6xeWEUHEJGkLLAje31aRC5tjM099PLVWz/R1vWcPi3w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qNcdVAaG9ZN3x+8Kszx2ZfBM/XWGr4UXQgBqWne9N50q5omNY9RJp4bY/pgbScJVH+PCCxfeNWNQInyMhhwcpH4GlOEjk3Ie2LYzi4j+533RLu1dSp4NtYHQQQ/CmU324HuflU/06ZCYd/CIS+SNfv2QUZYxXYbCOc5xjA1cumo= 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=jyVvxazg; arc=pass smtp.client-ip=136.143.188.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="jyVvxazg" ARC-Seal: i=1; a=rsa-sha256; t=1787950650; cv=none; d=zohomail.com; s=zohoarc; b=eKuMR0XNe8Ipg1ts2EBUAsTh0imaqstONDMiruGWqNPG1F/Qajn6LQ+/F0/CYRJ687ivKLNF9HncQ+eaA6qXAzXmeJRipubZqQThIrC7mGIN1ux5kSIipn2C19Y71z6GIIjPgXJb4riRmMHoGxIAJO74KM5Ea6Ay3Kn3B+fLbDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950650; 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=LXKblu75Wmd4ijGN4q4BnsvjxrwQ4Xm93VsF4qtkNUA=; b=al8aJwU+L9O8IYKz3b7NPtdPPD/f0T7MYPrV4DXo3ID9emV5S1Pc0yn05fpPHvfXyuMcb6Pw2rqO6E2rAo7qx/TkudlTGsRDQ3jsXJpxelfJEOLiIkTfQ0y4LhHD/3bwLYy7M2Zwh8ICb2Hy6TGzU363T7sHsjZZGlfbdJDpnKQ= 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=1787950650; 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=LXKblu75Wmd4ijGN4q4BnsvjxrwQ4Xm93VsF4qtkNUA=; b=jyVvxazgSzVFXfLVAxejETsd1emWpGTvx3JsxvaGZ29PBrf3CpovxxJLhWXKCnT1 lkOdUWboSy65zHu/dfILCeNXjywKtejFcTkOJ5DyuTVc981JvroPQkQZ2cWTvB2B4u5 B2DHC+kEiv9X1FvfFe8t5uIpdrIACmKEXoP2DaYQ= Received: by mx.zohomail.com with SMTPS id 1787950649363117.59067190316011; Fri, 28 Aug 2026 13:57:29 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:41 +0100 Subject: [PATCH v7 01/17] 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: <20260828-claude-fixes-v7-1-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=6895; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=6xeWEUHEJGkLLAje31aRC5tjM099PLVWz/R1vWcPi3w=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYsfnTzvm9jo16anBEMWpJNK4/0EYk09WyWp mn0naboU++JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LAAKCRAOJn5M7lND PYONC/4k9kIF+7RtF9a56t2tZgQNa+SqQBrb12KyuPcx7ppVrGeF8mZ3fXTBJWttlIm+805Ks2p l2YYchz8o55YeDELlATn2uVSa1f+BkW61QjWl/OkyYKAKqkmS98t/5bKfOYctHvj6TXPlLuxzj2 PXTd6S6+oXoN2kpfMgmrIDEBNt/3VQ+SN8BKQ4UGpzV2wze67OH9HZfyWR77+D8LMIE+FE6bPQ5 1sbSDFGhrhQd/u3xhMiHx2Y+zGB8WiuSUPIxQ3QALEcHf1Fl6XZ5/HEXL2pjbKKCNYFgZ4OYt16 wtZuD8EURIxoLN/I0HHda2onwieZwqZjVfzY5dspUM7JcgHJP4iqs7MWdQM3KX8Pvo0OwdhQAED 4VLid7bA0UnxAU+Z5AQOey1nP6SfIVohKg8GVI8veL7RRGZzppf4t12MbF2OviZ/uNVrYeuDoGe OKH/gnjjLVrtatPjM9O/IfRk84sbPfU8fCtZTDvrN0kvjYTUOR54ghyykWpS/M6RuPnAo= 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. On top of that, remove the config feature check, because it's unnecessary. 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_drv.h | 4 ++++ drivers/gpu/drm/panfrost/panfrost_gem.c | 25 ++++++++++++++------= ---- drivers/gpu/drm/panfrost/panfrost_gem.h | 7 ++++--- drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 8 ++------ 6 files changed, 32 insertions(+), 26 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_drv.h b/drivers/gpu/drm/panf= rost/panfrost_drv.h index a2277ec61aab..bac0c415d4da 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.h +++ b/drivers/gpu/drm/panfrost/panfrost_drv.h @@ -4,6 +4,10 @@ #ifndef __PANFROST_DRV_H__ #define __PANFROST_DRV_H__ =20 +#if IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) extern bool panfrost_transparent_hugepage; +#else +#define panfrost_transparent_hugepage false +#endif =20 #endif diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 3a7fce428898..7b993a089af2 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -15,20 +15,25 @@ #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; =20 - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && - !panfrost_transparent_hugepage) - return; + if (panfrost_transparent_hugepage) { + 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 - 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); + return panfrost_gem_shrinker_init(pfdev); +} + +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 Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 274143E172E for ; Fri, 28 Aug 2026 20:58:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950699; cv=pass; b=mFsLaKbJNrQvwgFc9k7ITBuDSj7srpc24h64ohMgm6WC6oitfdnudlOUPK7+mBsTcoRR4dtcmY3z6Cd/Skm4UjHxOg62iADkx80G7lcED18874C/a/W9W+ITCkKqQYlGKO0t4v/RQB18MS7pFpRA2aLx7zK6XTgPMJ+hX18ob8o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950699; c=relaxed/simple; bh=+7lLC3RASscJtzYIoHPamAqwjiOy0dTWtgEK2tQLZCc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K0GoNvXK8MkZlxRQtHQ6C7zJCfoe3lPRgUTtclQERLlFPIf3+6XIi/AqxlofEbRDt4igtiRj25r/ng9GC3gvwZ862vZAvvaD0Z59yriU/7+xJtN4pqDaYechb/1ERRD2epTJhpkkjooiXKYylaq6FvbFCdwkZx9+eRNarKKTrEU= 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=h+GrhLs2; arc=pass smtp.client-ip=136.143.188.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="h+GrhLs2" ARC-Seal: i=1; a=rsa-sha256; t=1787950656; cv=none; d=zohomail.com; s=zohoarc; b=dqTnxofqAXgiOP2lhLMUpLksYQRUMQXAu9/4Nw3ZnAHVet+qWPXhawwDnhNwuLSNIVLA10bbpaNNmH49qpWnoeB/CHirVLw1uPM/k8qIEj3ecAnE6YQGWmCbOoE/RHfjgCg766MdhqiWezPuOajmbZIK9eTnTO4xA9wOwMUk6i0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950656; 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=KTjS5hBPQO6+RTeil7zhPBG8q7IaCwN0MeCCodQTYuk=; b=Zp0kXRQFVNdbdSOsJpgVwHB/w+f735B40uxhc/5EGVMNTp98FbAoApeKLzSslJFFaLMAodLfUoV92WqTzc+pDhrRhT//0mc0z5Ti9nAk5D3rLnbnwJe9tMxQB1RJm/mBVFBa6zUSMnuaU3nzik8TjCpJ9/e0cXN0EKk165ji+K8= 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=1787950656; 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=KTjS5hBPQO6+RTeil7zhPBG8q7IaCwN0MeCCodQTYuk=; b=h+GrhLs2tieRylZX2D0G+Blfw95fjGXEua6SeJQNTiGYLpLN6MdCN2U1iJMDB6HG XQ5Lsr+dl4Hdt6LOeICJ0m8wxX5rbphl11WjsjQ6lf0vMj5COzY8rIWbmxNBaF6JE+y ahsbFV5BUqO7/4ypmEnpyg0kf6677ftW28PnCJ0E= Received: by mx.zohomail.com with SMTPS id 1787950654519845.7055630987205; Fri, 28 Aug 2026 13:57:34 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:42 +0100 Subject: [PATCH v7 02/17] 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: <20260828-claude-fixes-v7-2-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=5174; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=+7lLC3RASscJtzYIoHPamAqwjiOy0dTWtgEK2tQLZCc=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYsD9Kf79FEW5OX4cZirTK2Uk8soY3j5HSAO DgWvJc3MfmJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LAAKCRAOJn5M7lND Pa3jDACqor8Y+iJnFwVoyFqjtdv8fZwilBv2VsHd4wwvFWjnqI1rZrwO1w6PoT8bm9IBrQ/JkB2 2SsoXkpoP8ma83+PzwOQTh7LvjLYQXR6MdoJHJcEsYKQgYE4IbA4F3eVzZzjXEPwfm2+b4sTp5Y rw/Rm0pMZuTSpnLT8Wq7RVHCVfkm6fgU/c5donP6vvAgAElH0PrVekflVurB/jg83+oUYI6Qyua R0bMCyiuNXTatuBHF4lna0a70QJ48tenVZM4HMzWyGHCmqtrlAsLWIhf17SvzeyUmBdg2yavOde 1HRVjbAlX0ugQy3A/+jIako2MHxaREkcqH/NiYkOAQmAzCrdNRLJY27Cc1OOo7lPuKSeZy6bb/b WCpQJThyaFjFQxg0fnBeDXMRDU41w/JfseCnDolbeoPkWuBA+la8UiashE6nYW4si1ua8Laftjt qprkfTV9j9tH+TeTKbSN5e9GHT0+AIESetxJlBx1ZJNhgomoU2CAFVOI6PxtaEFfmQzl4= 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. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 33 ++++++++++++++++++++++ drivers/gpu/drm/panfrost/panfrost_drv.c | 44 +-------------------------= ---- 2 files changed, 34 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 05c40d5a20b5..d2d2830f11a7 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" @@ -216,6 +217,15 @@ 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; + + mutex_init(&pfdev->shrinker_lock); + INIT_LIST_HEAD(&pfdev->shrinker_list); + mutex_init(&pfdev->sched_lock); INIT_LIST_HEAD(&pfdev->as_lru_list); =20 @@ -284,8 +294,25 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_perfcnt; =20 + pm_runtime_set_active(pfdev->base.dev); + pm_runtime_mark_last_busy(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 out_devreg; + return 0; =20 +out_devreg: + pm_runtime_disable(pfdev->base.dev); + panfrost_gem_fini(pfdev); out_perfcnt: panfrost_perfcnt_fini(pfdev); out_job: @@ -304,11 +331,15 @@ int panfrost_device_init(struct panfrost_device *pfde= v) panfrost_reset_fini(pfdev); out_pm_domain: panfrost_pm_domain_fini(pfdev); + pm_runtime_set_suspended(pfdev->base.dev); return err; } =20 void panfrost_device_fini(struct panfrost_device *pfdev) { + pm_runtime_get_sync(pfdev->base.dev); + pm_runtime_disable(pfdev->base.dev); + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); @@ -319,6 +350,8 @@ void panfrost_device_fini(struct panfrost_device *pfdev) panfrost_clk_fini(pfdev); panfrost_reset_fini(pfdev); panfrost_pm_domain_fini(pfdev); + + pm_runtime_set_suspended(pfdev->base.dev); } =20 #define PANFROST_EXCEPTION(id) \ diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 9882a3ede75f..80996e311a9d 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -964,7 +964,6 @@ MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated= tmpfs mount point with T 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); @@ -973,45 +972,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; - - mutex_init(&pfdev->shrinker_lock); - INIT_LIST_HEAD(&pfdev->shrinker_list); - - 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; - } - - pm_runtime_set_active(pfdev->base.dev); - pm_runtime_mark_last_busy(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; - - - return 0; - -err_out1: - pm_runtime_disable(pfdev->base.dev); - panfrost_device_fini(pfdev); - pm_runtime_set_suspended(pfdev->base.dev); -err_out0: - return err; + return panfrost_device_init(pfdev); } =20 static void panfrost_remove(struct platform_device *pdev) @@ -1020,10 +981,7 @@ static void panfrost_remove(struct platform_device *p= dev) =20 drm_dev_unregister(&pfdev->base); =20 - pm_runtime_get_sync(pfdev->base.dev); - pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); - pm_runtime_set_suspended(pfdev->base.dev); } =20 static ssize_t profiling_show(struct device *dev, --=20 2.55.0 From nobody Sat Sep 26 22:55:48 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 B4B0B3E1D1A for ; Fri, 28 Aug 2026 20:58:18 +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=1787950700; cv=pass; b=r0fvy7Ct+FjXIO9JCMJpBVdUCdqTibcpyg4NUOFCQSn/oRLGwhlpzk/29Tbtovttd1xT0vIKK0GO9v6gKdH4gYb3JKzbgTn0OIaTgyDPLCMTh8euFA75fxm5DLbLb3zv2JkFHspjiFSPPIupvPRxmAclQdxBRQY6vafd8VyMVvU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950700; c=relaxed/simple; bh=sD53kiakATC+UcUaCaf7NbRw9ob5hiejFyKuZ4y1uXI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XOYh1r20ErRq+jDCjWh9xy47cdLkz0JEP6i/vgkg2L+vGt1z6c4NKVsEv1LBlANvmRF0eKd0suaB4iDYs5+WokZ1BT70JNgaDCBVKvAG/NDSTk8bD2lQCUfsabn5NR5kteQQJr3sFGW2HtgjjtFysO/QyRqFTiFTzJagAb3k9NU= 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=TZlNlhaP; 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="TZlNlhaP" ARC-Seal: i=1; a=rsa-sha256; t=1787950662; cv=none; d=zohomail.com; s=zohoarc; b=a3PaqiROngVEgYGz63c4LLAlppHPXlPAAsBg/LL97PurKLHBRrRnhSrpyL4dbC0MkRD4g5SUSCjIWjR2zo5v+m6T7DyHpfYbUF3vjobdU8ibQkLMfQNLYaZdi3XTwyVr3KKJ7JFkYJhjIlZnteKG74JTEjOyT0m8+V1Cn/E2geo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950662; 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=w3iyg6HDBs4Cp03goVcc+iKtUKTimcI5YnSFSphq3ZA=; b=E41sQq9Hz2LtnT3X5oXH1NsKOCaoe3i7xo5mLm3qvIPD7+iv1wnme9bBoYpOsVMInwNEoATmHXdCb8swOF4aDj9Qs7eAjWpLLCSnEix1Qdbjk5ermyNfN2v4fW51FB/ZzGadR9KVuVc+/i9E1LJlkPketVyXhyv/cfufmLYmmHQ= 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=1787950662; 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=w3iyg6HDBs4Cp03goVcc+iKtUKTimcI5YnSFSphq3ZA=; b=TZlNlhaPYNdvffiosoYbFb83c5W4R0g87t4vwFCHL/jV/vTMkKZu1AUhanwFP9tY /gnHfCO491h5tYq7wYpjYppn0vIlNqFcZmsg6gaCHVMZsJKEwe2N3fIucyD1qKJWxrK Tk/vln5WLv/1aOSwKfrcMR26F/OaKHvQnbG22FMA= Received: by mx.zohomail.com with SMTPS id 1787950659656219.550473564929; Fri, 28 Aug 2026 13:57:39 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:43 +0100 Subject: [PATCH v7 03/17] 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: <20260828-claude-fixes-v7-3-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=6181; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=sD53kiakATC+UcUaCaf7NbRw9ob5hiejFyKuZ4y1uXI=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYt9mCdM4WQZ0fkV/3MJ95dPu1Vxo/CpmZEF sc9QamsOOSJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PVl3DACO+9USPhz3bs/+Pu00Ui90vRwsMlXYtTozeoz/Rz1IFNSLKCsubLc3+WgfyuaPQuZ+5qO wsotSnVtpfGYfZLRtdTH/0sGDIlXACJnwrd4F6regQU0uaypXYIrHA9ueUUXMPOmSp/L6pOMiVr ySn2OqS/g6CfIN5PPwFWp8wlOEKCrXejh2d79w9Cs/32tNCwjwaxEeC5g7+9J/CFbz5zPRhqElu lm4X0YfGUIYwm3WTSeXzqDiAqv2V4yrR1HMOHDxpk4nj7TNVVn/Bb1YI2o4q46J3cLoHML7SiBZ +QnHn0TF4umJWf+TZK26w9hEnDsxT9wnQFU+GtloM7bD9lGuqEtB4/mYdMkBXKXZfyUXqMXO/ya DWKSAv/8WDPRhrzVpTY7E3nJ4nvpe3i6Fhc33GpMi9qBydVWpcyhUtDzwF9abEfJyWWdqg2m0Zb HTVREkgFvCxlqeE8pR5gHeMPb08rQ1LmMGhiz+6K7WKgelwIds5yjFnhXycjHitr4qNSs= 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. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 10 ---------- drivers/gpu/drm/panfrost/panfrost_drv.c | 7 ------- drivers/gpu/drm/panfrost/panfrost_drv.h | 13 ------------- drivers/gpu/drm/panfrost/panfrost_gem.c | 9 ++++++++- 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, 17 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index d2d2830f11a7..7daa2143f3c4 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -223,16 +223,6 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 pfdev->coherent =3D device_get_dma_attr(pfdev->base.dev) =3D=3D DEV_DMA_C= OHERENT; =20 - mutex_init(&pfdev->shrinker_lock); - INIT_LIST_HEAD(&pfdev->shrinker_list); - - 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 80996e311a9d..ec8c1c08e147 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; diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.h b/drivers/gpu/drm/panf= rost/panfrost_drv.h deleted file mode 100644 index bac0c415d4da..000000000000 --- a/drivers/gpu/drm/panfrost/panfrost_drv.h +++ /dev/null @@ -1,13 +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__ - -#if IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) -extern bool panfrost_transparent_hugepage; -#else -#define panfrost_transparent_hugepage false -#endif - -#endif diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 7b993a089af2..15105b7f954b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -11,10 +11,17 @@ #include #include #include "panfrost_device.h" -#include "panfrost_drv.h" #include "panfrost_gem.h" #include "panfrost_mmu.h" =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)"); +#else +#define panfrost_transparent_hugepage false +#endif + int panfrost_gem_init(struct panfrost_device *pfdev) { int err; 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 2d12b83e900a..6f920fd0fc4e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -873,6 +873,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 Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 DBD1E3E3DA2 for ; Fri, 28 Aug 2026 20:58:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950702; cv=pass; b=AtCgaSMtUC6A4Y4puxZ63Ydy5ivCs4K9niZRCbCWzwmS0kOjSh0KY4UOfcm6t429mCxLLnv0Jt1fgMOP6K8+Nd0heFBw75oiEjyfS6cDXQRh8Ib3+wKVucCbjufpXosIlzjze1f7XJdyXFajMUZ87HNDkv3t3ZRA1QymDk0NyAs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950702; c=relaxed/simple; bh=DZWyR/kYubtvf3s/OLBgSowWCeMeWaF9EEwJkXQFV/I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l4he4IZ6NN/ebi8Anp1jed/WwNoD4ib1/F7Yh8T3y2IRz6VWjNG6zd8DKZCrzfpAQ97K02XGuxeqo49PQBI0LPoHzJcSsNukL12JoIYseVLMfw1Sf+9iUwTagCL4TOEzTVptD+zGpUIGxBEFODXwkipyW+wSSE7jYjlQEbA14PI= 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=Ixo85vkq; arc=pass smtp.client-ip=136.143.188.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="Ixo85vkq" ARC-Seal: i=1; a=rsa-sha256; t=1787950666; cv=none; d=zohomail.com; s=zohoarc; b=mKDm/LltWv9MIMjiExnDf8IrE86ss+oqhuzKF1KYcig3YNAuYXFLvAKV5SnLmHovzOkZNHL6nDjihcJXRFpH9X7CpF135NeifToAfHxIMFZA53Dh+BZLLmka9ubMHdhbploMcq6XkGATF6R/QCerBoRW4rr/47xGanj9WBgl3lo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950666; 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=w4NjAOv8haxbtWQWq7kg/kHBpDV1YcwUEy2S/D8q5ks=; b=aUjgk0qFC8XHPG1J74rQMkdQwkN/q6y6ZNMO8wKMRBd/xk+ZlVsNYKc3vgCVMJNTqJSNUq//80UPms0+OHhTqOpqDQwEA8xz3ae4wFts1YJO6k2gBJqB+T82ZJaGmizlffkVDAwTaomabMJjQe3YX5CpWpdmWFt3hJ1Yrs8Lz6k= 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=1787950666; 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=w4NjAOv8haxbtWQWq7kg/kHBpDV1YcwUEy2S/D8q5ks=; b=Ixo85vkqNMluHtnbATq0L9bTmD1h6bB3NTXG3FGS0l5kH3R65aNVb2mY5UF2itgR Jh7urxcwZD69QySPHwuXqWN51aovzVAaY+Kjn7LvcTn2MEaOOnySuQIAEnNI+GPOb8B ovFpYr+hyu0zz+TAJ9s3EgAFEV65SDpNx9uyw7YA= Received: by mx.zohomail.com with SMTPS id 1787950664669191.9351872143302; Fri, 28 Aug 2026 13:57:44 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:44 +0100 Subject: [PATCH v7 04/17] 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: <20260828-claude-fixes-v7-4-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=12625; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=DZWyR/kYubtvf3s/OLBgSowWCeMeWaF9EEwJkXQFV/I=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYt2DU9qObwcigGd7nEPlB+FQXhKxD4NZ8Aa LYFi69ncsmJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PZ7ZC/4j0cn9GqI5XRnH9ZpB4HtDvfI917FPfDWee3LIvD7W1Y8TDIaEYF0ulpNwUJGFKs1jTR1 2CPqvY55zUgbyYDImZA1pl6IylflTBjTKM1qo0PBbaicKE3OCiG+ZV2YEjgJZgdiRa7PsonGxXn 6lEiXqOGelWXoEVRqQwizkm4gzheKhlR63XCKD4IfIvwQMzRMwFBEHFTlA5Wkrrplsp9aFNd+pi EmtnFvGufv6esWsFV/QLy6XvwF8x3ccVbchIwBTpfCJwcWYPVbGIqMOJTSLzx//5DN6PfTojO97 bm8LuHCEmaZBq2mhrM1ayCGCChIYbgxt0VRF3TWnu10GYbUwTAdztX5B1LaNc7t0lZUQmecvlw3 grrh+7evH0Izow0jUxdVCj1aQjpUsrSzlcri/e129bEOnDSTxdWNzf7PjW/erANNkb8PRscQV5b zme7PzWu6H0xBqFMZvGtswlB5EkE5s/wiuZICo9zmWxot1lXpnD2W+8RQRLMjNR0zPPO0= 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. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- 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 7daa2143f3c4..6e3fcd53b690 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -591,3 +591,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_gems_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 ec8c1c08e147..f77780c72a1a 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 15105b7f954b..54717fdb8624 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" @@ -736,8 +737,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; @@ -757,4 +758,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_gems_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..49bb5691087e 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_gems_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 6f920fd0fc4e..5016d2d53da2 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 @@ -1137,3 +1139,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 Sat Sep 26 22:55:48 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 8CBD63CA49C for ; Fri, 28 Aug 2026 20:58:27 +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=1787950708; cv=pass; b=IWp1adoSj15Z+FzqHavHnta3WY++U+e3oYaceO1Q9+PapCJnaXhIi2NmNLfHIWdROy3FUbMxB/0Vs2CwIKImvISVTZFCYMSZnBBiaB/ykLptp9k3dw1SD1Mi5iepg3CkErcV8WVlSYSTCLoDa+kOZC00dRJw+NJIfZo9VhupJj0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950708; c=relaxed/simple; bh=iTZh9Yw1GGOTJ/Y7s8S/RGUEO1DR9HzCctLcW2MIF1E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bhbliLRhBj8axezNMX5+tuoUiOStzgIoc8npYO5qQHY9kI/fW1Bkzmi5AAHweV/iS3BOL0HP12aoXc5MevOv8PXreCOhL7zsz354krNDR7TftlT8j7LBf02ZEgwN9Ol4JdvA9Vtg3o+4P54IP4VsQ7EwktjcGXEToBUTOLuf0TA= 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=ABk2k7u+; 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="ABk2k7u+" ARC-Seal: i=1; a=rsa-sha256; t=1787950672; cv=none; d=zohomail.com; s=zohoarc; b=MtxEfV3u9OjLL4DIxRLdpSxBdCyxHxZsv/K9yZnXXze/EQ53rTX/qdJzzRZcTd/JRb1ede1LVEUQhaE0jCrWDEhgEjL80gqXMCtYROr5+Ck9uw68q+N31fkBWkcGLYUyeIZO9juevLjoYLBOe2k3z4E4LqCt/JnoB+D/D+3hLgA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950672; 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=FCsXL46tmA9akTAVtmeCRKI1MFQuc5YL5rmGqRaBV4Y=; b=BnkwzH3FwFaZwLcHTyWX0/+tk69iLW9rX98hDETz5J42XFyWpp1leAMMeS+WoJ6qzEJuj+fDBLHb0afqIOfBna3U6a524ygNZRvndwzYYutxMp7B4D18WOn3zMbBeJKQ9a7ZkBxYTJFHI1/M8xcFcOHQKGPTCUwXnjwAUwjR5nU= 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=1787950672; 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=FCsXL46tmA9akTAVtmeCRKI1MFQuc5YL5rmGqRaBV4Y=; b=ABk2k7u+BZiu9ZpOzwxbGk+zJtSwSrbWzA8j9F1AbTYykecDadYae561drHQLp7J ZHZlADMAOVIaz66RKr6s75u62EIvfa1tf1iC1b8vxFT26J02JWzVBsPt3VKydIXOXGc TWXGdb/IzH06889a1Y16f06gZV1M2Cm8FhWqxNm0= Received: by mx.zohomail.com with SMTPS id 1787950669940970.4975499769293; Fri, 28 Aug 2026 13:57:49 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:45 +0100 Subject: [PATCH v7 05/17] 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: <20260828-claude-fixes-v7-5-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=1524; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=iTZh9Yw1GGOTJ/Y7s8S/RGUEO1DR9HzCctLcW2MIF1E=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtwm00Ey0kiu6Ad6MA8Fa2vIP+z/AzzmqQW YXDGE29s2SJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PTJTC/sGXYMJahITgex6AtjI01Ke4/zoqKqd/7qrlCWD0InubM/f5CptIOw1i/KfIT3cmHzhFVF NqC/E/uHT36RvOCy8Wd7NDozKwCnK7e6Te82mdTaVDH859noV6RIlN2Jg1H45cfKf4DKE5kUVUV iUgy4jr39W8Hr9SfQKYPEZJgJA1UXwSdlShWMY/8Bp69tlYJBJxUfOAfSCXy/+rd2j6+2Oarl1R ZsgpTpS9Uz6FNl72oz+wxekphDhl61bNfLcmuzVIWlpMfw8QQ8bEX/6tZvCaw43kgUF38z1T11m lZGnq6eEocqkQrMYyVTT2FFwdOod1fNS94tN6h97PqfZhM78fVDaSQYKIjVPRpgyr8OhglGPJmX E+MdsCvA16+kfliovGAUHtE56K4PTX/fd1SbFXGH1f2ZFsghVvPesmO8DSBE6No6lyGQS1wxDrg +x6gI2AEfjJXVmiZ4H1qbQ3Ql3lBcRoiVW4PV8ZRbuYZI8zr93NdtShw2wBaa5+pnuQrg= 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. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- 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 6e3fcd53b690..a9d9669912e0 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -540,11 +540,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); @@ -554,7 +552,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)) @@ -575,9 +573,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 Sat Sep 26 22:55:48 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 87A54383C84 for ; Fri, 28 Aug 2026 20:58:36 +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=1787950717; cv=pass; b=g1uqsh2C5tOqqtD5M6FRPlfbmHFrN1DagfQLr2D5V2D0LH4Sw0HmML6oGMKOTr/xv8PA3XK7eDZP9X/PIu7M4+wWQDxc7sZAKxhvtr6x2m53DJmfbfV2vb9Mz39P+uM926Fd6QMhnRsHfrOCO5Z75YVJW9wsVhGG6sW7chjXVDY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950717; c=relaxed/simple; bh=lDX7Gq+nDDqxqZlHoKMag4LTg/zlnGY3wVJubgu254I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=I5ZT7oa78HF8V6xLvTtnxNw5KUK1sddAfVTFVuvaSbRqCj3Z39VDKDkn1eq8gMfIb/mdulEMVf97aDWKOLoqpfbTs8LtIj24Tzz1mAHFUc0cUEEv5L7HrOSnyDlqPHE8C0YslX6TCA76UcSoogCzl+AGMLNFHfxrrnLXRLVpVhs= 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=Ce3tDsWI; 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="Ce3tDsWI" ARC-Seal: i=1; a=rsa-sha256; t=1787950678; cv=none; d=zohomail.com; s=zohoarc; b=D8RT7HaXTRFm10eAscpBuju3uOFgjCdXlSTyyzJ2/QgLE4HNeQZiKyID+pkxNWp+SFeB0GdzilAXvM1Xsq0AxqzGde1WTmG3U8PSDM5rqmZhGDIaXtxZyAxi3Uv0402AXzzWUvI3lHJaBtxUUib9blP5c9Gvlw37bdrV1+L/2p0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950678; 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=od5OUbKvCXLtDxsFzjvdgUt0gGN3KLsNBfMV+vWPEHA=; b=bxrk+GQL2hs3u6bSwDr4WrMkTLW5yJF1vuH+Avv8a8Cd2EIvaQ6FyTJQ+OqRhQiZRMiWYmdpi4YG/MDKsDp4/kajcGsh2pD2+d7W7cgyowJOtHEBWOkATuXjQDrSu9HOiEaNvkwOP9nGz23dKOQGAP/YaoiCWMBV6Gzl1UiYPMM= 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=1787950678; 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=od5OUbKvCXLtDxsFzjvdgUt0gGN3KLsNBfMV+vWPEHA=; b=Ce3tDsWINsZHnhnz2ffPoDij1D/IpphqMuuXOyh8nWcVyBnjIdudKKkTzeyLQlW0 +rfi+Hy2WMbhGeLZbyJguDyvId7fOXr9ShakJvhI9gFgirlat8Nqa/a3rXuE4TOq6G0 EhIAZjk/KVZ2FpEFmXQF7T3/x16NTTbEHaWF6pBE= Received: by mx.zohomail.com with SMTPS id 1787950676241973.8812197132261; Fri, 28 Aug 2026 13:57:56 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:46 +0100 Subject: [PATCH v7 06/17] 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: <20260828-claude-fixes-v7-6-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=7529; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=lDX7Gq+nDDqxqZlHoKMag4LTg/zlnGY3wVJubgu254I=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtK0KIsxurcSdMR2AwMtjFyGwNIlBDr7h5Q BlOWJwqpnOJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND Pc3KC/0TZ9tBXAE1hBd3XHdYAjAYKP6LIlXKn9BMMmCtQK4801HKJIRR7sA5ouQqINTghRCoNp0 QdUdh99JwKv4+dVJDmFGp0+w/U/ATtwzn7NtNzOqRg9sDMpanWFJelb7SS3A8Rs19+K2aaKH45I PsyIzYur1LXCS5iGvuPacu7tvocx5yyAldayl2gKZyk03Zel8tRchSv/rTTNqvbdbvawE+rxXJD LRViCml296szz/G1Qcy21OGOz9cthhjSs9YkdcQSRCfCsfFt4WdPgVu1a0gY8ANNQdXfdhiZt7z EHCKYBgP2BjBMSwULgesDFPA0wCadjPyjO9zKrNn126jMU0XV5PtIojm7cX9qId3jBF0SSJ6N1P Ic7ZmSNxJAzhn9jtxmmT2kMm8qH32YHEnZPlQ+PRzqElfqB9MQGgicRRwr97LoHNNbS/tsNcvTh 6PpAR9Jy5uM7qN+eCrbqqK2WVoEdcD81vmZWvjGOH+DfSMUykMzUSzJNpLCooUf8ndxxg= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Gather all clock enables and disables into a single function to avoid repetition. Also, as part of the same function, handle reset control (de)assertions, since that was already the case in the PM runtime functions. 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. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 123 +++++++++++++------------= ---- 1 file changed, 53 insertions(+), 70 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index a9d9669912e0..9549ddb7854a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -27,18 +27,53 @@ static int panfrost_reset_init(struct panfrost_device *= pfdev) return PTR_ERR(pfdev->rstc); } =20 - return reset_control_deassert(pfdev->rstc); + return 0; +} + +static int panfrost_clk_enable_deassert_reset(struct panfrost_device *pfde= v) +{ + int err; + + err =3D reset_control_deassert(pfdev->rstc); + if (err) + return err; + + err =3D clk_prepare_enable(pfdev->clock); + if (err) + goto assert_reset; + + err =3D clk_prepare_enable(pfdev->bus_clock); + if (err) + goto disable_clock; + + 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); +assert_reset: + reset_control_assert(pfdev->rstc); + + return err; } =20 -static void panfrost_reset_fini(struct panfrost_device *pfdev) +static void panfrost_clk_disable_assert_reset(struct panfrost_device *pfde= v) { + clk_disable_unprepare(pfdev->bus_ace_clock); + clk_disable_unprepare(pfdev->bus_clock); + clk_disable_unprepare(pfdev->clock); reset_control_assert(pfdev->rstc); } =20 static int panfrost_clk_init(struct panfrost_device *pfdev) { - int err; unsigned long rate; + int err =3D 0; =20 pfdev->clock =3D devm_clk_get(pfdev->base.dev, NULL); if (IS_ERR(pfdev->clock)) { @@ -49,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_clk_enable_deassert_reset(pfdev); } =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_clk_disable_assert_reset(pfdev); } =20 static int panfrost_regulator_init(struct panfrost_device *pfdev) @@ -241,7 +254,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) err =3D panfrost_clk_init(pfdev); if (err) { dev_err(pfdev->base.dev, "clk init failed %d\n", err); - goto out_reset; + goto out_pm_domain; } =20 err =3D panfrost_devfreq_init(pfdev); @@ -317,8 +330,6 @@ int panfrost_device_init(struct panfrost_device *pfdev) panfrost_devfreq_fini(pfdev); out_clk: panfrost_clk_fini(pfdev); -out_reset: - panfrost_reset_fini(pfdev); out_pm_domain: panfrost_pm_domain_fini(pfdev); pm_runtime_set_suspended(pfdev->base.dev); @@ -338,7 +349,6 @@ void panfrost_device_fini(struct panfrost_device *pfdev) panfrost_devfreq_fini(pfdev); panfrost_regulator_fini(pfdev); panfrost_clk_fini(pfdev); - panfrost_reset_fini(pfdev); panfrost_pm_domain_fini(pfdev); =20 pm_runtime_set_suspended(pfdev->base.dev); @@ -462,38 +472,15 @@ static int panfrost_device_runtime_resume(struct devi= ce *dev) int ret; =20 if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) { - ret =3D reset_control_deassert(pfdev->rstc); + ret =3D panfrost_clk_enable_deassert_reset(pfdev); if (ret) return ret; - - 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; } =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) @@ -509,12 +496,8 @@ static int panfrost_device_runtime_suspend(struct devi= ce *dev) panfrost_gpu_suspend_irq(pfdev); 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); - reset_control_assert(pfdev->rstc); - } + if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) + panfrost_clk_disable_assert_reset(pfdev); =20 return 0; } @@ -536,11 +519,11 @@ 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 clk_prepare_enable(pfdev->clock); if (ret) goto err_clk; =20 - ret =3D clk_enable(pfdev->bus_clock); + ret =3D clk_prepare_enable(pfdev->bus_clock); if (ret) goto err_bus_clk; } @@ -553,10 +536,10 @@ 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); + clk_disable_unprepare(pfdev->bus_clock); err_bus_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->clock); + clk_disable_unprepare(pfdev->clock); err_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); @@ -573,8 +556,8 @@ static int panfrost_device_suspend(struct device *dev) return ret; =20 if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); + clk_disable_unprepare(pfdev->bus_clock); + clk_disable_unprepare(pfdev->clock); } =20 if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) --=20 2.55.0 From nobody Sat Sep 26 22:55:48 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 D4F1A24DCF6 for ; Fri, 28 Aug 2026 20:58:40 +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=1787950722; cv=pass; b=pboQER0sq8ZtgHoDj7yzdHjvkvdZEKs0Qiu9LrBgCCg9++Pp//KZ0iFg52I86CZbU4GXx9DsEsdAa4ZUREYvHIvXC1eZqOMSruXOtvCaxNgwac0UglKTOUCdNaG9Q6DyYgAJgPdsfFQteEyEDYRmaLA2P7N+ywfN6xx4xpIY4Go= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950722; c=relaxed/simple; bh=OBbDOeQ+abKzN85Sr4YSgFexzzXD/M4vh+LXEOXQxtM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bbkMKUWeZ+JFXtZCeyvwVFalxW8U7dKZeQx5fofjoi0laZnc8F1ZxAmPbuvQjaDDz6ctx9JbC8A/IT6GqdPdk7kLANbRcuJMnAwiFUVpOccdnUAo9l82xudzRHsqhJelnll6lGgY2zGNGN5GlwLAIWxTgVSijko7zNIg7a2g+PE= 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=VvWP+zSi; 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="VvWP+zSi" ARC-Seal: i=1; a=rsa-sha256; t=1787950684; cv=none; d=zohomail.com; s=zohoarc; b=B4sgNEU3pL3AzHx6TXNR5LPi2g4kbdAKF67WavKENCyDlO77I0jLqaYbfmc1nMo61fCOexw00xEweYY6D4y21sO90mAUxikB+bIM5Tf3zKqKoCVsAI8jMb8Nou+FC2/lMrXnk0ud0Iafe8eJf6d+8SO6+0ERUnygKjpfOzTFDjo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950684; 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=Bkr1BFA8JaqPgz+ZJjaJL66hXD/0MblU6CSIj4eBGyo=; b=j7NdIFU+Pvijg9vqJfzkN8OLUhY0jKu4JkRPIoIYdU+RL4Kk/UkGytT8SyzlPuua2AevQ4rUN7CbxZNbY98kZGRsa2MAh0+N3BugQKuR9L9ugKy+9vX9WdynJ884dqfF6KcgG6EwOoBNE6H04taQX8BkCOmtiwAZVWZf73XLq2M= 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=1787950684; 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=Bkr1BFA8JaqPgz+ZJjaJL66hXD/0MblU6CSIj4eBGyo=; b=VvWP+zSiWdF2No9eX8dlTXn2YgvytsytOel2i9SKpt4KnAeIxBZeArf5zFV7WAl3 mHeJ0tarLMyLGrGuLUudl5Z0D6TAxpjgPSYsnz/BB8oIk2xyEFO9OwFLpDEkh+HRbF7 BV4Rmx2c2tUweTeAK1qAwbEkwb1wqe0Q0OVOJgrs= Received: by mx.zohomail.com with SMTPS id 1787950682002200.20126287790504; Fri, 28 Aug 2026 13:58:02 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:47 +0100 Subject: [PATCH v7 07/17] drm/panfrost: Stop all jobs before commencing device teardown 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: <20260828-claude-fixes-v7-7-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=4381; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=OBbDOeQ+abKzN85Sr4YSgFexzzXD/M4vh+LXEOXQxtM=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtRPk8CtvzxnSHnHS5fzPViAl1laKmOlkKE Ngjcs2M9EmJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND Pd68DACrP0g/jy9KLDK0ibr7mtK7xmNO6AvntzwnxTg+qSez+qDAzOmna1N/UbsJLGWXMg04lYl 8Y6U/jDPy0WsejHAf51TQ+DhfkB7l2VPbaYMsZy5ffeK+6wRl4SqFQVUeqy/TYEBnumBAX53KTM dMXTdfNaBEQd4n6OP1hLTcyClRE2+mbbznZYOh5VNV/pRW+ekiI7/zwszO0uIHME3f9lsKVGvPi 6weX13R1Tp3A2ZqiHJV4F8M47Ad6KmjDu2e6st2q50xxlxxfemd7rHJBjzgEXMuxHPUkO+1tYHb PAmZN4qFR9WT8vuQqOLoMDplQRSd3yXR2kObGicVZxmGNSS6pnvPBomkyZRQo0TFilw2N1ET5pe V7KFrp96cuiGLK255xWSvsVBdXBCnZ+Ho6VdLTkQERIwssSIl7rEFRjGaE7XsKTR34FEbB8tUbB UnqFwL2IZYZ2I82QiZx7jm+aA9sU7sJtEBY0ESGlw9QePqbxnD1tLgIf/rRgMp2iT54nM= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D We should make sure there are no inflight jobs at the time we finish driver structures and synchronise their IRQs, and even more so by the time clocks and power domains are disabled. To that end, stop submissions from existing scheduler entities and force HW to stop all running jobs. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 2 + drivers/gpu/drm/panfrost/panfrost_job.c | 71 ++++++++++++++++++--------= ---- drivers/gpu/drm/panfrost/panfrost_job.h | 1 + 3 files changed, 46 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 9549ddb7854a..9e02fb5f73c8 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -341,6 +341,8 @@ void panfrost_device_fini(struct panfrost_device *pfdev) pm_runtime_get_sync(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); =20 + panfrost_jm_stop_sched_jobs(pfdev); + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 5016d2d53da2..630298b7ea8a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -655,39 +655,12 @@ static u32 panfrost_active_slots(struct panfrost_devi= ce *pfdev, return js_state & *js_state_mask; } =20 -static void -panfrost_reset(struct panfrost_device *pfdev, - struct drm_sched_job *bad) +static void panfrost_stop_jobs(struct panfrost_device *pfdev) { u32 js_state, js_state_mask =3D 0xffffffff; unsigned int i, j; - bool cookie; int ret; =20 - if (!atomic_read(&pfdev->reset.pending)) - return; - - /* Stop the schedulers. - * - * FIXME: We temporarily get out of the dma_fence_signalling section - * because the cleanup path generate lockdep splats when taking locks - * to release job resources. We should rework the code to follow this - * pattern: - * - * try_lock - * if (locked) - * release - * else - * schedule_work_to_release_later - */ - for (i =3D 0; i < NUM_JOB_SLOTS; i++) - drm_sched_stop(&pfdev->js->queue[i].sched, bad); - - cookie =3D dma_fence_begin_signalling(); - - if (bad) - drm_sched_increase_karma(bad); - /* Mask job interrupts and synchronize to make sure we won't be * interrupted during our reset. */ @@ -730,6 +703,48 @@ panfrost_reset(struct panfrost_device *pfdev, } memset(pfdev->jobs, 0, sizeof(pfdev->jobs)); spin_unlock(&pfdev->js->job_lock); +} + +void panfrost_jm_stop_sched_jobs(struct panfrost_device *pfdev) +{ + for (u32 i =3D 0; i < NUM_JOB_SLOTS; i++) + drm_sched_wqueue_stop(&pfdev->js->queue[i].sched); + + panfrost_stop_jobs(pfdev); +} + +static void +panfrost_reset(struct panfrost_device *pfdev, + struct drm_sched_job *bad) +{ + unsigned int i; + bool cookie; + + if (!atomic_read(&pfdev->reset.pending)) + return; + + /* Stop the schedulers. + * + * FIXME: We temporarily get out of the dma_fence_signalling section + * because the cleanup path generate lockdep splats when taking locks + * to release job resources. We should rework the code to follow this + * pattern: + * + * try_lock + * if (locked) + * release + * else + * schedule_work_to_release_later + */ + for (i =3D 0; i < NUM_JOB_SLOTS; i++) + drm_sched_stop(&pfdev->js->queue[i].sched, bad); + + cookie =3D dma_fence_begin_signalling(); + + if (bad) + drm_sched_increase_karma(bad); + + panfrost_stop_jobs(pfdev); =20 /* Proceed with reset now. */ panfrost_device_reset(pfdev, false); diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panf= rost/panfrost_job.h index 3e3b9717838f..dc9d3c9dc67b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.h +++ b/drivers/gpu/drm/panfrost/panfrost_job.h @@ -73,6 +73,7 @@ int panfrost_jm_is_idle(struct panfrost_device *pfdev); 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); +void panfrost_jm_stop_sched_jobs(struct panfrost_device *pfdev); =20 #ifdef CONFIG_DEBUG_FS void panfrost_sched_debugfs_init(struct drm_minor *minor); --=20 2.55.0 From nobody Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 9AD9E24DCF6 for ; Fri, 28 Aug 2026 20:58:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950727; cv=pass; b=pGEwRiZIkR2PD2OtrMwBw8+o71Es1/Ha5qHe7TdbRNaTffe8NDKplS9LlzqhzZK06z9uBydGGfCXG09BombKfiQafFuKE1ckvRvdTIDuxx2Zg+zIaYvUiNxXI8DF+a3N13LsFjjaDqXOQYprFQslY7/1pI15/0Wc5jK9DDsQ1KU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950727; c=relaxed/simple; bh=Rmo/XO9XHoEmEO/7OVid6jBs5qtFuXwEb0EvBhaQe34=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gv9tq3NSM3z7kLEWnlF8S+pRHwJbIZD4jpKuIFab7dwFsInPWnxJR+aepZcHUVr9ZEdm6rl27ymtThMUl1RDhApsyKCyUrysiVS2KmG7IMBkcBhheOY+YKdPkA3JEkp7LZePbmKErRvjPbhMMk4IESk8GrXuzAGzb02kVSPRQTM= 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=O1tfyQ6R; arc=pass smtp.client-ip=136.143.188.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="O1tfyQ6R" ARC-Seal: i=1; a=rsa-sha256; t=1787950690; cv=none; d=zohomail.com; s=zohoarc; b=Ku1JYnDRP8cS98fZNX8rb2khJBFDm9ZyUQStVErbnYA/gDySNLfs/hyJa0UL+I5qqoyunXh5jTfw1cwMJLiDM13ee9k8tHzEq4WaZxj3MX6KqMnqQcaM/NxkDBdQvoSR9DEmsTgdH50RrVdjSJCDXwZwLZLJwKW8nrJntV+tyvw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950690; 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=F5z/8ycwPUffCKjaBmrIZdQo0tveJFXXY3IIO7N7iR8=; b=nlE/17WjS8wueioxiVwkgqjwmblEQ4ekk/G71VuHwMESXucej5fRXcnliuMSs69PB9GZlEbuE+vyuPB2Kl6kU8W0mvvcpKL3Er8zs3dAbBkeTeVceWtFEfDT8WVrUBo4Ksgw4uJjk56XzSfi35qFCcTC+QzQDY0AAwua2PIfBC0= 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=1787950690; 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=F5z/8ycwPUffCKjaBmrIZdQo0tveJFXXY3IIO7N7iR8=; b=O1tfyQ6Rxhgo/YJ117J81xctFAik11ZpbeyAHZ9FEPjJygXDWxfMfxUjbZK4dXEP ED2qpj7gdsdWACF5wtvwC49SN7S/BzmF0PFhNd2d+h3CRRO1T138a6V0zc8Lh+HsPEJ LHQ/HE+MZl+RKdguoyf5/RfvuESVjiyd8il3IYtE= Received: by mx.zohomail.com with SMTPS id 1787950687808981.8407835768854; Fri, 28 Aug 2026 13:58:07 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:48 +0100 Subject: [PATCH v7 08/17] drm/panfrost: Split subsystem init/reset from interrupt enablement 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: <20260828-claude-fixes-v7-8-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=11059; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=Rmo/XO9XHoEmEO/7OVid6jBs5qtFuXwEb0EvBhaQe34=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtMhqBVphzK72uG5KAl8Mki5XNCQxmjP0MX iDAeNQBAkWJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PW7bC/43S59BXdLYAlGazPYMJj5rNlorjCymGoIlhGRp26ue81nVRDUZCGatDwXPxUvnlkun/6O AaMEUyTm4fkYfBFnO1uaSlm6y5BBQYluTgDiOUsIBDgQYva4ecmZu66G+VGwdwJLNyzCc1b/mef Lwb+6mH7Rz08uKhsscMwUJ4gTNGjDTNkpdbf1+w/TAaBPPej+Qp+diZF7JN+lV0fJIRW0WXBmFe UnJACu/VjrByM+w/wTnBkoyCBLNH2y9CsMwYJ3dm7LKF/uBMAN4YscWG4vyl1fdyX0KTLxQp1lu qwcfy4ZDRDvyXNS7lRhObLzEBLnCxmATjLmLzXwBOS6vzocIYkhR2BVr8up2COaCQMpsk1/DIju q6EUDoIkbBtcYK9Lw/tFSun5P04OhZTj022SzuaiXbkjFAuxeXQLS8RkO48656dnD9awnfWOAzH j2FDCe3dQtsS0w2rkGzzZiKTqTos9UzJKF5rEX00iNSe81JDs+tfsyX5xv2BZFWeBMqz0= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Because MMU interrupts are only enabled when the device is reset, it happened that after DRM device registration, the very first job targeting the tiler heap BO would always time out. The reason is the reset sequence is only part of PM runtime resume, which is not called explicitly at driver probe time, and an actual reset work item manually triggered after a HW error. I have attempted a somewhat drastic solution, which is completely decoupling GPU/MMU/JM subsystem initialisation and reset from interrupt enablement, so that we can handle IRQ toggling a bit more flexibly. To this end: - Ensure every subsystem with its own IRQ has an 'enable interrupts' method, and that it doesn't enable them anywhere else. - Force IRQ masking at MMU reset time. Up until, now, panfrost_mmu_reset() was clearing the MMU IRQ suspension bit, but at no point that is set during the reset sequence. Then manually enable all interrupts when the device is fully initialised at probe time, right before DRM device registration, or after the reset sequence is complete. Also disable all interrupts at device remove time, so that their IRQs can be sync'ed right before tearing the device down. Fixes: 635430797d3f ("drm/panfrost: Rework runtime PM initialization") Fixes: 876b15d2c88d ("drm/panfrost: Fix module unload") Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 40 ++++++++++++++++++++++----= ---- drivers/gpu/drm/panfrost/panfrost_device.h | 3 ++- drivers/gpu/drm/panfrost/panfrost_gpu.c | 19 ++++++++------ drivers/gpu/drm/panfrost/panfrost_gpu.h | 2 ++ drivers/gpu/drm/panfrost/panfrost_job.c | 7 +++--- drivers/gpu/drm/panfrost/panfrost_mmu.c | 9 +++++-- drivers/gpu/drm/panfrost/panfrost_mmu.h | 2 ++ 7 files changed, 56 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 9e02fb5f73c8..99f7da2180f9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -226,6 +226,27 @@ static int panfrost_pm_domain_init(struct panfrost_dev= ice *pfdev) return err; } =20 +void panfrost_device_enable_int(struct panfrost_device *pfdev) +{ + panfrost_gpu_enable_interrupts(pfdev); + panfrost_mmu_enable_interrupts(pfdev); + panfrost_jm_enable_interrupts(pfdev); +} + +static void panfrost_device_enable_hw(struct panfrost_device *pfdev) +{ + panfrost_device_enable_int(pfdev); + panfrost_devfreq_resume(pfdev); +} + +static void panfrost_device_disable_hw(struct panfrost_device *pfdev) +{ + panfrost_devfreq_suspend(pfdev); + panfrost_jm_suspend_irq(pfdev); + panfrost_mmu_suspend_irq(pfdev); + panfrost_gpu_suspend_irq(pfdev); +} + int panfrost_device_init(struct panfrost_device *pfdev) { int err; @@ -297,6 +318,8 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_perfcnt; =20 + panfrost_device_enable_hw(pfdev); + pm_runtime_set_active(pfdev->base.dev); pm_runtime_mark_last_busy(pfdev->base.dev); pm_runtime_enable(pfdev->base.dev); @@ -315,6 +338,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 out_devreg: pm_runtime_disable(pfdev->base.dev); + panfrost_device_disable_hw(pfdev); panfrost_gem_fini(pfdev); out_perfcnt: panfrost_perfcnt_fini(pfdev); @@ -342,6 +366,7 @@ void panfrost_device_fini(struct panfrost_device *pfdev) pm_runtime_disable(pfdev->base.dev); =20 panfrost_jm_stop_sched_jobs(pfdev); + panfrost_device_disable_hw(pfdev); =20 panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); @@ -456,16 +481,12 @@ bool panfrost_exception_needs_reset(const struct panf= rost_device *pfdev, return false; } =20 -void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int) +void panfrost_device_reset(struct panfrost_device *pfdev) { panfrost_gpu_soft_reset(pfdev); - panfrost_gpu_power_on(pfdev); panfrost_mmu_reset(pfdev); - panfrost_jm_reset_interrupts(pfdev); - if (enable_job_int) - panfrost_jm_enable_interrupts(pfdev); } =20 static int panfrost_device_runtime_resume(struct device *dev) @@ -479,8 +500,8 @@ static int panfrost_device_runtime_resume(struct device= *dev) return ret; } =20 - panfrost_device_reset(pfdev, true); - panfrost_devfreq_resume(pfdev); + panfrost_device_reset(pfdev); + panfrost_device_enable_hw(pfdev); =20 return 0; } @@ -492,10 +513,7 @@ static int panfrost_device_runtime_suspend(struct devi= ce *dev) if (!panfrost_jm_is_idle(pfdev)) return -EBUSY; =20 - panfrost_devfreq_suspend(pfdev); - panfrost_jm_suspend_irq(pfdev); - panfrost_mmu_suspend_irq(pfdev); - panfrost_gpu_suspend_irq(pfdev); + panfrost_device_disable_hw(pfdev); panfrost_gpu_power_off(pfdev); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index a0b9a2145fc9..c94546b49662 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -250,7 +250,8 @@ int panfrost_unstable_ioctl_check(void); =20 int panfrost_device_init(struct panfrost_device *pfdev); void panfrost_device_fini(struct panfrost_device *pfdev); -void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int); +void panfrost_device_enable_int(struct panfrost_device *pfdev); +void panfrost_device_reset(struct panfrost_device *pfdev); =20 extern const struct dev_pm_ops panfrost_pm_ops; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panf= rost/panfrost_gpu.c index 8a15ccce08e9..c8e0b1acc669 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -67,8 +67,6 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev) gpu_write(pfdev, GPU_INT_MASK, 0); gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_RESET_COMPLETED); =20 - clear_bit(PANFROST_COMP_BIT_GPU, pfdev->is_suspended); - gpu_write(pfdev, GPU_CMD, GPU_CMD_SOFT_RESET); ret =3D readl_relaxed_poll_timeout(pfdev->iomem + GPU_INT_RAWSTAT, val, val & GPU_IRQ_RESET_COMPLETED, 10, 10000); @@ -87,12 +85,6 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfde= v) =20 gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_MASK_ALL); =20 - /* Only enable the interrupts we care about */ - gpu_write(pfdev, GPU_INT_MASK, - GPU_IRQ_MASK_ERROR | - GPU_IRQ_PERFCNT_SAMPLE_COMPLETED | - GPU_IRQ_CLEAN_CACHES_COMPLETED); - /* * All in-flight jobs should have released their cycle * counter references upon reset, but let us make sure @@ -504,6 +496,17 @@ void panfrost_gpu_power_off(struct panfrost_device *pf= dev) dev_err(pfdev->base.dev, "l2 power transition timeout"); } =20 +void panfrost_gpu_enable_interrupts(struct panfrost_device *pfdev) +{ + clear_bit(PANFROST_COMP_BIT_GPU, pfdev->is_suspended); + + /* Only enable the interrupts we care about */ + gpu_write(pfdev, GPU_INT_MASK, + GPU_IRQ_MASK_ERROR | + GPU_IRQ_PERFCNT_SAMPLE_COMPLETED | + GPU_IRQ_CLEAN_CACHES_COMPLETED); +} + void panfrost_gpu_suspend_irq(struct panfrost_device *pfdev) { set_bit(PANFROST_COMP_BIT_GPU, pfdev->is_suspended); diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.h b/drivers/gpu/drm/panf= rost/panfrost_gpu.h index b4fef11211d5..743d45b00d9f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.h +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.h @@ -15,6 +15,8 @@ u32 panfrost_gpu_get_latest_flush_id(struct panfrost_devi= ce *pfdev); int panfrost_gpu_soft_reset(struct panfrost_device *pfdev); void panfrost_gpu_power_on(struct panfrost_device *pfdev); void panfrost_gpu_power_off(struct panfrost_device *pfdev); + +void panfrost_gpu_enable_interrupts(struct panfrost_device *pfdev); void panfrost_gpu_suspend_irq(struct panfrost_device *pfdev); =20 void panfrost_cycle_counter_get(struct panfrost_device *pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 630298b7ea8a..a3ff7d644276 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -747,7 +747,7 @@ panfrost_reset(struct panfrost_device *pfdev, panfrost_stop_jobs(pfdev); =20 /* Proceed with reset now. */ - panfrost_device_reset(pfdev, false); + panfrost_device_reset(pfdev); =20 /* GPU has been reset, we can clear the reset pending bit. */ atomic_set(&pfdev->reset.pending, 0); @@ -768,8 +768,8 @@ panfrost_reset(struct panfrost_device *pfdev, for (i =3D 0; i < NUM_JOB_SLOTS; i++) drm_sched_start(&pfdev->js->queue[i].sched, 0); =20 - /* Re-enable job interrupts now that everything has been restarted. */ - panfrost_jm_enable_interrupts(pfdev); + /* Re-enable interrupts now that everything has been restarted. */ + panfrost_device_enable_int(pfdev); =20 dma_fence_end_signalling(cookie); } @@ -923,7 +923,6 @@ int panfrost_jm_init(struct panfrost_device *pfdev) } =20 panfrost_jm_reset_interrupts(pfdev); - panfrost_jm_enable_interrupts(pfdev); =20 return 0; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 5c393ed6e310..7fd89ee4ef9e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -340,7 +340,7 @@ void panfrost_mmu_reset(struct panfrost_device *pfdev) { struct panfrost_mmu *mmu, *mmu_tmp; =20 - clear_bit(PANFROST_COMP_BIT_MMU, pfdev->is_suspended); + mmu_write(pfdev, MMU_INT_MASK, 0); =20 spin_lock(&pfdev->as_lock); =20 @@ -356,7 +356,6 @@ void panfrost_mmu_reset(struct panfrost_device *pfdev) spin_unlock(&pfdev->as_lock); =20 mmu_write(pfdev, MMU_INT_CLEAR, ~0); - mmu_write(pfdev, MMU_INT_MASK, ~0); } =20 static size_t get_pgsize(u64 addr, size_t size, size_t *count) @@ -981,6 +980,12 @@ void panfrost_mmu_fini(struct panfrost_device *pfdev) mmu_write(pfdev, MMU_INT_MASK, 0); } =20 +void panfrost_mmu_enable_interrupts(struct panfrost_device *pfdev) +{ + clear_bit(PANFROST_COMP_BIT_MMU, pfdev->is_suspended); + mmu_write(pfdev, MMU_INT_MASK, ~0); +} + void panfrost_mmu_suspend_irq(struct panfrost_device *pfdev) { set_bit(PANFROST_COMP_BIT_MMU, pfdev->is_suspended); diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.h b/drivers/gpu/drm/panf= rost/panfrost_mmu.h index 27c3c65ed074..689cf95caa21 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.h +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.h @@ -15,6 +15,8 @@ void panfrost_mmu_unmap(struct panfrost_gem_mapping *mapp= ing); int panfrost_mmu_init(struct panfrost_device *pfdev); void panfrost_mmu_fini(struct panfrost_device *pfdev); void panfrost_mmu_reset(struct panfrost_device *pfdev); + +void panfrost_mmu_enable_interrupts(struct panfrost_device *pfdev); void panfrost_mmu_suspend_irq(struct panfrost_device *pfdev); =20 int panfrost_mmu_as_get(struct panfrost_device *pfdev, struct panfrost_mmu= *mmu); --=20 2.55.0 From nobody Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 84D623D9DCD for ; Fri, 28 Aug 2026 20:58:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950732; cv=pass; b=SaP0Uf2HYwGcE+RpEz2ApNjZZ+4u9S/7MgT6tHLCmvzajBsiDLw/+e20OJ6AXRsuhcnXgILDI/FxpkoyAeZeEn6jvXfh5Jjam1MdeY/zUNrUbf+p8KKzuA+tpeYL+WQ+xKJSCIstGYXn2V1BSEOaNzdkjK67BiAIMPkrmtx9a/Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950732; c=relaxed/simple; bh=qAGMipCyNf/cHapTcJ0arjRPOZaFd8pguKbd0yyzcgs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l+PWl0lYK8GH9LG1vpmSaxgCoCuKyonLQYj2LybifTIs0uRw7uE6zlCzp1vVagztvu0zrcvCnZ4Zs3EEZ4v96WRR2gegjQhdbyqa08kTDAOcDtlF7dVFFwycSP15MkjjegINsjuISgCLUGSzBWsJycpi0D+hsHsyh5iSv+IQCKk= 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/SWB4g; arc=pass smtp.client-ip=136.143.188.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/SWB4g" ARC-Seal: i=1; a=rsa-sha256; t=1787950694; cv=none; d=zohomail.com; s=zohoarc; b=eF0Me/nRVkS8ZC5JmfSGZeJw41uOC3RsFKeY7Bmj8L+L90mads01wBFLyKtr6P21AT7C5PnyNE216LyHh3kr2emhQGAwdTqEPYPzedZEy4Sk/Vu2zHhhVT52ML2VJF1XiLpEPtNbVhTogu6x1T1+8tt+/LKcW1ywy7P4En30jXE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950694; 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=zb2+6a9Sn7z271oIKdJKzTUdqNTgeCI/6gpd+hpR7xU=; b=OOk5nFIzu/1aCrkxndoIju5Vjqqsfk62HSUH49dkUDrIZJlc8K7scJUgfCwX+zDW4lpChky5aN+OYfSt6/AlKAY6eT1ObLwksZHe2fFfJE+t9utOoylgHaHotyJClFCHlBRzmvAo4SCTNkUyM642qyKiGjYhCPbSgDEnUBW5z0k= 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=1787950694; 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=zb2+6a9Sn7z271oIKdJKzTUdqNTgeCI/6gpd+hpR7xU=; b=Eb/SWB4gmqiUHJs7m/rE5pdx1SjkF/4cReXbK9/ISNdp+20Rj6KsScANDYdfYZdZ ImPToXWJBY/MOIm07eA45nEFUQyHEEvshGEAEjMuc97SdYfLfgYIVEkyXhQx+3wXlHB LTKTJfPwyoRcWOFr7aU1KMVxuqABo50HIAdqQP6M= Received: by mx.zohomail.com with SMTPS id 1787950693495776.7987431600491; Fri, 28 Aug 2026 13:58:13 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:49 +0100 Subject: [PATCH v7 09/17] 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: <20260828-claude-fixes-v7-9-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=2614; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=qAGMipCyNf/cHapTcJ0arjRPOZaFd8pguKbd0yyzcgs=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtjYWFN7TAchDQfrBmIEiOGoYB0T/TwSt1P 6JxjE9uPIeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PYvoC/0a+npClx19/LVzdodPuqQ4Ju8uzEbIoJ1b2MGSl+9NvPU73V4MerJObaRTSjLz0BIEbHu DQRldAhT5tKpuquPXRYYYSW38KgPs/vxJ7sWiZokQnqMfV5dMFLCwxcMO9Oyg8kBxHGrttIvoGe ninQLlk/HZNLrTvaVr1tu2DAl9bBo8wr8ZiUYMwYe4hGmcyxUVpK8faV55arClpwvRpDV1HlLI6 +bj5AkjY+pdukrA9NU5cc/WGUCiIM0m1OzvIs+szPNcYbYXnrvaJFGqNiYeiXZd1qM1QOQqt9XX AOeEKfqvQXvJpNgCcv+3iIWf88uVC321FUgeqwGMNsbOQ4ssAXwX3POvU8YkKgew8ecSQ2unuKd R0dpOKKCkNOyqsg4PK6ah0yMf6HA/Niu8xkakh0G8+iuwHA7WoM1SPhrQSADkJR2djXjCL27Mp4 1c/hOaaC5I8BXGdhz0iEIgXamQUDclVSEsB+CUtXbSSlfwZCZ+NBYVQzNN4A5x+8XdGGM= 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 combined outcome of both of the above was 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. 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 Signed-off-by: Adri=C3=A1n Larumbe Fixes: 635430797d3f ("drm/panfrost: Rework runtime PM initialization") Fixes: 876b15d2c88d ("drm/panfrost: Fix module unload") --- drivers/gpu/drm/panfrost/panfrost_device.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 99f7da2180f9..70c8109ea698 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -322,6 +322,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 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); @@ -334,9 +335,13 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err < 0) goto out_devreg; =20 + pm_runtime_put_autosuspend(pfdev->base.dev); + return 0; =20 out_devreg: + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); panfrost_device_disable_hw(pfdev); panfrost_gem_fini(pfdev); @@ -363,7 +368,9 @@ int panfrost_device_init(struct panfrost_device *pfdev) 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); =20 panfrost_jm_stop_sched_jobs(pfdev); panfrost_device_disable_hw(pfdev); --=20 2.55.0 From nobody Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 A3BBF3BD63D for ; Fri, 28 Aug 2026 20:58:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950741; cv=pass; b=rYh4j6eL8PlQ8HZCQ/6tLMy9OaCOIztHIcqtZCcDeyyWvUQI32SqtK9UtGu8g9/Ib/j+OWsHkGbXavA+lbksDnVHpMJGXTrQY4MhO3Rc/KU3BAH8moezm651kFvg8Nc1QwT4CvC19eTeAD1afADgqLAOfq7gXAVbFc86GewnFds= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950741; c=relaxed/simple; bh=J9CHCk3QpX+mivXyUDpPJIhyJ9HRDBF/6DqmUTlUvYo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=A/CvdxW4EfnxYM4YG33SBkGO9/T4MFcw3ui3aV7qYbxFIM7mlXv/Q6xC44A84e6bjCOxsKWqweRxmjpO6HujVuWKwEBXbp43otqBwIEWUjeWfx5fkQD5tp4L0xbuDH+Ok67FryGtjwmOVy1TvVeMHAWv6U+7Me5stvuVVYIL/q4= 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=A0ptoL6U; arc=pass smtp.client-ip=136.143.188.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="A0ptoL6U" ARC-Seal: i=1; a=rsa-sha256; t=1787950702; cv=none; d=zohomail.com; s=zohoarc; b=Zes/b+aLXcYvsycA3IP9Sh4QXjkU4t3K5+kMf5l38LzW7NVqlYlX5fU6275DjUkizSvPmvZjZOeOM8F6q+wervM9h+DURQlJ3c9Q2m5wwDK1lx7EwTU8Ch4ew6xexopZ9nz57KVmTCPoMEchTKcHoLQ7RSWTwKXhEhAPNMidqCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950702; 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=3jrlPnBQL8zuTqbDB87H629jdJh7w401wmqKLNZZ1mc=; b=YT4Ec2njXYeVmCI4XkQ6Mkkie4BwESOLH6pN7G9H1apG+tBWI1uemqDjc++QnVgCRHHm0ZrZPy8F4fofCG8kPbFqFkBRb25K0TGFi37IdjigN+zqxL05t4Dsa1O0cQwNnG8Gxlzra6B3ejEwZu1vcdMSgPzd0YHkaBqz8gRDhIs= 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=1787950702; 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=3jrlPnBQL8zuTqbDB87H629jdJh7w401wmqKLNZZ1mc=; b=A0ptoL6UQ0Ae5IkseuwyxhRJc2QUhTK5pyS9OuhJ+gsKWjHwoenGLOaXYxiDtdU7 6ivkdv6oFndC4oMIUg9lkjsxi5932InLRFq2sm0nQcF3yA52Wpkv8arNyEUjfxyMVop sh+TSt8GvVhlTU6T2OMwOUQP4xSAOveluIhy9pDk= Received: by mx.zohomail.com with SMTPS id 178795069985046.25160696824071; Fri, 28 Aug 2026 13:58:19 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:50 +0100 Subject: [PATCH v7 10/17] 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: <20260828-claude-fixes-v7-10-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=1551; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=J9CHCk3QpX+mivXyUDpPJIhyJ9HRDBF/6DqmUTlUvYo=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtKlexg95emX9ufAA1lnNe8x7alxvV94HlC j4ZU8buu82JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PdurDAClIWb0cipnrF1nUZLIjLCrtch2qljRkqPpSfZCutJrPQDIG4CsdWAW1DXRj0S3Yp41yzF 8GNTuiYYFzYSyYoRfpZC4YK23CyTJTphUc+0Lmz6sKHFyq1/Me7QvOycpzAmniM3M8Io/M5zpq6 GmH5GY1ajpV0fiHD3w7QOKteN9HayPFnU24Tkf5XyMBEuD0MEJEF6+tUF/2WU9dlh0o+EGK6edZ LLh/ziMxSNh5hq5CqZDZgNS09XqezF00vsjWbEqYylRgqxGGKyENL+faTkp7rYwLkLMDkA/4+pK jYwxaX4lIeVdZZ0Pu6hMOY9D05w1x0EBauKqGrjKpGaxo8x2kCReqiCXo83GFItBv/3Y3N/nTTZ lQ//rmOz4arDEeU2ivUFjK3SPdPCVn4RcC7mc5jABZczF+1XKIn1rn9MVh9R75AXa6gFB6hvyME +UJH5vYUf7TfNciBJyRfVS6sK47dLdGt5jx/EsNKGx3tmUh8/8q6SM+nDeiCsYAyyF+EA= 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. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- 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 70c8109ea698..d8acae9b8cfa 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" @@ -367,7 +368,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); pm_runtime_dont_use_autosuspend(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); pm_runtime_put_noidle(pfdev->base.dev); @@ -517,7 +518,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_device_disable_hw(pfdev); --=20 2.55.0 From nobody Sat Sep 26 22:55:48 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 41C2D3C76BE for ; Fri, 28 Aug 2026 20:59:02 +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=1787950743; cv=pass; b=pYEIAbatrDjN4Bnp34/leEwnqm9EvGcW6oX35zQXD8e4HH6EQ8Q0XgzEhp0X4x8NNLrfPbzwbyCmBUL7YOqSaDDWvL1sllieHNqP3lKX+JrHMQoxAzghIZNuZlIMFlMsuuDrJRPfejrWQbhcaFpWLpGt1r6AGrNWyraENTL7djQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950743; c=relaxed/simple; bh=H9gEFoBms7/QkuuLE3cPlFUi4zdZO3D3TGDhbhWgY6w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fdKI3W+pA4oBCRYu5VVySazxzv6dB+aE6zGaWnxh//dVBUEeCUMULVmfmW5+FKl05syQL8mTssfDTPaRgwvoYKjvOVJt087T8Ntrsc+kyu5JGPHHghkRDI+oqzNYHzuJmy7oiFz3TCLDgv2XMtj5U8RCO6u3Qnj/TntLG4kft4M= 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=QP+m7eWU; 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="QP+m7eWU" ARC-Seal: i=1; a=rsa-sha256; t=1787950706; cv=none; d=zohomail.com; s=zohoarc; b=GSQGLR5Rik0lxiitkFbk36jsjQP7ASXnyyJSg4Glr7RdkFajYCK04uBSNwdDdwGn6p8/5r86yocyUopaBm5NRqLXzMw6uHuX5R4b7wfb12IqtWfmQBXDvBoYUR1MNqKif81kP5rLLisdKQsuOInhoMNLHlcLQNMJ2+cpcrc7Gzs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950706; 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=me0hJGwfv9K2eIDbXpthci/ifnbqwxMprC0nvdT9/zg=; b=fMm5/2YFiMGg4m00pAOIbKQz13B9Nmg7CkFIlbj00fwgIqVj1fcWYuf+GAJzgz8ux7Ff/EchIAcmFLRC8trtCHKDYs34lmGzzWkfVv5dTQXB7stq1P18zA1Y47mU9rheg16g20g+1/gmMTqiq3RRt/vpQDRxlAxoBMf3vFdjmT8= 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=1787950706; 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=me0hJGwfv9K2eIDbXpthci/ifnbqwxMprC0nvdT9/zg=; b=QP+m7eWUTR4wGjyiKEEQevHKpPSnNOxCSXBkKi0wCywTVPPUW+zq+KJXYupwXFfQ De5ES1VpYuR8Z7WjeG/Ep3a+LUpNHJDKtphhGeaewfkeh8HdG0R/5wmSvxxV+oMC/7T lT2Dc5Fc6WmyO2hohGuFBu/Ac4KEM15wxsiZa8CI= Received: by mx.zohomail.com with SMTPS id 1787950705565590.6697846984891; Fri, 28 Aug 2026 13:58:25 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:51 +0100 Subject: [PATCH v7 11/17] 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: <20260828-claude-fixes-v7-11-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=2007; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=H9gEFoBms7/QkuuLE3cPlFUi4zdZO3D3TGDhbhWgY6w=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtGFvxP/99bwZ0Dl3htwhTQRVRXKgq1x8lh 6eWohnpg7aJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PSGSC/9ncAv9TpB2VM6xku2WT66uWsZRPD6xVzS/ESEr49eK2QcEotAZwh+Igpl7NK6vcaCE0yf cyJz+Ifmz4eCFHy9o1LPB902Yb7QdTL+TczIJ1LNb8UA21o1EOQ6WYQFzxA6i/NpKgpacqk4NKw ITXU3HQ2U+jayWFHYYr2wh6vPLWDj61FzUYyO16b1D2MYuKa8ikc9nTWNkbkR9qPwjPuTevuBKT /sAx1R2gfv0FDFDltuL1nkQ0noWHjihKrPFKgkbl6sg5JN0IikVNr/9qB/OQmxHtyg2HYMK4E72 LtbDF0nvg0ACwsdJdnA2PpRYWL7R1FNyoLFtoTXy3oT7LSWmmDaUdAwGJoYeKAVZV64n8QE63oU wjpG6Dt2STCX0HD56ZtgBlKdUKzPS5dpwss5bM543SGzHPTgHpmbNqT+9tXm6FF2IcPUVDrMxST kcHplpaysjSkUncir1In+3xtK5Ald2lb/F/SeKH7yQ1TqjD2O9vLZXl1LeFI2b61NOUBE= 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. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 35 ++++++++++++++++++++++++++= ++++ 1 file changed, 35 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index d8acae9b8cfa..b6a48ae0d3a6 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 @@ -600,9 +601,43 @@ 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); + + if (pm_runtime_get_if_in_use(pfdev->base.dev)) { + panfrost_device_schedule_reset(pfdev); + flush_work(&pfdev->reset.work); + 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_gems_debugfs_init(minor); panfrost_sched_debugfs_init(minor); + panfrost_reset_debugfs_init(minor); } #endif // CONFIG_DEBUG_FS --=20 2.55.0 From nobody Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 9B1B03CA49C for ; Fri, 28 Aug 2026 20:59:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950750; cv=pass; b=llBdb3edr3ovJKZmgf6HsDvVFug8sMUqi1huJTDtChkID9qgr0YVm44Xljy8uHOhLp+xxrbZyaePMAN4VOC/KE+jaNpuxTWeajjbfxLj5x2Z5vKXSovMDWxEEsJAvGjt68IjWC5XgdonQXaAcRr2tn/m4b3G3j+sq/Bzm7eLG8I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950750; c=relaxed/simple; bh=1NC6JbP9YeSjejJ7XZFftPMwKC3c1jXoMn6zNAHeTm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e+7MBTw/kOhNqH6rKFWzzaMMZbHoF4lVnfp1Zd3FM+T/NzyY9l52UXkolXdK3btmGiCOj1/NS2TNOi1EFWyJfRPkieVGcdBvjJXC3TGmBd9mAtz0BOELH2gd8dzoDutNfNCPgEM8EElp0tpuA4sNKGtWtNnSJ9zOLy7HZTr+jfU= 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=jTDd6GcP; arc=pass smtp.client-ip=136.143.188.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="jTDd6GcP" ARC-Seal: i=1; a=rsa-sha256; t=1787950712; cv=none; d=zohomail.com; s=zohoarc; b=kkkcR0W7AW+zFLk3L40w2uOncO2Wjj96MqiOxL+cPEI7WEKjMXFifffjYVlFAHBze/NF4Iq9ppuJqrGbpD1TLB6aIyFhptlsghM1FmL/gxJ4JFko3bkAbmk9RRyDqCZQw1R6H4XJ7PWZYw4PdiC2RMW6Qx2dIdwjWlJT13RWduc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950712; 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=TbzXl4m4UTlQLz97cRjsapnOYatCJI/okt3dAbD/FjTY3kcFV8B7L6USVUUKCUDAlogVgcZKI834VxMuCPPGe9Rb4pCNsE6wRSDjIHqncPAd9D94x4igq7CSL3nww9g4quWDnbjYNpbJG5ZwyOUl6qwNo7qlmLNEng0gjb3MLd4= 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=1787950712; 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=jTDd6GcP0Y0uwyPHT2YjliUflt3fF7SDqj1iJgXdXCiriQh1EwAsnwTwejQ8el15 ah2pajkOlgmtgCnTT0MaNVHUoruSC9FtwPJmZBynzjrpiJy0/n7oKCTkBH8ehC+tCaj raUVmD50G5mZY7O5MMA6P5zBsk4WnStIYKRqHxdA= Received: by mx.zohomail.com with SMTPS id 1787950711151220.13419455364135; Fri, 28 Aug 2026 13:58:31 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:52 +0100 Subject: [PATCH v7 12/17] 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: <20260828-claude-fixes-v7-12-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtxm3AVPOcXINjegZ/R/mBtqCxiHu992Ikw w67eF3BT8SJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PaHwC/0XlXEuTw57uMTxN6Wyzo/Ux9MjgdXClxwidwRiXEBnXjWUC0D4RcKurESnJTvxynV1UKI K27eIbqH+fzQn7g31kjulstzEFC21PSTup8phhtZ+NrA0UYrNragZnZJq8ccIn0lpb1C6lvEMah Ku7a9ebE94ICj9y8SJ6zX0EqD7AFQzQqVT7vH6PD5gznttsHauQ/U+C/VLj62dtH5pH0I591rg3 ktNIWxr8lyDcCJQEpenr4EKyhC0ns5vq6wRlymQG80kgxeGX+1Kk/o/AgL4+bbTm4ZsvKq3iACC VMtkkq6NSrS6ts0ahWrrYzEqM24hmGI51+y47M1oIQlZ+iXFtCOJ9froH9xJS2/vQRgFxJUiR+r YgPWwRkq9NV651xL5gDQMwxWT73E7Xf7nMzXY/R3XL97Rrpp29YfJkfslvGt2jxrhaKaxRC3cKQ 8kvUZN4BYyrLVos+DZ4CHZL8JMSvFl7JgygiSuhrkgo2pvKBZEmUFnzijENGeTmcmM2y0= 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 Sat Sep 26 22:55:48 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 3BD65383C84 for ; Fri, 28 Aug 2026 20:59:13 +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=1787950754; cv=pass; b=NP9dqHCMf1MVjpaNJLEPfjqwanSnUf/AuCSuXUmljJ299re/1nq4uIrPujIXw0C0qEL6MrgN1ttqLkJoSCcFrzRGonwyoL36nqMOqRJPHGK++oGM7IL5VSGIa7lZXQFYBPxugY9KPu8ErnjzglLI2+V+7uS5hULOC7SLIbTrD4w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950754; c=relaxed/simple; bh=x8OlekE2MZnjNXVk39ugXBQV79er9Wj2YPeLWA8TxG4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fBWFGiSoZGuQ8fO64jJzekSQYPUhzuMRUn0/DU7sur6NKzFWsUFQRpBKAyWjByATjoNlwUFXAwmAS9k+wcDKa0a8Uh1ARtpXea3Ck4b1e19btllVlSOyzK/CsIZ/QC+wEu+EQ2nFdaHIry09JC83kl4Y+J7RjLOfApwSMLzyEdA= 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=b2o9D1tK; 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="b2o9D1tK" ARC-Seal: i=1; a=rsa-sha256; t=1787950718; cv=none; d=zohomail.com; s=zohoarc; b=RDJvtmeNxlKAPFz4rgVImrW1gtZA/lvFrwmR2EtmEhxKXAJj4HnUCses+RHI8hkD+Rk3QKHdn6WLqujpe3i37W8gd4lhToU5Pacljh/9XARPCuMD0c1K0Faj1keKWMQ752AlHaWVOAII9eojQb7FEv+h5Z/0LnL1YNvoHIy5Xks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950718; 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=iTscRufj0y1CuqCTDcg3zlIOONoRR3vZY3r3L1e8kjo=; b=A/EpLmUIq2slPylt6wu9lNNqI3HTUkkptL5oED/D+hvKNUnYDmccOAz6phB3B5xD+NFQPOjVioETdBmR0EpRRL9SVAW9qx7uDUpClmzcdX9i+k4CZOJOMWPLabAfdimhogUMRNp4V2LDqGVGbDLaurtmgbH454GpqphmyDHvtdg= 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=1787950718; 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=iTscRufj0y1CuqCTDcg3zlIOONoRR3vZY3r3L1e8kjo=; b=b2o9D1tKTjsmaGBdkS2YzdZOjVzh8QgnGNgzQRwd9LhTbe+Tu1K4SCVf11W0eNoA i7QyJolz62uutlFJ3Nj/uEqjNSkkEP1p3WdP/ztdXIX4zqpO/tJDwmRqGYgtyUlxOaT 1Z9gA+GnwSs+K++9oRplj38Nu92IXIRpmypaLS1o= Received: by mx.zohomail.com with SMTPS id 1787950717289548.8674924881506; Fri, 28 Aug 2026 13:58:37 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:53 +0100 Subject: [PATCH v7 13/17] 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: <20260828-claude-fixes-v7-13-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=1778; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=x8OlekE2MZnjNXVk39ugXBQV79er9Wj2YPeLWA8TxG4=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYtsFHAf5bx9QnG2RklsUYQV9t1iF439NjgR iw8hZQ1RrOJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LQAKCRAOJn5M7lND PWrKC/9Zp9VOVZFq1/LWg1dP4mW3Mo1dFCu+V6xVBmcuEPZfqlB4QWREn1FCHnUvbaHGZ0sQBuX +Hh96S8vbmHrthSxgAiUHKYfd+qF/6XN2F7h6kTOSpbYkasMeCKxT0dNChhASJlB9rsudPeVM6l VFRaHEisuoyjswfdTXYab3KfEJ2jsg+pJ1Ml+qaj1rJJaOHsc1Gv5byUTtHaUfdRW1BKEMWp1VP pb+kECVvppfDu/cCaj/CdLIoKO5ODK2m4he80Gkxy5pytIHHT0K9MnFetmLgrHtRO8n9ThZpCq+ M9+YSNiXpyzf7WNl1cLkCOJE0y8BNvFT8Kdzw99rgWz5N2iXtC+i2r0HL/UNhTESmfGV/MP7wPd TR6cxbyLzTuGR/8Y/yW6Ex6xK3ld/xCFEwco+hbCcrgvEWf8RZBpVq4B2WdzgEsluvm12mXyMga zSbkfPYpjWVajU4tQzLF7BiwLoi5+K0lj7F/xABGMsoarMnLRg1E3t/qa+QuNVbvUEhkc= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The GPU cache flush/invalidate operation is unnecessary, because at present all counters are always enabled for all sessions, and there are no plans to expand the uAPI so as to let UM select specific counter groups. If the above was ever implemented, then different counter groups being selected between sessions might leave stale data in the GPU caches, so the flush/invalidate would have to be reintroduced. 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 Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 CD39D3E1694 for ; Fri, 28 Aug 2026 20:59:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950763; cv=pass; b=k7GZ6DmoxPLTMI8i+BhPcg23B1zefs5+zSfB4WekpGYhDM+S+sKGcFDKozGdmgldDlYos40nGi8C2W8/2SMXSbms1iu8uBaWEP7zVbktpBjrJNoukYfph+HVMK6UTRKwTiwMjoo+YYexf6sXhBzq662gf+eYQRTzxt+KY/Dy1Ys= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950763; c=relaxed/simple; bh=1ViKXn5Z9t7QEwpx1D0niBppUD0kk1O7SjFsLfT8ejE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hoS5R+i9n/oz9wsrRmboDD4MYx0lwqEmgloVVt1Jfl007DtP+UR2/Wfxvi2TnYIf08YC+5+bS/ct+mLt+QPSw7CfXvbjpYxb3L0BcViZy3p5ZpXS0eiNeYaMpKOdSOzqieqzbCbM8sBMQmConeqLh4OEd/znF07tT2A4MQk4alw= 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=Ssh5MOxF; arc=pass smtp.client-ip=136.143.188.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="Ssh5MOxF" ARC-Seal: i=1; a=rsa-sha256; t=1787950724; cv=none; d=zohomail.com; s=zohoarc; b=ihWMJdXHXG1y75aUd8QUpEOL6mlP7AzM8OV29vVS+wV0gnkkwDP3lT5IZH74LIUe5XYmTld/Mcw3CY+YNgvddx967nhQ4gtZycvSn9Tflnvh205yF27yf74cp7cXPZaPb4iIu+VIhWDLUv6cNGeHPB9n9ktDBsnZeJnZGj0Uv9I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950724; 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=g1FXZ9snXF2f2DkW+ebuDO+prz5XwthtDAwYa3OAmL8=; b=U0lteSYaY/aN0YXmkG6o+uDUFYmiGFmzagjyEd9ILidHZbzBJZXNH4byeBP868Ahg/Xb027hZv39C5mCRWVbgc/EUgEaagsIXmJs8ALikjGkfiUSw4QgqHaGVowaASzemfn/h+GrOfEo7uxKtzm3h3uY8yJRyO3p39/k3nQiFbc= 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=1787950724; 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=g1FXZ9snXF2f2DkW+ebuDO+prz5XwthtDAwYa3OAmL8=; b=Ssh5MOxFY39U0wYs8YJLyuznYX7UXIg8jcJoC8UcN0vV1QMyWkzqzsOekX/BRk25 KRRkQaAdC/tehX/hK/FdNLiT8pXIZYHbNJmlIpWkclpWI1ASLDmfkaZafnE1j7lUAWS fRrU6G9CSlmWhQnLpYg3NJwjjNtJ7l14MV5Gi9fw= Received: by mx.zohomail.com with SMTPS id 1787950723708801.2739264428101; Fri, 28 Aug 2026 13:58:43 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:54 +0100 Subject: [PATCH v7 14/17] 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: <20260828-claude-fixes-v7-14-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=1026; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=1ViKXn5Z9t7QEwpx1D0niBppUD0kk1O7SjFsLfT8ejE=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYujL4JCDuAH0q8gGixNY3cI/Ii54ss93wh/ h5FFE+2UI+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LgAKCRAOJn5M7lND PYLNC/9ofecQOnZNGqSmVHcCSsOsyfB53a8QTHUQZJYMd+T/GTCtIDMQW5Cj4F47gMP0w1a4Xoa eihbfAVFCWTWR3s8moF+qWri4fsRf8O0+EwBNANvPwP7A0e7V7y8WIwvGCvlBkOt9jhA5FrW/CC TtffPgxF8CS/4QVfN8FKhotOGNRAm9dJr5+jlEf/JYNJ01D7+MVKy8A7ZCNIDRXlWaXvW9rfWD2 hg1Nv/X592hUZ6CS2Q86em9vWxCuuUrdRSzM/uftOpUEYe6fT+MoIKTkbl/aOMlQj8fkzKu2zOu oqfIL43+JB30aLtRMTudNm9RWuQUq9bW93GvHZKHF8kYT5Yf9OqBUbk2rGz/AN375K0PHxH08Sn EpPsCZtl4d3uHb7m4W6IabzZ379plGqHQBP9Q6WuT6gKLuQUJEpZEEnhfJ0QVbVWoQGjixhU9yt k8WbgQasvZzljMfzhIYsldJI8zVVEJKdY7XgDV0OmLlCaW+XHKcN7bPLRrBe6gc2pcdDs= 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. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- 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 Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 0C7723D1CAD for ; Fri, 28 Aug 2026 20:59:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950768; cv=pass; b=DO8V/+rN8NhQQml9uWeofEEVad+lzq+rrrkyOBya/vtghilKFThr3cblfjsPJkh4jAVF0lR3OnCzjVM8sL77+NJttR0mPts/yM80r/Gm/6SQjQsJ5kYRX7xnnF95q8jLAUh07L4Kg91j6p1RA7Tj99wMwwdTwSqHgw3UzrvnNf8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950768; c=relaxed/simple; bh=XxHvCH+XB23J2OhWjCliQe9NFjVTXQVbGLu8ijbSohE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JwWW9f/S8meZsSK32TEMvio33judQKrtzrAjuA3aIQQsencGrxkpV1HIJPE/ktWB2MYagDDGOJtoRclYto6ds3J8Ldzs2+qLpt2eu4HaW8I2n/C0J0nTZaXElVawEbgl3tyoHXoJxBSU3LthoNWnYbGnw3hzMRkOh7DuVyDQUiM= 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=HQL1EMAo; arc=pass smtp.client-ip=136.143.188.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="HQL1EMAo" ARC-Seal: i=1; a=rsa-sha256; t=1787950732; cv=none; d=zohomail.com; s=zohoarc; b=dlC18NI1jRr66QgQvYnCsFR5K2mrWg6FS5kXxYJ0BV2HvAU2YrG40Tzct02BxifyUccAt8uGrXQami63a6fYVwkjUtHyPfaANujRqdAnZ+72nkhTnA7NhIRc2t+ue+L7TmLhkv2BpP9fqrWTOz9Y+bJ8HC/EkJ8r7mdUU2/Wm4A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950732; 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=VD2fes/fOh0H9HYorZiXx5jDAFaLYGFTnncVl2ZZDKE=; b=QYrpmwVvl36HKXNFYpuTeGttDnw9ICwjdKMMk5d6bA0j61iQ2acwrUK2R3+qkzsNhYzWqO5v3bc/h+IJP8ya1huu55qveUKA7hs45msEw2BcG1jpEhTuH4W++5wsgQMRCqLXql84Ci3v2WkmWbbs43tFnN0zMrLQVmYbj6AGWbQ= 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=1787950732; 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=VD2fes/fOh0H9HYorZiXx5jDAFaLYGFTnncVl2ZZDKE=; b=HQL1EMAoxmjN+lFRD2r0Cjy//vgPtTsLixqeucTlr/win4cA7R6oeFm4nej7QS4S q1T/96UwmCL+rlKFPqdLmNyl/gbZVT5CMUh+LHF4DRNIGvR6tVk6lNj8knjCISLjZ6t v8LkBYU2MtG2GHETHcy9l0+moTbBP7Wc8rCF3LnE= Received: by mx.zohomail.com with SMTPS id 178795072999763.48774119038751; Fri, 28 Aug 2026 13:58:49 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:55 +0100 Subject: [PATCH v7 15/17] 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: <20260828-claude-fixes-v7-15-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=3007; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=XxHvCH+XB23J2OhWjCliQe9NFjVTXQVbGLu8ijbSohE=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYuOscds0sSOAudIIy2cDZN3wx1wnWupBaK5 nsUMPYZ++OJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LgAKCRAOJn5M7lND Pf7DDACkJ8vR8sD90OwnNBH4PCVoVjoPbxDKJlcbj/EEJ/3ZuTQVNez4WolafvBCxEL34+kahQ5 8gbWqU2ErIFGlglFmY7n1c9NXJ48Ia6CXqYZE7+gkytt/3CiQVP1zBdtju5DSCwhnT4ak8aVNHu sdc7O2F+E2tdjhVY0DhQOes91ZNlt5D6J+B4/vQ8Rociya0/3LzrKRg72xSYemcguCBN8pz0ybN GlaiV7oJrzPWssCRYHnu1ynLuLHN2GLkn7A78HQzUlvQYxdCvQbQS9UJmndr+S77LASHWzQZUg7 p96aFKJyLJsru8xOt4CAJN3wPxG3Jalu1KVMCq8FSRTsXO9GG6IOLMp9V3H4EMV5yOcnBj3X0E5 v7vUqypHQTccpPe77DKjlnEk060AbnSPKes7M1zmWoudzkkFRCZfZUPnEsyCFr+Jic117eMw/cx WZ7f0SVox4cdXYXbxoWVCaW6YPii0iZ5cLfib3A+xkQZjZdoE50JOl8CtBZ2YAvRyYluc= 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 b6a48ae0d3a6..c8c5dc26b03d 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -492,6 +492,8 @@ bool panfrost_exception_needs_reset(const struct panfro= st_device *pfdev, =20 void panfrost_device_reset(struct panfrost_device *pfdev) { + guard(rwsem_write)(&pfdev->reset.lock); + panfrost_gpu_soft_reset(pfdev); panfrost_gpu_power_on(pfdev); panfrost_mmu_reset(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index c94546b49662..0570cb1d650d 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 a3ff7d644276..e7ffbba58cf9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -891,6 +891,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 Sat Sep 26 22:55:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.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 2CB0C383C84 for ; Fri, 28 Aug 2026 20:59:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950778; cv=pass; b=PGuMB9W7EaQ38hJKbA4gMHqjpELMP0j1hcOejk+I2u+MEgA/9sD73QKzdhFk8Q3joIZYBo8ubDAJdNjsPYk4pOBRoliM/N4Ox+7rTC+LRLg3d/hSy0WDiWiYVy36tXV4cpY11WLJQgBgpP4QBhNm8QW5FGhD7dOt5kiojrks0GY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950778; c=relaxed/simple; bh=RMq/Pg4qpjXkL7BkHA29/oskcfgm3D0lSXfB4M4bDsQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AQsLMTx5+4H3pSW6cfWaWRsvzB3US4AMQNFNwdqxCB8lsg+ZLT8CBaSgdVOR4uTdhpGUqnMPIrQYzqgWbl/3EFuEMiwhdjj2PcPgE8w9rpNmMNHkP82o5K9DZkWHqNJjSHZUaD40M7QtFQYFmYQ5gZENytKRpbqMMzhzmoPOWQk= 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=SSdd/lFR; arc=pass smtp.client-ip=136.143.188.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="SSdd/lFR" ARC-Seal: i=1; a=rsa-sha256; t=1787950738; cv=none; d=zohomail.com; s=zohoarc; b=khDh1CZMRgYvsjPBghGQ3CM3g4ByHikKRUnT1HUPlHb5U+TcWdAlXH12SfadzjlQdI+LLja+2Z6v0Ym72T4cY1WMS1gKyKT5FCBpCQYuFS/xS66JJrbJn2vZuHKavGcFFC+cf3kOQVvSQrqy3ymJC6TAls9j7Bt5XotFgT1p8AM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950738; 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=C0089doqZECmAmPICp60ZaprNH+w8kGxAX8UP8ImsrA=; b=YjEleLd1WmqSoPzJ+gPxB0i5EfEWvqLcHFX/t0LSioPIfRnX/3PYz+0bzcNpGxWZpXuZa9VaFNNXct5Nu80jgE34beGHPaWN0mOiTLUl+r/zQgJYPE3L58InTVLPBw0AUhMjAu6g7JBLxZQkgR1qDKR8GUd0iWkI8sMRtVR+hMA= 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=1787950738; 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=C0089doqZECmAmPICp60ZaprNH+w8kGxAX8UP8ImsrA=; b=SSdd/lFR71BsT4nGrPtmZt8KtYUafH48IRGS2YBqKl7zLTGP52yMcy5FwMRz0aab qzXZ1eV4e2eQrvcVwbPIXUAnmZiyf+mdNs1jzUoSDajOy3sYEQoXTV8hIVXTKMOK5mr 5wVcgr10KrXN1X0luUWaP5QPdP2y6MYJUvvbDLpo= Received: by mx.zohomail.com with SMTPS id 1787950736656418.75058282883856; Fri, 28 Aug 2026 13:58:56 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:56 +0100 Subject: [PATCH v7 16/17] 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: <20260828-claude-fixes-v7-16-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=11853; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=RMq/Pg4qpjXkL7BkHA29/oskcfgm3D0lSXfB4M4bDsQ=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYuSvFu/0talBl30O7I2xDumk1i8qS8RxzfJ 01KpI565feJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LgAKCRAOJn5M7lND PZ+RDACQEB2bT1uivFf+pZlps4KZA1lGlLQ0u4bYHtlk4xhmVD1jcD3io3tUr1pQwyDLp3TV+Hz isjS+otg0pNM1QSOk1Nn3S1zYr1C9eVt0je3hF2742s7dwoZl8HVug8SGpKvAgVcNRKQ/AljZw3 kEZfHBIXlTLNR0mJmZgTf3FM53mXS6eD557zMjfcRKdRtuC6oIzgpgQBRuS9KL63aOr2OaoUd4q JfPnClwAGLyIwZ0dewGTa/lKAagFgOjPhwASQiOMb4lJ7MD7e0Ark2t10WYZOhjgflFcl2yjrpU 6eMKDi+txGkePmoqwEKUSLRnjjMFIH2GmjEnnpsZQIq436oJrCf29ZhLLBdKXz+W4Mh+mbi39Ht 2Kh4BCJRN65eU3hiAKF4/tRX8U5HOhhyfgqupUAZ9jcsH29e4yQfozCM6jflIVI/SQe8tUH9vIA YDHgkpRrmheqL4Wpwq1pVfxYD+bC8xzB3xsUyizl1rG5vNo4CKiF4qq3t9R4GneBsIZ0o= 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, because that means counters will go back to 0 and can no longer be accumulated to values previously kept in user space. The new perfcnt-aware reset sequence also takes care to reestablish perfcnt to its original configuration if there was an enabled session. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 1 + drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 189 ++++++++++++++++++++----= ---- drivers/gpu/drm/panfrost/panfrost_perfcnt.h | 1 + include/uapi/drm/panfrost_drm.h | 3 +- 4 files changed, 140 insertions(+), 54 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index c8c5dc26b03d..471bd4b037e6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -498,6 +498,7 @@ void panfrost_device_reset(struct panfrost_device *pfde= v) panfrost_gpu_power_on(pfdev); panfrost_mmu_reset(pfdev); panfrost_jm_reset_interrupts(pfdev); + panfrost_perfcnt_reset(pfdev); } =20 static int panfrost_device_runtime_resume(struct device *dev) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index b3f71d7fd82a..0564aa2753f9 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" @@ -25,14 +26,18 @@ #define BYTES_PER_COUNTER 4 #define BLOCKS_PER_COREGROUP 8 #define V4_SHADERS_PER_COREGROUP 4 +#define PERFCNT_DUMP_MAX_RETRIES 5 =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; + bool reset_happened; + bool reset_failed; }; =20 static void panfrost_perfcnt_hw_disable(struct panfrost_device *pfdev) @@ -58,25 +63,107 @@ 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); + ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); + if (ret < 0) + return ret; + + 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, + u64 *reset_happened) +{ + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + u64 gpuva =3D perfcnt->mapping->mmnode.start << PAGE_SHIFT; + s64 retries =3D PERFCNT_DUMP_MAX_RETRIES; + bool retry; + int ret; + +dump_retry: + retry =3D false; + scoped_guard(rwsem_read, &pfdev->reset.lock) { + *reset_happened =3D perfcnt->reset_happened; + perfcnt->reset_happened =3D false; + if (perfcnt->reset_failed) { + ret =3D panfrost_perfcnt_hw_enable(pfdev); + if (ret) + return ret; + perfcnt->reset_failed =3D false; + } + + 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. The downside is in the gap between the completion is fl= agged + * by the GPU IRQ handler and the sempahore taken once again, yet another= reset + * could happen, which would lead to a valid sample being discarded. This= is + * a solution of compromise between ensuring synchronisation with the res= et + * sequence and letting it happen as quickly as possible for jobs to be r= erun. + */ + ret =3D wait_for_completion_interruptible_timeout(&pfdev->perfcnt->dump_c= omp, msecs_to_jiffies(1000)); - if (!ret) - ret =3D -ETIMEDOUT; - else if (ret > 0) - ret =3D 0; + + scoped_guard(rwsem_read, &pfdev->reset.lock) { + if (ret > 0) { + if (perfcnt->reset_happened) { + if (--retries >=3D 0) + retry =3D true; + else + ret =3D -EBUSY; + } else { + ret =3D 0; + } + } else if (!ret) { + ret =3D -ETIMEDOUT; + } + } + + if (retry) + goto dump_retry; =20 return ret; } @@ -87,9 +174,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,7 +208,9 @@ static int panfrost_perfcnt_enable_locked(struct panfro= st_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 @@ -132,44 +220,19 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); =20 - 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); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + ret =3D panfrost_perfcnt_hw_enable(pfdev); + if (ret) + goto err_vunmap; =20 - /* - * 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); + perfcnt->reset_happened =3D false; + perfcnt->reset_failed =3D false; + 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 +258,16 @@ 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); + if (!perfcnt->reset_failed) + panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); + 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); @@ -255,7 +321,7 @@ int panfrost_ioctl_perfcnt_dump(struct drm_device *dev,= void *data, goto out; } =20 - ret =3D panfrost_perfcnt_dump_locked(pfdev); + ret =3D panfrost_perfcnt_dump_locked(pfdev, &req->hw_reset); if (ret) goto out; =20 @@ -338,3 +404,20 @@ 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; + + perfcnt->reset_failed =3D !!panfrost_perfcnt_hw_enable(pfdev); + perfcnt->reset_happened =3D true; + 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..3bbf9220103d 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) @@ -272,6 +272,7 @@ struct drm_panfrost_perfcnt_enable { =20 struct drm_panfrost_perfcnt_dump { __u64 buf_ptr; + __u64 hw_reset; }; =20 /* madvise provides a way to tell the kernel in case a buffers contents --=20 2.55.0 From nobody Sat Sep 26 22:55:48 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 6825C3DDDB1 for ; Fri, 28 Aug 2026 20:59:39 +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=1787950780; cv=pass; b=qTJGkeKNiBWml9f+aeWxRp1V26N9oOEDUxi7J+vb3221o5ZA2i3DIFkKDMFFDm7XK1IE0G3YC7u7gO2RgFO/kjRCCH6PYAcx0ZlB5oAF7ELSMk3U2kMu75SaiZ+pOyJpSjtOE6F/B+GXUtSTeeT3ukx+iaOIb+wE5lv8Se4/1b4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787950780; c=relaxed/simple; bh=AypLoSBm1KPHQD9f+Zcdy3AMlNPgjcCvidkbs8KFBCQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f9X0vv8cbqgasjCqnHsKcmpe8n8Ne8UokAez1uw5YypE4B0cZ9KMKL9BNW+3JwhcJUvEvicOiYQSLS8QDLjvLKgrpLodKkuWtZqHR4aP+Z4hgmAlfBF7X3nh1C/VIotuY8TUtSttudo+nAqyY4mrC2heJorVu/CbVNw3xdNGNYs= 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=W7yu8tNZ; 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="W7yu8tNZ" ARC-Seal: i=1; a=rsa-sha256; t=1787950744; cv=none; d=zohomail.com; s=zohoarc; b=X9spkr2Ocmtom2DanSSZZhGGQjGWSDPy3nB/g2/k4C7W7XlaZ+19pW6KPIoR+5f99E5ipYdtj4Y283m5Ua6Chs528MNQYQ/jpwNPRMDE5vHZSFWDdeP2h8fVeyl0Nv/Dx0L5xtZrxQ705ZovA7tmY02REF+jak+RUmCV3NmTQeg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787950744; 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=1Tq6zEmNykIv8XKjKfzLV2GzV9wqZVjqsPfLMZwAlS4=; b=VwYFYMjFpc2Y3CYjsVM2laGi2VELJEwfOhNJ1VM1/EHvT8WMrIk7BHtThu9WSCECaI4UP/ynWoi8ZvuyfjJPKVVQT/FmjCGBTU+7EVVH7u8UMQ5Y2gQkmFuXRiBAlrNzDLgLxvmvTOgbPc3b038TArjEcYT/p7DKgsguyJsY1jU= 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=1787950744; 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=1Tq6zEmNykIv8XKjKfzLV2GzV9wqZVjqsPfLMZwAlS4=; b=W7yu8tNZ0+Eoj+gfHAaJ1RQoXCQZjzIX5HYt1NMdUVFtaOgjHHwWKYcO8SqBQFZp G/zCf7IDJG+/kz7M+UxAvrjgKHSZzAETmpd2tuy1eoZmk9E+mSj31HBsoJPZWmW6J5D vLzWT5wvfvMYLCKNxkcjafzaHNjvme0qVRpnectE= Received: by mx.zohomail.com with SMTPS id 1787950742651206.60696803607289; Fri, 28 Aug 2026 13:59:02 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 28 Aug 2026 21:56:57 +0100 Subject: [PATCH v7 17/17] drm/panfrost: Bump driver minor to reflect new DUMP IOCTL req field 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: <20260828-claude-fixes-v7-17-72a13b2c125d@collabora.com> References: <20260828-claude-fixes-v7-0-72a13b2c125d@collabora.com> In-Reply-To: <20260828-claude-fixes-v7-0-72a13b2c125d@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=1178; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=AypLoSBm1KPHQD9f+Zcdy3AMlNPgjcCvidkbs8KFBCQ=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqkfYu/gflAZtsy7HEi7wI9v6QOZYtEPO7MtvfZ VutA2fFM4GJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCapH2LgAKCRAOJn5M7lND PRZqDACHXdBfI5pKk0hnkDTJK2w+CfC7JD7ODcaPuxHFr7RMLyIR/z77PoTQvQ7vpeBzAVKPJYM w2wY/CKutk+juwjKzqqX6Tn+XMSdlGqecwMJdpJ3KBSMR2HT37ylgofDc5uLXugvFrxLqhq/KOc qqKPU5++Hflg+VIqtZ0IfKMWAXpNSXXeI2rPz6HnPrug17Iqe+iAV8JzXWHUqVQ89w5MUOZG7gi WHcdR+go5+rCJ3paUX03Ky+Ov6Nsc0SA81si9+B4LlrydLjT9yB2fKBe9xCui9qrsU/JRbVIhFt Bw/EHUG7OSVUXi2WMHW2BR9ljHgWQfElgDh3Hip90m2vBm9iU9/gbS8eA6yy7PNkrcbhyRmeloQ wDgKJubu0R7Z/ioURNG8ALASJY28SZFCkVxBBF7GFXCHfllfu4Qqk73TTthgFcTegWXhCQTNYx8 IQ1K+3bEvJMrUCJXlCtEADx00dxnG3PQHzNH9IRz4iGjyvOl495Rej3H0Mg5vcvw2ngMw= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Expose expanded PERFCNT_DUMP IOCTL interface to user mode. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_drv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 571a26b84126..7869a0cfc4c3 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 hw_reset 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, --=20 2.55.0