From nobody Fri Sep 25 13:18:48 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B9A83D9DA2 for ; Fri, 11 Sep 2026 23:28:55 +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=1789169337; cv=pass; b=bn29mxp1MMAPvtVL01S5Hf29XGajtdBzpXKfb94Z13n33yU/7QJlIX7wL/PFNQQ0Zr+fLe71oLr+av0bhWd1tCAKv6m8XWPANRMhqTbPcZ2A3PMJ85GBSeJ8FHl4a+pOWhZ2bPy107tPUszoWz5rZg+DNOkHNhJL4VxYf5crKiU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169337; c=relaxed/simple; bh=Fw+pEp91dA7obohAWpnhT9o4vjgtW35KWbqZzipARa8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gMhAC9kCo5140SIZm61LZ2XniZz/fztDZqOoVTLUAe6svesX4WmG9P5JNYeLimcboLuNVqmAUt2y/aiSWenHmPxPQWnjKnh5ROtI6XL7k7nOcWz5f+ifaMMn9aYpDkQtR85Pcl2wERQfffzDfzmhyjwmWBZnwdFT1WSX3g2LebQ= 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=TKi5aawo; 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="TKi5aawo" ARC-Seal: i=1; a=rsa-sha256; t=1789169295; cv=none; d=zohomail.com; s=zohoarc; b=BLsQzbOajC0MtJzT8iuaPftcSjceXOdz3F2VXzCDwJBJq+u8E699xE08N/0yLgzDUzjlAHeyhm8ovuyaMYwmENZx5viFA9AzSAa6LCPvHFL0fSahmPhm3Aat1o5yowxLl5OLGnrUvfM+GHDnRNYNnIlWTEYlP6Fdp8Y7PyXKX4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169295; 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=JDUEV1gvHja4fWSVHWE1yshZgxKxjnzS5u6zcvauO/E=; b=Gg/9zZVV+2u9Z38VUEeDPcv+6rO1sYDK0BGvxWHruLdWe/2sPzJYssaKKeEM/nABFPvPk4/R5EMr2qRK3vgF9TVH4xljelFQLgNFalsoxKt+KRtiOelBwhGieY/iFa6EWRwjpb7RIEHkpIXyKQlCT4Rl7TUO9khnigfhp6sDuMU= 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=1789169295; 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=JDUEV1gvHja4fWSVHWE1yshZgxKxjnzS5u6zcvauO/E=; b=TKi5aawor7IbMyLx4sUXvTmHyq9E21dkVOSY8o8eWmAqxefTox1PHkv0tltGN0Or uMe+I6fwcYCBdTDb9s08TdwxFBiK6ul1QSa1/Yx0ph2TdLBO4UeuWKsq+hXzjmWIZBZ oq0Gbe2Ry67+CCYqD3tyL6MQuDalit9sBgj1jx+k= Received: by mx.zohomail.com with SMTPS id 1789169294315286.17206848202227; Fri, 11 Sep 2026 16:28:14 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:02 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-1-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=6327; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=Fw+pEp91dA7obohAWpnhT9o4vjgtW35KWbqZzipARa8=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DPy/hXsiaOCel7CFfMlKuIDgFhBdCpZTic e+LAVr8xpCJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PezQC/wI1nDRka+zeVTsJdXyNBcPWvNJXuBiisdjsfgt/V4dVNDZNSbI3D59hREWdyYJCRTtQvT z1oz1zOvJi5vzFydsmbUwxCLym6uxXYZjSoo+Muex2TDa4PssdTwy/P6kCgusHhVdgBBe8KmTF3 ja2P/If1ctZNWLOZWE6rWQRE6f747tTSn/EVF/xjgVOfp8JiLm10NGWSgdaXKJgPNYLLwLXgAh6 HkbdYZPfmnsI9X4rBKVbaXGvQnwveDmZp6wuqWr/+brt05JgC1slsB7o5O1ny/sJz16LOnzXbHw PYPxEnZEAjUs+XDJPwP8Ne2e5N0cmHGs2e6PJY5fVy1EoAd/kps7K/qHiR9MSW7dC6gpLAcvRr/ SUbGuC8VTbDs93Ijrkdedc/nSxMNCVNmBKQtY5JtLgf3/VV6avzduVJRNs5L6h0FKOm9epdxP1o SlFT22qgysaChSXmWDlaWo2HfsW6WLAwz8flhaQ2xzygEvhMpWHAreuMXV5j+7Qbr7+Gs= 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. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 8 +++++++- drivers/gpu/drm/panfrost/panfrost_drv.c | 6 ------ drivers/gpu/drm/panfrost/panfrost_gem.c | 26 ++++++++++++++------= ---- drivers/gpu/drm/panfrost/panfrost_gem.h | 7 ++++--- drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 8 ++------ 5 files changed, 28 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 485349faf251..05c40d5a20b5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -280,9 +280,14 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_job; =20 - panfrost_gem_init(pfdev); + err =3D panfrost_gem_init(pfdev); + if (err) + goto out_perfcnt; =20 return 0; + +out_perfcnt: + panfrost_perfcnt_fini(pfdev); out_job: panfrost_jm_fini(pfdev); out_mmu: @@ -304,6 +309,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); panfrost_mmu_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 96a66d673ba6..9882a3ede75f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -1003,14 +1003,9 @@ static int panfrost_probe(struct platform_device *pd= ev) if (err < 0) goto err_out1; =20 - err =3D panfrost_gem_shrinker_init(&pfdev->base); - if (err) - goto err_out2; =20 return 0; =20 -err_out2: - drm_dev_unregister(&pfdev->base); err_out1: pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); @@ -1024,7 +1019,6 @@ static void panfrost_remove(struct platform_device *p= dev) struct panfrost_device *pfdev =3D platform_get_drvdata(pdev); =20 drm_dev_unregister(&pfdev->base); - panfrost_gem_shrinker_cleanup(&pfdev->base); =20 pm_runtime_get_sync(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 3a7fce428898..f39c0f50ed4f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -15,20 +15,24 @@ #include "panfrost_gem.h" #include "panfrost_mmu.h" =20 -void panfrost_gem_init(struct panfrost_device *pfdev) +int panfrost_gem_init(struct panfrost_device *pfdev) { - int err; + if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && panfrost_transparent_hugep= age) { + int err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); + + if (drm_gem_get_huge_mnt(&pfdev->base)) + drm_info(&pfdev->base, "Using Transparent Hugepage\n"); + else if (err) + drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", + err); + } =20 - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && - !panfrost_transparent_hugepage) - return; + return panfrost_gem_shrinker_init(pfdev); +} =20 - err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); - if (drm_gem_get_huge_mnt(&pfdev->base)) - drm_info(&pfdev->base, "Using Transparent Hugepage\n"); - else if (err) - drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", - err); +void panfrost_gem_fini(struct panfrost_device *pfdev) +{ + panfrost_gem_shrinker_fini(pfdev); } =20 #ifdef CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panf= rost/panfrost_gem.h index 79d4377019e9..5c823cdbd980 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -129,7 +129,8 @@ drm_mm_node_to_panfrost_mapping(struct drm_mm_node *nod= e) return container_of(node, struct panfrost_gem_mapping, mmnode); } =20 -void panfrost_gem_init(struct panfrost_device *pfdev); +int panfrost_gem_init(struct panfrost_device *pfdev); +void panfrost_gem_fini(struct panfrost_device *pfdev); =20 struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, = size_t size); =20 @@ -154,8 +155,8 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); =20 -int panfrost_gem_shrinker_init(struct drm_device *dev); -void panfrost_gem_shrinker_cleanup(struct drm_device *dev); +int panfrost_gem_shrinker_init(struct panfrost_device *pfdev); +void panfrost_gem_shrinker_fini(struct panfrost_device *pfdev); =20 void panfrost_gem_set_label(struct drm_gem_object *obj, const char *label); int panfrost_gem_sync(struct drm_gem_object *obj, u32 type, diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index 2fe967a90bcb..fefae87535d6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -95,10 +95,8 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, st= ruct shrink_control *sc) * * This function registers and sets up the panfrost shrinker. */ -int panfrost_gem_shrinker_init(struct drm_device *dev) +int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) { - struct panfrost_device *pfdev =3D to_panfrost_device(dev); - pfdev->shrinker =3D shrinker_alloc(0, "drm-panfrost"); if (!pfdev->shrinker) return -ENOMEM; @@ -118,10 +116,8 @@ int panfrost_gem_shrinker_init(struct drm_device *dev) * * This function unregisters the panfrost shrinker. */ -void panfrost_gem_shrinker_cleanup(struct drm_device *dev) +void panfrost_gem_shrinker_fini(struct panfrost_device *pfdev) { - struct panfrost_device *pfdev =3D to_panfrost_device(dev); - if (pfdev->shrinker) shrinker_free(pfdev->shrinker); } --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E06CF403B1E for ; Fri, 11 Sep 2026 23:28:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169341; cv=pass; b=ksh3DgL0wTmNIhVC9xwVJSbYuSdw/8+06xUiDuE47daSVvgY8yeNaSBQy2RlIv7K/eGb7jpq1l1CZSkR09UgfUfmbDsE+oRNnu9iMhkbzQztS5AA1kdvjtSbPbopA6ROle1OZpKlsRaAJfm0WbeITAe2yZd7JFGOdSDAYkd9Nqc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169341; c=relaxed/simple; bh=BseDd5ptshL8O0X6ZZAknqhIzPZMy2A4L4RfHDWk90U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jf6Um4USpPYMftV/4EmmDF68ePwShGR15u/IjW133hRUm+DACKgRwUtYRFc5JgS4Vt56gzz48gwWCAZRTHUM/lpObI6TUFkzTTPp6jMiR1rsdusoNr1Wb+ZsF23hWGi6dqOv8amRNXuWaBc19uEXaHmsNSsV91dlM+dLfbQHKZo= 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=SRItA24/; 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="SRItA24/" ARC-Seal: i=1; a=rsa-sha256; t=1789169299; cv=none; d=zohomail.com; s=zohoarc; b=JObFIRc5+DYuzsk3s/9VZJ9LMUJZEoBIqXFiM6ohlccKNSipwwqKPxP/mOMsdnLJfB3Y2ahPHdOUx3CyBSY4xEwVY97I8I6YJfJSjKbjJVx9xNH6iTx8lbZKnKwW9NfhDprYrUVlw8CGOmsAG51ey9AdwrLpV8Pkv3AyBnsxQ5E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169299; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=LZw4Kt2mQuWgyKmlrDPFTNJYeu3IN02ygsBncDd+4ds=; b=b15Hdz16kqLXKybkFlajzgkOU9trRbaqz6PoJ8vaQPBP9Tce3NyiioGkE5a63oHBHA6UhL41FES9ALAcNrq6FL5PUAoWuANMneXpGQr+k4A2DWQuadT/7SyONDZIl3Les7Ce4QTiu99WF+zhJ00iSGjI0aABbwIie5TC8JG/3JU= 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=1789169299; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=LZw4Kt2mQuWgyKmlrDPFTNJYeu3IN02ygsBncDd+4ds=; b=SRItA24/vIh6JtQ5G64CSgep6GInxd2bg5CVBEnILBwnF2R7nVUPl9fWMP+cWyzZ iqRN4H8t9N06+7GzjYghgHCZOnlb3tbXMs9P6kvWI/G7v0wMIrnLg/WWh3b8TqBYOuE yiW2ZkPUM2GkiFQELU7zfvBOC3gknOVbON7lLuXc= Received: by mx.zohomail.com with SMTPS id 1789169299371922.72490304029; Fri, 11 Sep 2026 16:28:19 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:03 +0100 Subject: [PATCH v9 02/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: <20260912-claude-fixes-v9-2-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7189; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=BseDd5ptshL8O0X6ZZAknqhIzPZMy2A4L4RfHDWk90U=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DCMgKaSg+oRu3roU3gLl8S0Y+N1k9+FhJj 3BlQO4I1Q+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PTuxDAC0WMvd6r6uAIh+sBxhJCepsngGeshhf0Rtp0jgdmMFfiQbR2Rv2bjVMB8LxvklJAbdCbv RyjxG4SOANUlc3z6tAqlwCn1o8Cygrac1NtIiAf2OGBLa7Du86GsyigGFivK68eDm5Y4r9Ni0lP c75FL7NlcslGUc4Jg5RFjtm2fr6/44O+kTpq440jJCGcY1NfDMK8uzkaJtPGRXIUUrMbOLo//zb 6qCmUZ5GnNhJCh/4OJGl0sh6N4LyGOVXJfKl2sMDSY5T8fwYSGyBSe273hS4JxoERuZf7MZwngD lRml6ZNaGrW8Sig+n2oWF9tzWuNJZ3i5y7JdFpNNnKYkwVUxEJNlq/AXcw5F+HyrH8ODQ5MpwaP AsfE5hadOYX1esu8Kk/+Ptgqa1Rq5LbPu4tVLaeqTYe9ctpj6rL0yRun1RGmLs9chI/C3dXC3zA JLiqIEi36tndAUyIfvcApJR8HJKreJuAAnpfCGxeKBYnFIvrIfi35ShMtvhPlEoEpMxdY= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The device init function feels a bit cluttered with things that should be done in the specific subsystems where those locks and lists are being used. Same goes for module parameters, it's best to limit them to the subsystems where they're relevant. Then we can also discard panfrost_drv.h since the transparent_huge_page doesn't need to be accessed elsewhere. We can also simplify the creation of a mount point, because drm_gem_get_huge_mnt() would never return NULL if drm_gem_huge_mnt_create() returns 0 when kernel is built with support for transparent huge pages. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 7 ------- drivers/gpu/drm/panfrost/panfrost_drv.c | 10 ---------- drivers/gpu/drm/panfrost/panfrost_drv.h | 9 --------- drivers/gpu/drm/panfrost/panfrost_gem.c | 19 +++++++++++++------ drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 3 +++ drivers/gpu/drm/panfrost/panfrost_gpu.c | 2 ++ drivers/gpu/drm/panfrost/panfrost_job.c | 1 + drivers/gpu/drm/panfrost/panfrost_mmu.c | 3 +++ 8 files changed, 22 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 05c40d5a20b5..c1a2e93a2b9b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -216,13 +216,6 @@ int panfrost_device_init(struct panfrost_device *pfdev) { int err; =20 - mutex_init(&pfdev->sched_lock); - INIT_LIST_HEAD(&pfdev->as_lru_list); - - spin_lock_init(&pfdev->as_lock); - - spin_lock_init(&pfdev->cycle_counter.lock); - #ifdef CONFIG_DEBUG_FS mutex_init(&pfdev->debugfs.gems_lock); INIT_LIST_HEAD(&pfdev->debugfs.gems_list); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 9882a3ede75f..59af79a534fa 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -21,7 +21,6 @@ #include =20 #include "panfrost_device.h" -#include "panfrost_drv.h" #include "panfrost_gem.h" #include "panfrost_mmu.h" #include "panfrost_job.h" @@ -955,12 +954,6 @@ static const struct drm_driver panfrost_drm_driver =3D= { #endif }; =20 -#ifdef CONFIG_TRANSPARENT_HUGEPAGE -bool panfrost_transparent_hugepage =3D true; -module_param_named(transparent_hugepage, panfrost_transparent_hugepage, bo= ol, 0400); -MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point = with Transparent Hugepage enabled (true =3D default)"); -#endif - static int panfrost_probe(struct platform_device *pdev) { struct panfrost_device *pfdev; @@ -979,9 +972,6 @@ static int panfrost_probe(struct platform_device *pdev) =20 pfdev->coherent =3D device_get_dma_attr(&pdev->dev) =3D=3D DEV_DMA_COHERE= NT; =20 - mutex_init(&pfdev->shrinker_lock); - INIT_LIST_HEAD(&pfdev->shrinker_list); - err =3D panfrost_device_init(pfdev); if (err) { if (err !=3D -EPROBE_DEFER) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.h b/drivers/gpu/drm/panf= rost/panfrost_drv.h deleted file mode 100644 index a2277ec61aab..000000000000 --- a/drivers/gpu/drm/panfrost/panfrost_drv.h +++ /dev/null @@ -1,9 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 or MIT */ -/* Copyright 2025 Amazon.com, Inc. or its affiliates */ - -#ifndef __PANFROST_DRV_H__ -#define __PANFROST_DRV_H__ - -extern bool panfrost_transparent_hugepage; - -#endif diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index f39c0f50ed4f..383ac8cd5645 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -11,20 +11,27 @@ #include #include #include "panfrost_device.h" -#include "panfrost_drv.h" #include "panfrost_gem.h" #include "panfrost_mmu.h" =20 +#ifdef CONFIG_TRANSPARENT_HUGEPAGE +static bool panfrost_transparent_hugepage =3D true; +module_param_named(transparent_hugepage, panfrost_transparent_hugepage, bo= ol, 0400); +MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point = with Transparent Hugepage enabled (true =3D default)"); +#else +#define panfrost_transparent_hugepage false +#endif + int panfrost_gem_init(struct panfrost_device *pfdev) { - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && panfrost_transparent_hugep= age) { + if (panfrost_transparent_hugepage) { int err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); =20 - if (drm_gem_get_huge_mnt(&pfdev->base)) + if (err) + drm_warn(&pfdev->base, + "Can't use Transparent Hugepage (%d)\n", err); + else drm_info(&pfdev->base, "Using Transparent Hugepage\n"); - else if (err) - drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", - err); } =20 return panfrost_gem_shrinker_init(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index fefae87535d6..72cd7a165e6d 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -97,6 +97,9 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, str= uct shrink_control *sc) */ int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) { + mutex_init(&pfdev->shrinker_lock); + INIT_LIST_HEAD(&pfdev->shrinker_list); + pfdev->shrinker =3D shrinker_alloc(0, "drm-panfrost"); if (!pfdev->shrinker) return -ENOMEM; diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panf= rost/panfrost_gpu.c index 7d555e63e21a..8a15ccce08e9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -516,6 +516,8 @@ int panfrost_gpu_init(struct panfrost_device *pfdev) { int err; =20 + spin_lock_init(&pfdev->cycle_counter.lock); + err =3D panfrost_gpu_soft_reset(pfdev); if (err) return err; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index d59b4863b8ad..476c936b54e6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -874,6 +874,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) =20 INIT_WORK(&pfdev->reset.work, panfrost_reset_work); spin_lock_init(&js->job_lock); + mutex_init(&pfdev->sched_lock); =20 js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->base.dev), = "job"); if (js->irq < 0) diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 4a3162c3b659..5c393ed6e310 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -955,6 +955,9 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) { int err; =20 + INIT_LIST_HEAD(&pfdev->as_lru_list); + spin_lock_init(&pfdev->as_lock); + pfdev->mmu_irq =3D platform_get_irq_byname(to_platform_device(pfdev->base= .dev), "mmu"); if (pfdev->mmu_irq < 0) return pfdev->mmu_irq; --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F56440E8CD for ; Fri, 11 Sep 2026 23:28:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169342; cv=pass; b=dGe7AVWgGOxdhPsewDd3J7PqHSbQ+9cn/yw8ISa4z+rfS+xjz8OS63DSpilnO1c4DYPP+7xh7LM5C/vM73wJ+uSmRGk8DgHLpeLmTVO17EcKkoDd99AVT91a4rWKO0YB2c1WZbnhCmcqaCH2d6yST+BUb/thuYjNpcJbXsX5hPM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169342; c=relaxed/simple; bh=KpBZvM+jDCQcDp+jAb4hb9VNZO+PYTWBYmA084H6WNg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FbCDkExsQMVZqyS0Zmqwr/BOE9FegkIretoRtGlEOIGS4Xx3SBErIF62f3gfalPVC6nlgiLlGhdb4VRqlRM3E7F6zLISoArcHfHoT9Oq6sEY+L3K2CiW33EYR537GfSBAmZqzjSuXEzTeKMYRD9C1AD3pHese8UyCt2b6HHPuxA= 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=QCgz4zzO; 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="QCgz4zzO" ARC-Seal: i=1; a=rsa-sha256; t=1789169305; cv=none; d=zohomail.com; s=zohoarc; b=b7XTY7/2ymjWJFmWehwcOZt4/1YnrXqTO1NzlvjO7Brxu34gFe8fTdiAvDs/LbXwF39g6DnKQKrE44o7lroz+DVXLaZ8FCXjuiy8PkXEUvUBsv3zj9jckIhVpV4XD+AAVOO3yBGkUICuZd4TDWokom0iM/wYdYEDxZe5khvdUQ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169305; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=qA5nkyPf4OsAk/8123sJ/LUfYJEvp6UZplI2BJVIXLE=; b=GjWsYO84ha6MdvbOY7SlpwvsFfaPSYdm78kj/N/lRvUguZV09M82oTYcrhXQyBTXzEgaoRRLeqB2ZimV2m8ldzvimeRXybtHR/LFuAAA7vp78Y9XgDosH09PVXnxBeyGxEsUN+/u8S4s+btW2laE2c2vtaWC52ZiTOxImEFDRlI= 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=1789169305; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qA5nkyPf4OsAk/8123sJ/LUfYJEvp6UZplI2BJVIXLE=; b=QCgz4zzOQbNSl9awCUOfUzrXh6VLEIsd5d1tgCFN9weGj8UmAnWKsi0yU/zfBpyw +wsYzr6XqHZH84SRToQzP9fGXSmE0y7wB1AwsThTl+HPFHE8HtSYb0KJMUYUBykos3L dpC2G9s5v/ylES1PTR1LFtftrhRu2ik3H1sIJLCI= Received: by mx.zohomail.com with SMTPS id 1789169304370355.37734028398927; Fri, 11 Sep 2026 16:28:24 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:04 +0100 Subject: [PATCH v9 03/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: <20260912-claude-fixes-v9-3-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12684; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=KpBZvM+jDCQcDp+jAb4hb9VNZO+PYTWBYmA084H6WNg=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6Dhc+TmyArvbws2hdFZPl/Egw3W6s/Jnd7B mOWT3vAdJmJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PfSrC/0Wl3ZH+B0wGbCxdKDNkTvkIoNeIRoIkVO7nCkXQDiz68rBZg6hQ+ZwSj/kbvizGF3jhTD jScahjlxwihuLsto/kqReGJ4pGgDbNR/Xv4MCVGWdL2TkfQbTQrmxM4JFq7NAqr31vlC8pwNNvf rYjhgQ1sQs0FQ2woQ+f/l4cJ9HtTFrFZ08715HsIB0T1UT66PKbVEYRWzjltSDHaqtGIb5Sa/Bw Ij395XYT7JtYydBgvHY9MUfKM+YUHVcb5cJpFFbhoLnf7C5FNSX/B93tYvzNqrcijkFnSzNNP1N c3N+5+00gGBcbk9jCaXLKxnwUnUCVEAJb48J6dhHF54mBqxu47ipXO1lAZXezVm7zqTRFknK92e OKLsEIWnJFqMvI1dSuR9UAFs2ppL3oq4ybhdq10YJFrFv8Zc/Uft862pbtB9r48Hi8LEURiNmBN HG8FeTz/qpsNvYdvdrAv+8FGlZzF2ZXRjGNaJLW+uPFvFx16Vz6Q7MVKkPbG4fNO9nGEU= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Because debugfs knobs are a device interface, and also the different knobs deal with specific subsystems, it's best to move their initialisations away from panfrost_drv.c and into the subsystem they provide information about. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 8 ++ drivers/gpu/drm/panfrost/panfrost_device.h | 4 + drivers/gpu/drm/panfrost/panfrost_drv.c | 129 +------------------------= ---- drivers/gpu/drm/panfrost/panfrost_gem.c | 29 ++++++- drivers/gpu/drm/panfrost/panfrost_gem.h | 3 +- drivers/gpu/drm/panfrost/panfrost_job.c | 99 ++++++++++++++++++++++ drivers/gpu/drm/panfrost/panfrost_job.h | 4 + 7 files changed, 144 insertions(+), 132 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index c1a2e93a2b9b..5bf528f41278 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -561,3 +561,11 @@ EXPORT_GPL_DEV_PM_OPS(panfrost_pm_ops) =3D { RUNTIME_PM_OPS(panfrost_device_runtime_suspend, panfrost_device_runtime_r= esume, NULL) SYSTEM_SLEEP_PM_OPS(panfrost_device_suspend, panfrost_device_resume) }; + +#ifdef CONFIG_DEBUG_FS +void panfrost_device_debugfs_init(struct drm_minor *minor) +{ + panfrost_gem_debugfs_init(minor); + panfrost_sched_debugfs_init(minor); +} +#endif // CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index 1fe1554f2652..a0b9a2145fc9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -341,4 +341,8 @@ panfrost_device_schedule_reset(struct panfrost_device *= pfdev) queue_work(pfdev->reset.wq, &pfdev->reset.work); } =20 +#ifdef CONFIG_DEBUG_FS +void panfrost_device_debugfs_init(struct drm_minor *minor); +#endif // CONFIG_DEBUG_FS + #endif diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 59af79a534fa..55fc22e8d4d4 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -792,133 +792,6 @@ static const struct file_operations panfrost_drm_driv= er_fops =3D { .show_fdinfo =3D drm_show_fdinfo, }; =20 -#ifdef CONFIG_DEBUG_FS -static int panthor_gems_show(struct seq_file *m, void *data) -{ - struct drm_info_node *node =3D m->private; - struct panfrost_device *pfdev =3D to_panfrost_device(node->minor->dev); - - panfrost_gem_debugfs_print_bos(pfdev, m); - - return 0; -} - -static void show_panfrost_jm_ctx(struct panfrost_jm_ctx *jm_ctx, u32 handl= e, - struct seq_file *m) -{ - struct drm_device *ddev =3D ((struct drm_info_node *)m->private)->minor->= dev; - const char *prio =3D "UNKNOWN"; - - static const char * const prios[] =3D { - [DRM_SCHED_PRIORITY_HIGH] =3D "HIGH", - [DRM_SCHED_PRIORITY_NORMAL] =3D "NORMAL", - [DRM_SCHED_PRIORITY_LOW] =3D "LOW", - }; - - if (jm_ctx->slot_entity[0].priority !=3D - jm_ctx->slot_entity[1].priority) - drm_warn(ddev, "Slot priorities should be the same in a single context"); - - if (jm_ctx->slot_entity[0].priority < ARRAY_SIZE(prios)) - prio =3D prios[jm_ctx->slot_entity[0].priority]; - - seq_printf(m, " JM context %u: priority %s\n", handle, prio); -} - -static int show_file_jm_ctxs(struct panfrost_file_priv *pfile, - struct seq_file *m) -{ - struct panfrost_jm_ctx *jm_ctx; - unsigned long i; - - xa_lock(&pfile->jm_ctxs); - xa_for_each(&pfile->jm_ctxs, i, jm_ctx) { - jm_ctx =3D panfrost_jm_ctx_get(jm_ctx); - xa_unlock(&pfile->jm_ctxs); - show_panfrost_jm_ctx(jm_ctx, i, m); - panfrost_jm_ctx_put(jm_ctx); - xa_lock(&pfile->jm_ctxs); - } - xa_unlock(&pfile->jm_ctxs); - - return 0; -} - -static struct drm_info_list panthor_debugfs_list[] =3D { - {"gems", - panthor_gems_show, 0, NULL}, -}; - -static int panthor_gems_debugfs_init(struct drm_minor *minor) -{ - drm_debugfs_create_files(panthor_debugfs_list, - ARRAY_SIZE(panthor_debugfs_list), - minor->debugfs_root, minor); - - return 0; -} - -static int show_each_file(struct seq_file *m, void *arg) -{ - struct drm_info_node *node =3D (struct drm_info_node *)m->private; - struct drm_device *ddev =3D node->minor->dev; - int (*show)(struct panfrost_file_priv *, struct seq_file *) =3D - node->info_ent->data; - struct drm_file *file; - int ret; - - ret =3D mutex_lock_interruptible(&ddev->filelist_mutex); - if (ret) - return ret; - - list_for_each_entry(file, &ddev->filelist, lhead) { - struct task_struct *task; - struct panfrost_file_priv *pfile =3D file->driver_priv; - struct pid *pid; - - /* - * Although we have a valid reference on file->pid, that does - * not guarantee that the task_struct who called get_pid() is - * still alive (e.g. get_pid(current) =3D> fork() =3D> exit()). - * Therefore, we need to protect this ->comm access using RCU. - */ - rcu_read_lock(); - pid =3D rcu_dereference(file->pid); - task =3D pid_task(pid, PIDTYPE_TGID); - seq_printf(m, "client_id %8llu pid %8d command %s:\n", - file->client_id, pid_nr(pid), - task ? task->comm : ""); - rcu_read_unlock(); - - ret =3D show(pfile, m); - if (ret < 0) - break; - - seq_puts(m, "\n"); - } - - mutex_unlock(&ddev->filelist_mutex); - return ret; -} - -static struct drm_info_list panfrost_sched_debugfs_list[] =3D { - { "sched_ctxs", show_each_file, 0, show_file_jm_ctxs }, -}; - -static void panfrost_sched_debugfs_init(struct drm_minor *minor) -{ - drm_debugfs_create_files(panfrost_sched_debugfs_list, - ARRAY_SIZE(panfrost_sched_debugfs_list), - minor->debugfs_root, minor); -} - -static void panfrost_debugfs_init(struct drm_minor *minor) -{ - panthor_gems_debugfs_init(minor); - panfrost_sched_debugfs_init(minor); -} -#endif - /* * Panfrost driver version: * - 1.0 - initial interface @@ -950,7 +823,7 @@ static const struct drm_driver panfrost_drm_driver =3D { .gem_prime_import =3D panfrost_gem_prime_import, .gem_prime_import_sg_table =3D panfrost_gem_prime_import_sg_table, #ifdef CONFIG_DEBUG_FS - .debugfs_init =3D panfrost_debugfs_init, + .debugfs_init =3D panfrost_device_debugfs_init, #endif }; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 383ac8cd5645..518f24549b9d 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -9,6 +9,7 @@ #include =20 #include +#include #include #include "panfrost_device.h" #include "panfrost_gem.h" @@ -735,8 +736,8 @@ static void panfrost_gem_debugfs_bo_print(struct panfro= st_gem_object *bo, totals->reclaimable +=3D resident_size; } =20 -void panfrost_gem_debugfs_print_bos(struct panfrost_device *pfdev, - struct seq_file *m) +static void panfrost_gem_debugfs_print_bos(struct panfrost_device *pfdev, + struct seq_file *m) { struct gem_size_totals totals =3D {0}; struct panfrost_gem_object *bo; @@ -756,4 +757,28 @@ void panfrost_gem_debugfs_print_bos(struct panfrost_de= vice *pfdev, seq_printf(m, "Total size: %zd, Total resident: %zd, Total reclaimable: %= zd\n", totals.size, totals.resident, totals.reclaimable); } + +static int panfrost_gems_show(struct seq_file *m, void *data) +{ + struct drm_info_node *node =3D m->private; + struct panfrost_device *pfdev =3D to_panfrost_device(node->minor->dev); + + panfrost_gem_debugfs_print_bos(pfdev, m); + + return 0; +} + +static struct drm_info_list panfrost_debugfs_list[] =3D { + {"gems", + panfrost_gems_show, 0, NULL}, +}; + +int panfrost_gem_debugfs_init(struct drm_minor *minor) +{ + drm_debugfs_create_files(panfrost_debugfs_list, + ARRAY_SIZE(panfrost_debugfs_list), + minor->debugfs_root, minor); + + return 0; +} #endif diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panf= rost/panfrost_gem.h index 5c823cdbd980..3008afcf4bff 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -164,8 +164,7 @@ int panfrost_gem_sync(struct drm_gem_object *obj, u32 t= ype, void panfrost_gem_internal_set_label(struct drm_gem_object *obj, const cha= r *label); =20 #ifdef CONFIG_DEBUG_FS -void panfrost_gem_debugfs_print_bos(struct panfrost_device *pfdev, - struct seq_file *m); +int panfrost_gem_debugfs_init(struct drm_minor *minor); #endif =20 #endif /* __PANFROST_GEM_H__ */ diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 476c936b54e6..00fb36c577df 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include =20 @@ -1138,3 +1140,100 @@ int panfrost_jm_ctx_destroy(struct drm_file *file, = u32 handle) panfrost_jm_ctx_put(jm_ctx); return 0; } + +#ifdef CONFIG_DEBUG_FS +static void show_panfrost_jm_ctx(struct panfrost_jm_ctx *jm_ctx, u32 handl= e, + struct seq_file *m) +{ + struct drm_device *ddev =3D ((struct drm_info_node *)m->private)->minor->= dev; + const char *prio =3D "UNKNOWN"; + + static const char * const prios[] =3D { + [DRM_SCHED_PRIORITY_HIGH] =3D "HIGH", + [DRM_SCHED_PRIORITY_NORMAL] =3D "NORMAL", + [DRM_SCHED_PRIORITY_LOW] =3D "LOW", + }; + + if (jm_ctx->slot_entity[0].priority !=3D + jm_ctx->slot_entity[1].priority) + drm_warn(ddev, "Slot priorities should be the same in a single context"); + + if (jm_ctx->slot_entity[0].priority < ARRAY_SIZE(prios)) + prio =3D prios[jm_ctx->slot_entity[0].priority]; + + seq_printf(m, " JM context %u: priority %s\n", handle, prio); +} + +static int show_file_jm_ctxs(struct panfrost_file_priv *pfile, + struct seq_file *m) +{ + struct panfrost_jm_ctx *jm_ctx; + unsigned long i; + + xa_lock(&pfile->jm_ctxs); + xa_for_each(&pfile->jm_ctxs, i, jm_ctx) { + jm_ctx =3D panfrost_jm_ctx_get(jm_ctx); + xa_unlock(&pfile->jm_ctxs); + show_panfrost_jm_ctx(jm_ctx, i, m); + panfrost_jm_ctx_put(jm_ctx); + xa_lock(&pfile->jm_ctxs); + } + xa_unlock(&pfile->jm_ctxs); + + return 0; +} + +static int show_each_file(struct seq_file *m, void *arg) +{ + struct drm_info_node *node =3D (struct drm_info_node *)m->private; + struct drm_device *ddev =3D node->minor->dev; + int (*show)(struct panfrost_file_priv *, struct seq_file *) =3D + node->info_ent->data; + struct drm_file *file; + int ret; + + ret =3D mutex_lock_interruptible(&ddev->filelist_mutex); + if (ret) + return ret; + + list_for_each_entry(file, &ddev->filelist, lhead) { + struct task_struct *task; + struct panfrost_file_priv *pfile =3D file->driver_priv; + struct pid *pid; + + /* + * Although we have a valid reference on file->pid, that does + * not guarantee that the task_struct who called get_pid() is + * still alive (e.g. get_pid(current) =3D> fork() =3D> exit()). + * Therefore, we need to protect this ->comm access using RCU. + */ + rcu_read_lock(); + pid =3D rcu_dereference(file->pid); + task =3D pid_task(pid, PIDTYPE_TGID); + seq_printf(m, "client_id %8llu pid %8d command %s:\n", + file->client_id, pid_nr(pid), + task ? task->comm : ""); + rcu_read_unlock(); + + ret =3D show(pfile, m); + if (ret < 0) + break; + + seq_puts(m, "\n"); + } + + mutex_unlock(&ddev->filelist_mutex); + return ret; +} + +static struct drm_info_list panfrost_sched_debugfs_list[] =3D { + { "sched_ctxs", show_each_file, 0, show_file_jm_ctxs }, +}; + +void panfrost_sched_debugfs_init(struct drm_minor *minor) +{ + drm_debugfs_create_files(panfrost_sched_debugfs_list, + ARRAY_SIZE(panfrost_sched_debugfs_list), + minor->debugfs_root, minor); +} +#endif diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panf= rost/panfrost_job.h index c3f57e41a571..3e3b9717838f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.h +++ b/drivers/gpu/drm/panfrost/panfrost_job.h @@ -74,4 +74,8 @@ int panfrost_job_get_slot(struct panfrost_job *job); int panfrost_job_push(struct panfrost_job *job); void panfrost_job_put(struct panfrost_job *job); =20 +#ifdef CONFIG_DEBUG_FS +void panfrost_sched_debugfs_init(struct drm_minor *minor); +#endif + #endif --=20 2.55.0 From nobody Fri Sep 25 13:18:48 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 34DC7409280 for ; Fri, 11 Sep 2026 23:29:01 +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=1789169343; cv=pass; b=SnETGyAPU39WYqAzmur1N5qpaMYFc1Mv0BB8lg4GJls68Q0VrgWxPvXwAtDxhQLLj0pyep3/Z0a5Ijer3cmMU+MeEtaA6WT2DzshEqdlNo3FQjDVkVNbxR/6s4QlRwHBUzvzfTAyjCYc8zx2pCEf0VLDpL8+vWXGHH07S/Ffhes= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169343; c=relaxed/simple; bh=ZbKj/0+gldpyeLSSMbRlmpp9mm9nCUYXI4PymrPfLzQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DweQgmhCJzvEsjwb4STM5HoV+cqPCj8bQyc8qKcdgwBWQt8aOEweGbmEiHWPOlsN9SMBug4aPQRYh9P5S1d6QOGpt9bRgU0xrT0pVjN/6zuebp19uj+lgZbBLmUWppPoPwuridMo0PZxMIT5PMWlTjLES676sanmYYXe2EOSpAA= 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=e6zSvpln; 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="e6zSvpln" ARC-Seal: i=1; a=rsa-sha256; t=1789169309; cv=none; d=zohomail.com; s=zohoarc; b=Hl9X56XFA4xpbeOGoB63SUq03U5F+Z8XkpLiENp/R0FS0pzc82tk4WG0Or9ZTdz10rgTlP1l6S6vQz2q0ouMNerJhYHI1GBbv4NxY3eu6vzlN6eve4gabFJSJ+QzLsJUgpwFmZNK8eNhr5DPGRMdwdBcEIo8FKKlQdu+gGsl/YQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169309; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=5tcaP2IVkF4SV3ksstD6wFI9LNYjrG0cIcTQTiq6ocI=; b=bR7kFggb64+CRvdcNYGc8l1nCK0Iw3WL+A4zd2YicIR2q2l9EC+ND5PIM2TLr0APXe82F3jk1rS1n3deYJH7F6cMFyAkCwr8Hln5pul/qb3arXTFqWF+baUeSh4Uz+PhnMzqd9IOjnCaUQQrn1sp4irdQnzUwrLjei45qTOeGbI= 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=1789169309; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=5tcaP2IVkF4SV3ksstD6wFI9LNYjrG0cIcTQTiq6ocI=; b=e6zSvplnTz3wvjd3RDch1LccOkMyvMwvFSU3yh+8ggjKCobFN5DOcF4KeZKrl9aH DY2OYZvGbojf7Xa49DIdeVL8cpAyvJTLS1OJ6FOyq6LRlxYfUC8L46XHKXpcayLrS8+ GGyhzRdWV2HIyiJSqNrSdJkxpnHUweFu79zbcz7w= Received: by mx.zohomail.com with SMTPS id 1789169309363168.90670944563954; Fri, 11 Sep 2026 16:28:29 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:05 +0100 Subject: [PATCH v9 04/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: <20260912-claude-fixes-v9-4-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1586; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=ZbKj/0+gldpyeLSSMbRlmpp9mm9nCUYXI4PymrPfLzQ=; b=kA0DAAoBDiZ+TO5TQz0ByyZiAGqkjoOg1n+UAnsfidnU79r2s/+taL2zJOUS9PK8onuxeOL3Y okBswQAAQoAHRYhBDJAMOjABRdd+TcHpA4mfkzuU0M9BQJqpI6DAAoJEA4mfkzuU0M9CjcL/ROA 0JqYyVlRe8Ew2uOeXQ7BRYFz26BOhfFpqtwF7kz5+rR9oAe3H3aiZDeXAiafNi2TnzBsI+0fnGV r70AS+InRRRK8RgfOqm3nCi7Ak1SnGEw6ltHV2HXIVgki2rC4wbGTU4fSRu+pLmvprq7R9+aJtQ 8W6Wpg8Z+ae0fpZN0/YY3eqlxXH+4QXdIBTf0j4aZVIo80KsBzi/3j8QrWBkpyeb7kgAGDqtcHU o2uXB/XdJzEsZbJX0ibWFCTRlMxyz2jA9S4HJbIfkn2N0GrLJIOSvE2sf1FHKqknCZG44x9hmkn H69JwqO7gwRhsBNTvciPa8d6XwwiczNLD9J9f+ZNSsugh639EGYER8ZTR07zwB7CCmPlCz4+TBX GB2NCLdMzqvenQSNvTlvho/qjdbaTuHbz+acppE5iCFgjjkm50s4bvg8tra0oXCN55e53NqaHIC mhEjwIBcwczrJ1DQ6hpR6Oc/IJNX/qgQiKaUuI682XlNG+uUM91K8un6nrkQ== X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The clk_* API can deal with NULL clock objects, so we can do away with NULL checks in client code. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 5bf528f41278..b3a53504bd01 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -510,11 +510,9 @@ static int panfrost_device_resume(struct device *dev) if (ret) goto err_clk; =20 - if (pfdev->bus_clock) { - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; - } + ret =3D clk_enable(pfdev->bus_clock); + if (ret) + goto err_bus_clk; } =20 ret =3D pm_runtime_force_resume(dev); @@ -524,7 +522,7 @@ static int panfrost_device_resume(struct device *dev) return 0; =20 err_resume: - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS) && pfdev->bus_clock) + if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) clk_disable(pfdev->bus_clock); err_bus_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) @@ -545,9 +543,7 @@ static int panfrost_device_suspend(struct device *dev) return ret; =20 if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - if (pfdev->bus_clock) - clk_disable(pfdev->bus_clock); - + clk_disable(pfdev->bus_clock); clk_disable(pfdev->clock); } =20 --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 751F33CAE93 for ; Fri, 11 Sep 2026 23:29:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.182.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169350; cv=pass; b=u9g6tiMIhlr45hDgbntBhSk25Na7PEmg7bD3tf7PPgtHabka8oyWTL2ROPgpR0C7nnxYx5OPmLz0YBwnwndE6Qdmy/A3YtrtoFx6XnwqdgCcX92Ccd7ln3H593aWWbu3kFTEttmJGdCGmhXheh36mPUUc0myCmcmS3+kWikfP7Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169350; c=relaxed/simple; bh=8N9OTvjoinX5/P8Bx031evS2KBpmBBnj/B3cF4lIFps=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Im0jcn8M7m28k09sZrZU+GPvU2DHRb0aeZ25atonQG+24klV6zoLbNcwV3lRlT30ny/YwVGrxuMjYzNOQQfWrhcu/EXROG2a5v6cI5+DXBuRyaPeN1GN00RmC77iEj2XoM3dRdLC/928qtVOIzVW9TglNp7AZff4SlRR/g/ILfo= 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=VLKOXLUw; 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="VLKOXLUw" ARC-Seal: i=1; a=rsa-sha256; t=1789169315; cv=none; d=zohomail.com; s=zohoarc; b=h5GdodCEFYWC5aT5Y/s//I6Q+CHvxAqxaTWneE2iC2vVZRl12xU3dPyr/CLkxHedXIfoIGGdpLHl9k2w6cqmgY5X/2kwepXMNpu400fKuQMJ0O3DriDLEYrDgn3MvVd001kw7kTpvfQM4s/ozr10N3Wf4Py8FN6LlvbZ6q27DN4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169315; 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=mF1RZthkuxBEzV521eRDnzbipr0oJ1kFYAE3ZplKRrI=; b=YnLro6LnZjQIkSdX/VLtn69PK4p7HWAKA0r24RjFTOW0+kJPNfibSVF2L99ICzSR8H/l+98yqLpSdBXn/rK1zZxhvQ7ixZfpNHXnut7Q6uvI8iPhJ7JKxzMRJA/FIkF4c/XEnqX1efdRP8sg710O+cUi0QyAU2sWJZ1tkAv/8Uw= 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=1789169315; 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=mF1RZthkuxBEzV521eRDnzbipr0oJ1kFYAE3ZplKRrI=; b=VLKOXLUw7RqplPKwJnSdOtPG40kQL9RcdPXU2x//YsPEKx45uWVRh9LZVCoJ1HL4 9bafbtktoI45L2M+xbt7SQiechlV6mdRWZ6+5Dk2s/d8Kq3v/QDc4NwythwRT5iw3XA BWn17ab4mO0nR5HXAiC3TuWAK7hnWMArDk1T4rl4= Received: by mx.zohomail.com with SMTPS id 178916931426765.30832356669805; Fri, 11 Sep 2026 16:28:34 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:06 +0100 Subject: [PATCH v9 05/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: <20260912-claude-fixes-v9-5-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=6296; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=8N9OTvjoinX5/P8Bx031evS2KBpmBBnj/B3cF4lIFps=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DNigqCJshDoRQPNvcgGhnu2sXDOg3GT1s0 YkQaqCLPbeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PS7QDACn3Oe8lAXZQy7znZ/c3vG6QzQ/yWJJDJLrgIOCdVaRvpp2S42zk1BX8fZ10j865qNwPhw /83YrT08hW3DlEO7CeEXUVSIGPVIwsIWPtKOMNJUBMdXBldSyq6pHD8HSfXDLxWOV2vIyWhsqXV tXiTRnRtRNMMdkM7olHXRQQPhpcdEqYy+z0RgsShPKazKZ3CKGEQwuIPCpcCrAjnIw943yEp/Tb mLcZ8xcr6Jehgzoe3mgRwDTg0M/uByTsz9il+jTeGthXWR6/GocYbLReI8EZUyv2+1Q7ZGWQAUT RhFXQPoLtVEbddnLHVPd8/Kq6M5ukXH2DA/95VYugN5CRKfawtY3jO/ABIa3mvCCKi8mrjFGIeM sjWL5BKVNOnwlpYAg7PD0I7ykfUxcblMNpty8lW0UzCaNec/OnczroXM3XyxBoXIYyXzv10y5vp m/ARckoiLl9DuNqsDlIg+VJR9oRi02jj44R22JXO1k3TyjmMJmj6B8dfGr15kW1sE07PY= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Gather all clock enables and disables into a single function to avoid repetitions between driver init/fini and device resume/suspend, since these clocks are always handled in bulk. Also do clk (un)prepares and dis/enables at the same time, since the clk_prepare_* family of functions can simply increase the refcnt of an already prepared clock. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 118 +++++++++++++------------= ---- 1 file changed, 52 insertions(+), 66 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index b3a53504bd01..2fcbd223204c 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -34,10 +34,46 @@ static void panfrost_reset_fini(struct panfrost_device = *pfdev) reset_control_assert(pfdev->rstc); } =20 -static int panfrost_clk_init(struct panfrost_device *pfdev) +static int panfrost_clk_enable(struct panfrost_device *pfdev, bool enable_= ace_clock) { int err; + + err =3D clk_prepare_enable(pfdev->clock); + if (err) + return err; + + err =3D clk_prepare_enable(pfdev->bus_clock); + if (err) + goto disable_clock; + + if (enable_ace_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); + + return err; +} + +static void panfrost_clk_disable(struct panfrost_device *pfdev, bool disab= le_ace_clock) +{ + if (disable_ace_clock) + clk_disable_unprepare(pfdev->bus_ace_clock); + clk_disable_unprepare(pfdev->bus_clock); + clk_disable_unprepare(pfdev->clock); +} + +static int panfrost_clk_init(struct panfrost_device *pfdev) +{ unsigned long rate; + int err; =20 pfdev->clock =3D devm_clk_get(pfdev->base.dev, NULL); if (IS_ERR(pfdev->clock)) { @@ -48,53 +84,31 @@ static int panfrost_clk_init(struct panfrost_device *pf= dev) rate =3D clk_get_rate(pfdev->clock); dev_info(pfdev->base.dev, "clock rate =3D %lu\n", rate); =20 - err =3D clk_prepare_enable(pfdev->clock); - if (err) - return err; - pfdev->bus_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus"); if (IS_ERR(pfdev->bus_clock)) { - dev_err(pfdev->base.dev, "get bus_clock failed %ld\n", - PTR_ERR(pfdev->bus_clock)); err =3D PTR_ERR(pfdev->bus_clock); - goto disable_clock; + dev_err(pfdev->base.dev, "get bus_clock failed %d\n", err); + return err; } =20 if (pfdev->bus_clock) { rate =3D clk_get_rate(pfdev->bus_clock); dev_info(pfdev->base.dev, "bus_clock rate =3D %lu\n", rate); - - err =3D clk_prepare_enable(pfdev->bus_clock); - if (err) - goto disable_clock; } =20 pfdev->bus_ace_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus_ace"= ); if (IS_ERR(pfdev->bus_ace_clock)) { err =3D PTR_ERR(pfdev->bus_ace_clock); dev_err(pfdev->base.dev, "get bus_ace_clock failed %d\n", err); - goto disable_bus_clock; + return err; } =20 - err =3D clk_prepare_enable(pfdev->bus_ace_clock); - if (err) - goto disable_bus_clock; - - return 0; - -disable_bus_clock: - clk_disable_unprepare(pfdev->bus_clock); -disable_clock: - clk_disable_unprepare(pfdev->clock); - - return err; + return panfrost_clk_enable(pfdev, true); } =20 static void panfrost_clk_fini(struct panfrost_device *pfdev) { - clk_disable_unprepare(pfdev->bus_ace_clock); - clk_disable_unprepare(pfdev->bus_clock); - clk_disable_unprepare(pfdev->clock); + panfrost_clk_disable(pfdev, true); } =20 static int panfrost_regulator_init(struct panfrost_device *pfdev) @@ -436,34 +450,17 @@ static int panfrost_device_runtime_resume(struct devi= ce *dev) if (ret) return ret; =20 - ret =3D clk_enable(pfdev->clock); - if (ret) - goto err_clk; - - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; - - ret =3D clk_enable(pfdev->bus_ace_clock); - if (ret) - goto err_bus_ace_clk; + ret =3D panfrost_clk_enable(pfdev, true); + if (ret) { + reset_control_assert(pfdev->rstc); + return ret; + } } =20 panfrost_device_reset(pfdev, true); panfrost_devfreq_resume(pfdev); =20 return 0; - -err_bus_ace_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - clk_disable(pfdev->bus_clock); -err_bus_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - clk_disable(pfdev->clock); -err_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - reset_control_assert(pfdev->rstc); - return ret; } =20 static int panfrost_device_runtime_suspend(struct device *dev) @@ -480,9 +477,7 @@ static int panfrost_device_runtime_suspend(struct devic= e *dev) panfrost_gpu_power_off(pfdev); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) { - clk_disable(pfdev->bus_ace_clock); - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); + panfrost_clk_disable(pfdev, true); reset_control_assert(pfdev->rstc); } =20 @@ -506,13 +501,9 @@ static int panfrost_device_resume(struct device *dev) } =20 if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - ret =3D clk_enable(pfdev->clock); + ret =3D panfrost_clk_enable(pfdev, false); if (ret) goto err_clk; - - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; } =20 ret =3D pm_runtime_force_resume(dev); @@ -523,10 +514,7 @@ static int panfrost_device_resume(struct device *dev) =20 err_resume: if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->bus_clock); -err_bus_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->clock); + clk_disable_unprepare(pfdev->bus_clock); err_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); @@ -542,10 +530,8 @@ static int panfrost_device_suspend(struct device *dev) if (ret) return ret; =20 - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); - } + if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) + panfrost_clk_disable(pfdev, false); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 889904078FE for ; Fri, 11 Sep 2026 23:29:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169359; cv=pass; b=ApJ2mSqJ9ei14Z6CGMFDEgh8jgjMPBd0TTviySJyu3L2eZRgyYKbL2cjxZuwIhBJ0dZiCjE5JmASYU2/nicqvhPghQIAYwG0DV+s4JjWW+CbLVtvnbaMc00cLVBgLdhO5b8tKkBv13m5G/2ekG9K7cZloA/vHGNE2qk7MhTekkw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169359; c=relaxed/simple; bh=MXDSZuGOlvNH11js9h2jqHaS2B66edvM5cQo30VukSA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cgeLCgRylfdeuhJYmw05/BI+n+Fxb3wP4I44CC2NZYzhtRxk5BcE2s84X1Mx2wOZpdSnD5B9BCu/iaSVCyzo0W0iUZE61VXPd4gUqT8BkHFbE+5o8ICy4q3v1CLY/dMgtRrb2Y+Hxsm9lI/VAaPedx9PSjrMvlqW8LDHY+B2IYE= 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=eAfLPvRO; 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="eAfLPvRO" ARC-Seal: i=1; a=rsa-sha256; t=1789169319; cv=none; d=zohomail.com; s=zohoarc; b=gsEVOFbSm6XDK7bHY0FhBVs6uWvZ4/s3l2k6Zq2Dd4sdQjOkEEzNVkgEI6LcZx16othjeQ275//HpJf/OjH3p3Pgcj+zWhL7No4SY4XHSoDsLKIHxrXCo/T6NQ8GpLrO+Qa4w2weLAAcAlCHJwwLrHUnr5FBMOR6WgahUm+DvgI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169319; 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=uE6tGIUw4nUFeMlGUIl2Vj3+Z0EEpcFNwJvK87yeLC8=; b=FMsk6nEd2dtnSu59OjvzqK5Uz2vDFe9WRbPwu4dtf33scdt/xd+BLUqWCTSjW9gTnG9anCpQabKdZRKJuQeuustLOSQXPgBnZNz9mU3qVdvcxhY+pHdZPV1xpn/QT3lc8sSzFygPXhVWfHeCC0RCpnM5pShDZJ4mFc3l/DJ+6rc= 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=1789169319; 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=uE6tGIUw4nUFeMlGUIl2Vj3+Z0EEpcFNwJvK87yeLC8=; b=eAfLPvROPVbT11raWyHLxBnETtBnIaNRpc3fGJKKEHXvSQzm3SOFUn8ilvLANL0F Ux3w9B5IQ1rql0KRn7DW/f8oztO1oe1XcuzbVEu65fBnTEUlrrD9a4oIDVA8duudmKQ 655I4HPbDo9QRTmJT/2H1RMlWiOfhx+fMqAaBY2M= Received: by mx.zohomail.com with SMTPS id 1789169319441502.8662276855623; Fri, 11 Sep 2026 16:28:39 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:07 +0100 Subject: [PATCH v9 06/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: <20260912-claude-fixes-v9-6-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=3143; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=MXDSZuGOlvNH11js9h2jqHaS2B66edvM5cQo30VukSA=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DrsuXAm3fHOxc6CeIj2qTgSgV8HattgvZU 5O8MUDC/vuJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PWE/DACUd0IbtvNrI3CqT4P0XtoOvGzO5maApUbjs2mBVTIquJM1sqKB7U2iX1BWTrYQZAquDqj csrRjAXpE2rN6+uSOsnOdHYnVeGqm9vJykTsRAMykLCqPT7tGwCwd/UlhqMrn7ek5EHKEw3YmZ8 sKgewaVIspwr47v+ogp/UYb4czN4KIvLmbmPi+zEC1e7I2JSGnTOa+tAK20FTyrY/wRGOkRPHPd 9pnLYeacoScJwlpML+O89ixZBX7pDnv3QNhwaRlaxaR3HR66Mn/ZgluO86q4Jz57Kujan3bpd0m oBo7r9c06xfSlDXzuNIanetvODGnTDtXMJ9qiSzAqd4VhFTnHfE4cabYIsRgxIaZSXH8osqugj6 82nS9q2vE2XjQQmdmYLfEDreywSIOJrXb7qtlV3Y9+eCDaEYRWz7z7uYsxWlIePhpbYd+rLNVHR Jk/Pn1zBi0ennYsE2P3JEu70ULsz2fd0VH2ob6CYQWA0QeeGPv3OTmqtdZbbPYfnzSI3c= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D During device probe(), failure to do a PM get() will leave the usage_count set to 0, which is the value assigned at device creation time. That means when the autosuspend delay expires, runtime suspend callback won't be invoked, so the device will remain powered on forever. On top of that, failure to call PM put() during device unplug means Panfrost device's PM usage_count increases monotonically for every new module reload. The outcome of both of the above meant that: - Devfreq OPP transition notifications would be printed all the time, even when no jobs are being submitted. This quickly fills the kernel ring buffer with junk. - Because MMU interrupts are only enabled when the device is reset, the very first job targeting the tiler heap BO after device probe() would always time out, since the driver's PM runtime resume callback would not be invoked. To fix the above: - Manually adjust the PM refcnt at device probe and removal time. - Ensure pm_runtime_dont_use_autosuspend is called in the wind-down path. - Call pm_runtime_put_autosuspend() when device is ready to accept jobs - Move pm_runtime_set_suspended() before panfrost_device_fini() so that resource unwinding happens in the opposite order as initialisation. Signed-off-by: Adri=C3=A1n Larumbe Fixes: 635430797d3f ("drm/panfrost: Rework runtime PM initialization") Fixes: 876b15d2c88d ("drm/panfrost: Fix module unload") --- drivers/gpu/drm/panfrost/panfrost_drv.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 55fc22e8d4d4..a3eff77add55 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -854,6 +854,7 @@ static int panfrost_probe(struct platform_device *pdev) =20 pm_runtime_set_active(pfdev->base.dev); pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_get_noresume(pfdev->base.dev); pm_runtime_enable(pfdev->base.dev); pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ pm_runtime_use_autosuspend(pfdev->base.dev); @@ -866,13 +867,16 @@ static int panfrost_probe(struct platform_device *pde= v) if (err < 0) goto err_out1; =20 + pm_runtime_put_autosuspend(pfdev->base.dev); =20 return 0; =20 err_out1: + pm_runtime_dont_use_autosuspend(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); - panfrost_device_fini(pfdev); + pm_runtime_put_noidle(pfdev->base.dev); pm_runtime_set_suspended(pfdev->base.dev); + panfrost_device_fini(pfdev); err_out0: return err; } @@ -884,9 +888,11 @@ static void panfrost_remove(struct platform_device *pd= ev) drm_dev_unregister(&pfdev->base); =20 pm_runtime_get_sync(pfdev->base.dev); + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); - panfrost_device_fini(pfdev); pm_runtime_set_suspended(pfdev->base.dev); + panfrost_device_fini(pfdev); } =20 static ssize_t profiling_show(struct device *dev, --=20 2.55.0 From nobody Fri Sep 25 13:18:48 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 5488A3C3F7D for ; Fri, 11 Sep 2026 23:29:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=165.173.180.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169359; cv=pass; b=ZSRdGDCxlbG41Jx7TBNNXtS5iUaaDUjvjv8TbrNfe3TQObkdVjMI7kyeuw8wvR046lLoe/+Ek/XUDVWc15gU07fH7rSq0eLgQZ+M27Pw+rDWZK01pb1vzB0qDb9OkjE7wRepjfGxaSOCv3/z5MqOdvf3+M0F+6icMagFAfH+xo8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169359; c=relaxed/simple; bh=rGbyQBkNbY5a1OXBSal5Mure3AlHLFxQtfgc5Bhzvks=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KMw0szCqNxoSJG7+aH2iI9XWgGLOo2Njk4awCDqFekfkSMI3x4EHmAe0+hd8Vau8/EGjdtYKc2dD/YgPvSl913BE3JiaKZRB3I9mhPR3O/dYIh4jfUKdQw1yoXUF0RJY8JnD0eadc7axHdLS8NBb8h3L5DwtqIAch/f+cNDWdoM= 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=OSpO+nDb; 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="OSpO+nDb" ARC-Seal: i=1; a=rsa-sha256; t=1789169325; cv=none; d=zohomail.com; s=zohoarc; b=O5cMLdAMoDUutx0+TZxZxWQy6QyLTq80pweXOoEWL8Wh1NmhXLsmzFhm+6vbg4/S8VfsPqsKkSYSa9hamPW9vK77ZvT6GjZPn1eTRn6TJ8Z/38Q6yOXaoHSknnsnyx4pUDx4jp28qZGgxyVjJWHJZR6T+jp2HRdHvrD5OZSejbc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169325; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=YLJJEy7HObDD1CKVtOGtdrfPLM+ZQOVKX8SKLnJRFuQ=; b=Ns9ICgC+pzFg1/yXpsoEyr9bvcwGhIC3tW51M0uq7VEYsninoZtRyMcOyU8AO548dlWdM0fpfO2AUFQtGoP881pTSIhP4bBZqEMcz6oh1Jim5OrMjgwmJQNdeGefZCyPjJZ6jVw71T9FrUPP1uVrAfaWe+SNN/7wQ1wmVYv01OY= 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=1789169325; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=YLJJEy7HObDD1CKVtOGtdrfPLM+ZQOVKX8SKLnJRFuQ=; b=OSpO+nDbjm2r8l7mkKIyJCujhuLFgB8OxrhQ2lGVZWFVRFpJViQza7tPy7ns1RKE 8WAiJH4r81CPXGHruIVYHrai58qe0O6qgDp80qajGOVHr1wbb6v94Ps4aULAyWYi3aT Z5jIEVkIUokJ8c4wFKqOivm3GgXXEdSHf22Sdauw= Received: by mx.zohomail.com with SMTPS id 1789169324521206.45016185233806; Fri, 11 Sep 2026 16:28:44 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:08 +0100 Subject: [PATCH v9 07/16] drm/panfrost: Explicitly enable MMU interrupts at device init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260912-claude-fixes-v9-7-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1801; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=rGbyQBkNbY5a1OXBSal5Mure3AlHLFxQtfgc5Bhzvks=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DzEr/T1iUFVkI2QPrIHIjMCvGnDL6nJbhV Va0sFemfgOJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PcJlC/oCi3WiKFWYZgTrnQ2gv+Tw4xWT9OHb9rRQzRnac/kwfT/VZ5l8Ba/N9P32EgoK8zeOJgf 9AiBzya4Aai/R42StuSPTxzOaEsL8acTMrg1EQEokOOEsNvYA5cHD0mruPRvFzUyxHZwspEBxbK uR1qkk221tS6yy4xhTpoHX4Cn6jth82RddCvvVRzx2JYIWkUnbfqPk5xzFIJK6O72Z3B5OixdoF tQevfDZUCUomgHigJDkEohbstluxPmatrN9TetSwAVuCabW+OVczoxzSEfEVNDbgPWrHrV1E2iW 4uWzaVf2oISrHckaHOoAnUQa75M3zybRXNit5lg1EQKz+WsO7hwXvMeLJVPnpYo6atimFj+uaxa dxpx/YhCQLD72qHgqcqVxfSEtV6K7zSB+97MBQrt5GBd5RszpeuZfJr44HmR9Y2CdtToM1kxtuH RPNbT9JYrMdgU/wdBE9YucNWjkxDldQJQzyWXn0YVYlcWGCmc20nBxIcTZyKKghtCUcFQ= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Because the device must be in a position to accept jobs between the time drm_dev_register() is called and autosuspend first kicks in, there's a very narrow window inbetween during which jobs targeting the tiler buffer object would time out, since the device's PM status is 'Active', but no MMU interrupts were enabled at device initialisation time. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe Fixes: 73e467f60acd ("drm/panfrost: Consolidate reset handling") --- drivers/gpu/drm/panfrost/panfrost_mmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 5c393ed6e310..faa62643caf1 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -336,6 +336,12 @@ void panfrost_mmu_as_put(struct panfrost_device *pfdev= , struct panfrost_mmu *mmu WARN_ON(atomic_read(&mmu->as_count) < 0); } =20 +static void panfrost_mmu_enable_interrupts(struct panfrost_device *pfdev) +{ + mmu_write(pfdev, MMU_INT_CLEAR, ~0); + mmu_write(pfdev, MMU_INT_MASK, ~0); +} + void panfrost_mmu_reset(struct panfrost_device *pfdev) { struct panfrost_mmu *mmu, *mmu_tmp; @@ -355,8 +361,7 @@ void panfrost_mmu_reset(struct panfrost_device *pfdev) =20 spin_unlock(&pfdev->as_lock); =20 - mmu_write(pfdev, MMU_INT_CLEAR, ~0); - mmu_write(pfdev, MMU_INT_MASK, ~0); + panfrost_mmu_enable_interrupts(pfdev); } =20 static size_t get_pgsize(u64 addr, size_t size, size_t *count) @@ -973,6 +978,8 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) return err; } =20 + panfrost_mmu_enable_interrupts(pfdev); + return 0; } =20 --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04F804078FE for ; Fri, 11 Sep 2026 23:29:26 +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=1789169368; cv=pass; b=n/1cw7b41+1idKxi6NIvBDLqRCe3Q4AKXKa2DCR0+o14Q/CC8R6h5ovQ0BxOHswi4x767p5ztjVS+wQcbp2QnEfXwM3Aqv41Zmp45w9JDQO2whhE5H6DMAQ/Z1xhlw3kwijo/QAdEDgFXNZ+aWRz9DM8/XFVpJFsMItzo5lnUBA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169368; c=relaxed/simple; bh=gaC0+1O8X+1ekPx2yyjs3TML4ntPpS6VV87kI6pMefI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g3/hIU0FSbWBHskRlebs6yhaxFJgOccgLWhkH6qjoP4oUF7KbAmJoJq0hmzAOHFzSQ7tmDm+zx7Y582F4MdjPrajppo9BrVW3Dfzqqaw/w+Bjbf/GWLo67/7Ju/XzBmPGU9qmiKjBf/1pKPN/CPjkuEdNYdMjVivcSUHDXYCu/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=StVb9KBh; 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="StVb9KBh" ARC-Seal: i=1; a=rsa-sha256; t=1789169329; cv=none; d=zohomail.com; s=zohoarc; b=TKXgiz4a/kyp1EK/09qafkxSsVlY/VG7RdznjzYGt3WUrwStbA0kxORuxwPyJhi+wkQNGUxvoRcH0XT5l0Qafgr/PFKjrX+G1rBxNo/mVAZQsHwvxHZGf2fDqCDhcDj7uv7piYK6KRakhcNfdXcFvK2AzbwPIpBHEJ+6bGnFYLI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169329; 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=m5YBCA6R4tWevPKLl5rXoiYD7PwSuvUlN1mPDxXHfsU=; b=ZJI1oBNd4u/SMVo5p/VHOMVF7W8Eapa3D9P2Op9RqVI7+tXgDAfzMmfpyXmaI2YQgmrkQasR13W1QdFFpooCkfgwg26GY3gyOMUlBZv/RZQs9F0w1kF+CFdQ6M2+8763Og0kOxGAhFEFbyl1R++oHzzEr3U/AteNRHkbSYaoK0E= 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=1789169329; 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=m5YBCA6R4tWevPKLl5rXoiYD7PwSuvUlN1mPDxXHfsU=; b=StVb9KBhtTZMyob35Y1ciXD+zC6gB5JHFOEL1us5RdXvhKKdpNiDqTVWimAFX9Wh tnBCtZjtQB2LTbWArZtUUEI5/1QBnUqBpdFYa6n0BTgSlg1Y3IzGvc2fGqjDyhXFu18 iFVNAQh/2srsB+lV35PAwclClf9jLTMiGa9dgnE0= Received: by mx.zohomail.com with SMTPS id 1789169329619630.4904003755993; Fri, 11 Sep 2026 16:28:49 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:09 +0100 Subject: [PATCH v9 08/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: <20260912-claude-fixes-v9-8-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=5230; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=gaC0+1O8X+1ekPx2yyjs3TML4ntPpS6VV87kI6pMefI=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DYxj2uT2NkjtdVOc9A8DzzDSLhn0tq11O0 RHXxhsp+beJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PQkGDACUgGh/jayESIpsoynI0UDuKxzaR9MDkREAfKNsRIwFSmC+iC80F7aJrr0eJC01Q3BR9NR 6M/6aykFoq4oXZuE1LBNvtBjbzWw2POvJ6jIHDhegGiP7YHMC5SgDPSs2ZO1SmTmSZfDt+4HFwL cJBnepyeXeOcB1Yf36wkquOhy2I0tsKAJgunBd2+AfUtafni/oM72bK9U24N3/KIXO2Ec1RMTSX b6ja11Jv2zbSB1G2fYV3VgMsN8d08DGKJjCJ/jAK0rV3aS49wRCucr6jglrmGIO91IwMtTBxcgV uNGIl3LnP8z73FJT3HaMbO90gnsWiQ8uoBdS4Vk2WcQkhe6j8rrnfxCgSAlHqgMHBeFEXSVDCE9 rWCGL9txL974B3NOaMaN/n/RyX7G3hfE2AgwcdvtN3Vjbxd5ppISK4/U9h2etkOEm2vkmoAP056 8VBnqG7f+tIM099pjK6b12bZsxiETC2Igsz7DQqMxikGgCpva8P3BhCRZR6OfdxdQlqsM= 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 Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 37 +++++++++++++++++++++++ drivers/gpu/drm/panfrost/panfrost_drv.c | 47 +-------------------------= ---- 2 files changed, 38 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 2fcbd223204c..ec2b1d29a26c 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -8,6 +8,7 @@ #include #include #include +#include =20 #include "panfrost_device.h" #include "panfrost_devfreq.h" @@ -230,6 +231,12 @@ int panfrost_device_init(struct panfrost_device *pfdev) { int err; =20 + pfdev->comp =3D of_device_get_match_data(pfdev->base.dev); + if (!pfdev->comp) + return -ENODEV; + + pfdev->coherent =3D device_get_dma_attr(pfdev->base.dev) =3D=3D DEV_DMA_C= OHERENT; + #ifdef CONFIG_DEBUG_FS mutex_init(&pfdev->debugfs.gems_lock); INIT_LIST_HEAD(&pfdev->debugfs.gems_list); @@ -291,8 +298,31 @@ 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_get_noresume(pfdev->base.dev); + pm_runtime_enable(pfdev->base.dev); + pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ + pm_runtime_use_autosuspend(pfdev->base.dev); + + /* + * Register the DRM device with the core and the connectors with + * sysfs + */ + err =3D drm_dev_register(&pfdev->base, 0); + if (err < 0) + goto err_disable_rpm; + + pm_runtime_put_autosuspend(pfdev->base.dev); + return 0; =20 +err_disable_rpm: + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_disable(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); + pm_runtime_set_suspended(pfdev->base.dev); + panfrost_gem_fini(pfdev); out_perfcnt: panfrost_perfcnt_fini(pfdev); out_job: @@ -316,6 +346,13 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { + pm_runtime_get_sync(pfdev->base.dev); + + pm_runtime_dont_use_autosuspend(pfdev->base.dev); + pm_runtime_disable(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); + pm_runtime_set_suspended(pfdev->base.dev); + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index a3eff77add55..f77780c72a1a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -830,7 +830,6 @@ static const struct drm_driver panfrost_drm_driver =3D { static int panfrost_probe(struct platform_device *pdev) { struct panfrost_device *pfdev; - int err; =20 pfdev =3D devm_drm_dev_alloc(&pdev->dev, &panfrost_drm_driver, struct panfrost_device, base); @@ -839,46 +838,7 @@ static int panfrost_probe(struct platform_device *pdev) =20 platform_set_drvdata(pdev, pfdev); =20 - pfdev->comp =3D of_device_get_match_data(&pdev->dev); - if (!pfdev->comp) - return -ENODEV; - - pfdev->coherent =3D device_get_dma_attr(&pdev->dev) =3D=3D DEV_DMA_COHERE= NT; - - err =3D panfrost_device_init(pfdev); - if (err) { - if (err !=3D -EPROBE_DEFER) - dev_err(&pdev->dev, "Fatal error during GPU init\n"); - goto err_out0; - } - - pm_runtime_set_active(pfdev->base.dev); - pm_runtime_mark_last_busy(pfdev->base.dev); - pm_runtime_get_noresume(pfdev->base.dev); - pm_runtime_enable(pfdev->base.dev); - pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ - pm_runtime_use_autosuspend(pfdev->base.dev); - - /* - * Register the DRM device with the core and the connectors with - * sysfs - */ - err =3D drm_dev_register(&pfdev->base, 0); - if (err < 0) - goto err_out1; - - pm_runtime_put_autosuspend(pfdev->base.dev); - - return 0; - -err_out1: - pm_runtime_dont_use_autosuspend(pfdev->base.dev); - pm_runtime_disable(pfdev->base.dev); - pm_runtime_put_noidle(pfdev->base.dev); - pm_runtime_set_suspended(pfdev->base.dev); - panfrost_device_fini(pfdev); -err_out0: - return err; + return panfrost_device_init(pfdev); } =20 static void panfrost_remove(struct platform_device *pdev) @@ -887,11 +847,6 @@ static void panfrost_remove(struct platform_device *pd= ev) =20 drm_dev_unregister(&pfdev->base); =20 - pm_runtime_get_sync(pfdev->base.dev); - pm_runtime_dont_use_autosuspend(pfdev->base.dev); - pm_runtime_put_noidle(pfdev->base.dev); - pm_runtime_disable(pfdev->base.dev); - pm_runtime_set_suspended(pfdev->base.dev); panfrost_device_fini(pfdev); } =20 --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39A833D9DA2 for ; Fri, 11 Sep 2026 23:29:29 +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=1789169372; cv=pass; b=f+2T+2p/gKR6TUgjR4bMl67pJmnoIswOT9aDhN7Sl+kzkpEFn+kTJowtzKmw4gk0uD5Mo7YTZcOz1Ony1oGC3SkDpkSoSWyzU05+pJ4ZfNsyqS+KIuaPkwSgcCzrH8fu3xcF1QQjLQPNnqwQv8c+vgpdXNiDDEaALKAXOmK+iAo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169372; c=relaxed/simple; bh=j8qrQUubvamccgGJ9GLGGmSrfxlD+QXeJh9w1qjNAgU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=coIpP1zK6gmxGHdlKpXYA4zTOhSFFe1NLK09IkALp8L/R5DYPArpXo9Nzm7GMVJPyI4NIy5m3bFPbpzgqvyGSVkmTliv4ZiSM9W7YDlBr4yIvQE2fvaYsfwM8AB00kaicArFUiU0mqqESLp4tTaFfEieeuRoOmTTdw1FqLsaIU8= 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=k0dYPoc4; 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="k0dYPoc4" ARC-Seal: i=1; a=rsa-sha256; t=1789169335; cv=none; d=zohomail.com; s=zohoarc; b=liSoQuZJdu4VD++VM6Eb+ng73EYTFGHI+QkjvFlK6xquYMP0vyER9z8OloTPlSA++FE6Xi5F9hc3RmMpaEN5Q9eMKzjsYGL3cgifztAuFlMrA5WwkNScRcZi3NXElzHxe4t3spZGB8MggTXz38cBDC4jOL3HTkd8JeUWxhuZ9TA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169335; 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=PdTeMb52nf+zL0XsG6UuSmjMA2646Gcmmi64FeA/r4Y=; b=Kr0ycLRHi3Ng/vcK8XwpmIf8HHx906rWPbnxYI6/8QqH6XZj7pi6sMNGikjt3KXb9q2owNYcO4NmDtmhXANZfZesfeXsu8guoG3VCfcu4xQdaqj/jVp/e9hhYLpps6MZa4DjCAjRXKiybrzwMIPF6k/eY718tryOFMvbXaVZYV4= 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=1789169335; 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=PdTeMb52nf+zL0XsG6UuSmjMA2646Gcmmi64FeA/r4Y=; b=k0dYPoc43Soozllmqj/4vBuQ5+D8FEPFSfVm2OdRybhHuAoJW/EvtMuitvXqsp8A iyvfFQuoTGckuTeMisZvej/PvHDA4Dk+ptbwZ/6Z1Fn8dxCgbd1lY2HenOteLLbx1ji g6xpOSdgYCo+IIpcx57BUtw8H2+R+/77pNaT8JXw= Received: by mx.zohomail.com with SMTPS id 1789169334649605.3674708644796; Fri, 11 Sep 2026 16:28:54 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:10 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-9-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1571; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=j8qrQUubvamccgGJ9GLGGmSrfxlD+QXeJh9w1qjNAgU=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DRZrc6GYXBgn0oS1KcyfnF81VWc4Z2rv2U 9xpxbNZgTaJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND Pd4KC/9MqzDK800llGMTZEGPwwWwqyUSsBQkTAhfm0rsD/hRGB2HlEIXjdhCLSZsYVRTzbtT0ej IXQ/rDzJUn4Arj+OfbkXD2Jv9/Ov2M6cpmK39w2MhFCvChZ2sQC+FSLF16HcMc9XDTRkjKK1Fyz VxCIyvjQQVtWC5JZVy7la9zkRIujfp6L7OvfbKdcD5g9HppWJjsPqKTZUyu9xGmHAcd+abgCdrn MYcT+/1N2wbcGpGCDVRnxI8OdaEPSiGDSQOFGmZ0UVjgZs+QAmM/w9Xb8xTBIakzd8SAsmKpsTB FO3A/FXMKhGENFnGJhlWiuM3uUbfuLQNcOElAc6t34agcycuKjeczREf9jCh6qQG8i/SlVq6RQa UdBb2bizeLwEqWCF+ukFqafHK6qLl08RythWv9YSxvchtYvKwuwUwy57NsXApBBBTZ6aUgdF2RD VDH5DIdzQkwB1+Qtl2DvimVA40YffXkjKFsrTeEVOB6b+GIBIklU0dgpbbKSnlJw3i2I8= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Rather than just failing silently, let's warn the user of device remove not being able to take an PM reference or the PM suspend path still reporting inflight jobs. Neither situation should ever happen. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index ec2b1d29a26c..d75566a45392 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" @@ -346,7 +347,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { - pm_runtime_get_sync(pfdev->base.dev); + drm_WARN_ON(&pfdev->base, pm_runtime_get_sync(pfdev->base.dev) < 0); =20 pm_runtime_dont_use_autosuspend(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); @@ -504,7 +505,7 @@ static int panfrost_device_runtime_suspend(struct devic= e *dev) { struct panfrost_device *pfdev =3D dev_get_drvdata(dev); =20 - if (!panfrost_jm_is_idle(pfdev)) + if (drm_WARN_ON(&pfdev->base, !panfrost_jm_is_idle(pfdev))) return -EBUSY; =20 panfrost_devfreq_suspend(pfdev); --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB5C33B71BC for ; Fri, 11 Sep 2026 23:29:30 +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=1789169372; cv=pass; b=FoItrjlOuteL+4PXpjiCb7K82+BESH5uy1gklYVcF2xEuu0AEXaoSCRX0u4ioah0SRJXpUetPUXXqSySqoQ9gShka0bJavzTkadJLGWFiU2loY/oQNatiliFCboo8iWcTEPwbqlAzjWwzPNTjgLetzmkkPZ5von5Egf37lFEJuw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169372; c=relaxed/simple; bh=hcCH1dUFIcWdgiK2n6o4P3fKlgwCx3OuIk7x9WnwwYE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IbuGGENIKo08B8q2i9GUWTWZr84bikKK7G2KYGzCRzWVsG/t8B7ziHXo/z9mSDw+2cyumoiQ1ff0eOgGC5haKFMoUYf2NNlrrH87u0XJawJYLY0oQBbKlpSw7yjiaRlx7nDymZ73juoL4uOdZv4vP0vMbQMm05XRVXdKH68i3QE= 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=AyPHsufY; 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="AyPHsufY" ARC-Seal: i=1; a=rsa-sha256; t=1789169339; cv=none; d=zohomail.com; s=zohoarc; b=efPMK4quvfhbCzx0O2n9+ppnit44nj5esCP+cCzcjxut5KdUh878ZusLhKyBsqJnB4B0a1nGCb63q4QdDQOJxoDcBYASuBoIzvcRxh9PWJ57TG9oioBxqBacpXdphGkoHyq4/CLu6Ki4QxcgVsP6zkvtGS7Ex9kfcqorIrIgVig= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169339; 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=41ds9z6Rh7JtHM6jQPfhK3863L5musGeQLMv9a5jCE0=; b=b+cRgpy5/XXibvSZFdwBcx6wJ4MDRAKik9SMicHMIVwKpvg3b7COJqJRy3qH7bLirIt5hGLpoKOVdTH7fQhp5+wUY9NY889cuzg484r1JsXP70YslxJuXTcHEkmrMrnH2F7KGPVNGLrEhgARat6VK0inzxU7v4KJHBJ8i+4FW8A= 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=1789169339; 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=41ds9z6Rh7JtHM6jQPfhK3863L5musGeQLMv9a5jCE0=; b=AyPHsufYaOqPqlMt+c/jYiJwy2Ui8z1uY/4vibLbQtmKW93v2e5ghFE0YcyZBfle +kw6OjA8dxVZD82FRrty5MXc69/I+BQgT8xJYGGeQdRy+Do6kJq6Xv5O9D5/xRb8CdG TV7E4ICV76ewU5aZdfEfk/7vf4204/UIFnqB3TA4= Received: by mx.zohomail.com with SMTPS id 1789169339761719.0250863890261; Fri, 11 Sep 2026 16:28:59 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:11 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-10-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=2042; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=hcCH1dUFIcWdgiK2n6o4P3fKlgwCx3OuIk7x9WnwwYE=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6DerKG9p30du1LfAACMFlmyrqfXZ69gSrIt TkvlCYkmqCJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOgwAKCRAOJn5M7lND PWhuC/9+IFlUqggMzcN3ZAfXz2W0aju5muI9FfQVhytV2kp9hWe09YUtrdBzdxuhExfPBP0Tgg+ b0bYT0paoJqQiM7lGVQfMur+yF5SuKwpNpvcmHRwE2D7A9zZs+6A8pX8RRzt5AAsLYdnevjCrTi rToTG5uS5IUGhR+jNcw6CXQhfGTchtyHvBH5vO/WYQ7XjsFI7Xoc2g3OEj/8dVxDgATcwgmmxc8 nOuGRWBllmq7uSnK7TUynVeii+69uZHqn/zzfcUyjoYs1TfuGKEVa0BULrZCS4dZVY/XE2S5Pgj 0PljRBpz4BcQxBIdQpwHOSe9jKg0upWVKSqwgZzIhYALpshDvBrry988CUGrmXwC1+SJMYCgdH/ up282zG6qpyhVSXlNV3O+09qRMUErCKz3HoW5856ftlK+V2wn/Y0ghF9n/U5HUCY/ugNcpGRTfB ijuU6MSZddmch+xj5+XcWKmgBy0rARZJvrxEG2L15zOdFxpZR4Nf4yy1dRe5e9VmEGtP8= 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 Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_device.c | 37 ++++++++++++++++++++++++++= ++++ 1 file changed, 37 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index d75566a45392..0aee1d87a7ab 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 @@ -583,9 +584,45 @@ EXPORT_GPL_DEV_PM_OPS(panfrost_pm_ops) =3D { }; =20 #ifdef CONFIG_DEBUG_FS +static int reset_get(void *data, u64 *val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + + *val =3D atomic_read(&pfdev->reset.pending); + return 0; +} + +static int reset_set(void *data, u64 val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + int ret =3D pm_runtime_get_if_active(pfdev->base.dev); + + if (ret) { + panfrost_device_schedule_reset(pfdev); + flush_work(&pfdev->reset.work); + if (ret > 0) + pm_runtime_put(pfdev->base.dev); + } + + return 0; +} + +DEFINE_DEBUGFS_ATTRIBUTE(panfrost_reset_debugfs_fops, + reset_get, reset_set, + "0x%08llx\n"); + +static void panfrost_reset_debugfs_init(struct drm_minor *minor) +{ + debugfs_create_file("reset", 0600, minor->debugfs_root, + minor->dev, &panfrost_reset_debugfs_fops); +} + void panfrost_device_debugfs_init(struct drm_minor *minor) { panfrost_gem_debugfs_init(minor); panfrost_sched_debugfs_init(minor); + panfrost_reset_debugfs_init(minor); } #endif // CONFIG_DEBUG_FS --=20 2.55.0 From nobody Fri Sep 25 13:18:48 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 E8DD341DE02 for ; Fri, 11 Sep 2026 23:29:37 +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=1789169379; cv=pass; b=LrWDXUm+7iZZpZZgG0qhwVQ5xzbC6QxajHhR2uUWNt6rIF6M7u1Pn9w14LrHF1TNPn9g5LWp+xo+PytenkIdCXUCpyeoncLqbx37vC6Uokc9r7HcDWbPXRa9QyZUkl1QIEJAlpLW5cBNPsQ/+bVNLD6lEfUFq5q9r1Kvz3g8EHE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169379; c=relaxed/simple; bh=1NC6JbP9YeSjejJ7XZFftPMwKC3c1jXoMn6zNAHeTm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WpYHFs4ujKrzDD8VIuTr5hdki3Ts/09crgOZJrokTl5PePLMySzUpIcFWIiL/Lui9P0GADYPUYkKQxhiLuLfB6IOoysaMXgJWv+YB1AJhaCWYizYGP/mAG//QcLMF027BhhzIdoc5eHeXZkivl7xje5NMksgZuglvtL6jkVi4Os= 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=kn7CxOkd; 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="kn7CxOkd" ARC-Seal: i=1; a=rsa-sha256; t=1789169345; cv=none; d=zohomail.com; s=zohoarc; b=ZL06sobkSxuSsOc2lsON98jpgOSoyac3RcX4zCwGO5NCvuPqqF8yxEofdSKRRmMYG4K1sWLcApGjUD4/JKBubFhVj+8x6POZ/L9O1RYflLP5+DzLIpqwetqt01w4D5qd8sPyPw33oPIhcMVz3ucl8A9ivJkQUG4rIRUc4hctsZ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169345; 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=jshisZ1SnLRhDNL6xuYgz1joh6nJduQf7WjLxO7MNQPfLbWzzFVgkzmQMqGrPwJIMR+EGMWrMs3PsEJxbgEhqvSlq8uyuvXL1V4B7y5tsV7u0kDy94e2JwybtacyRC5+4d3OGDVjjeFnhi4YNqsnXXyyD1vgrjx2xX4ODRdmfj8= 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=1789169345; 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=kn7CxOkdYTjsvPgR+30lo2E+pXx/kmSaPX4Khs7YtXMZ5r9HuEGiN/0etIP5RLC4 kMjYe6wukc4y4MtGmqvoHi1BpuPG/tjvvFseN7D4R1aD3MjWtuZmT03MWd40YsTwzbx 8SI36mW2kZKyK4aGT0J6xtbca3z3xAsTED0kyexk= Received: by mx.zohomail.com with SMTPS id 1789169344769128.9051513916445; Fri, 11 Sep 2026 16:29:04 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:12 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-11-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6EQ3dh7a2BFhNYtoesDCqXIH+okRFVS4gKC ADEkVJJLjeJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOhAAKCRAOJn5M7lND PT/sC/0UHyz/yFa5RT6Q5eumSqO3dgr1t1XrT7griOrvImEv3SIB0Ujtiekz58OFTRajoPXwiTD N1Yw7/tw42/aSMuMv3DcIPy8i8KhKhcqEWt+TOod+gOvnnHXsiEGJmnk1p20+q8UATLljPQS6QF pSdViaReMBttjo1Iid6gw9te/B1VP0IJABWKGlPAU6FLAHFOSqeXgoltnJhpZ0ULS7Wid4/qBHz tQh+2YQ5C526gReTDV6ciBsAzhf+1Rq7zXs6eAEh5MXqyac1ZyUp8I7pfxujikzes91DmDQkwTj Kw2YQXYB6jIZtzZD7Epu1le04ip2KPzWLkdHf/4YoqhJUpxGWztPt8iYBXDPqIuACYsk5PrYcRt CRmLhz0lcZ7Oibw/vgqhK2rhcvEuyRI8DS9pKd89tC6c2ThgJEb8nl2d7wlXKs6HQN9x+cxxn6u 3jmHUyUXVlb1oK38sO4TV65LBGctoPyTVa8niNwRgQrCgdNLOHCBywSrU1jQilgui/64s= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Just for the sake of avoiding repetition. Reviewed-by: Steven Price Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 31 ++++++++++++-------------= ---- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index 7020c0192e18..f71534e741b6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -35,6 +35,16 @@ struct panfrost_perfcnt { struct completion dump_comp; }; =20 +static void panfrost_perfcnt_hw_disable(struct panfrost_device *pfdev) +{ + gpu_write(pfdev, GPU_PERFCNT_CFG, + GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); + gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0x0); + gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0x0); + gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0x0); + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); +} + void panfrost_perfcnt_clean_cache_done(struct panfrost_device *pfdev) { complete(&pfdev->perfcnt->dump_comp); @@ -193,12 +203,7 @@ static int panfrost_perfcnt_disable_locked(struct panf= rost_device *pfdev, if (user !=3D perfcnt->user) return -EINVAL; =20 - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0x0); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0x0); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0x0); - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); - gpu_write(pfdev, GPU_PERFCNT_CFG, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); + panfrost_perfcnt_hw_disable(pfdev); =20 perfcnt->user =3D NULL; drm_gem_vunmap(&perfcnt->mapping->obj->base.base, &map); @@ -327,12 +332,7 @@ int panfrost_perfcnt_init(struct panfrost_device *pfde= v) perfcnt->bosize =3D size; =20 /* Start with everything disabled. */ - gpu_write(pfdev, GPU_PERFCNT_CFG, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + panfrost_perfcnt_hw_disable(pfdev); =20 init_completion(&perfcnt->dump_comp); mutex_init(&perfcnt->lock); @@ -344,10 +344,5 @@ int panfrost_perfcnt_init(struct panfrost_device *pfde= v) void panfrost_perfcnt_fini(struct panfrost_device *pfdev) { /* Disable everything before leaving. */ - gpu_write(pfdev, GPU_PERFCNT_CFG, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0); - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + panfrost_perfcnt_hw_disable(pfdev); } --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0953241442D for ; Fri, 11 Sep 2026 23:29:41 +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=1789169382; cv=pass; b=TsdwwMzYIc2VOfFUpX4HOOAD0XVDuiyYJbaxRWgE8YGwEvXGfSk4RwbfI2QaAthRI0sxw/ipApwYBlwgc9T2DpFe9pJjXcGYjaaxXQMcXC9z+mKgsv/Ut3W3IROzBybdL0aBMAhitENR/5PT/r1Qfr0wCRlxK3evaiJDcqujHiM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169382; c=relaxed/simple; bh=F0RVJv4zmQDLG69ZrU/+60HS5v7NarQ+E2qnB8Iq9Pg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FyCwhkoNpr2hJpYzj1xvHe4qpu8DegRJyUsw5V0d+mTgfQ/3NP6x+ZCMHCAGRuUO2L0SnBZyZKNIoCZA3SidDnDC+/jLoBynI56qoJ1LF3yIL3F7FwI+jZCBNsO94unpg4xrP2opEjb2cMzixUE4nqz40oSV0Car9JblRCmJ7kE= 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=AH64ocd6; 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="AH64ocd6" ARC-Seal: i=1; a=rsa-sha256; t=1789169349; cv=none; d=zohomail.com; s=zohoarc; b=TPMelJTUG810JK3sbBYolGvyfnyA651d/BNyZC5Qu9ujabShuDJWTGgOebATsCSKDHILhyHse55nc2twqc5zBzFcl6Kk4vEK0Gu3zztPIgXQt8a9kvSO1nwAoijhbAHnFEXhXaE24gHvbNUm+uyPw4ZonXnDigVvV2mo0H8SzdE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169349; 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=nWV812BLSXmGL2bwlh63A8Rlix0yVVzCrVgfDvlUkzI=; b=W8P6BRKfcjyRlPmS+ppyz8guiDQYbwbHKaewlfe6rdNIQTtbDUUAqsu7SBeYcTmkpkyjYWsLhkS/cXRjz95r3KdFS2aLnZTqfClxnPi1OuFfwYxpx9E3bVFzY49GmazpQKqftmMzQYKm5zaM7+oXjFYov+FP5z8zriLff+hkfCs= 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=1789169349; 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=nWV812BLSXmGL2bwlh63A8Rlix0yVVzCrVgfDvlUkzI=; b=AH64ocd6ltkFvFkVITmHKwRf6b9HazelGEHDSxGNqJ9EmJTA5HdjQLf/sgmkqRNC jakPEZT5yPbTM63fqtMZiB48lv5XApAxU0lR2F9H0uaM+a+owjYzsXsddExJbFSJsHI cti6BJbIPwn2hSMxFyU+OoHPbra6Xn08WYy8zeJc= Received: by mx.zohomail.com with SMTPS id 1789169349704614.5595874503224; Fri, 11 Sep 2026 16:29:09 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:13 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-12-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=1654; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=F0RVJv4zmQDLG69ZrU/+60HS5v7NarQ+E2qnB8Iq9Pg=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6EfMjxbPaH06sgCd7D/dLWfIwUp47yPv9Of 1VpqDZXvmqJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOhAAKCRAOJn5M7lND PfSqC/wMkl+L0YzsSbNxDSiEj2yC+MXjiQ2n9vix0fDgQFGczKslb1LT+KDoIvK+TI0hQCV9wZw dur7bHbwEmEDIJNjCtHA6bSV4r/15dvNlXJcybxMpoGPee6IqltYyaQERTIZRS99aKpiwnGvQgD 1rhSSxRBWo2qgyIIPgtXDzkkPtkEFsNam5LbXblw2vajDC5sZGs+acoAOx5+m9xGbB4FvFQDpeC MbdlFWdb7uoH67fLLe2UvdrmzP4S6TDTP8fee/oXHRlEhbiu8RiK2luBZ9IlxJyeTqq5Rac3bOb bWWN4lwK8s8SwBmBhLlWBDd0a4V5v272NlBqsGuf0onVsRo/MdbW0O7pxtcIVEuvLNM7pe38VWU 4oEWqWozFimHEYpS20VvdPA5RwU2eHo9Hw0cie/G7gTMlNfst8yu5elXtzeLJhKjcw442TtHg4K XN4JN1MUwMFctjjBEju4MaKUR2V3kiIPyrEVFahZfxg66mubKA9EG1kuSnWSGOTkIQRAc= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The GPU cache flush/invalidate operation is unnecessary. First off, the GPU doesn't read off the perfcnt sample buffer, only writes into it, so an invalidate doesn't make a difference. Then flushing GPU caches after each sample has been written is enough for the CPU to see updated values. Signed-off-by: Adri=C3=A1n Larumbe Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index f71534e741b6..ffc77121070e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -124,21 +124,10 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer"); =20 /* - * Invalidate the cache and clear the counters to start from a fresh - * state. + * Clear the counters to start from a fresh state. */ - reinit_completion(&pfdev->perfcnt->dump_comp); - gpu_write(pfdev, GPU_INT_CLEAR, - GPU_IRQ_CLEAN_CACHES_COMPLETED | - GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); - gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_INV_CACHES); - ret =3D wait_for_completion_timeout(&pfdev->perfcnt->dump_comp, - msecs_to_jiffies(1000)); - if (!ret) { - ret =3D -ETIMEDOUT; - goto err_vunmap; - } =20 ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); if (ret < 0) --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E53CC3F9F28 for ; Fri, 11 Sep 2026 23:29:46 +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=1789169389; cv=pass; b=fq/1HBKqdhdIpo+C6Y/MYYaPvE7V8fNPR6J3oMT6UVXj7ofl8kolqN2nMtLq90dibyv0Af2WVLK5SvFM1bKwRIy+PvadayQLT9VDDkPg02zNLrs4AR0lhEXQJdMQQvdfWVTI/lz2Kb8mJzl7PktYD3WWp6Mgup6z0biL3+RO26E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169389; c=relaxed/simple; bh=ylClgdA4qjN8YjgAXTrojrPeuTeRxcjN/yXHiltT8+A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Iqvc4mlmIo5HBhsqoKZoo0q8ZoKMnDu/N0mYKMMx9ql0iA/6ToCJ2YQXkelj/5oDPUI9xPRt2jwz1PIiKXWqVmEd+Tk5GfZaf8tUoyYypnaOWWEtl8XHNPHdB+I/rp/Gw98hpzWWaRcO1/XAcUOCmPwNHJ7Iw98QsmHvF4qdTnA= 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=FZVhEzzj; 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="FZVhEzzj" ARC-Seal: i=1; a=rsa-sha256; t=1789169355; cv=none; d=zohomail.com; s=zohoarc; b=V0CFF1SATaZIhwV0XrvzAT3ctb3WJJLHUdm1dIJJ8+3ZI7riDuiAZnfs3jvACo7AXQHmT/KcQTI9YLgijt/Mav0mrJk1DG1sZ97IjIKfoWAenaXBcvjWDqxeRpgP44KZdbEtNTmoHgNf8IFheYGlG+VwCAQXe0EszF32IxHT5c4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169355; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=rne2vTyla1RUI4gVDThBMRFsSeWjoijKTX5hYO0ZMA0=; b=dqWiqpbiKzhc5W7SHhyyo1iAtIPBK9pQAY1y3HFLgdJoU7AEVVWDDBUYitoR/7D1sn8qTRR3X4etDpRVaB1hfqX9pLJIzWQXI0lDzYs/2SaJzcUhv2960O/BnBuDASrsl3pIJ1Z9fgIak5mmIMy5q3dTZYNz0XUHD5vuBPQRy0E= 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=1789169355; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=rne2vTyla1RUI4gVDThBMRFsSeWjoijKTX5hYO0ZMA0=; b=FZVhEzzjbTB4XDidKATgA2jw5xQa5buDLbrlYzUSvPl+SP71uBC6pWtlcOtH3W/x dumKi3oQkbjcHMXsmu8rCTm7TBooth1iSliKtrz/Evj5omfRsB1VBOyXwPl6XhfNEQN lrkmEItwVunIeUZnKWnN8hdgq4HwTnok6G9/FHCc= Received: by mx.zohomail.com with SMTPS id 1789169354718810.8588496957029; Fri, 11 Sep 2026 16:29:14 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:14 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-13-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1088; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=ylClgdA4qjN8YjgAXTrojrPeuTeRxcjN/yXHiltT8+A=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6EHonsRbdMDzv+1uILpnvJFCF39Xnb8Przf n9GYVvC7WGJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOhAAKCRAOJn5M7lND PSexC/99KlQV3vqqYYKz9ZcwTtEnajUtKtzEyl4lHWgrEzQ0qvKcIhKW6Gt7OiAGim8ELGHNW0o I+ejxk5H8976RaoRs1MZbkTjxkk4TGOgWMKhvHlBRkkUf3SSLcgCr3krTmHiX4jJx41QgsD4wn9 DaXmElSoCQHceK4m1OrgFsKbbdRLMOrtgUgrGw9IxLmwTXQO3AI/ww1jZgZtvDRaP7aIYJXkDck i49uULUZKYb4TULIHkNJPAzKDqp4iTT3TyuL4n3MGbuBZElhx7EOEZMIiWArIdRPUOf35mxLyle 8Qs2hTsXnJZYXyLiBOP5aDQRkB7tDyCpxNX1j+Umc05+oLmIbhyhUW0Nw6X6scQmazWONud5WQJ a1tdU3Xisap5FN7oUX4EX41PPG/bO9fkvDauWl672Gy/FRhBZW/MSZCGt0csFtSFxzWQRr2pwW8 II5QM7kJajay3E55dNS0oM4K3wmdJ0unsqTdWbYFfmX4k6tJU5b/rCeE7MoTjTgrtIuOA= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D If the GPU and CPU are fully coherent, then there's no need to flush the GPU caches after a perfcnt sample is made available. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index ffc77121070e..b3f71d7fd82a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -52,7 +52,10 @@ void panfrost_perfcnt_clean_cache_done(struct panfrost_d= evice *pfdev) =20 void panfrost_perfcnt_sample_done(struct panfrost_device *pfdev) { - gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_CACHES); + if (pfdev->features.selected_coherency !=3D COHERENCY_ACE) + gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_CACHES); + else + complete(&pfdev->perfcnt->dump_comp); } =20 static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev) --=20 2.55.0 From nobody Fri Sep 25 13:18:48 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 D150431195B for ; Fri, 11 Sep 2026 23:29:55 +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=1789169397; cv=pass; b=fbzmSDmGkCQkWcAz/94z8giCqTFumvsshoGwRs/oic904uhjj93zn/8GCLyAhoqDo/pcPrTP1V3MYUjol+vkOI9+jDS6+bkEs1JRMQyZG6uwq66rmlQiNpZ2IHyw0cMq10BT7GFLhrCUcdSl7yyutMkuGmGVy8FAODJfPuUYHrA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169397; c=relaxed/simple; bh=t94C+i+77bqQPIc1YPjouSk75NmnND6AUXctkHleKTg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DNrtI/EgYBBsoX2YtQ4afJU779Xx8Uy81nnxZa2+74vNcArgrNYUXCJj2CJjAOKo3l1EJdBI43AH9Z/rQXoIoSNp/lOkswwsj+AaobT3epaEFXCQt9p5KINGGJRSUrY8QgQs+2Ji/hjEWI/FwQc8NKNmVpVzAlFuxCcff9DfHvA= 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=deEDQVNG; 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="deEDQVNG" ARC-Seal: i=1; a=rsa-sha256; t=1789169361; cv=none; d=zohomail.com; s=zohoarc; b=LjmUHnkRDM8yI16OFC0Wyj7DTerF4pF3tg2JE/PP+r8Gx7ObSnh6rCfgLGnW1/2MRxJ3UOts3wueEbcqNqELjgWHcOuUmcIbSK4KPIOF1QE9qw5D1SYK5lncIer+Qgd2ghJBRUjWmt6jaelSS07jmGC8jiNePbzYBIscI8rdQEI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169361; 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=qdvTWGJf7ebWGniVJ+6e0Uei/MWMYa+gp7uu3laVU9g=; b=SQPXd++g2tQxpE20KYvJXlOSdXVf+2pfbCb35AEindsWR++K85vahCs/AClO28CxoEi+zGwqFjh2+H14kkV40scZ5aLlIUxfLbipwGV188ryi7UL2Ffvxb17DrTSwxmVam4Ba2jwtZ5sYIq5zPeLWNPCwzdNtvS8T9YFmq+PgbE= 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=1789169361; 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=qdvTWGJf7ebWGniVJ+6e0Uei/MWMYa+gp7uu3laVU9g=; b=deEDQVNGw8lYX0NApiMeZLuojkCjvrsEj7Bj4queXAEKJj47zDAFv6Wg/oJcn7+L bsxjIIPDBc+h9AdX4YjJhaG6c4Xfmxn0S35/x0WuOgNVhX3OuZIorDZyZYpyrq/Iz8S i0hBDGJPpLAbaFQqwdFCjUhPncgvR1+a7Skx2zgY= Received: by mx.zohomail.com with SMTPS id 1789169359857260.3754325489339; Fri, 11 Sep 2026 16:29:19 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:15 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-14-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3001; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=t94C+i+77bqQPIc1YPjouSk75NmnND6AUXctkHleKTg=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6EGynfLHzZx5xj/VjCS+UiBXpp7br2fIYN9 cI+Lp1JZPiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOhAAKCRAOJn5M7lND PSOsC/497Y/7vwDh+YlRLreZlg0fL56h5YDE5MA6K2xwrZYe9PLsLqzk6b7VD5OI0TilbTq28XM D6MlCbISLbcZsNgP9i+eU4zUu2LaX+RdjOv6SmnfnNEdha/v/rUt1SPMAZ01eSI0VcFnbVVIKtC vajXc5llBdzrepRDTKh4ePKD7i6x7jHpqgw4r5zvzFOtzl7kz36Xq1/AJOQjkw3cC0+l/QfBjiu j7TKZR4mig7gTnLKBWt+BWJnq3dX0paCqjnircJNkw3YSNMFgdaZB4SK050QcXqHCzdZha++Ja2 WO9ObD26q3BchJ6IqsMzDoO5apyNrmg6VHkwLkZCkPfPGj3/20ojImakVmh3KptssNKVkuxuX2h 6un6kniOT0AD9dhMec5gO7sw9uTeECJ2gA39tGaKq8dROBk8Lafo+5QB2aSdfdCk897gHWBpt9K oSubUgs6qWqlMqjGtSmg5FgsqAjfwysuwc2TEw4aDTRsvl0gyscYg4yXhETPemV7MkW/k= 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 0aee1d87a7ab..6c65feae63aa 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -469,6 +469,8 @@ bool panfrost_exception_needs_reset(const struct panfro= st_device *pfdev, =20 void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int) { + guard(rwsem_write)(&pfdev->reset.lock); + panfrost_gpu_soft_reset(pfdev); =20 panfrost_gpu_power_on(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index a0b9a2145fc9..63452febb1cf 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -165,6 +165,7 @@ struct panfrost_device { struct { struct workqueue_struct *wq; struct work_struct work; + struct rw_semaphore lock; atomic_t pending; } reset; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index f77780c72a1a..571a26b84126 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -41,9 +41,12 @@ static int panfrost_ioctl_query_timestamp(struct panfros= t_device *pfdev, if (ret) return ret; =20 - panfrost_cycle_counter_get(pfdev); - *arg =3D panfrost_timestamp_read(pfdev); - panfrost_cycle_counter_put(pfdev); + /* We should not read timestamp register while the GPU is being reset */ + scoped_guard(rwsem_read, &pfdev->reset.lock) { + panfrost_cycle_counter_get(pfdev); + *arg =3D panfrost_timestamp_read(pfdev); + panfrost_cycle_counter_put(pfdev); + } =20 pm_runtime_put(pfdev->base.dev); return 0; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 00fb36c577df..c2b1f1087e21 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -877,6 +877,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) INIT_WORK(&pfdev->reset.work, panfrost_reset_work); spin_lock_init(&js->job_lock); mutex_init(&pfdev->sched_lock); + init_rwsem(&pfdev->reset.lock); =20 js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->base.dev), = "job"); if (js->irq < 0) --=20 2.55.0 From nobody Fri Sep 25 13:18:48 2026 Received: from sender5-op-o11.zoho.com (sender5-op-o11.zoho.com [165.173.182.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D1EE441168C for ; Fri, 11 Sep 2026 23:29:57 +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=1789169399; cv=pass; b=Qw3qqwROoE0LaKsqurJ7vWzhEgvxQD63sifHQF7kQabhBisq+EnyN5MBWdk2QgNmuucGMafoNcw4PAedwJKrvrRtmDgyNhkouKjl6Jf7c5yyA/xfXNw7WNZKjgX8Ny7Iz+bpdMfcLQZFNa6U3R2+/Gpin+gA/UziNGbx54k7fAk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169399; c=relaxed/simple; bh=YeKXUZ93Q9F5vUdhNp7eaVwO8Q8g+ZJVdxDLh+Ohxco=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DxSrzBh59NirLcll7eBntBglcjd/Ihkt05asTLWqpGny4NQAFVO2rW7nOZFv+p1ywZwNd/tC8//X5IEpKOAjFU/CJ8p6WOg/1C7LoLilNTHNV1ONw2Pm/1tc83YCxaKwKSvUaShQ0dCAHyo4Pt/RqsVaumMLacqJSWx5UbSsmtY= 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=cF32SGVA; 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="cF32SGVA" ARC-Seal: i=1; a=rsa-sha256; t=1789169365; cv=none; d=zohomail.com; s=zohoarc; b=EkOTKZRxOXjzDpcrkWFdJ6r6aX9NvJCA4yzFVmUgGc4Zp/CLsiVw47IW+h/Qy1curw2BZ+qgY/OyNZyVGN0Iy59ViEn6zCXfx5FIexCuo/Z3NXQnsfB9m6nS39tVS4zJ5lb/aINIIwLYjFoW8x657xS5h7BsdIGA8L9IZW5I0U8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169365; 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=XgYQZioWss+0W6RIBexnHpTxemvT1PwUX0wSSrz/SkQ=; b=fcZJWbiKOoaQkXTkiVBGNS3Wro4AlaHV75tkzNq3C6d6YkDscG96w4UEs6/cqn9dyYXTWOLi5HnQ4v7XHkvAmU4NvjhmYrMOqsY53sUpgvF4Ragetx8QGd500eC3+GeeKUnVx3g5y+qZ94odzBathoBKkh3lwRN/viZQaP9RFr4= 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=1789169365; 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=XgYQZioWss+0W6RIBexnHpTxemvT1PwUX0wSSrz/SkQ=; b=cF32SGVAHZ0+UFlaZYTMU9hoOedWtBYhbjxuEfeedAdjkb5jaloyYJUNsoSBhNz/ j6G9h4tC3iIynP5b6IduDGX8xaXTCS9hUHj+HRNWWsxX5zw6UQ2iV8Q2gNrE5pf7mB2 mbONNs1U+zFfWglBYxJCD5OP9PtYes6AnOT9CaBY= Received: by mx.zohomail.com with SMTPS id 1789169364823122.63552077689667; Fri, 11 Sep 2026 16:29:24 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:16 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-15-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=12794; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=YeKXUZ93Q9F5vUdhNp7eaVwO8Q8g+ZJVdxDLh+Ohxco=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6Eb1PKC16MsvgQnHvQbMoeExPRU9iobjm/W NxSv2TeuuKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOhAAKCRAOJn5M7lND PbDpDAC4qylXhHx3PXIAtcNeSEXzNZk5GN2djVUEfSzxenuhRqvQSFchwPpNRuhHUf1+YEocepz XSGsv7+9wHHg7k+mEXF1hCqIP1Q0N4yKZSbmo76SNgh2gm+D2Tq5malXkBCSLqN6FkPZKCtVkRO ukNEstt9M1A4DfWWgXNani9xkoVOlErdQOR4/2R2WvzrR5SbDhHl6Lj0B2PvojzHfByLq1W22Hk zE62bF7k0t/zDbpxC17iAymYCPs0RKi0HOtkHjY4pUxujprkKgQgyA9p17nTIT/GtHP2Z5q3pAC XkLCTCCTICaQbDsh3bHbktyO7u2dQ7GQqOX4bh41K8M08aXy1DRPCqiKDcf0Pg1gd5q7KRziUow 9eFvwVxrf6+Aoht5BdWWEskGmGz6wyhYTFphslcY+4ZEQAsOBfkyyNWpVSYqS5dBWobvv+hD7zb oivtfGnFrAzQyw+pbhK/0SLzPZhYlehHpqEmQWpzxfakK5Fobug2ptjn3hl+1mY1KNBkU= 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, or else flags the current session as dead if that failed. Fixes: 73e467f60acd ("drm/panfrost: Consolidate reset handling") Fixes: 7786fd108777 ("drm/panfrost: Expose performance counters through uns= table ioctls") Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 2 + drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 201 +++++++++++++++++++-----= ---- drivers/gpu/drm/panfrost/panfrost_perfcnt.h | 1 + include/uapi/drm/panfrost_drm.h | 8 +- 4 files changed, 151 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 6c65feae63aa..e774f61c642b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -479,6 +479,8 @@ void panfrost_device_reset(struct panfrost_device *pfde= v, bool enable_job_int) panfrost_jm_reset_interrupts(pfdev); if (enable_job_int) panfrost_jm_enable_interrupts(pfdev); + + panfrost_perfcnt_reset(pfdev); } =20 static int panfrost_device_runtime_resume(struct device *dev) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index b3f71d7fd82a..9847657179a5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -11,6 +11,7 @@ #include #include #include +#include =20 #include "panfrost_device.h" #include "panfrost_features.h" @@ -28,11 +29,15 @@ =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 dump_finished; + bool owns_as_ref; }; =20 static void panfrost_perfcnt_hw_disable(struct panfrost_device *pfdev) @@ -47,36 +52,113 @@ static void panfrost_perfcnt_hw_disable(struct panfros= t_device *pfdev) =20 void panfrost_perfcnt_clean_cache_done(struct panfrost_device *pfdev) { + pfdev->perfcnt->dump_finished =3D true; complete(&pfdev->perfcnt->dump_comp); } =20 void panfrost_perfcnt_sample_done(struct panfrost_device *pfdev) { - if (pfdev->features.selected_coherency !=3D COHERENCY_ACE) + if (pfdev->features.selected_coherency !=3D COHERENCY_ACE) { gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_CACHES); - else + } else { + pfdev->perfcnt->dump_finished =3D true; complete(&pfdev->perfcnt->dump_comp); + } +} + +static int panfrost_perfcnt_hw_enable(struct panfrost_device *pfdev) +{ + 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; } =20 -static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev) +static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev, u32= *state) { - u64 gpuva; + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + u64 gpuva =3D perfcnt->mapping->mmnode.start << PAGE_SHIFT; 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); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + perfcnt->dump_finished =3D false; + *state =3D 0; + + if (!perfcnt->owns_as_ref) { + *state =3D PANFROST_PERFCNT_SESSION_DEAD; + return -EIO; + } + + if (perfcnt->reset_happened) { + *state =3D PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET; + perfcnt->reset_happened =3D false; + } + + reinit_completion(&pfdev->perfcnt->dump_comp); + + gpu_write(pfdev, GPU_PERFCNT_BASE_LO, lower_32_bits(gpuva)); + gpu_write(pfdev, GPU_PERFCNT_BASE_HI, upper_32_bits(gpuva)); + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_CLEAN_CACHES_COMPLETED | + GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_SAMPLE); + } + + /* + * Here we release the reset semaphore because perfcnt should not get in = the way + * of a HW reset. Besides, a legitimate reset might be issued during the = wait. + */ ret =3D wait_for_completion_interruptible_timeout(&pfdev->perfcnt->dump_c= omp, msecs_to_jiffies(1000)); - if (!ret) - ret =3D -ETIMEDOUT; - else if (ret > 0) - ret =3D 0; + + scoped_guard(rwsem_read, &pfdev->reset.lock) { + /* Either sample finished or reset happened */ + if (ret > 0) { + ret =3D perfcnt->dump_finished ? 0 : + perfcnt->owns_as_ref ? -EAGAIN : -EIO; + + } else if (!ret) { + ret =3D -ETIMEDOUT; + } + + if (perfcnt->reset_happened) + *state |=3D PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET; + if (!perfcnt->owns_as_ref) + *state |=3D PANFROST_PERFCNT_SESSION_DEAD; + } =20 return ret; } @@ -87,9 +169,8 @@ static int panfrost_perfcnt_enable_locked(struct panfros= t_device *pfdev, { struct panfrost_file_priv *user =3D file_priv->driver_priv; struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; - struct iosys_map map; struct drm_gem_shmem_object *bo; - u32 cfg, as; + struct iosys_map map; int ret; =20 if (user =3D=3D perfcnt->user) @@ -122,54 +203,31 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, ret =3D drm_gem_vmap(&bo->base, &map); if (ret) goto err_put_mapping; + perfcnt->buf =3D map.vaddr; + perfcnt->counterset =3D counterset; =20 panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer"); =20 - /* - * Clear the counters to start from a fresh state. - */ - gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); - gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); - - ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); - if (ret < 0) - goto err_vunmap; - - as =3D ret; - cfg =3D GPU_PERFCNT_CFG_AS(as) | - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_MANUAL); - - /* - * Bifrost GPUs have 2 set of counters, but we're only interested by - * the first one for now. - */ - if (panfrost_model_is_bifrost(pfdev)) - cfg |=3D GPU_PERFCNT_CFG_SETSEL(counterset); - - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0xffffffff); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0xffffffff); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0xffffffff); - - /* - * Due to PRLAM-8186 we need to disable the Tiler before we enable HW - * counters. - */ - if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); - else - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + /* + * Clear the counters to start from a fresh state. + */ + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); =20 - gpu_write(pfdev, GPU_PERFCNT_CFG, cfg); + ret =3D panfrost_perfcnt_hw_enable(pfdev); + if (ret) + goto err_vunmap; =20 - if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + perfcnt->reset_happened =3D false; + perfcnt->owns_as_ref =3D true; + 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 +253,16 @@ static int panfrost_perfcnt_disable_locked(struct pan= frost_device *pfdev, if (user !=3D perfcnt->user) return -EINVAL; =20 - panfrost_perfcnt_hw_disable(pfdev); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + panfrost_perfcnt_hw_disable(pfdev); + if (perfcnt->owns_as_ref) + 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); @@ -249,13 +310,16 @@ int panfrost_ioctl_perfcnt_dump(struct drm_device *de= v, void *data, if (ret) return ret; =20 + if (req->pad) + return -EINVAL; + mutex_lock(&perfcnt->lock); if (perfcnt->user !=3D file_priv->driver_priv) { ret =3D -EINVAL; goto out; } =20 - ret =3D panfrost_perfcnt_dump_locked(pfdev); + ret =3D panfrost_perfcnt_dump_locked(pfdev, &req->state); if (ret) goto out; =20 @@ -338,3 +402,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->owns_as_ref =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..97e001040543 100644 --- a/include/uapi/drm/panfrost_drm.h +++ b/include/uapi/drm/panfrost_drm.h @@ -47,7 +47,7 @@ extern "C" { * them for anything but debugging purpose. */ #define DRM_IOCTL_PANFROST_PERFCNT_ENABLE DRM_IOW(DRM_COMMAND_BASE + DRM_P= ANFROST_PERFCNT_ENABLE, struct drm_panfrost_perfcnt_enable) -#define DRM_IOCTL_PANFROST_PERFCNT_DUMP DRM_IOW(DRM_COMMAND_BASE + DRM_PA= NFROST_PERFCNT_DUMP, struct drm_panfrost_perfcnt_dump) +#define DRM_IOCTL_PANFROST_PERFCNT_DUMP DRM_IOWR(DRM_COMMAND_BASE + DRM_P= ANFROST_PERFCNT_DUMP, struct drm_panfrost_perfcnt_dump) =20 #define PANFROST_JD_REQ_FS (1 << 0) #define PANFROST_JD_REQ_CYCLE_COUNT (1 << 1) @@ -270,8 +270,14 @@ struct drm_panfrost_perfcnt_enable { __u32 counterset; }; =20 +/* Perfcnt dump state as influenced by a HW reset */ +#define PANFROST_PERFCNT_SESSION_DEAD (1 << 0) +#define PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET (1 << 1) + struct drm_panfrost_perfcnt_dump { __u64 buf_ptr; + __u32 state; + __u32 pad; /* MBZ */ }; =20 /* madvise provides a way to tell the kernel in case a buffers contents --=20 2.55.0 From nobody Fri Sep 25 13:18:48 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 5EFED41687D for ; Fri, 11 Sep 2026 23:30:01 +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=1789169403; cv=pass; b=Qy936flZSoBUXL6n5SOs4jT+sUvjg9UAyy6StdQsfNLvjN8FiDMLab6upVSH5zEobdvopza7VbvFrVBg3C6uEL0dVhILOb6Bo2Fim7uLeI7UBgsCRx62FIfLBb9ujGQE79K1ysPh02GdpiHKD6aOwAgI9Hhue7fKClSVmAddKwk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789169403; c=relaxed/simple; bh=fcINJblJRb432SfE3VmHwqT0pqshFhBkvIiNxSLnr6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LUsKipppniIBBmeOyBfCXVXtHerlAVGZdeM+/RdI8xm3XQBNGG5l1FX/bOZ4xv9ZOrZfqvzOn7k8oiVwBnwcsSAKWDBbBVtznZ3j8ypsLyv4iGHOrxnWMYFE5e1FqJLpfnlLHPOF1n2c0R7zynzctY6T+gCa5WqzHxSUm4wyim0= 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=Qil0NfRB; 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="Qil0NfRB" ARC-Seal: i=1; a=rsa-sha256; t=1789169369; cv=none; d=zohomail.com; s=zohoarc; b=c1HJpCMxqj76FjX/BwQBnPxEuGAQVcRucYer2SXcpdkASPShtkWy2p3RgzFSpQA6BdUvpeLhz11XqadrrNeQnAgzgAg0r/SJ8oKVzfmbM2epojsmuNTYwBMrtwjUYH+F/ZopL1eargNVQgzkvHrvzQ2pYO53zXc+Gj2ugpkJjY8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789169369; 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=GiNAk1ddULmDOvtto/fkJvNwC9OGSrBfiGgPyvguuH0=; b=NicFJskWlTminpbvN8maTefPtRCwalVqTi8temJfGs7KrI0yWoNyWmMIhj17fz8+GScaFLn5ByU4ybT9xnHaj3HsExyxSXkCjCWj9fNAvrz0vBjLBLPIYh1vjO6Q13W2oQcetEPO/ZMt7lT9mQfDEsqV0/SceQZvc/O37kAr8tg= 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=1789169369; 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=GiNAk1ddULmDOvtto/fkJvNwC9OGSrBfiGgPyvguuH0=; b=Qil0NfRBPXCyLo01j3onMmh5QSOccHjd/AU802IBGaSU8t3YrUS4mgNEXLJDT438 fhXxP/7RMjlBkfU/hTHwGAoByPLFbctZOIDWvohXswmT9Ly+S90+p6J4Y36El9WaSY6 kuY9w7EkRgNzdcAvyfhzplVZ7zIatqS6K1YEHDJY= Received: by mx.zohomail.com with SMTPS id 1789169369754575.6360293970592; Fri, 11 Sep 2026 16:29:29 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Sat, 12 Sep 2026 00:28:17 +0100 Subject: [PATCH v9 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: <20260912-claude-fixes-v9-16-e588feaa61ef@collabora.com> References: <20260912-claude-fixes-v9-0-e588feaa61ef@collabora.com> In-Reply-To: <20260912-claude-fixes-v9-0-e588feaa61ef@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=1175; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=fcINJblJRb432SfE3VmHwqT0pqshFhBkvIiNxSLnr6s=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqpI6ElqEcTErrviVL8e8PnP3zQaY4v+Vhjy/fq MZnkwI4UiuJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCaqSOhAAKCRAOJn5M7lND PfbkC/9SVd6tEbdV4G9I/cPb3krQRlNh8o20q9/JntDuPloCVFJIRgVp7x6VYvproQtw21quSSa xVJbC4kz3m0vR5RqS+BZ85VknRRlnLprdDIjrGmjci5PrE/XJL2rfpGQLwzQ3QqbOCwVc2h0dux OInL5HcE3hCASsOdpgVllj1XzyFjS+1dfoVesT3po7kJ/5ZDEdMVnSgQX3mzO0wfv4Ces4doGSR dJV10Bs+u/LuyzzoleGc8YtmD2hQTv1Hrs9r4kM+njeUbAB8LmPR7yCAF3GHZD3kkDmtZ088T6h ycsh7svg0D7tSKs4hojgj0PwuSI9DCRnEiGxlLvfaJ4HZoD+1X9W4bTyuS0V+S1VppKGLruZKNw pkPvBcIW2Gxv9na3z2Enl79Rr3rhcM/lbVEWV+/rh6eIloBsA0zHsyYl6HBZV+MmZj5q7LXkmBK mb7wuQsikU92KZbjR0FMcyZHQMmr8YDmR1hICy+x76YD9AYT4UmeIFfgRu7oZgq4nwngc= 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..de9b1c115181 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -808,6 +808,7 @@ static const struct file_operations panfrost_drm_driver= _fops =3D { * - 1.6 - adds PANFROST_BO_MAP_WB, PANFROST_IOCTL_SYNC_BO, * PANFROST_IOCTL_QUERY_BO_INFO and * DRM_PANFROST_PARAM_SELECTED_COHERENCY + * - 1.7 - adds PERFCNT_DUMP req state field */ static const struct drm_driver panfrost_drm_driver =3D { .driver_features =3D DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ, @@ -820,7 +821,7 @@ static const struct drm_driver panfrost_drm_driver =3D { .name =3D "panfrost", .desc =3D "panfrost DRM", .major =3D 1, - .minor =3D 6, + .minor =3D 7, =20 .gem_create_object =3D panfrost_gem_create_object, .gem_prime_import =3D panfrost_gem_prime_import, --=20 2.55.0