From nobody Mon Sep 28 04:08:49 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 25D59394793 for ; Wed, 26 Aug 2026 21:19:01 +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=1787779143; cv=pass; b=ebWriuVwD9UUWJvsDUKJZUWLqUEn86SU/uZ+qAhUjWqcK4ZFDqf1q92EAEjsR4oEcY6vH+QKQHJWMaZPzQOOuZ5jEmEEccBV+a7wjhIkDr8K4rg8dh3ZMevU9ge2ZsDKQ0TmmamrgPTeIN7GXI7ceWq8lj2dnaZd30KqjjqlOgs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779143; c=relaxed/simple; bh=6xeWEUHEJGkLLAje31aRC5tjM099PLVWz/R1vWcPi3w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kQbJuRO16/gAmCKwiCAHdo9EY3DAHU0tp2Md9QxbcbiS815M73eRQJ0r3/d/Q/PE0Kbbe7IkrWLVE8Nohd2UfbQW7JurFtA2/xOgueJO/x3Gy/kQuTabQm3StJl1XdWwO0UdFlVFFPhB/PA7MgychN1zHm7ck9wiAWVpwqWJVvk= 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=eQjlBwn5; 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="eQjlBwn5" ARC-Seal: i=1; a=rsa-sha256; t=1787779098; cv=none; d=zohomail.com; s=zohoarc; b=lnKxKlJtOxBM/jnXtJBAYTdxAx+fc9k+i18myUZl7DhvMWkzQzHsAxoysaCJPcztFk6WYto/LOUKgI7pxmI08iAOj4Z3j8mMhluNtitsnVZ2mcx7JtMqhlaE+A59UG+1+fMNNaLEMW2ZCMdUgh7t0vicw7qe/9UAwQOZ/mVG8pE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779098; 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=e6BmrNaLp6iyx+f4d5IAHxlxF8DdCOTpANEudU2tcaJFe0nrb870MUFV2WdlZr9tgnl4pG0v9/I1gcbCkpYkz9bBZENXgemUSsRX5WJh2WQspG2w7372rGrBauSqmaShzt9ur10clk5m0pcR+Dvla8SOSG9XDknm6CG0mIhWVNQ= 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=1787779098; 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=eQjlBwn5+WJu8cN+kgn98IxdGHBzLQNCAMfwL1PWHA8VnKpyqDn3sPvMn9BpOfn7 zdj+PEITYtMsTu9bC0cO5Lmf3SzXzU3WVXxPcIlh7a7oA0j8e9TtkOm6iVa+XmBVeNx Ny3CmbuL27Qh2IB1QWV3+tAX4JWsSUkxfDQ9JUGU= Received: by mx.zohomail.com with SMTPS id 1787779096717822.7841527825088; Wed, 26 Aug 2026 14:18:16 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:03 +0100 Subject: [PATCH v6 01/16] 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: <20260826-claude-fixes-v6-1-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLSWQY6YsfLnP2bE2sGt0HdeH3j4JE9EPBh TGq1yn7nFWJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND PYdyDACa9kNdEX/OPoNjc+n1Z7RkpgwBpD/59Vb5vp9jOgQ3FjZ/I4iid6drU4Qqpnh+Ml6AvcH 65adq1IzfUTLEMuwDrxogE4fs46GUYYH8JzkMqlTL+fDGhoLI6xqKP4nUH2a+48zKZuKzg4DrjE SNvyAkGZ/yKuE4p4xxkd60hZsiHbn0ANHvDp3JGesZnNBSg5HqJR08w7RnTq2Q6YNLhsbV0KM8F m2i1W2QxPCW8HJqIaA5fnhYCIrxLc/jiQEFLDdFHAU5y5ctLxoSC/iTM0oqTdvxdzLq6qtBUvOq Hqy51XNS8NCH/Ja39k58J0pLRspuspuMONJwqojGJdBDbbEi5fE7ad1LLqSa0DS+XAoZVC3UZ9L zZwhRWoAsQwmFXsjwc8d4Yxh+ZmROJBhlIMscvDaJdOPUSGRdIyeqKNQwjqKFnwIr4r0tVBnxXC 5/5l2JKz87H4F23TknA5l5ZwPXw81bx/DDJ+kIijcB9cBN9FNba7TiXO4rXGrQywDUI8c= 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 Mon Sep 28 04:08:49 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BF13361963 for ; Wed, 26 Aug 2026 21:19:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779144; cv=pass; b=Hpb92eWPHlGXD4zWUFe/ErnYbFvs/HwV4dnAfQ/iAX4HeOHhQvvnEjJKMungpqqffumuVxVwSSNOwuM5xdG17PbJNZmo5ZmDqWPoQgO5LWntmLL0JO53Qg/Lxnyru4oJ0f3Xa2tj4kS9J5DbFm6BGn4+KmTZmCAtIj9WhNhrb18= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779144; c=relaxed/simple; bh=+7lLC3RASscJtzYIoHPamAqwjiOy0dTWtgEK2tQLZCc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ATO6uZAfSy4Ui5DU2/xcx6SBcoF3vo381ZU74e7clk98fvx1Zd2QZI27wS4pSOIpRbhtnTmIYd5/n9ICsG5PIxobJcLSqI5oLetn9UxONN6Wa9hpt7FnZprL8pjF1HtlR8F4Z1oNThQ9ptZOyJLGIqzDlHJPbEgfRY5OIkQBEDY= 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=lIz+CAfZ; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="lIz+CAfZ" ARC-Seal: i=1; a=rsa-sha256; t=1787779104; cv=none; d=zohomail.com; s=zohoarc; b=CdB28Mk/vunbih+z3b6/QxjB1zjtv3r9RyY6cQ/4XQpzNd+5nLv9GdVIj2x+Os0ltlnNhGBAkiv0591PyabSMPbbQ3ff8EBZjaLiFG5wmk/m1wZiTHQQp4PXEAlNv1SQtcpyqbNyMagXMw06Z3YBwulhuGCOmIyXQQnsOq9KjIs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779104; 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=ZudoOIJJQpvSLY8/lwY0iBAHKLoRY8ZL8Yz004TSq/imuauBwPdj5h26dwsvjcN3ZHTKjbMsRRQfg8WPfjIQye52I/POQOg7MMwlqInZ4qeOuPnUEBN9cqX61qij1S6Zg8zLFQzCsI90MmKxYSNqMmLKmJTB1xe0h3qBYXbdvGg= 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=1787779104; 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=lIz+CAfZxH8xyXbwhxgOfjT7oPR/CM5Ak7a5MlRn0k/iPVEpBf1vR+/PHg1ya5kG GfNrphv6mlKd5/4UheL1n+6WdEUEyiihdz5Y9reBU1CuNFHJIFE09794hpH2QzCcKrn DOsuixE7MKpPXYsH/VoquH7TYLd/IzpWAJ9kmH2Y= Received: by mx.zohomail.com with SMTPS id 1787779102829956.5009696482655; Wed, 26 Aug 2026 14:18:22 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:04 +0100 Subject: [PATCH v6 02/16] 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: <20260826-claude-fixes-v6-2-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLdvrLyXJhJ4BggXx8G1014OtUEDJyP1fvc 0u5W7ppf+OJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND PX/uDAC2pR06/NS3OJm4JXFbzaIBLfxTsO0pc84GJNbkzh+3JPCeN5XnpfCSfqPWsAGYmEzVAsI NKvY5C/L1jSL/dTSwtHo5nLfH04RMw4O+Sxsooj3S8sU15qX23UFedXB4bggfKPM+O0XT9FKvOa Tz8ZTUR0WUh6d09Mcc7SEO++PVt8KGaxoPBz5T9/USUg721VWES3q86XYHeIWusS2uE8DmqF9t0 6CoEv/tDNJmXobmsrCtHyvdzhm8qZ+LlpoUrU38HOE48BhXCu8thpnstob4ux+ALQQDm7zuXmPi j+QLav2X7fox9QEFn5khFDxz8qSa2Zr+D0cI1GaisgdHuHPzvPlCIWI1/3+eX+9Ki6ek+83mxGX LJBXZh7lVNx2G0zr3mQ9dp6BDZRhTeLChjvYSeajfFGR+TxqvraE5txvZrpvWu6OcmDMNPqURSu bac/i4X5J5OiY5Qcj/GCzaXF2dzD2/mfLZahVJdvk28jJNTB2n40RuF0JecF4rj560kgg= 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 Mon Sep 28 04:08:49 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 777E548989F for ; Wed, 26 Aug 2026 21:19:07 +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=1787779149; cv=pass; b=pj1uFYlZ4cOH1mrZ6DwOZacSEfmNaUOdfoEEimdaRpXzVanNtBCPNMp4ElzZt4iO50uRYGKV2zFpncGWX5p/0LduTnfS6E4SgwGmDYssJ7Do9ZRDnMGza9B9LfoumuL8GP8R1+jpDMfpjS+IysL0ol6I3+h39rCkWO3bR0NuR1o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779149; c=relaxed/simple; bh=sD53kiakATC+UcUaCaf7NbRw9ob5hiejFyKuZ4y1uXI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DVA4aITi/mTtkqriRP5G7aODtpN5PHYswz3SGGe6PzyShM+bWgAoGqOroNot/l0SEr2xW2KmCdtbIo2M+VRUVWITfgj3ZGGPSBSAY8rZBo80e1ckkSLaJmVp7SeJc9XuBSSv/WQTXcsbG8xBSvSDogGSyUzohOULnZ5o9L7r8+s= 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=Wooz17zI; 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="Wooz17zI" ARC-Seal: i=1; a=rsa-sha256; t=1787779110; cv=none; d=zohomail.com; s=zohoarc; b=ILAlweHvd2JGgfwb8xwd1SqMC2lUvNlubLLL47WJ4uz0tExkbtLNBRPu/6jY67tAd7p6mekgnl2baGZXiWNQiunx1Z+APkzvx7wjp2x3foXBIAs5FQsmX3TiUfFFOOgEmvwvCUFN27eCwHvVjNtCQ9plO4FSUTdIwgFDudt94F0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779110; 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=iGbf3dHDPAt2xLcQEYLGgmCsv9EuEEG3ibBnyvJ2LZfEt4JtqAhb47I31SeDwl62R14rdgmTwFPX6Zdj6fJ4HTKHqv85ps4h3MhxPf8DznmUg9tM2ItkCT9darliNV5aRvMXZYmdkv5q+6zu/qN2LOJeOVT64uXws//2Lrs1/AY= 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=1787779110; 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=Wooz17zIaBJDu6XAQOZYfE4HdcFRaqQrFWn8XZS1SDXxLLLdkuLcgC/OuCW9o3n8 dUNqRIjtkAms+oTF6q1o2j+sXgMcWodSmzUWXSIzNZ9YRjaBW4NYooNF0WXOBhT0EmA bylUKceH4XIAVmxc1DKGQwG+yHG2tS6yuu57L0PQ= Received: by mx.zohomail.com with SMTPS id 1787779109030691.2423862351918; Wed, 26 Aug 2026 14:18:29 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:05 +0100 Subject: [PATCH v6 03/16] 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: <20260826-claude-fixes-v6-3-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLFDx/x9FUHJMD+S5WREyBw2/tbl5PQrCy9 ESTRSb98JqJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND PQwaC/4vr4FwYLxDCr/o1dFIt8ZD9sRwMOZiz3WNAcgrnWBzGLk686LeybovBegSvjcTnh4neFf 7053S/92y0oGYOQk9XaqBBKsDEzzE1yEKmnBkx68BwXMtRXTvDOr7Pv89WZH0HyZs41m24QPmht r33zmlx+ItBFsQHQ9WvUGU5zukJjiaP28CkiWHO7jvvPBoj6hbta7yogGBMkVk1mXGkGrxRDre/ qzMgbpOV2X1ngdDKl7xWxbaQHJmGsqMGnrFKqCBIFPpTuxUQbNN5A5f5Bg6Mp6P7h3nnJn9HTY+ aqHbNQqn5eEEQvxOYZ2HW0PavIstfLLABC+GKty/FeSffwDElhyIvRwiOMJe9lWqz9igd9CImb1 A8S00+f6es1caH2MJJ8owOVapO1dk0T4AtsJLNepmM1vJZGaPBivPN3BqGNZc9H5RdrtKiDBttJ ZEephl3LSrrWZVibZlaB1Bmhh5AOPtKdJTqX2mm3d7bmCTZ2afb4CIMir56+m/ICyH2RM= 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 --- 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 Mon Sep 28 04:08:49 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 EF9B43B635B for ; Wed, 26 Aug 2026 21:19:15 +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=1787779157; cv=pass; b=Bt/Ypgo8KG5lTA1laTFhLJSG1yqnYzeVycjZQ0TiEiBRFz/RkwD/uLIAg0qjmBkjmshWWC1TFU457nxfMYrcfm5nqbDBu+gJxr8ZYgFULAp1Qinm9eoZw2k0vkMRFin9PFHVi9/+07W+QJDFDUtF1oYSdRQ6yceoqpKzOr+hXOg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779157; 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=Oxrwr2WEk7uJjNg4xf/L60DnseDpljapKWebZxAVqPnVo/n74dzbZBzShPAQLyTz2TN7HvJHSKstXSWlehXiEVGbAy5P/nL7sSJFl5Jw7lWusEhvX4Y55QdEFdDBxFLse1+34GfIGUkZhsG6sQHbSJ4fND1oUbCUMH/E5Zsx3+U= 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=AQA3YRKM; 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="AQA3YRKM" ARC-Seal: i=1; a=rsa-sha256; t=1787779116; cv=none; d=zohomail.com; s=zohoarc; b=LSLVKPusSK8NTJQSdBl0sd5v6IHIuTqTFHytSIXRTSggPr7TjxGIzp1zm26nIjdZbP5p7kaQ18lNHuLlvHcKeZPjrQE0fqf1aHLkuu3mt2RCFFhPVO4DJ1ACo3nRQadi5IKS/V6ggAL3PNbPH1EnQPEnMo6KCjjzIXjk39JEd2s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779116; 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=oHzSFYAnSlmtt65nmadFm4BaffJOLBtwqZIe2t5V7OoYSBK+oqBaQ2vxwfRiEB01AJCa6Y+Yo3qy/gOUyyfcNbFIwvJGXkJGLYVkQYAlpIxFmZq3UGpsOyTZ32KT+ayS8Mw5cV6xCCbBoNMtWM/tUxHthFH14Kwg0EGo5HbhWto= 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=1787779116; 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=AQA3YRKMzKkPYQok+OWOTQhdVdcNst6HXoh4uY71kzjW5cb5RS42VF1QKbejeacU k9VKN/JTS5cy7yrBJMuE3iNmSuHtsuXLavtZmail0b4CK665gtVYEnxkn2Yw4Z0z3ib Pd9QujYkrXb6MUTIG/Ve3Bvlw9Lt/qWW9MRO4aCc= Received: by mx.zohomail.com with SMTPS id 1787779115371369.79024996846704; Wed, 26 Aug 2026 14:18:35 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:06 +0100 Subject: [PATCH v6 04/16] 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: <20260826-claude-fixes-v6-4-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLsKeFY+tKB97jFxd9H7AW7n2nfZGJDh7UC BZ8A0AnEv6JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND Pc3pC/4mRtuFNB3xCQAm1JvjMHpb5LWaQnAwIIbX/OL8yGyiU/15ZFZzEnZhpXtmh3Pbx7oOROb I3zj48t7vixbbUuddBd0IP4mqPJOC0xqzbHTZTVAOcyYIxKf4WIM6dX1D6FJYAr8AcEisBL2WmA zrzP0DfLJ6nSTZHr3ZRXNKagCkne/7iRMVU2QFjENL/wWPn5fce4LfHzDRAFrsVD/tTMxgPQPM2 2lRovgZ7dkWW3RxE12NAiZTn8egMFKMI8SWHbNdVmvVvUNtFpR4bDqtCfSNss9KyqaczCWLSySO plm3iTgYeRwfXKGZq4cFadc0fQLsQqj0Sq+D/NM2pgbLEatKsw4mb0MxjBbA3Bv2If5UnwsVzJK ksfWiIFBIApDGI9HtkuXXR7MRronczjG9ghs+BmsvhJrgGZucI+r+u52NmLlMSAU/JGkLRsozUM 8zur5oMv5vQ6c9/ks7Z9pdEp4v3HyRrYzNikgTnYHvvBkfddrR/wW7SWoXjUhpGhYj0TE= 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 --- 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 Mon Sep 28 04:08:49 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 76FCD3F8709 for ; Wed, 26 Aug 2026 21:19:25 +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=1787779166; cv=pass; b=oClYHCCeHRknWez5igPj2fOgCJHYtxSzp9VA1Jb4vcH2o+mjXESdrT4OkiZ/NLdNB7/BrgHBjmEs6QweLIUQbzo8iGEMhXKpI+V3nnYtoGtWdCIbmKr+EDFrCOtsPEGAqGUDxAgql9wgXHs5jLnWoLXcvne7dHTaVgm5+1N5x0Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779166; c=relaxed/simple; bh=iTZh9Yw1GGOTJ/Y7s8S/RGUEO1DR9HzCctLcW2MIF1E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b3y9kQagp9i2qXLyF/b0hwBswhUHNUK7JbtwP39t3TsSpLik9AJzllBlCEvTkABa3vI1x6gDlrtcSjeMNe2m7jpwYjdiM0UEqhuwRRTw2BadtBgAd0SVL0Tt7IxUsKtxtFn+nP8dSDe3X/8Qf/qsDt+oy75ClG9O5h9O9c7bp98= 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=lZU96u2x; 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="lZU96u2x" ARC-Seal: i=1; a=rsa-sha256; t=1787779128; cv=none; d=zohomail.com; s=zohoarc; b=LbtpV0wnHzrGtHYDytUiksD7E65lThbzG5weMtAj80Tx86YjfP5xurRL4eTJmewlFYHDVUqHWsBKyhVQ6fzaKCrT9UyeGXSrb1dg6qluIHO0GL04Tfeg5Ebg791cjbODsJqYExq3Eh9NU1VmqS4GnE4cKgZWnAvTA9n9RLjx6Mc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779128; 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=l3k+LuKLLfcFuI+H6h5QQtiFHsXikizNx/DTPjLr8q8OELacTGClIt1+IH0o9GfomditL9GRLP2cEc0zhgN7OwOimbSnIT3RTfZ6OcDDDn1Xzy/OFHbuFwjHL7csA9Z5n1Z8uR2xu4ptOg6SjvwHTU0vbYyVTK5rojkbfA9iFOU= 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=1787779128; 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=lZU96u2xHbosIBNMn3XCCIgxTdHP/7kXjN5XBNx3DNAuDvu7hbDDghAAPcpSSgsD 3pAFdLKxmpOM/xPAR/GPx4OFrGgRWVn2HR7WRGG25SbA9eWzyESwK57asqfX0ayuYU9 vn8iGHWMYHoyVULIxlAoeZhRjAzpJFMdPiCcDDSo= Received: by mx.zohomail.com with SMTPS id 1787779125555740.4320145288697; Wed, 26 Aug 2026 14:18:45 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:07 +0100 Subject: [PATCH v6 05/16] 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: <20260826-claude-fixes-v6-5-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLXIQROxVLcu9XnryLINVJ+bEeJ0fnichPw zZelwl/W7GJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND PXxrC/4/4DPUp1WJrWpnaEqiwdJjRentKKfKRlbAhDdQV0vqe+QARC33D6N4oFNhcvb9gd/1u9Z 9UMgZCkND7m0PukiCNwXzIVkYvs6jIvs/rEFseFCIlmbAp55T6chcGfSrWO4rW3dE/531j4VP72 +lIOx/kcUWI73DllXZS6fS9MLra+U0REbvqqpA1aAhOQcCMejM+Q3cf2Njxq3LYmu6n9MzzPKWy nOnky2Ey+oZxuBmTwt1SJSEjUJYyGg4VBlZ7D9T/DpO4vPp5Dkzs/8WjwSa315ql8Rn8ekvqwr5 WhtLDZ1564mimuteLZ1VQo+kGsFNvZG3Evk6DzBfwA137Ek9LXUu0zmht+g1HUQweKGtimp/tYz 3Nw/65zZQge3IESGMBiPiiAhv2YppwdCwg0sSO39z53etNVGu90bYJWDDvYrg0OeFyNdy0OA6Mi HexyobvtqJNVcJ3QYq066IurTMLaFUibGrzK6JMbgqNt4KwHv+RBE2YBBcuLaYb8yAoLI= 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 --- 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 Mon Sep 28 04:08:49 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 3A15D3B47FD for ; Wed, 26 Aug 2026 21:19: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=1787779176; cv=pass; b=APyP+dRTEZw1sO18x49fU1RyAQAGLB+jh2Vzmx6JpMXI0zcptnCT6pcbeiX1hLJaplathiyJr3+RZ5zo59cFv5PEPBUO2lcmUL5GxnnFWlbMp27VLWuDul9FqEV61Rs/X/wPtkwFkIlSStbXcXguOrix9fSC32R621p0PBPCSc0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779176; c=relaxed/simple; bh=lDX7Gq+nDDqxqZlHoKMag4LTg/zlnGY3wVJubgu254I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eO2/ML+SCADG2nqcDntB83+Ooydt+iosM0chwMXtYGu7IaSiPXFjN6XsQGp8f7n2jlbnx/DYixlbkd6oMwTHdLwbTY2cXx4uu5KDEJtp4oTZyf581Qlr2kSKK2UPqD1/MLG372HpqC5dM9MMxQJdtmvc7CxjrxFvsB6ofUwrazM= 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=THICOxWd; 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="THICOxWd" ARC-Seal: i=1; a=rsa-sha256; t=1787779132; cv=none; d=zohomail.com; s=zohoarc; b=OjKeX0aiL49rb07MYX8A4EbU945QUUNm/WDVZZRVe8WkniiRJFFRR/FdYDBb1GFDBlG14KKDxzQljTyiRP6U0LOLkjTTFCkkaL73txlnT/D1vy4rZNnNS6Sz6bnuziCpLfa3RxIIpJXGb0Eg95FV9ooTGZ3B4VKGzbvy5oOG5fU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779132; 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=fOU96eZbyDNksupiEDJKvlcUyGJ8ZfGYmrFUPZTBGyzc/kW8YJwvP8vyd4++uCBv0SfULXA3dojGU1HJ7QdpMvoCYWf9Lkf1/eHHn/PzkdRH18xPBcCqgpbISho244CHIz51USl14TWe51eQhH96lllLujNVSaRQPQtpVIj0cXo= 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=1787779132; 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=THICOxWdKpt3qLHOSidggIOGwz2CdK7GK7gCjcgGcplIta513Njbua50UYGE0cKQ VNJ38/aTMJ+/hEjN2L9qhTtERn4/sx8fkXg9pe1+oy9v7pji83bEdWH1xS8fcwZwmKa yh4fKzbTnpAbpPmuCUImun9Zy7vo7a3MRG3qJz7M= Received: by mx.zohomail.com with SMTPS id 1787779131501347.4773870676779; Wed, 26 Aug 2026 14:18:51 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:08 +0100 Subject: [PATCH v6 06/16] 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: <20260826-claude-fixes-v6-6-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLjLKaF8J7c0VHo46ZlCiY7Zy9JF2LmVRQd gL0ai9DTTKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND PQMuC/0eBau964yTjAEi5aZQsuuDbRu/ULlrxiRLW7a0xKJq6Pp3kXCVgaMOqoU5nWwm3bvAg7d ++yrVdEiz8J3tTugcLpgMCdoq63f9FzOdad6FA+gugp+ep4XQDQfdNXPmdCUjSvyeim3O4Gewy1 EzDxZ8j5w6C8WjepPLmceXVUi5steNarwQqfPfQ/yTMS3HLwEA0LTnCNPIKNXB2ed7CX8JtE+QM ip7maOxIP5J7UXYi2fixYT1vZZRRIjTzLY8zNwFpme4pOsGpw9wY4vDJbuG0zSDVXw0SEnzCWdl JoAimPXelj04kT/QB7oRy9yvWwYBHNykku1icU1NshAhUW3rL1bx5achaWXYoDLuQWPb77DOFNs YQd368Ql840YIpeofzJLByNzQ8f93/J+s058rPmJNIygq3jtHV5SQrx5L5qttq0VZS0xnnBGKmH lqLIxTqHaOFb/f6F3yMoa9M0nC6yGYLww2hUOk4DzWqSR7v7Rts6H78mLMYBRP7gz/g+s= 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 Mon Sep 28 04:08:49 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 135F43803C6 for ; Wed, 26 Aug 2026 21:19:36 +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=1787779178; cv=pass; b=s1aqygdg4VK581y3Qq7/ROOVROvj/YoKA2zvOi9YFN+cE8Kj7oyl0+Knt1nmVTsA5ZNfjNaEl+JINV/3Mdx8BglwinQm2SvVKC5O4rPVZhqyZCH7hqqpJP729Um3n4DeHUzKO1hynLKZSncOsmmrQ/ufeqKm+uJe7GdcQ1drME4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779178; c=relaxed/simple; bh=/AU0Y2Amps1pNds5NAeqfyYzVbqmWOuZ023ejvfOyVY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XSkEPjtTi0HNbLItFW26ofgXfPnwwFUS3YaQk8NugM49n1ny+R/yeWuuflCLNoU/xzetNsumeMuRfXDQThnJe9+ERJf11/RM6AURsH1UIo9bIAqeyL1q3h4gOdxuSi3C/ybuVs4pcU/EDMWSHWCnZIg5u9uwfGeKYhDKtBc7Z4E= 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=ZomIYufI; 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="ZomIYufI" ARC-Seal: i=1; a=rsa-sha256; t=1787779140; cv=none; d=zohomail.com; s=zohoarc; b=ILQDyiFl5Ia27SbEfnvnt2AU+qHfQ6Nri8YJvPFBr7oG9ic6iWcblKlqcBtV9egleSmK0sNsYHvYMwvPGSiP2sbw3952fA71sX/cMBpKAdqque/VdfZGYWMikRvRT6MxX5QAZe/MoaujtRbvOfWJKpFWbnAvA7ZOmuR8aLEkM+k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779140; 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=gBjMnNuVwUEEUlfzgCnAzxMkRvVOaVTqr5gwFUFL0Ok=; b=XPtwp9DiLYfl7Qc1h7benQpTF3rtxMed5P++jv5DYWjDOeAjywtwtflAQj2FVRHbXj4v0iMpa+2kHxtQDuP6/Mj3O7Jeve5XfWR0TDywN9i6LQ74xE025q/jVAhsLIToEp7M79xwBxgqnLperMmQkil5E6aaNXnM9elCEYaXn3w= 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=1787779140; 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=gBjMnNuVwUEEUlfzgCnAzxMkRvVOaVTqr5gwFUFL0Ok=; b=ZomIYufILAYF0zTvm0VIrfnlvoaPM84mzEu4yV6h51/usOIDmEkNkczxoLWfd24W orbRLthBLvaixxo+3yWDYRhLigZkZkXKi4YR0LbkajpgK8zhVvVCf8fnVWEdyKuhCop Yw6bKDnFkO67+ahL4M7pesAyCoW8q8Ff8pCDwgxU= Received: by mx.zohomail.com with SMTPS id 1787779137735187.57043034842513; Wed, 26 Aug 2026 14:18:57 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:09 +0100 Subject: [PATCH v6 07/16] 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: <20260826-claude-fixes-v6-7-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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=11096; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=/AU0Y2Amps1pNds5NAeqfyYzVbqmWOuZ023ejvfOyVY=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gLexhfwWhX4OrhkkOoCqcC3cL3SD0lgzAWr g0vCg8S0IiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YCwAKCRAOJn5M7lND PRTIC/9qmf/Xmf7vVrUNvvL74nHq7CluUesJfH+3WOFvtWhV63JjhexH6mwDAP/iMtSzrjxXxKR zHq/Jiv3zqpxnjyrQdolDXWSiuFp1JyB9oJCuCnamdeLqcgAsdHga7Q07XgZ+E7eifIMUx7iyS2 STBdshU7+shAwmeSBZWe1KrtHpOVsnm8NvHA5mSJF4mI4KhnBqFEoFWNJJkoaQRU7OgpWfL0Ars DEupLFNbLG4zbLraypcPKfoN/C8d6A3fg9XF8C3AfHumrWTV463I27+7cRGw3Q4dEB06UmT3RtJ iGMEoDX37NzIJNAnibhI+dgWlYrV+eTIGZ+x4O6ji1YGu3SfNPbV61WVDSUWBFISLcVHKImoNtv p3tXzhcOJ+Of4wCnKttBWGvvpwOeu4qAh7Jt+hbpfPoYB1tSLzxgcD+GiXZHVrPAxhDryxYTZo7 Pec119MB9FjKzr3zkdtfZVvKQnj0uGf0RVF+WQq6o+0KecyZmZBHPXQg5Gtz4XRisOKzg= 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 | 41 ++++++++++++++++++++++----= ---- 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, 57 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 9549ddb7854a..0cc277efb585 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); @@ -341,6 +365,8 @@ void panfrost_device_fini(struct panfrost_device *pfdev) pm_runtime_get_sync(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); =20 + panfrost_device_disable_hw(pfdev); + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); @@ -454,16 +480,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) @@ -477,8 +499,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; } @@ -490,10 +512,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 5016d2d53da2..087905cd347a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -732,7 +732,7 @@ panfrost_reset(struct panfrost_device *pfdev, spin_unlock(&pfdev->js->job_lock); =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); @@ -753,8 +753,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); } @@ -908,7 +908,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 Mon Sep 28 04:08:49 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 1F87146EF77 for ; Wed, 26 Aug 2026 21:19:44 +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=1787779185; cv=pass; b=cWnOlVbIuCFZs99zvcv0exqS4E45FWupmOTZMTPKq8FWAO1b/V94kufxToB25VgeA5leilCTP/phHcEqtButcpQWT7DcAH6bTDHbYHVNZD+hRiU6jWovome742YgtSzv7yl0j9isgsFtT8XrZJqA8YM59ZgPTVEJP6emcgz9KgA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779185; c=relaxed/simple; bh=9g0PevlJlDQIIXDsSMP/w/bs87E0XqVP5o0qf2GqefE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qKmuf56jGS/CQoWgYZtA7s5767A9xKVtDOPqVTAU8+aOhLBcuPitrN6tJ79GxYLUzpm/g0y77sXK0862RGohF26IBPDVZo9OLwXB1pQCa0adsK8XRt8T+6Q8dp2voEN/4aw7Qtg/bMgQkoqpGvotDBbn6f9iqDRaxK/N/O5voUE= 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=eAc1WXUf; 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="eAc1WXUf" ARC-Seal: i=1; a=rsa-sha256; t=1787779146; cv=none; d=zohomail.com; s=zohoarc; b=ls88iONWCvv/l59Gc6ha0P/5jycPJvIdq1N3L25wAOf6nxlclTwlRZEIaYDiwVB8HILZV7MP+7UPx6gZ/lQVhQhggG8Zqlteuf8TMzQFOwjm06EcQO+Iawyd+wDdIqkuuyTdjsfZ7opvD/59qR0lgw+9iCv8/Yp5KidOmyzXz9E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779146; 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=AAZ7JQpLd2lDnE7EcsIep4b2GV06D9n3UKj+mh8FGus=; b=Qg0RU9bEFAe5nPY5JtkCtdEwWY9UrZlalNhsxZ+ba8geE8thN0ohAlwex+f0D3VhCvM0mYrAWAn4WdtXE1JYKgvBAdqUmwFmXmWVAIlX6RCu5STpH6xT5RFKYchg+jhjZ9KVB3zw7RDm5iGdoHkmOgve1qhCErrZXFed5jeEUeM= 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=1787779146; 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=AAZ7JQpLd2lDnE7EcsIep4b2GV06D9n3UKj+mh8FGus=; b=eAc1WXUfYibh/MZLt2j+GW2QVz15Dz1gp9HoMXbZtOfHQa6rj0G4w9WDwk+DcXY3 IRmRSxcXx4h2K+p/dmGACBJiLmK+EdDgo8l7xqJ/FVez180aXs8SppKaWJZSFh/7Yl8 0X8zmArZSSIJ+oQXffGPMnlnwuEJdUQAQsKduN1s= Received: by mx.zohomail.com with SMTPS id 1787779143780460.0763454317258; Wed, 26 Aug 2026 14:19:03 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:10 +0100 Subject: [PATCH v6 08/16] 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: <20260826-claude-fixes-v6-8-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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=2575; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=9g0PevlJlDQIIXDsSMP/w/bs87E0XqVP5o0qf2GqefE=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMqZCJDxPNuPbNsas3fygpeMATh4qj0yV3j A7cFgh+JfeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PVgbC/9AhrH7HVilXJZVgp0TDOMhyRRaF/3nJRh8WQzkEe9Q8fIXDEsMODn+UyogKs+fcyPdZEA Jwp1YA51RpKNGN9AmvvernGbYzO97sxipFT3MjVWVVYIoAjstxAdiMktNOGKMkecU8bg8B2NQDK j2pzLizCyYxYgk5VbZX2w2zvBvbkdsFy5RGZjGV/os15gvff8E6+hJacl8A1C89XrLtNZfwbbmw Fxo3UmlFA2ULvDaYXsZvqvIhaycxBipz7yPWz7wsoUwTVFFSzvhPXwcJIM6bItm719lsgUCdZas FPpB+ojVr+faFCxQMGoFlym8ummqgnywT1LOYhpzZrYA1XVaMU1ZIDsIkB7UZwmFpyTD3KK21wf Vci+4OgsdlQAQ50PkIAj3Sbz0ZR6Tu9K8dv0bB5pv4BozXE2x49FKhmg7gn08ecMsf2andJTqn8 jAPfJR58M8EDNTFTOQytp0IOG2OrTmp1MiqnXdp9hitfNG5qu+Kmx5+sOwnUuqzpt9tSo= 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 0cc277efb585..f6066aef4766 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -323,6 +323,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) pm_runtime_set_active(pfdev->base.dev); pm_runtime_mark_last_busy(pfdev->base.dev); pm_runtime_enable(pfdev->base.dev); + pm_runtime_get_noresume(pfdev->base.dev); pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ pm_runtime_use_autosuspend(pfdev->base.dev); =20 @@ -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,6 +368,8 @@ 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_put_noidle(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); =20 panfrost_device_disable_hw(pfdev); --=20 2.55.0 From nobody Mon Sep 28 04:08:49 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 665DA480357 for ; Wed, 26 Aug 2026 21:19:45 +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=1787779186; cv=pass; b=XKicWw1yyjPBEXbxWm3eP3evdHYJqo+XbiF/buam/GA8GcEW55OZ7nhlE55bcjQrYrSnGqpa7KPtbN37VCcVk/HUy/59E6MlwvDrfvpxYflkk7/UijxbL21QLHbTcNbwUpQTDmpe4QAYwoihg6FHU5t1p1F8KgGHeGjOUpgxmmg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779186; c=relaxed/simple; bh=agRP0RpRtCDjA7QtcvATBit6UJ45pRR68pISHX2erxE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YnJuWHbRITZuR5Rzoa28OICqGM0OVaIhi8Cr9UE5x0Y5tCu56w3hh4A/t1FKivUTqjyEJS90UktP/Yhjhlz/repLd9bpGCkMAN6EF9kQr5q5RkgqIoKrryJC9Lcz/wFvgwrN6BSSvWN1dKwlHum1AEUziUdmran8S1CHumwuLZo= 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=EbF07MB3; 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="EbF07MB3" ARC-Seal: i=1; a=rsa-sha256; t=1787779150; cv=none; d=zohomail.com; s=zohoarc; b=Oj89sstpMjcchaxG4fI1/r/ujbU2l9yMcqtiXa8kKgO0x0i4yfClwInmFZEAkScqVhe3fWNBhSbBeePPKK1kq+XP6G3LIQjAf3qKWckAhCVMEomZ/oJvFkbXuNmhsmz89VOEQz6vULAj32fS52RHsm1wa/eGKzoYJA4gcAxBtZo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779150; 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=mL/t6AtBgho5ZUgG0J1sVf7T2HPplYZioEmnXUNCwoI=; b=LOn8kEeRUfiLMM7jnPpVb857cufSvXIEqPg+FhI0I4UxbqVKWFANYO14bxQTJ2F3LhTN2ALEi7gCdl5ZtZP5LhygWykV/9gqEfZHQWylCZeUoMdm/Z2jmDXDFfA7CBUznnE8bjQvOHnsn6864dkVgwi5xK+z0+NBOVloibcZn4Q= 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=1787779150; 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=mL/t6AtBgho5ZUgG0J1sVf7T2HPplYZioEmnXUNCwoI=; b=EbF07MB3zDJ3QDEYdie4LlCKU7pyx9yPdwWKBkntfeL8V9wIJfbpM7xhVn+JrZVO MCnWodfMxEi1kiQ7o+5I1DGUjtsmUvV3WmXTdPAio3t/ORuzurIZbNDX7OZUxeSagM3 FPfO68wT7hQNO4+AfSvxcTxoBroVgy0lc35BRWpI= Received: by mx.zohomail.com with SMTPS id 1787779149171241.2427339605357; Wed, 26 Aug 2026 14:19:09 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:11 +0100 Subject: [PATCH v6 09/16] 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: <20260826-claude-fixes-v6-9-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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=agRP0RpRtCDjA7QtcvATBit6UJ45pRR68pISHX2erxE=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMrQr6lFPoC+vpxQiWomb5BTbIcGfJky9/h nn5hY76YwqJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PVRQC/kBmemrgp09dv8de8omyyEJq+btguQdF99PkRTLpAXGUeg6e1tuCAf1327Hg1KUWR1gBJD GXf5jkdR2gibbLXJZVSlJozliz0HBby3+ntRaVB46ob9JjtXVzD/gJC8/ziR5nmlVBzlGP81RxW p2Ywpsb5p9s2f/IKIb95JNypzjT89c9MnK5vntSENGJ328VMPOuxDeczONAhftxIatsuVb8vA8G w3UJZ2WYqH00cwiwpAFTh1rERXlzjFDc0jvOoavblyp0zeKYGZgfSeq7Gm2GdptbfZmrshOnQ9L YmguzxKygEuH+zIYMF6iRtocwUTsTMIA9blAB2azK4wFBP1RSdJxFba7pTEjkxT1hmgXw2NLE5N olnqMzKeze9nN6YeTu9Cdsz9/BZ0RCDYM925M1UaBD1ssFOkTnJ9KkPVIhl0MeyTksG0Sjf6Ask t5JplfYTOiincGgCksRe+Q2cAWlatFCa4pZZmjlbFeI1v5w0US3WXf+G5fB64IgdOSmRE= 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 --- 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 f6066aef4766..ee4c468b882d 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_put_noidle(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); @@ -516,7 +517,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 Mon Sep 28 04:08:49 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 0157A3F8709 for ; Wed, 26 Aug 2026 21:19:52 +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=1787779195; cv=pass; b=eCMUiJHllbaHh3KQc0AgrKDJ/StaaqqMLCtetrO8XwvOhz5/88W4rExe0pRIvYsXbGAEaxrKhfWO2s5CeLmOnXS8+LAGcc0mZYd5ynINABMucZ6xv8HGLqzx8cXLpOjPZncgiLbo6p0uhAfrPZ8FansAa88ZCwgLAdqNpbRTFkE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779195; c=relaxed/simple; bh=y6TOO0IoJMecD+tyIIJcv8t3bo2nQZ0foj0Vfe9uo9g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GtNI23Tip4ZG5uVXK8XyNLqHtd0C30MC36JDX/jZkfhBU1qk06B6Lvlvf8ehK5cpWcUlMkM2ejReDCVUsMb7c4O6mJjb1qwyJFr/yUd1H/sHw+DEhXxMWT8vg/Jwf9Vk1SJPU2Kx4sYCQ5JVAywub1nBUNHAjNWo3aAuSgBIz5g= 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=ghQDJMnG; 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="ghQDJMnG" ARC-Seal: i=1; a=rsa-sha256; t=1787779156; cv=none; d=zohomail.com; s=zohoarc; b=j6FBQnezEpVTkJb16C8CWQz3ltwo9rnEzZUlwesWKsQfhUW4e2sl12ypjnWyPccdWOJ1KHOnsqZYKmEeyA/+j6Zl29itlMzZyqRtweMlmOtJ6vFkM1dJLtt7uiBfe45PcEleuIipFXldDRGdajt4jMFRmfrOlkvJALuLm7T0kuQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779156; 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=ai+KSXHNrzb4R3t2qujtq6pFbs6sfa3sY6SEIc6LIQU=; b=ZkHuIueIQwGvWlo+/byINX/SYAxpk1G7zNvP31DgJQcKqmiiJ1ipIPfsacGiYO9ZJ2F6sa42aysSAQEo928/EaGOy4Zkwldmf8XiDHnmZwOvtSnm4DWtYOF3EbTiAbEiFmYF9KekWb0hf9leZXq/3WevfpTK1C7LAWZq94PKjrc= 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=1787779156; 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=ai+KSXHNrzb4R3t2qujtq6pFbs6sfa3sY6SEIc6LIQU=; b=ghQDJMnG+Qbu1XWkzxwlQ3nB+XM+aAScAgCyl+jXmuU89zrAo5RBQ7zZrbiGXVU7 RxVonigPnl/MC8QbcFQyBAvuHS0mKeVTcK6lFsNvhSEtljcz+FLjkzDAwUUbw3cJmWs y+rlXJf43tqV7gA22ICpd0KP1A+KAmN9WVVD10vw= Received: by mx.zohomail.com with SMTPS id 1787779155453777.4053819956326; Wed, 26 Aug 2026 14:19:15 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:12 +0100 Subject: [PATCH v6 10/16] 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: <20260826-claude-fixes-v6-10-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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=2040; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=y6TOO0IoJMecD+tyIIJcv8t3bo2nQZ0foj0Vfe9uo9g=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMCe4XHtdbiFjGqWKu4bUqQ02/sTb8FdNEn 9psgu/mmVqJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PS1GC/9rArr9yfK/8VziCFs+RAo6yTxeGpz4bsFzKR1reKUh07xKohJ6OKgbX1TgIf3tH1vY4RK f1v3mdb7E7inTdCamicme6CUNtNTiLOzR0pDNQgAHqtqqrCuMhT7DeUP1vJ8CzmxYDKzYyyR8ms F6Wo2+v0o347abSyqbK74sVtH+dA6pVBDf0aJ7P8odNH5Fbh18QXf2k/dvVU01B2xlrDxoJ1htJ Hhr3dUsK6exNfoBAwSLLHO72E2jxR0G683L/g8cGVqEOpbfKAYtWnmJT50bFJFEX8Ib5tfxpD9V +2trnOIAmA0CizkCJDaifx4xpA1fMK+ZKif4bcOsOrtNoVuweLJtESXjDLkCXQyQJbVNXPiXfxq yQB8L0bx3QM6NDfS6BRWfKeogpZdtpSYQuhUvfK3gu0VjvDAjRXFmzMGCAI4RSMcP3AaXiIdCBR wKTWuqB4RcTfvki0H9K37Yq8FOVXeMTMPyKTTib/FO/jfdaLD1CaEtaPRSTH0kkmE8FG0= 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 | 38 ++++++++++++++++++++++++++= ++++ 1 file changed, 38 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index ee4c468b882d..0c8f53905da8 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 @@ -599,9 +600,46 @@ EXPORT_GPL_DEV_PM_OPS(panfrost_pm_ops) =3D { }; =20 #ifdef CONFIG_DEBUG_FS +static int reset_get(void *data, u64 *val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + + *val =3D atomic_read(&pfdev->reset.pending); + return 0; +} + +static int reset_set(void *data, u64 val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + int ret; + + ret =3D pm_runtime_get_if_in_use(pfdev->base.dev); + + if (ret > 0) { + 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 Mon Sep 28 04:08:49 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 9B3B246EF77 for ; Wed, 26 Aug 2026 21:19:58 +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=1787779200; cv=pass; b=cKrs4z/zGzzZyHxFGW9/hmZRkEYQQZKO7HcCp4L3dyVPGVKffFvP8EtXKm780mMXZBAxwCaksMBF5vtfdP0hrVnI6o9aGKxjDLYFt6n5LRE0tncxn8DRyQWwmRXHROg07xHUfuygNua0DmZRVqvKvIeHDRXea0uEGOFevchhpcI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779200; c=relaxed/simple; bh=1NC6JbP9YeSjejJ7XZFftPMwKC3c1jXoMn6zNAHeTm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u5C0mdXyEqEGOGoO8DDQgw4JRyvFwR95szHH0Tv5t7V7UjFoac0+WeDlArAVS3j5aYz7iK+lx2eLa5ZxDN2R0JXd414VCrU54MpkspYkweq4nTFzPpru/0wTojiNYe7T4BP+8E+/ocnR4nBfSazyDIM/8VzM6lYUn5zauXmvmfI= 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=ZSm+2DS+; 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="ZSm+2DS+" ARC-Seal: i=1; a=rsa-sha256; t=1787779162; cv=none; d=zohomail.com; s=zohoarc; b=Ft0CFpNXm0AEVlEx7ttyqqIOBJuo3ENpATHlB5Nwc4aWUnowyHpp09T23c6ZNNjJQ10nfjPMhVS49yX/BYMXQArBaieJgocZK841LWEu/Newmy82uE82/Ikg4lZdldEKxIMGW2cx1miVCzNtf38yE6gzI0c2ngsmzHEueJO7I3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779162; 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=EvXF8zht69wXNekn4uJIELhYDMWC8Axxp2s21cqiGpYIxeLq3pTDiPV+b600mJDiDgEVHO0wLZL2FZrnk5UFV293QK/jpnQi0oBMHxe/09CBHjiyppSSCuD+Nq/Gdc7nZwFqN1gEJeigFFk8AnUhbdTJb/8fTCNui02TIEQ6JEk= 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=1787779162; 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=ZSm+2DS+S1RKBZQObx+ub7Mc5ckMEukc956nrVw1aKYPu1Ke+hngTOS9YJNp1xyu dTyzWrb0oc737OuUAdip0/LE9gN+0MNSPhV+Ced/zPvisWWAHf1vXj8aSPm0SvCXSEy Rzq0NPApdWZW2NXDUIOqR8pBWsUui/hKCMGOj8kk= Received: by mx.zohomail.com with SMTPS id 1787779161566577.4919440356412; Wed, 26 Aug 2026 14:19:21 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:13 +0100 Subject: [PATCH v6 11/16] 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: <20260826-claude-fixes-v6-11-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gM7M5bnObycS35/fZqM2OZT+mSTvtK9IK2o LmYCMwY4WOJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PfgCC/9XbaiaGpYK+7fcJxGuKnhNnsc8UBBf9YED4m76oIxsea0hbBT+RCMEvDwQOlRlNN3lAuQ 6wXHzhFHiWg2GLBNKXhmCLZdx2sLRPIprNkNnCcr45zNTrvfohI1HQDuJcyi1MeLlat+SWMXZHa MCziRtGg0ce53UjgeVwOodiauQAKLyRu6Xvi/WcfHTMDFRULVWENHt+AvjRulalA2Bb+OMVTFWV BNxM8ZyuX+mtqcxy2S1JsMRlhPOYasT+YuVOUVvih7IScHSTWFl4i/Ga71Vzk5zGDQwf1NmSeme B3ATgfQIkKacjzvnU9AisZD/G+9SMAzAJDO4au2SXRNt3HTBiSfraN3L8/h6H9G+0JFGx2R9m4O k1WZQ4ozkwnYJkc8D+xOP7Q5MiDGz+2WU9sr84ddftdc961IUMqP7pj27m4Ew34hyeh7Uhq8iLu i+Rslv7N6T1wYqp02oYwNyonDgzRgzq78tXLrMfgkb8PgFnWABQl4QiPW79192o8CvMuA= 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 Mon Sep 28 04:08:49 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 9284747A888 for ; Wed, 26 Aug 2026 21:20:04 +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=1787779206; cv=pass; b=tK4qeW/8IthQ5rxK9xgud58I78NiyQk6TnWUbMP3vUzIyOlERQps2DgIVHavYt0P8zTCFm8u8YrLVgClqwSY0lPysbi+OFV/q3WktsNioBO4XVE++j1Sbo3UmGbwu86KUZzRyjOy6UrxRCKamZZcy0Hze655s0DmSy72IjZZIG4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779206; c=relaxed/simple; bh=x8OlekE2MZnjNXVk39ugXBQV79er9Wj2YPeLWA8TxG4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WYWtwpl9LFyeqSyN42Xe3FmiG4lOCOTS+MAwLKTBUgvhFPdM/f6iqz5VJVDQdyjB7v+HCUw9ZqgN+svLPSUoLSG+w8FMj8LJ14LFaVIE9MCzzkVGBJETYl6+KVOIuiD2KQgloAC3fvCkDuwb913f1XuSj5cUOv9sNHyivprhvvo= 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=Q4hO2XAv; 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="Q4hO2XAv" ARC-Seal: i=1; a=rsa-sha256; t=1787779168; cv=none; d=zohomail.com; s=zohoarc; b=VvBq2Y5S2aRXuoQ1zWX49lG18ncBIQzYVX79jhmh8qqQJpVWbwjIb0/PFWxMKslEDWfyDsp3xF1TtTSpWG6Bu1aaZVlWMmCGa0yu/fDIEA1FTG2+rpRXklWZYeLkIyx9KGxJ6cTItgUPvnUsIuJpXoxOYbrwQuI9/7YQgIYH+dg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779168; 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=gXS0xoRwBr+1P087sBcQXdy1Cz+pi2u+w1n+xuxWN1nI/OiV8s02ZpuhRcKLbgXR73Po4Y1CzZXLzAmIb46T6aACM0r3hscQg4UfFsvO/1kAQNAEoCY/zD6FQT6d2YtPHl5bHgKnf5llrIHW2QGGqO8KQDpfy4HFK6C+Pptv/yc= 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=1787779168; 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=Q4hO2XAvzkYUxwuoPGCi2ujjLP0IIYT+5abdyzVLs/880Bpfeo7cldtQpRHcChXK eP+qWjXmjm8JwD1KAvggdUwBgY0LmAJNiNbAo+aXMxPWU1Z0yj2TvgLEyXiA6JpxgNf Ck9WRTIbuXpxyI2gBeEe3DUWqbqKdsIHKaYpECTU= Received: by mx.zohomail.com with SMTPS id 1787779167543598.8334119563925; Wed, 26 Aug 2026 14:19:27 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:14 +0100 Subject: [PATCH v6 12/16] 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: <20260826-claude-fixes-v6-12-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMf4kK5sSCLj82Z32bZTx32n9pMBu1WlCpq /ZamlO18r+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PVcSC/9Ezy6dIBOMp9hB0BTby8aXMPHJzzjIyImQn1wHnC5qr9SW0gT49aOOVZbK3vmErCPGpc0 DLPl+AkmL4kFcjf+j87sWz/fYpt12JNBmOgZmrogx0NRbpFS2Txyi2gdpnp0tN+C0Hamu5213eJ LSAzeUfFOwIXHxlS0iPvuugD4aglRRE4gyN1rMzL/j1aVoJuJkYLUya13TMtGnBC7YUiSBK+wud Bh0Mro++DTxsY+Kc5HHC6HrLpeTEFT2wiAQHO/ERoyFk6pMUVGCUpP73EBpWyC+wustSHrVNH9A F2uKxX61BOypniRmvIIEQStAZLdVg/MfoqsJ72LMzpZgi9xihp7qFY25TVoII+gzyPOpIxSm341 9+6UgBgB8THs94ExA9VfVn/BrfolWX6nCI/82Malv7NbxApl8O3Z/VVI8+FsSuk9WB+2idoz15Z 1CTIF66RuRDutma3QSzos+E8qGP0R1J3GS9Mb0dN1h1qx+mWnq3Vcj0Cnv97RPHgj9EwQ= 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 Mon Sep 28 04:08:49 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 B1437394793 for ; Wed, 26 Aug 2026 21:20:12 +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=1787779214; cv=pass; b=hH48gDB6pTIoZxY0qTnFFX8V9EH1wpKWztgxXizCEUi9/ECTZCUogH8HTFc3nE2orUnHjD8cJJ7ktILG0LRhE3ZQOF6DGfxRpRG1KgsfbgMePVLBCpuL2N9Q6kUSzDeWaGZT4qfcHjbz6RL80bwoET6qrviunQhAh/bp2geLyBs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779214; c=relaxed/simple; bh=1ViKXn5Z9t7QEwpx1D0niBppUD0kk1O7SjFsLfT8ejE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nFckm/ayFET8tEMdR4xwzOa70mIZdvYkb/hk1c1Yl1jX8VCLsh0qYoGvtGx3nnleivNOeKYWu2k6PHnViLUJxRd2OdTzEYPR+OJEpGWLIcxo4zIBgzICkXtmFG1TbFhRFFB7A3vr0UM4S4u8kjxzJOYH1JCdXDSpTq9PwYEwUuE= 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=U4IR34ZG; 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="U4IR34ZG" ARC-Seal: i=1; a=rsa-sha256; t=1787779174; cv=none; d=zohomail.com; s=zohoarc; b=dzDf/A6gDYd86QvQ/MfLWanWD7A+YpKvRu9KMVTjihz86R+0C+3EtsDT1Nc2eyE8sQSw5cumOMRxTr0nUQsfZ7EVrRZNLm9Mm64Cw6lQc9w6dj1hBpd7vhCgDkmU66RiE9U3TFQrwbUp/fIxxiLlKF2hSdW+EwD4cupcZ/KA9PE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779174; 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=K8HSN45vLxShZtS3+gFRmgcLap1dW/smpGitQ4Ps3f/F+doyVb6hlkg/iLc04wrIp6asewG2BvTU2Ou998Z9AMhoEbl3qL+6iv+ohX9Agl2yQ42eAVlArnQR19PdVGpMKAYwrOQ/bRMLcYThBMN0cwSkeS7cgvB6XuRiyClvm+w= 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=1787779174; 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=U4IR34ZGyI1N6ji44y0jXPyikPvzwifLqkPIpWoguLDYX/Lveygh+TWhHVTA+fcC 392cU31brC4wKSf2JkdDHHSNYjAix3P9jCondFUXny7auH4RXGuWX/gif7ft2ZES2AE y2QC+caMgiv6J2tofla5CKcd8ZCSqvd1L7yC1h5M= Received: by mx.zohomail.com with SMTPS id 1787779173167251.50782691295262; Wed, 26 Aug 2026 14:19:33 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:15 +0100 Subject: [PATCH v6 13/16] 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: <20260826-claude-fixes-v6-13-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMFuKz+mvU4LI9nY4ViyhJBxWl2EU90niSf c4MKUbik7aJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PVx7C/sFykCT6g1swxOYk9LHjDxyph/jMYbWnrTYe3T5+1MkpIlR8XhlQL1xaU3b7cnIYoG+5e7 SeDEKC87AAdLYU84hLOuQ9qqUEeBXhy/QyTSxDOboHhYY+81ZzDRFf5WY0a2krry0IB07JyFhJx CJGPrquxkP5G7TWMPPQT125j5yIsqN3QKInwu8C3Qa5W8DBeJOzZ4XmghUJp5VaVIyxG+5E/6lF dQG15pT7lC3y3R5nh2TpZxKfyZl7NOd8Et+4CwCialQGaTEU42/jchDF6fR3F9jRlMjr9YNdbEI GFLde6oPZtdaVaeqS6eRFBWz1fALoXwcxe+RFwIieRJjH2dktI45YlbBrQnznrP2mDldehCX5Gu 1DRIUmJqdO2GBPPJobxyfOyCWD7+r69UpF+WkoICLJoq7FqMBS80/fXR5FzbxNNlwowe98/6ktO qjr64XHv7zyX0ShyC7gEiiju0YpK474Q8ZU+DHBvtrEJzkF07Fz6OnZ7417o0/lROcGbs= 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 --- 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 Mon Sep 28 04:08:49 2026 Received: from sender6-op-o11.zoho.com (sender6-op-o11.zoho.com [165.173.180.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E0BB9483BC5 for ; Wed, 26 Aug 2026 21:20:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779220; cv=pass; b=G4VXCiODxIDOvjlWHXgIKpDsR26ZYnUWTSfMVVzsuebghMFnv2s83ZdnjKD+W8OcjyZGb6L8ii5rGaj9LTwbZBWiOVgPDxMduE7h45FSyssXyBpCSS6CH4Q1y7eTD/mRUTKnqhI521e0nj+ftZcuTchvvnKb3nZujMykLzozcNs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779220; c=relaxed/simple; bh=pVmrmUYZBdwIUMlOq4luZR8AC8h9ODVC/V/HaAGiM8M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ECNsbsxLLEOmZSrJkHAcWYAZialfA4/ns+yWA/z81jc6UkyVY3BsuW9Z3iVRuwTaGAH4fuUWWoFg0Fsd+1x3pTZOiWQIXa8Dkvd8rwEvIKxwLbPtdS3zB7+KuhS1YpMFevFAWK6o3BbtDTZ3GX50xMLYti+MiBLFtDaIrcdcqVI= 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=UNXHvLMm; arc=pass smtp.client-ip=165.173.180.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="UNXHvLMm" ARC-Seal: i=1; a=rsa-sha256; t=1787779180; cv=none; d=zohomail.com; s=zohoarc; b=dOudAr/GfbpkvxdHaChA1wbNHq57ov4QMtIVv9Y2XDxIKlskx3kZC3PPZMHm17C2RJVjTZlOcjEvMBmdM7ikToX6NpbOemkbL7q1jk0i6xTV0fTinJJqTY4K/peIA1Hnte2/8QD8BQmoEFOQLtYdVdvh1o3losABdeOZ6/VhcI8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779180; 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=QmHCSqaC4BFChgC+Mo3s3VRZb7yr2DU+TnltFCeZfiw=; b=FpFVEU9vW4fVkUaYQGNGS0MrwqYjolByGNjI+kZJ/vmC/t/nLd1vlZsaTqFP1tdKwDwZpQfloMXFGYp7jue/KcYWUzHo6m70nNoi1nCaS2lVl2S9xN9S1645Cdrd67r+LbyzE3v1dNdWqj2MmqfV1I/tq/RYuxo9OT1eyADwOg8= 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=1787779180; 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=QmHCSqaC4BFChgC+Mo3s3VRZb7yr2DU+TnltFCeZfiw=; b=UNXHvLMm6fNUdT9UJzELzPG8pcrQDrJGwDxLGULuv43HbQ/koSYAl1paEUB9o3d1 lpY2K3WZHsHW4Cmx2RvoJz+K1KAD8yjGIEGrYwfrbW4od84mrzQEpoyA+L+iB/qzuJw 5omG0Ile4GJB6+FmJAqell6HMlqdmUjvI7zNyfiQ= Received: by mx.zohomail.com with SMTPS id 1787779178917438.21898684642974; Wed, 26 Aug 2026 14:19:38 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:16 +0100 Subject: [PATCH v6 14/16] 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: <20260826-claude-fixes-v6-14-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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=pVmrmUYZBdwIUMlOq4luZR8AC8h9ODVC/V/HaAGiM8M=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMsXaaPgL4fsDTjghO73c7AaUq37LoGPvn3 IdTVM9ByWmJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PV8/C/wIPb6p8nlP/ZpeQngxxG7hYBgzGlb6z4e9wR8AHq0D++aiDS7ef5yuMgHd7mIDWMZEx3D dWwfn5tUuy9ew31D0rCe3VypRqMSSWokRIsKb5z8xbnMJAq5EgUuuJ/0m37AzgYs/J6VVOlYOXp f6PtjrcW5FM4fY6pUE8m3h7i/FP0Qf3bAceP3D1xO6aRzB3gm6LDfMg8u7x+98TU8iYUTE4ssis +KLnB/i+6Pp296wjSztkYh/WLp6BELAIaX8mZiICAVkG71anYd9qySOgYm/zpVNOuK42BXbPh7I 1808J/9jDejSfAp17XzQrGI4yUppAijq4lfvOFrV+sunLQo9ZAUDiOwWEpWmWN5QKT4oZtimA+6 pgldf3Ix42z8Z311rfCXKcNgYVdXYIxsttfxAeu4qP2f5I0VosILLU6N6/c1AyC41riW9co60X2 mYH/+nSRUlbPQERf/yPIDI/93wJiqfS3XphTOnFwiMyRWv/VTb1vfAt1PBhbUGb7FG5PA= 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 0c8f53905da8..ce1d3eb40332 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -491,6 +491,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 087905cd347a..6107485a5332 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -876,6 +876,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 Mon Sep 28 04:08:49 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 C19B4480357 for ; Wed, 26 Aug 2026 21:20:23 +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=1787779225; cv=pass; b=suDFPqKdv6nBZtHemJtY6QiLKvVGpF7y735kI6i6zIkAYzBvWcHDjKb92z7GIV46sG+Z0nm8TTrHUCrTW/53PxWjN0RlcK7DhbZZ23xX5RJtfbNI0ky7aHrqh/yJhOf9Q9W1e1CGvsPtqvX12bvkyxdpYTAyTPyxSZOf91kjuBA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779225; c=relaxed/simple; bh=lK5HGG111XJlhElyY7C85SzQpC0zyeWaUYlpiKUm4ek=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OnXjLeXnRUTxLdl6sJ0bJa8UG93sljR/RsBquhR9Nd2IXEC+XO77hX7nW1U66gNHUa8/TKGMrTOtab+3Prm7v7CD+fas6zWEf8+0f+izUTdAMkOn42IPyzUli3iAeP1Tk3KO407ATADBofTXSPrS5H7po1xx9PkgEQls//K7Vc0= 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=bvkGjVmn; 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="bvkGjVmn" ARC-Seal: i=1; a=rsa-sha256; t=1787779186; cv=none; d=zohomail.com; s=zohoarc; b=DwvKml+vvSFvbJeYUxeJLzjLtc+YHHLW35FVN7gA4iunCXsKWtWBbqYc8C7/7vohqMkhcLfSVp2oONZzwYboToarH0mTLjQ20QHcAPHwiUjTgdrzke9uHT7ZRlToScCG1qxlbMxaz253ptnq/hdTvTCeSMIJglY8UvSNttyb7AY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779186; 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=aOzVQ3TTa+xGPZx1EBkkzSniJEuCXycPzoAHQHe1ZyQ=; b=YP1u3wP6+w8/5YQjRBEnn/rK95my5+cDBsEm8pZJqmNydlg9FStz9LuFcasWaHmkUPalTI2rJwkEYVZL8CNwVWGujxG52TPIwPVc0fs7TW9dWNLnA1erklXNCJ3IGlsH9Ycrsm99qbm5VVLc/S4QFrNnVhSacb5ngEOxHVLT+tU= 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=1787779186; 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=aOzVQ3TTa+xGPZx1EBkkzSniJEuCXycPzoAHQHe1ZyQ=; b=bvkGjVmnMzdKJ0KDjhNhH6D/9n5fhGWRi/lhuSRJjstyI8syiu+Tr5paaykTbdkh HfCumBtCZ0rnrJ9B1qC1KCnHLpu1s618YpkIh3edo6DUkoWUtwp9wt9DxNANP2ddmsB 6WAN9p80C9RPexcHYnqDF2ShZ/u6rsSI8ppnTa8o= Received: by mx.zohomail.com with SMTPS id 1787779184220428.2992297631183; Wed, 26 Aug 2026 14:19:44 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:17 +0100 Subject: [PATCH v6 15/16] 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: <20260826-claude-fixes-v6-15-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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=11287; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=lK5HGG111XJlhElyY7C85SzQpC0zyeWaUYlpiKUm4ek=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMVn0Rk7o4+4p25GjUnJItZu+/XlvhWSgUk OcybaMYsRuJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND Pb6oC/9ZZ2iRbu71gYwQPyKC982kJzL+yOU62Y9Og6+08+k12XWjiXw48mBhO1H/IcN0meDeX4C iqVkOsFkXbVoTGp9Pm4toei5XvSRPECRUKW01TeWUxjafJfA1VsEoWHkQt7cmcXTMR8Qca6YW+S lS+2PJgbJXcWLtNDDx/YiGjKWtN9KQfecPdSffQ959WkQ+rB4e5Ha+zcjHViyuR8DTb7/tqx5Wi XHcTEClGXhEW2h5sOwBvq6VPlFi6J/3aaNHJmmQOT16nuW2u99CqCka773kiy0Z16WQmEEsC+/O E6u4BmwoBYlZkp84UfH2OPQyVJk6cxRJ8by0JqrdLrVSy6+WryBJrOUucg2So9L4N4lv8E2M8u7 4RZbODQUGo1Kfe/MlXcW+GFlwjFQ4itctve27A9y7b48sJpsVmGGJo8JtrSnV0cDcg0QTy8ZViR RBGhBp96mR0KNc/xT/fUKUbuAtTWlmkTWBXIV5tCw1ELFHSCI7iaeOhtwR40sapP1PpgM= 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 | 177 +++++++++++++++++++-----= ---- drivers/gpu/drm/panfrost/panfrost_perfcnt.h | 1 + include/uapi/drm/panfrost_drm.h | 3 +- 4 files changed, 127 insertions(+), 55 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index ce1d3eb40332..eeab1c3525b0 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -497,6 +497,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..7dcf27add7ae 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,93 @@ void panfrost_perfcnt_sample_done(struct panfrost_devic= e *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; + + 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; 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); +dump_retry: + 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); + } + 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) + goto dump_retry; + else + ret =3D -EBUSY; + } else { + ret =3D 0; + } + } else if (!ret) { + ret =3D -ETIMEDOUT; + } + } =20 return ret; } @@ -87,9 +160,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 +194,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 +206,20 @@ 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); - - /* - * 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); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + if (perfcnt->reset_failed) { + ret =3D panfrost_perfcnt_hw_enable(pfdev); + if (ret) + goto err_vunmap; + } + 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 +245,15 @@ 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); + 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 +307,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 +390,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 Mon Sep 28 04:08:49 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 5D4F43F8709 for ; Wed, 26 Aug 2026 21:20: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=1787779228; cv=pass; b=JjyFxQ047FoXd7XxAhuGYeGFuiKZBOKpw34ed7di+447N+FDrRPqrjtZo9mCGfLwWsS/8v0kcdlbGJeFEYT4UdRtb2vnQqeEIRJy9Mm/jwBUKJIwqfaft1uEFDfC7rD+sM8/NxcG+4NNwlw28IStlnh6EWzKd6FQZBP/v8V4Zg0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787779228; c=relaxed/simple; bh=AypLoSBm1KPHQD9f+Zcdy3AMlNPgjcCvidkbs8KFBCQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MEFMKL+m9oehwdp/COxIyHPwMEAGLhC8rKPp4gT97AToUBwSa5CKXlMKjPmf5KiI75xkHDwYvixqaBAHu14NpxveS6Whyc/sm/IhTbrM7coW+AbYQ0mrqIMSVUDyHg8lGb8hRGVjoQpu7DUH45v2CiKhcwDER3kTuZGo0SRFe1k= 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=Xzkb3XtS; 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="Xzkb3XtS" ARC-Seal: i=1; a=rsa-sha256; t=1787779190; cv=none; d=zohomail.com; s=zohoarc; b=AKA9xQ9CJtIsZVZMH6i4jKRzRMenFaIJ0PUxVfH79UIDSJYPPHkUyiGHaq093Sf9twK3687q5uUJjuXAcUGSXeVdeO80ksCmwXguTf1HAlgSSE/JMcCYq1KZOHOSjpbsLAn8zY0VCBQW/UwML2qRcMRncQ841CV8Tuf0JEgwnro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787779190; 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=MyaxlOIE73LwzFcGWb6YSnV/Lpz8zJspArqF/Djs7PgUBxmTdeJQVRf0bbIrDC0MjpKk5JGLErEgJRTxYv6tocTIJM8buF+gkSdaYzc3AJowoCjt3VZR7UrRRW/G8rm9a7ns0Pe1EuSALB4ktLeOe0ph9QIDfnO97W0KA0ksuLU= 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=1787779190; 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=Xzkb3XtSyixC92/aYtNRcWEVQx/v0OsVL2WF+f0l3ZoEL/IdcCNOUTCAAiBYyO4S WrEHj+RMQdBi1LUe3x+RsEX2ZePA1BfbYmf14XKF/Idg/4gYFyFlMWSiR9BGeVwIxvM oV73ViyCWFCP5nyz48a2JkFMqxHvpamFgVlugim0= Received: by mx.zohomail.com with SMTPS id 178777918924975.85137957340908; Wed, 26 Aug 2026 14:19:49 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Wed, 26 Aug 2026 22:18:18 +0100 Subject: [PATCH v6 16/16] 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: <20260826-claude-fixes-v6-16-78119af409e7@collabora.com> References: <20260826-claude-fixes-v6-0-78119af409e7@collabora.com> In-Reply-To: <20260826-claude-fixes-v6-0-78119af409e7@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqj1gMibENL+ADu9l6qy8i4kf0mTXvcmYulYanA 4rmOf4qBiSJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCao9YDAAKCRAOJn5M7lND PQDQC/wL8bPyMAh/l2rE1HXrX7y/H5MnG9jBK2q/BRhOOvnthtbf32RTdeERX4tBNt/bnb7Qy8e KsGn3eJZs62Np0NVGueUxR3f4GvTJSi39HtfUzg+pspWQVf+LijmOGgq9WV/y0lGSgtUKrs43v0 UDROs2bAvSuefG5qXZWTLZT8IpPKc7Mjh1WNj0Qkjvl7S+4rq+Y31nQrnB6hr+S2Wmn5Pd5YI/g CwMaWh6riJYkYwTSmoXo3KKhX7pxZvU8y8gaEedsVNKYBcEZZ1JkQnzTtE/EAf7FmjWEBylQHRW H5hbQCIuIJgpWUCFN5VPNHWesFFyWBdsBWfEih18DoGOJh/lbLWXQXCVgFwgRCFPbOKtFoF4JR4 Zl5UvHfqCdKqd0oHhbaHPkHal7DvkFeUlPbzK7IFvYM0t5Qzw0jvx0ylEuVG6sesruWS655cMR/ CRicWi1QNbPpGIMWwYc4fMSnFfTQ7tcvj1Pk8gc5YyqPo+fKCr+sJnEgC/49JJjKRLrWI= 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