From nobody Fri Sep 25 23:09:25 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 0B79E3672A8 for ; Fri, 25 Sep 2026 18:46: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=1790361970; cv=pass; b=u82D1UK0jJwLIvZO97s+6hNk41rLJHF8jTz5ocz7b52rWAIEBI2YZdXHsVxaB3qDNbFOgyll+pMjCiSciI4nags43r5KefVnL7YQjFlgCJHrwBUtCkoNbnP/wSXb5p8DrwwwuXo3yIJGS8zhtWHGRB4OTnTrMdbP85/nNkYN4Xc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361970; c=relaxed/simple; bh=stB54yy+rzsgjj1qVzBZEJWnEUOo5dHMeMALr6aQN1E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z2z3wI/WYjOfVKNsG3aXOtGjXVYFYSTuEn5d1VU1lVHfC9lcNtTB8KXzbrZcPDeJAnLTthjK0JNwIoktZ4xntoslLMe+bng488ZLZWoGvWILCniGMHXsYjnHZvH/9ivjBxLB2O4XrM1SPmpgM8cuANTMagE8E57pB2cv5IL2+Y4= 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=AxsL+VwH; 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="AxsL+VwH" ARC-Seal: i=1; a=rsa-sha256; t=1790361936; cv=none; d=zohomail.com; s=zohoarc; b=FCp+gPTiH9x7z6rLbfnXTfE/avxcACXRnrkeLXwIVrfTMTaa2jZ1LhxzL7PDZPmpmRi3Z+OMeW2Ongz1u2uMQ070y0OaJK29v2ErsDVuN9xY9U+5OxMj3bnunKI5fVHCh/xX1AieIfw8VWksr1xwJNM9caCxoTHJWzIhqIu5l5w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361936; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=tgZWphGgU/74z0QaLxGpjKzaewG66DZ1iM4zlbILEjk=; b=B4JM5wTUJ8EDS8miPWIeWE9y+P+KKSs9h8mEgv6z5VhzGGsRr51cQNSd1sh5//Zws3T39WH0js1B5CtN7q872NEzGL9aW8IdebYpKeD+GOR91M/yl2Ll/uOqqvRhj6g1dAh0MeZypdZjv2RopS1hLigJXCr6HuOdsd3fzOBiCK0= 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=1790361936; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=tgZWphGgU/74z0QaLxGpjKzaewG66DZ1iM4zlbILEjk=; b=AxsL+VwHVMxavBI2BntENWd/Y80o8o50CvHSVOdZJ/7fkP5YmCESwi+eyvVxQvBD /AleahoofKeOWlKw50d8LdiF1xr8UYN7em7D8ewqz5Pxt7nIpVfCfUC2xG1ryeavoPj 3O9vuGRoiQto0ZiDvyd79l60raPHeCq0rO88rr44= Received: by smtp.zohomail.com with SMTPS id 1790361935409951.6159106398584; Fri, 25 Sep 2026 11:45:35 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:22 +0100 Subject: [PATCH v11 01/15] drm/panfrost: Move shrinker initialization and unplug one level down Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-1-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6389; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=stB54yy+rzsgjj1qVzBZEJWnEUOo5dHMeMALr6aQN1E=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDjJAmLG6V+7uuAHwbc6B5YQwIK2RJMnMDC 3r5wE3XROKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PZnvC/wI0GrUD2tIjpDRvbRHHSwookHsf7HpMQUl1Q8PKyy5FfxbKIyduTnSo7WXoENNSbPuUhh ag9FvrNkGdOZ16LhM6hYPDjMzu4O2FouIvkuB7xakrxVLSCR1uX7YHFMdEhX0VTfdp2DFlpTRMJ nsPwCXoLbT2srv6SwazrznWJF89bww9V9zMeaMCR0yrNhxg0fw4t5madEto4S5Pd1hyvs0MMC07 1rBEoD+DdZcVf9ebliB1XbLjwTQQXQA21eD1ZUXIWZbM34WoPa6il641whmHEcYdztDuR7v37Sv pzDKR7ofyY7WhA/BVZBeyrAuk5SYFZieAeOhVK45Q+k5RyqcsIw+kL5nm0Wjpi0WSfB2PR7DRe5 ofFqs9av9uzfyuthAb59xdSzjlnhvyV+ZKCfAw+eyp2ooCcCcxpAaBXvm4ES276oqYq/1IEJCfX v8RjqxGG/BgppXBeugm/ZuAoUIlNZxrVyyk2fEpl0ZSZ0EKa/uhYH5OvO5Oj7vQD63j+E= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Since the moment we call drm_dev_register() the device should be in a position to accept jobs, so it's best if the shrinker is already initialized by then. On top of that, make shrinker functions take an panfrost_device pointer like other functions in the same sequence and rename them accordingly. Essentially mimic the init/fini behaviour in Panthor. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 8 +++++++- drivers/gpu/drm/panfrost/panfrost_drv.c | 6 ------ drivers/gpu/drm/panfrost/panfrost_gem.c | 26 ++++++++++++++------= ---- drivers/gpu/drm/panfrost/panfrost_gem.h | 7 ++++--- drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 8 ++------ 5 files changed, 28 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 485349faf251..05c40d5a20b5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -280,9 +280,14 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_job; =20 - panfrost_gem_init(pfdev); + err =3D panfrost_gem_init(pfdev); + if (err) + goto out_perfcnt; =20 return 0; + +out_perfcnt: + panfrost_perfcnt_fini(pfdev); out_job: panfrost_jm_fini(pfdev); out_mmu: @@ -304,6 +309,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 void panfrost_device_fini(struct panfrost_device *pfdev) { + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); panfrost_mmu_fini(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 96a66d673ba6..9882a3ede75f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -1003,14 +1003,9 @@ static int panfrost_probe(struct platform_device *pd= ev) if (err < 0) goto err_out1; =20 - err =3D panfrost_gem_shrinker_init(&pfdev->base); - if (err) - goto err_out2; =20 return 0; =20 -err_out2: - drm_dev_unregister(&pfdev->base); err_out1: pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); @@ -1024,7 +1019,6 @@ static void panfrost_remove(struct platform_device *p= dev) struct panfrost_device *pfdev =3D platform_get_drvdata(pdev); =20 drm_dev_unregister(&pfdev->base); - panfrost_gem_shrinker_cleanup(&pfdev->base); =20 pm_runtime_get_sync(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 3a7fce428898..f39c0f50ed4f 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -15,20 +15,24 @@ #include "panfrost_gem.h" #include "panfrost_mmu.h" =20 -void panfrost_gem_init(struct panfrost_device *pfdev) +int panfrost_gem_init(struct panfrost_device *pfdev) { - int err; + if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && panfrost_transparent_hugep= age) { + int err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); + + if (drm_gem_get_huge_mnt(&pfdev->base)) + drm_info(&pfdev->base, "Using Transparent Hugepage\n"); + else if (err) + drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", + err); + } =20 - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && - !panfrost_transparent_hugepage) - return; + return panfrost_gem_shrinker_init(pfdev); +} =20 - err =3D drm_gem_huge_mnt_create(&pfdev->base, "within_size"); - if (drm_gem_get_huge_mnt(&pfdev->base)) - drm_info(&pfdev->base, "Using Transparent Hugepage\n"); - else if (err) - drm_warn(&pfdev->base, "Can't use Transparent Hugepage (%d)\n", - err); +void panfrost_gem_fini(struct panfrost_device *pfdev) +{ + panfrost_gem_shrinker_fini(pfdev); } =20 #ifdef CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panf= rost/panfrost_gem.h index 79d4377019e9..5c823cdbd980 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.h +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h @@ -129,7 +129,8 @@ drm_mm_node_to_panfrost_mapping(struct drm_mm_node *nod= e) return container_of(node, struct panfrost_gem_mapping, mmnode); } =20 -void panfrost_gem_init(struct panfrost_device *pfdev); +int panfrost_gem_init(struct panfrost_device *pfdev); +void panfrost_gem_fini(struct panfrost_device *pfdev); =20 struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, = size_t size); =20 @@ -154,8 +155,8 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); =20 -int panfrost_gem_shrinker_init(struct drm_device *dev); -void panfrost_gem_shrinker_cleanup(struct drm_device *dev); +int panfrost_gem_shrinker_init(struct panfrost_device *pfdev); +void panfrost_gem_shrinker_fini(struct panfrost_device *pfdev); =20 void panfrost_gem_set_label(struct drm_gem_object *obj, const char *label); int panfrost_gem_sync(struct drm_gem_object *obj, u32 type, diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index 2fe967a90bcb..fefae87535d6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -95,10 +95,8 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, st= ruct shrink_control *sc) * * This function registers and sets up the panfrost shrinker. */ -int panfrost_gem_shrinker_init(struct drm_device *dev) +int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) { - struct panfrost_device *pfdev =3D to_panfrost_device(dev); - pfdev->shrinker =3D shrinker_alloc(0, "drm-panfrost"); if (!pfdev->shrinker) return -ENOMEM; @@ -118,10 +116,8 @@ int panfrost_gem_shrinker_init(struct drm_device *dev) * * This function unregisters the panfrost shrinker. */ -void panfrost_gem_shrinker_cleanup(struct drm_device *dev) +void panfrost_gem_shrinker_fini(struct panfrost_device *pfdev) { - struct panfrost_device *pfdev =3D to_panfrost_device(dev); - if (pfdev->shrinker) shrinker_free(pfdev->shrinker); } --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 D9EFB199EAD for ; Fri, 25 Sep 2026 18:46:09 +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=1790361971; cv=pass; b=BE8L0FFJjGI0h0jJyUxoQmmk7Ntsx3UEVXaFXtkWk2PyRJlzRfNzCWdzaUggBsdk06FOBvCR7yAilHAArexoRuIzvbbhuJQaXDFgo3MRj7hNwZizEgXa9tX89qhlQH5urr/mrQhnV2z6M6ZiZxCzjf5hzRTzSQQzNMaP51SHrVE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361971; c=relaxed/simple; bh=BseDd5ptshL8O0X6ZZAknqhIzPZMy2A4L4RfHDWk90U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ivoDjhIzrZxHcJMqYXyaTzxOcbMefJ9jfHjAgxot3CBNSjJCZTy4VGnKnJfSVo0hkIlT4Z8TO14LzxHX7WRs02VHHlO7DJ87iHdGON279nFWH0Klj+9V/xPhjjUIq0FjuQV6LOrf1ha3sKwN/1xLDuU7qZXeIT3eDeOaBiGcf8k= 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=clGk1dyG; 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="clGk1dyG" ARC-Seal: i=1; a=rsa-sha256; t=1790361942; cv=none; d=zohomail.com; s=zohoarc; b=JJTHjeMCnrlRV/6PfwXBrrop4A1OiS3seVhJV2BnocJv2ERHAz8MwEDJ4jNLfQ6oo5mbTtZQL5p4WnAM7tCPjb5V8MMkOoPhA1lX1ts01znAv5UGE000LlMgB6e7hn+MB0j/Ub/UZ+jkOUOPG6NpzPs7cA7WS2DYSf/pZGE/g7Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361942; 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=O8UTP69aPCXN7K3miZFwPE+K6wE6+X1cP7nk1+vM9a18BATBQpsweL4FOJoqxRpQwCmj8sTSZaFJGyO9p2mhhCMF2PaCTxR6Nn7rXOwAyxx3RoZYR3cL1rZeYLmCybnUhZRz9crJJF4az80uuvPe8n36IYUUoypuWEX+5pcFUmA= 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=1790361942; 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=clGk1dyGfWTuXt6gZQf1hLFlsvxaQkKl4koLHCGNxu5wDy/ERcoJgU295joFYZkD D8K29J01wqIS7Iu+tyDygE2OhpeyvofoIrHDM1OPYImOOZ6Z9k6ieP4afZv5UcUIqU8 BtOZK+8woO3a2CBxbI/uDu1BFpSo2CocVCOERsqk= Received: by smtp.zohomail.com with SMTPS id 1790361940744166.63089196362; Fri, 25 Sep 2026 11:45:40 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:23 +0100 Subject: [PATCH v11 02/15] drm/panfrost: Move lock and modparam initialisations into their subsystems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-2-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFD2x8jmlPIB3OVpZuPwdB7BZzSqeAQCRp0c 41RfvdcxGCJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PZ14DACADtMyWks579mTxOmkGevpxnw7NqLdA0wgSXnklJD86YH7OMknOlNGL+36cBy2FERADxz 2tNVk7b2RZvGGDKjPvwFeF6eNjpy+X4BPCuM7iNMjxsvfqD0M2Wv2FjHUtuJxwd0/XnRBfCgja3 4duY39BAtC82CDQZiSYq7ptMilPB0Su/aQ/3BT+aEagXwLe0nF+3mCaKdG+4SOEjj8D7ERhnXUu ZudTNCZH57J/QI7Q6cpYGS3ekzJXsx6GueODD5HdY4kYaSIGICd88fc2TGrhnclXdFLUa+iKJQR E/EmGPH82KylLEAxSWWWG+teIGn87T3xvU/Rd3Wznk5VoQmbdINrr5t7GxI992NEHJUYP547H0X qv2qKOyA2EedZ22BG33cwvEqHeVNI4QZzyKIHsTviY93CTG13t5n5Sb2Q5z7Q4f0K1Yn/KVA1/8 ZTTIFrhr9Av9+z0KKg9edrmILAKjDX13RX8OPt388STOUfdDsDcUHrUVLOn/yC+nujagk= 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 23:09:25 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 76ED5199EAD for ; Fri, 25 Sep 2026 18:46:21 +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=1790361983; cv=pass; b=MX07nojmVi+V6GOBGFHvOzA+u1KJKnBg52Z31xn1aAPfK3ss8eMxwlg9Y6e4XCjVEuhdLpWco7NBWcycoG8mxaiTBcYkmducDHYlVBWnZIdB/MuX49DXQKilCV06MEunyIEUw7tuThR08jc+VluDZzDi/CZgT7vocEPKXntXCqo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361983; 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=Rold7uJbUZfz93lopNrTc9JZ1DiB9Nw0VFFDB25KujCBl6NFSDPKKjRlz4Xen0oIVmWBdVnQeR8yYE8yaD7mLACFQi9kvouFFfDVlpfGyn2MCrQg9cvJPZK4kOiSr4FGyUvlk4AdEbc6c07fbZuuqSjMC/2jp7waSqZni1tb1t8= 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=BsqarFCC; 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="BsqarFCC" ARC-Seal: i=1; a=rsa-sha256; t=1790361946; cv=none; d=zohomail.com; s=zohoarc; b=h9n6vpWOnSjDB9/gG+H+cq1ZBwayCyU4k8BqOGXiNDBm2tFN+d1t64XZNB3CnuJT5GV1uvkgf/Voo5nNTQbaGKxwnCXJRpcqecwOsJK0WYa8fCqwy0GruJ9GkKe3E00u6H08r+U8T5AOIpJOakcPxt+dpK8W+QmiuAbyhlhutDY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361946; 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=jtqtUXkU/jOGNvo7Ny6GuLbZpHdoN14AAIz0vi0dTiibnl/qddYpzAB8tzZvVYt9ly50czblO/9fxen6exiqkThGaFBynomFBoFpebmyBjzvo2Ri//dz4yzEtE6I6zkHyE9c6uXfcEoGW3BCaNPTFf/W/gpwxZhMVSmbVmjeGEk= 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=1790361946; 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=BsqarFCCXnnsOy1uQKUACC0RG4ZwL0kqXJPcsNYkNFFTV+jlHNf62ADfZ3ZJ9xB7 kdW1Nr/nv7Yg4DsKFGeaZrVy2jhBq8bk7UGzZMCnzqA+/MSDX5/ZyhvWL55oY+x9Ttu daBkDrV+rQYzFMCdc+/0kudjF6o6sWPeyeMppHcQ= Received: by smtp.zohomail.com with SMTPS id 179036194590339.126525813651256; Fri, 25 Sep 2026 11:45:45 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:24 +0100 Subject: [PATCH v11 03/15] drm/panfrost: Move debugfs initialisation to relevant subsystems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-3-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDmIQ9oyBUBkTXPcCpAnhgi2D5Ql+txxpxN D5ETEww+OKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PUSEC/wK2j5WdRq4iMRVV6imZqnjsTDqwebGFTlNno7b9FrxGS+UN5PByiApV19j6jSLwUA+STq 035wPGRgTuWHDSeNSAw23flnVgaxP0+ZG6WWr1+XQRLPXR4ucuQ4tTRdzwtalb+tTbCnP22N4fS kQf5GoChEggxvs9tawgpbXoOOg6o2Ib4ps37Ftr0rPM4t9bDb/zjL/d8+wsOCrcNxdgL/wpLBJX tLQOUC4+mFiAiOc42/GkSKZu5R8hJ/bOabxhlN/FdnpJa6IcDFHryUaDaL+trdlWJtYnmgmvwT7 35Ka7/Izxh6nQCQBdIUYBpFdTKZNoDc0Ivv7DzumptbNEHgMxeGk2ev5Gzo4R5WzlvesIJnEs7B IyWKkRCfWFP73OhnafQ8v3nfgRJd9/dkrIruWsRwYzAinqya1/pempkNgJMwBKXMxTwHCRSLdx7 r6FtKVxwA4LgAkWsArMBb9mEVpDbO02j89ZfTed+2rUctjTClafJwEVoRpTVOghL9Ran8= 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 23:09:25 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 3124E3B14C7 for ; Fri, 25 Sep 2026 18:46:19 +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=1790361981; cv=pass; b=FBK3eXJQxrdgxQC4SPW/hjz+Kbtfzop7s03+nq31s7Y3ecq5mkFg4cxbDB2f19bWZhkoNYYT9T6VcbdSSK9jrAMllKlqxkl/nc0dE54Swc8l24Ms9U0JemJ+SSzm3+7TTF30bG/Rnw2LAJZ+7dY1PrTzN0eIYX3mAWuvcPc0TSk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361981; c=relaxed/simple; bh=ZbKj/0+gldpyeLSSMbRlmpp9mm9nCUYXI4PymrPfLzQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HvsPi+BOQ6thrbRjTUdP8wntgDQEMpMg6YWi8Q3qq+URvf6Gvprj9VOTugZNVOEjSRkLMhO/JIMXlYvFP71Z66pS7UPqzZmO8z6nZ6AElQmS68mET9e428AgogisQmuPOhFX93lL7muAbDstSsbM/9PVwqB31WYBUwCOr4Kz7F0= 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=gAh/KK1m; 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="gAh/KK1m" ARC-Seal: i=1; a=rsa-sha256; t=1790361952; cv=none; d=zohomail.com; s=zohoarc; b=LZrOrcedXR75hHWAKW+frLRM90noSuSvP4w6g0b1g4SOhYoYDRecB86fEFByBQtcR9DrLUmFiJSZot1VwzyMrX4H2m8khOlf4xq63mS5TNDemOz4VXgnYq+VaK9WfR6W74uzLpeBHJlBcg/PB1fmg5VfqEbt/u9qAUC0zT8mmak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361952; 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=n+iwIDc4nc/ZJeCBV4Ei6e4qzMyw3Ke5FsV/RsFc1KkOuPhBg1fJDF6cNovXuCdqMvhOoGWDdimT7DLRwnwXrUNnLQG8WQ5R1QCPIGiW8YzeqDlLRD21BPHB0aql59wwNEv/78SajwaSDmUIaBJBra7a57+3FGL30ESHYAm42Gg= 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=1790361952; 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=gAh/KK1m5CdZKr6Kj+yVRktz6Dj7erYGhzNJIxzdfzDjMmNZdhJm0KE2DEiQ/2xw wwgsmUFKsiGvvYFRcKq3Q79XaMhzfFJQrCx5YgNpUYqjguMzjwXGmu9esWrCrmCFHJ5 vpfFxFoyso/lK52l1Ybso0XH4NH7qQeuzVL7d+C0= Received: by smtp.zohomail.com with SMTPS id 1790361951195381.447267247186; Fri, 25 Sep 2026 11:45:51 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:25 +0100 Subject: [PATCH v11 04/15] drm/panfrost: Skip NULL checks for clock enable/disabling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-4-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1586; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=ZbKj/0+gldpyeLSSMbRlmpp9mm9nCUYXI4PymrPfLzQ=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDB4nJ71qoK/li91o6Keb0e0zN9a50eeN8K L2BgOlgIkKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PbJyDACRB+42WPBKqIRzTRerVNrIYMJKBMOOFOKNAL1kAm96fzB2IvLiqHXyfVpycOqNPx1dqrC 14WCAv4f3X4Zd6zygzTqhwZCav7b0yQ2Al9TGj9BgZfkHzlAbb+10CvqvqZdcabPIVWaq9LkkAT 0pzZiC6l0m2hT3g858eMqJXZhgwGTvzYxTZJz/WzHhAj0Rv/999+R1ocul60MLkUWwc9ccBEPkd I4BFZ9y9h+hiKW0cJe0vm/n8TaX4rc9POi2SNA0qDDgAeko9kMAQ/Hk40ZKhv/PNtm5nd8j4kew rdyDdkg08UeGDp6ReWMOND87w7zSVJYmDzHTI/UuCAimfdtt6qQ1ccE0nzIY7iXaO4h7Qlen02o 81kudoc0s1PWlDDpqyPRtvbvkfdFE0o2fe30Y+em1/CYlha7oThsdRED52U+9hCU2ZPqXkuASII sJY69t2TNY1Upw8x89Ry/P8MFXpMcU3wxv2Bb7yCX0q0nI9wS0aGkeaPecIbUBOd6ENqw= 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 23:09:25 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 36DD53F107F for ; Fri, 25 Sep 2026 18:46:25 +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=1790361987; cv=pass; b=tY4ev0ojrCijSef8hS6392KfuH5+q2uPseLFtDTR2m10DAW+Prav//Jb3ymd6WbLZL53PE0ipL0P9Os/fOGrFP+b8koOPrwgDvgJ6BdHeEjr2J1KSLWlmWBhZRHmIoWEDN4A3SxUnpd/u1Q2kgVdu70+HGgNfqwQiLrzTbpzTg4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361987; c=relaxed/simple; bh=gjre2d//pLL35O2CFo/5bmFFpp2uslvlgfO9zx+gAgY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XvXJqCq/fl7Z2jogPg7TJzo+1AznhZSqIfzbMmD7wmklUnjwAOQYzPiOJtErF/4S3sXWL/FvuzubN6qSKDeL3SIXXjtK1GlUFmLZC3t0ggN8nGt3okYx7o80W02cvWEqQceYLmIgf5Iwkv1l8YfViZZ5R+MEKMdHLVBVKzkT8q4= 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=Yj2XiOrg; 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="Yj2XiOrg" ARC-Seal: i=1; a=rsa-sha256; t=1790361958; cv=none; d=zohomail.com; s=zohoarc; b=lTxWEE8i5pMPIrmr8Y0NuePJF2IA8xFoDG1GPSKiavwPo1LH6AM+njfXWzZRGVDSmGtHKOj2NvOLsIHa7fQFhluD1Gmo6CKG2uZ5UbYNLsQha3M3lp9xrVuSpQR0tQxrd2nsQbBuIkcYcPavzMiMVdmNJ/Lsfpg5WCXM2P7xj6A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361958; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=qigAaY9WXoJkoUdhy+BS7+ht2S8XyDcYsJXfsXz1pnY=; b=ZIMPKcHppNNwqHfBJvr68eTB4VME0dEWBbaEcwycnzpMtC+AyASO93PJ8t5HUzv8ab1JSgZxk3UZqIRtAHjjGsPyIzPiCe1vvvueyL/ltEYeAhsu2cFv3S0AUjbDN+ammSv3LIv+dKKCpQNCa77dZYWB2Icrd/YAsM1krgDhb7o= 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=1790361958; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qigAaY9WXoJkoUdhy+BS7+ht2S8XyDcYsJXfsXz1pnY=; b=Yj2XiOrg8TpIlN2EI7ub+yyuVTFThr/9FnxhIgHqRW05bvlc3rsSIAsGXrO6dcky CQydpJe5fRjYrv4IB016yk/8B4ZFDRrL9LMbjL9qXxylCpDn8vDOzH7pivlDUzEmjMH HIClI+NyOQZdsv6yku5GWjezk4m3VbeSvFCn5Khs= Received: by smtp.zohomail.com with SMTPS id 1790361957559435.29212726625576; Fri, 25 Sep 2026 11:45:57 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:26 +0100 Subject: [PATCH v11 05/15] drm/panfrost: Consolidate device clock management and reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-5-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6334; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=gjre2d//pLL35O2CFo/5bmFFpp2uslvlgfO9zx+gAgY=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDyzMEr0NJ8uHPoC7PaLkzWS5hJzZf9uqur Y239QvNkaKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PbtpC/9VvpLG0u7zCAGVR7cJ6C3hgi9vz5VvxpisW1yZYnk7HMhhwrQmF5wYJ/gS3qrYmh3qIKy HFTO3gbAryDspnr0pzLc15hSjvQOs8/FxdBQSk4oLg7sSbhS0d1GSzv50ikW29e8s9pCDHc8efv IBCbyF3IcqdsHsq6FvkTz9xcMIW4fxrZjNOrqY/PGwWaj7FPySHmUPU+mT+qPe55lbLdpffWZRn oNn+6QeCTxJp5oHL6eqv6FNrIOBYmiwL/zIpC/Q9qmPjr/QSNES9/Dzq96pRrEn6d0Y/6npa0/k 4R3PCAfem4dCmpvOauDrOIcAfacCVKcPMIHX36ksxY6jUa1A+zCfsGhI02g1UTV2WZ0xOq7r6lp dZJa9Ri7sN/Qv1T4Vq/Q9EDa0gM01pZbGtQHThmXiYVvYh9Qk7MgdiCbpidKamyLx2D7t3zfZ6l UJdVg7paYopWyUu3hNaq2R87MWEMsjXhFZ1uW9hyy8W9c1yUis4JLQcbL6LIgleYhY2iI= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Gather all clock enables and disables into a single function to avoid repetitions between driver init/fini and device resume/suspend, since these clocks are always handled in bulk. Also do clk (un)prepares and dis/enables at the same time, since the clk_prepare_* family of functions can simply increase the refcnt of an already prepared clock. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 118 +++++++++++++------------= ---- 1 file changed, 52 insertions(+), 66 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index b3a53504bd01..9f2b1967a398 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -34,10 +34,46 @@ static void panfrost_reset_fini(struct panfrost_device = *pfdev) reset_control_assert(pfdev->rstc); } =20 -static int panfrost_clk_init(struct panfrost_device *pfdev) +static int panfrost_clks_enable(struct panfrost_device *pfdev, bool on_res= ume) { int err; + + err =3D clk_prepare_enable(pfdev->clock); + if (err) + return err; + + err =3D clk_prepare_enable(pfdev->bus_clock); + if (err) + goto disable_clock; + + if (on_resume) { + err =3D clk_prepare_enable(pfdev->bus_ace_clock); + if (err) + goto disable_bus_clock; + } + + return 0; + +disable_bus_clock: + clk_disable_unprepare(pfdev->bus_clock); +disable_clock: + clk_disable_unprepare(pfdev->clock); + + return err; +} + +static void panfrost_clks_disable(struct panfrost_device *pfdev, bool on_s= uspend) +{ + if (on_suspend) + clk_disable_unprepare(pfdev->bus_ace_clock); + clk_disable_unprepare(pfdev->bus_clock); + clk_disable_unprepare(pfdev->clock); +} + +static int panfrost_clk_init(struct panfrost_device *pfdev) +{ unsigned long rate; + int err; =20 pfdev->clock =3D devm_clk_get(pfdev->base.dev, NULL); if (IS_ERR(pfdev->clock)) { @@ -48,53 +84,31 @@ static int panfrost_clk_init(struct panfrost_device *pf= dev) rate =3D clk_get_rate(pfdev->clock); dev_info(pfdev->base.dev, "clock rate =3D %lu\n", rate); =20 - err =3D clk_prepare_enable(pfdev->clock); - if (err) - return err; - pfdev->bus_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus"); if (IS_ERR(pfdev->bus_clock)) { - dev_err(pfdev->base.dev, "get bus_clock failed %ld\n", - PTR_ERR(pfdev->bus_clock)); err =3D PTR_ERR(pfdev->bus_clock); - goto disable_clock; + dev_err(pfdev->base.dev, "get bus_clock failed %d\n", err); + return err; } =20 if (pfdev->bus_clock) { rate =3D clk_get_rate(pfdev->bus_clock); dev_info(pfdev->base.dev, "bus_clock rate =3D %lu\n", rate); - - err =3D clk_prepare_enable(pfdev->bus_clock); - if (err) - goto disable_clock; } =20 pfdev->bus_ace_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus_ace"= ); if (IS_ERR(pfdev->bus_ace_clock)) { err =3D PTR_ERR(pfdev->bus_ace_clock); dev_err(pfdev->base.dev, "get bus_ace_clock failed %d\n", err); - goto disable_bus_clock; + return err; } =20 - err =3D clk_prepare_enable(pfdev->bus_ace_clock); - if (err) - goto disable_bus_clock; - - return 0; - -disable_bus_clock: - clk_disable_unprepare(pfdev->bus_clock); -disable_clock: - clk_disable_unprepare(pfdev->clock); - - return err; + return panfrost_clks_enable(pfdev, true); } =20 static void panfrost_clk_fini(struct panfrost_device *pfdev) { - clk_disable_unprepare(pfdev->bus_ace_clock); - clk_disable_unprepare(pfdev->bus_clock); - clk_disable_unprepare(pfdev->clock); + panfrost_clks_disable(pfdev, true); } =20 static int panfrost_regulator_init(struct panfrost_device *pfdev) @@ -436,34 +450,17 @@ static int panfrost_device_runtime_resume(struct devi= ce *dev) if (ret) return ret; =20 - ret =3D clk_enable(pfdev->clock); - if (ret) - goto err_clk; - - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; - - ret =3D clk_enable(pfdev->bus_ace_clock); - if (ret) - goto err_bus_ace_clk; + ret =3D panfrost_clks_enable(pfdev, true); + if (ret) { + reset_control_assert(pfdev->rstc); + return ret; + } } =20 panfrost_device_reset(pfdev, true); panfrost_devfreq_resume(pfdev); =20 return 0; - -err_bus_ace_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - clk_disable(pfdev->bus_clock); -err_bus_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - clk_disable(pfdev->clock); -err_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) - reset_control_assert(pfdev->rstc); - return ret; } =20 static int panfrost_device_runtime_suspend(struct device *dev) @@ -480,9 +477,7 @@ static int panfrost_device_runtime_suspend(struct devic= e *dev) panfrost_gpu_power_off(pfdev); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) { - clk_disable(pfdev->bus_ace_clock); - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); + panfrost_clks_disable(pfdev, true); reset_control_assert(pfdev->rstc); } =20 @@ -506,13 +501,9 @@ static int panfrost_device_resume(struct device *dev) } =20 if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - ret =3D clk_enable(pfdev->clock); + ret =3D panfrost_clks_enable(pfdev, false); if (ret) goto err_clk; - - ret =3D clk_enable(pfdev->bus_clock); - if (ret) - goto err_bus_clk; } =20 ret =3D pm_runtime_force_resume(dev); @@ -523,10 +514,7 @@ static int panfrost_device_resume(struct device *dev) =20 err_resume: if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->bus_clock); -err_bus_clk: - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) - clk_disable(pfdev->clock); + panfrost_clks_disable(pfdev, false); err_clk: if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); @@ -542,10 +530,8 @@ static int panfrost_device_suspend(struct device *dev) if (ret) return ret; =20 - if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) { - clk_disable(pfdev->bus_clock); - clk_disable(pfdev->clock); - } + if (pfdev->comp->pm_features & BIT(GPU_PM_CLK_DIS)) + panfrost_clks_disable(pfdev, false); =20 if (pfdev->comp->pm_features & BIT(GPU_PM_VREG_OFF)) dev_pm_opp_set_opp(dev, NULL); --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 54CD338F929 for ; Fri, 25 Sep 2026 18:46:32 +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=1790361993; cv=pass; b=PFrspWgiMef6DQrz6J1GvN2NCUvt2YzSP9O+QEf/8etwYUSpkQEhg6LlUmh3soJqmR1HCl0r2Hcmf0Vyy6WSgiSJlX6Q9hpfAsu1brnJegkOQ+u+x3rvGGyP9bJzVvAzP8h5Rk+5CVLFY2i9428skVVqmLKy+miuDh/V95LUyK4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361993; c=relaxed/simple; bh=niN+/XIX7dDnDnAVSuMKRHA1sgOsYfO3hFh083wdlsw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WBYyvgoDz6+I28rBc7rQWkXV9OypYJE0hEpjuKCEGMRUI820Uu1fKoZmuXzIEQjqUWUW9M7HaxzxA5Hcl01Nh2tAvHBOTzfnwPJXWvc8FT1x7RZU10qtW/AMZaXZHkHE4l6B6ccGmazQ6fqXkP7dnK+Ws4kiQS8dUDvPPXO83k8= 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=Wo/4XC9K; 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="Wo/4XC9K" ARC-Seal: i=1; a=rsa-sha256; t=1790361964; cv=none; d=zohomail.com; s=zohoarc; b=Nq1d43yblW1oyvObTVO5ne6TU/1Be8t5U5NfQYojnitiSnwBeVSV4TlFkmSiNcdYMpF/zjvFkESljZad2A2Mi29eQr3WQHS9arTkNdhJiIazuJa0N1NndJ0LbPgExSQXQFfCfR/ZN4IdyEOTOlaIixMNeb1cYLWmDWXhlEKzQpY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361964; 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=aFZgfmzHTzH2Ywb71oGheLaCKdbFGdE05Fp9AZPDukc=; b=aCo1Nd+JEQ7ypwbTeHFbezY82idjFG1h1Ulwc2XFqMK54qK/b05SP+Bv6xDkjML6zktJORc6uJIbkPsONzw6jGvxNjXZ7klxyWgtwZl50VK0D5o+RvNCYmpE0YfkEUupS6HhRI3UITDiksClvZ3OKIjYtAvncTYoSJhoktGxLJQ= 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=1790361964; 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=aFZgfmzHTzH2Ywb71oGheLaCKdbFGdE05Fp9AZPDukc=; b=Wo/4XC9KYbdyU1PNZEcVL6wl2Q+k3l3X8iN4q7r38z+U/UQhNPF9EKdI4NP/sh/0 nzX0S7/UMD3dTy152LNlj9eccN6xmUy4WMr1tZPTYpRgxAOXV3RPyteHOS8hz6Sm87i PG2VV28CuFBVSz/ae9HXnkaaSU7WQ0IYKrSqNCRw= Received: by smtp.zohomail.com with SMTPS id 1790361963265184.31245811163728; Fri, 25 Sep 2026 11:46:03 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:27 +0100 Subject: [PATCH v11 06/15] drm/panfrost: Fix PM refcnt and autosuspend issues at device probe/remove Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-6-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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=3191; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=niN+/XIX7dDnDnAVSuMKRHA1sgOsYfO3hFh083wdlsw=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDqrXUtA5zGh5gefUkYn7Z2NOmlW9wgHjmW xKBZJThfaOJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PUDIC/0TitsJ5O3nmcQc469dmMzp1HqgWwYbwRySvBk0h9/aOtfLrg/jL5LKz+DBOK+Vs715Sis +WbZ9DjpCfWys+jWNs9qOsF2Mksq8WMW0w3EyU4cOgyzHx99z9Mp1ufRgyOlyUS/rKsanmtageY AbPNh4gIXVsqSYqJIImxm34nxU83WcrsPtIYL4hWY02Gwqq5BmzxhBHF4fd/UhBjzl+GE3bPLM9 R0uNupeDlYCuZQBbxQUscAx0xs4MFDcIha3pYsL6gsuTOA9Yg0N1u/TZeh5Ji+PhT25L/gIta+9 ZGlnMwrU33YvbU1o+vvJjANmz/uCBEi4c6yeEvaDuhkzy6z8uzkYcsQeistklzvqmz27z2ThKL1 fTQjNtXOoasyKP/MAkyP6bc733j4I49t/SP6PxiKubtx7swJJrHs0PFe5OnBab0A4Svnh78DZP4 Ys6qk5xsbVPHCeITKUWp5zd9Ep5kyEkKtLKM07D713VBvHOAfmnTiT5BPMqnky9K7KzoY= 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 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 55fc22e8d4d4..907d4a14a0b5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -852,6 +852,11 @@ static int panfrost_probe(struct platform_device *pdev) goto err_out0; } =20 + /* The reason we must manually set the PM status and usage counter is + * we have just powered the device up but did not go through the PM + * runtime resume callback, so we need to update these ourselves. + */ + pm_runtime_get_noresume(pfdev->base.dev); pm_runtime_set_active(pfdev->base.dev); pm_runtime_mark_last_busy(pfdev->base.dev); pm_runtime_enable(pfdev->base.dev); @@ -866,13 +871,16 @@ static int panfrost_probe(struct platform_device *pde= v) if (err < 0) goto err_out1; =20 + pm_runtime_put_autosuspend(pfdev->base.dev); =20 return 0; =20 err_out1: + pm_runtime_dont_use_autosuspend(pfdev->base.dev); pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); pm_runtime_set_suspended(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); err_out0: return err; } @@ -884,9 +892,12 @@ 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_disable(pfdev->base.dev); panfrost_device_fini(pfdev); pm_runtime_set_suspended(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); + } =20 static ssize_t profiling_show(struct device *dev, --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 2DDDD4302FC for ; Fri, 25 Sep 2026 18:46:34 +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=1790361996; cv=pass; b=LixsPYyUjr9VtcMBI3vGjVuDuqWrDLFM1dX/sitFRA4xHkqqsAv2nfXD/mlbNTF3TCcq+Qui3qGdYZnor7mOJs+/E9C6UT2Msz/ulU//F6e3s3Drux9ng+d2EkTatjf4zGzVoZsdtFpP7vVmFl8XSImuaMOCwvvVbJebtd5M3Hc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790361996; c=relaxed/simple; bh=rGbyQBkNbY5a1OXBSal5Mure3AlHLFxQtfgc5Bhzvks=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lfYtlKrqv+nKTQawUQ82zQM97uGZ+wEwFt/oVfSLJgIOKWTWY9KX2C8PAGAOwz8QKEfhS/bHeFBxztyPpQk6tqZlpSOOUGyKesLpHf6p+u46nsu6YMOobdnX0gXVHBsW6ZUfZDPRiFI2x479Ugst6nsSJOomjvRuSbrKLAS9jmU= 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=dluWMrRu; 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="dluWMrRu" ARC-Seal: i=1; a=rsa-sha256; t=1790361970; cv=none; d=zohomail.com; s=zohoarc; b=Ka+pYRyslv1YKG26P0taMDp0iqLp+7tBiCE0zdASL5hR8gdicvUmqagk6RAy1DzdCTpnNNutJShKsybUh/WMKb76NAqsEcu3ldHdbbg50xXTr6xaDZ8ZhxVK8w4z4Z6gCqWgUEKnD7AdTqQpd+iffJqarW6aB1f7iTnQCNQfHJQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361970; 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=VOoShBhockOgAytuRxz9LnabGwtKvkOl1Jw4KQ8qBvx15nWnXpzmVojKK+PiG3YjAYCPFSBYRjnJTJREBnziDL5RgX3tQs0k9Kc+7+E0K/kkkx83Mys/vHr+MHohkX/PJpzizEnS5alr95Scm/uFyOuDADRPG4+orLNbMpX7HC8= 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=1790361970; 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=dluWMrRuyqqM2UZ33uAa1bKifBvgBun+9346uyBBsiZhq5B9whIHrwO+NE0Bqzif tHhoKzIGl1LP61uVgb2SQ7Mea1/o66SOvl+9mzYZ6DDCRTZsxzLMzG7YDythZZVitrM 6pb5IYv68eGsXkNOUqvOcMsFqPTHDcoWIQltmlS4= Received: by smtp.zohomail.com with SMTPS id 179036196907533.2915581794565; Fri, 25 Sep 2026 11:46:09 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:28 +0100 Subject: [PATCH v11 07/15] drm/panfrost: Explicitly enable MMU interrupts at device init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-7-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDWo7ZkrhAq3gw04taEgo2P4WNvLU/HEyuG 4tcLtKj75+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND PUkDC/9TEQlyErsZH+gsYdWvYifzNRDRNqivltPKfC7XaO57NXN6EfPav3wgaHliPrhxJQtTCFQ 0KUcDMMFD+SpHFhDlqIYXiNf4VzkAqp3T9i0VbnOkxrichaDkeuaKs2CAW78mrs2Mcn1TwQaT+0 7sQjXAT17TGahBnmgw2UZbmKV2prwnWKHuZnHc1e7m8baK4VcKyCBi49uVTyfY9TtiIMO6paYzD pZwPnFQcegm0uT/BiAS5PnqqekBM4W70t9tguY4qO8b98aNTu5OqQmBNugz2VEGqmDkeXmvDcf7 C0kQ9krqfytVgrhb2plWu68RUTeNWswRaxhzA9K2eDI3lhpQG2HD0Niq4r0HoOuDk7AZZSdQlqb x6B8fiegUa4uTUhIODxmtQk+ev6sp7bkUVEMGpsQLCliIchOknnZ7Aamaqt4FYmPCmbuHNuecgy 7+Fe337yCHWPupddnfz2jJLLzgCLPCD0ie6ShNxWwEDcRXgRAHBg2zT7nqZzTC1XD7Ivc= 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 23:09:25 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 C2DC83672A8 for ; Fri, 25 Sep 2026 18:46:42 +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=1790362004; cv=pass; b=T5CxLAllT+ZKhQQlhgp8tZ2VRN5IZf/AN8d77U0EpM0UPLdXeygK99Xa1fNwPfVPxNS3U7Msc4Rf0iCuZ1OuPaRwHmvtzBB3qymQL+YHTiQCrZ9XlaHvuhhrJ7csu3sWKpp7WM1vt9rphOR/B0z/mSXVsZgBZb6+gjFVje4mgdY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362004; c=relaxed/simple; bh=/bKH5elgcrjf7NBLI4NvlXyrB/1T8UuUFdCHxNM0Xbs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AcSXR14wHL0L7MJl/NePHQ2aCvhVGtJ8jgJfEDJrx4huzS+dEaGYD/oKhaVe3ybkeYiRVulYY4OiqKWtqPO3NR/nQE6sE7GRvh1RcyUDhbbt7Cf2IPJ4CwWrop2LzF/JHxwIOqKz1VRtf/OMOEFq1WLCzJrcSwGl4DrgI1nJ/uA= 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=jY3Rj9Tg; 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="jY3Rj9Tg" ARC-Seal: i=1; a=rsa-sha256; t=1790361976; cv=none; d=zohomail.com; s=zohoarc; b=ZjolhICEoVYWNzmjXVNbYeKQFbAspEcmMh9IKUYdt+DXWvRXYK/BHf/OfT9GsozmsXbyNH4UybKI6ch0htI1QqbBsaWu7SVaseHST6nG5AGDZdxhM0zXsEna+VHkSK8/gHQckP7ctCigkqjJ9DrE6UEQEAftOWs39h6cy694+YY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361976; 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=71FULSkaYc74KsTrakzFgr/RxxmJxiZGEoH1jtxrBWQ=; b=bdg/POviFYx631cGutlgtfQAfa03q+JNx2sLmtFDM9kcoKDDcOxRwohTGJFQnn+x7a3ueEzQcYMdEYo5uCSlWs26ABH07U7C61f6tL6Hc3J1arTXu+hyKfzZGufEyQzr8qRtgnj0hWFV8YFP9NJIgMsOngNZ85zKdVHzkgP76vk= 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=1790361976; 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=71FULSkaYc74KsTrakzFgr/RxxmJxiZGEoH1jtxrBWQ=; b=jY3Rj9TgAGfvD30Wxte8WmGXFo2TXLbfDZq+MCdNHH0RxnMsmDBLZMUEZ2IKjAyD 2KPtpqKYPK7KN99/r7BbAjg7eZxHwPw9s2wRBvtU8EMaBHjq4jzHZWwKTf5zLg4AoDQ gpeJRYl1x4e+xqf/nB8jVcZc/tDpvfPIq+7bg2N4= Received: by smtp.zohomail.com with SMTPS id 1790361975044531.0266577782828; Fri, 25 Sep 2026 11:46:15 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:29 +0100 Subject: [PATCH v11 08/15] drm/panfrost: Move all DRM device initialisation into device_init() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-8-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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=6169; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=/bKH5elgcrjf7NBLI4NvlXyrB/1T8UuUFdCHxNM0Xbs=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFDSZ5f4m+EK3U/KhEiq0Pm2i7xmlU2ThAFj 58ZElIkgTiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBQwAKCRAOJn5M7lND Pf/QDACk0HKpavJdKj0s4LruZ8uFbPVUWDATWNntI390ZRZLSPCuKNokg8Qwtz4bBF8NGKDoXNc NEv5OeRoZ7twgge9kKndqQStIDG2XEJexoSIPJAODz1P/S9nh0ugep7j0Br3Nl8L2feg4HjBtlF 3151bT7neV32hqplfQGJha6+VgKao2EyQy40G+QGlxYweGZi0y7JXJ5nBhP09/oteEc0VPRlrkP 58ApdiUnbfqOXM2+VfVpMwrW9/ni0jo0u5pXbzuvA8XJg/Nt2P3PfHSdjt7dMHAeY8t0TlU4ewQ q6Fi6uCrHsPRRB8UV15d5TeD8l1tAmlR1JxU1iDzjB5LzfQD9G69pQFH5o83IL+V+rjIj3rfkAR JX7uuoDuJc7VsFrHPk7gZ6xvCSS/O+PfO/fh1RShdq3T+ypOP2X3DLHmsMKkE/ZCsG7Qp+6Kaxl bBzGn60NiSR/mV076awtGzB5IvikwHZqUfta4aZ4soybRwptHxfLaHynSnAtpOFoZIusk= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D Ideally the probe() function will do as little as possible, and all device initialisation and registration should happen inside the panfrost device subsystem, just like it's done in Panthor. This also simplifies resource unwinding in the error path. Do the same thing for DRM driver remove, as in, sweep most of the action into panfrost_device_fini(), just like we did for device probe. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 46 ++++++++++++++++++++++++++ drivers/gpu/drm/panfrost/panfrost_drv.c | 52 +-------------------------= ---- 2 files changed, 47 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 9f2b1967a398..b8094c0d1252 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,33 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_perfcnt; =20 + /* The reason we must manually set the PM status and usage counter is + * we have just powered the device up but did not go through the PM + * runtime resume callback, so we need to update these ourselves. + */ + pm_runtime_get_noresume(pfdev->base.dev); + pm_runtime_set_active(pfdev->base.dev); + pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_enable(pfdev->base.dev); + pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ + pm_runtime_use_autosuspend(pfdev->base.dev); + + /* + * Register the DRM device with the core and the connectors with + * sysfs + */ + err =3D drm_dev_register(&pfdev->base, 0); + if (err < 0) + goto err_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); + panfrost_gem_fini(pfdev); out_perfcnt: panfrost_perfcnt_fini(pfdev); out_job: @@ -311,11 +343,22 @@ int panfrost_device_init(struct panfrost_device *pfde= v) panfrost_reset_fini(pfdev); out_pm_domain: panfrost_pm_domain_fini(pfdev); + + if (pm_runtime_active(pfdev->base.dev)) { + pm_runtime_set_suspended(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); + } + return err; } =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); + panfrost_gem_fini(pfdev); panfrost_perfcnt_fini(pfdev); panfrost_jm_fini(pfdev); @@ -326,6 +369,9 @@ void panfrost_device_fini(struct panfrost_device *pfdev) panfrost_clk_fini(pfdev); panfrost_reset_fini(pfdev); panfrost_pm_domain_fini(pfdev); + + pm_runtime_set_suspended(pfdev->base.dev); + pm_runtime_put_noidle(pfdev->base.dev); } =20 #define PANFROST_EXCEPTION(id) \ diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 907d4a14a0b5..f77780c72a1a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -830,7 +830,6 @@ static const struct drm_driver panfrost_drm_driver =3D { static int panfrost_probe(struct platform_device *pdev) { struct panfrost_device *pfdev; - int err; =20 pfdev =3D devm_drm_dev_alloc(&pdev->dev, &panfrost_drm_driver, struct panfrost_device, base); @@ -839,50 +838,7 @@ static int panfrost_probe(struct platform_device *pdev) =20 platform_set_drvdata(pdev, pfdev); =20 - pfdev->comp =3D of_device_get_match_data(&pdev->dev); - if (!pfdev->comp) - return -ENODEV; - - pfdev->coherent =3D device_get_dma_attr(&pdev->dev) =3D=3D DEV_DMA_COHERE= NT; - - err =3D panfrost_device_init(pfdev); - if (err) { - if (err !=3D -EPROBE_DEFER) - dev_err(&pdev->dev, "Fatal error during GPU init\n"); - goto err_out0; - } - - /* The reason we must manually set the PM status and usage counter is - * we have just powered the device up but did not go through the PM - * runtime resume callback, so we need to update these ourselves. - */ - pm_runtime_get_noresume(pfdev->base.dev); - pm_runtime_set_active(pfdev->base.dev); - pm_runtime_mark_last_busy(pfdev->base.dev); - pm_runtime_enable(pfdev->base.dev); - pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ - pm_runtime_use_autosuspend(pfdev->base.dev); - - /* - * Register the DRM device with the core and the connectors with - * sysfs - */ - err =3D drm_dev_register(&pfdev->base, 0); - if (err < 0) - goto err_out1; - - 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); - panfrost_device_fini(pfdev); - pm_runtime_set_suspended(pfdev->base.dev); - pm_runtime_put_noidle(pfdev->base.dev); -err_out0: - return err; + return panfrost_device_init(pfdev); } =20 static void panfrost_remove(struct platform_device *pdev) @@ -891,13 +847,7 @@ 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_disable(pfdev->base.dev); panfrost_device_fini(pfdev); - pm_runtime_set_suspended(pfdev->base.dev); - pm_runtime_put_noidle(pfdev->base.dev); - } =20 static ssize_t profiling_show(struct device *dev, --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 D0F3A3B058E for ; Fri, 25 Sep 2026 18:46:50 +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=1790362012; cv=pass; b=ayBaaSeGe7fiQWD3C4n2A5JLKtZv84NIxcdZd8uIZpD2WberA92x1GyKENZ4qsU21HnOdUwmI5Lw5zd79BUwV8YDJbGZC3H1exjJk6LLp8GIOmtlFtAAZva0QJY0D3EvGpbygoRJqFkTTMZZPRR7H7LBBVoDvTNFSjQuYypdPDo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362012; c=relaxed/simple; bh=MwAqAAJWt4gkpGyl7RgZL1G6QDS7kjbkt724b66TZZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pkDSCweJwO+ELC00jD4Fm85aRVlimWyAsQaglUHG+CclRYotHocOsSSK3opkxUyICDK642RLIiCqU02S766MoSCwFpIki+ip8FDqgcXItRGAWldKd7oznnSx/nKCj+w08O5tqVSSpdfmf4Nrbr7prPhFFux0L2P63rs+dtrdW6Q= 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=dkdCEFEe; 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="dkdCEFEe" ARC-Seal: i=1; a=rsa-sha256; t=1790361982; cv=none; d=zohomail.com; s=zohoarc; b=U5xLY6f7551jk6xc6Z9XKWux7TBLtUsmBtG2+NTJIqaSgcZjg6bf64/V9dIVLQgkj+iP9mCwnizKGauezSXNYpN4xdp0rL08KSvtj2TEi56WmJmU4Jsb1conK+1hAVEL/XsIoY0p6+gAkdcYHTNM0L/5VvrNxtN2TySo2c2Goqo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361982; 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=fCIzVS0GdUX+gQ+3/IeJnAKdmRiDGt1SmeJJDngnL0w=; b=I/vQDGcuaH3Yz+rvVZCbWSDHk81bc+dI6K5ajJMZV7PElvTwlV94W1YAT0HI6AWjlI/4mBxVZFO0KkuCYR0p0nrGl95CrGVVsjrpKctVEFdi/vKUINkHK9Q+p7qbYUNzslHt61n/tUf3Tbckq5MyOnGZLtcs+zayI2Nn7QfzcT0= 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=1790361982; 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=fCIzVS0GdUX+gQ+3/IeJnAKdmRiDGt1SmeJJDngnL0w=; b=dkdCEFEe8FCiB+vnzujsHSntysTS3NuUNMxBKJhPYou/NPrLbzxxxoE08vSPSuwC zHO6/ZOUHpF7htPk5X+nWPgIxZeUYUbT3FTUSLu5nLcLpkZqV8nYikYCl/MmC85uwmg avGlZJzmcvRLL5U5eKoJEF3tOju+urU5GukmH+GA= Received: by smtp.zohomail.com with SMTPS id 1790361981288183.50898722012334; Fri, 25 Sep 2026 11:46:21 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:30 +0100 Subject: [PATCH v11 09/15] drm/panfrost: Add warning messages to fatal error conditions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-9-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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=MwAqAAJWt4gkpGyl7RgZL1G6QDS7kjbkt724b66TZZA=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFESKrxg9vfz2YM1UJVR2N8OeozE+Bhw2g7Y qrlEEGtDB+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND PQjuC/44tAd6M+zFhv22Rj8rybURT2AgIxSsuwgVGnu4fg5rl/jOzoY178RoyVNsPR9BSn5jnIM 9asxfGfHWykZofH95COKaXowx6prLc0nM9N0WrUZ52PoDVNTLKjew6N7WmHUVcxjCneYePKV0Ve jTA5aMJAWWxaA6E1rEGqxlow+ma1dzS2yHv9bUknB9LlhlZQ+Z5At4jBrDjrUcMU6OiAGjpjSDq 9mvbvqmf6Ke39bage3ud5JElTmfUIKeiDyN36ijZDJe1Qtt7f2wWtgnP2qqPBCZkQkdACCJUtDZ nvNXh60lNVMxGlGooZKBN4uRaNJs2MSImV5OCobatpGoqtLuOQW5eGn26TNe57KTgsS6NM85Mnl r1Tp/pzrRbkr4JAl9NRogm9TA4V0gvUmbNZ8HbpMjImrRRt/2kJE79MTUXLbQtE0dTswxraDh7V tzhmBhPNHdUUYEDM53QCUAs2gcKxOdtxPLl8TtaSp78rpJ82ILzRqbp2krMKfiMxGfup8= 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 b8094c0d1252..967cabd18a72 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" @@ -354,7 +355,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); @@ -513,7 +514,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 23:09:25 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 74B7041D131 for ; Fri, 25 Sep 2026 18:46:54 +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=1790362015; cv=pass; b=KkrcG9vuxMeRpmzNTjutkusBKia1Lels7Zd4KVoeWFQdk7LRFpAqq2bozSQQS7eMI4OTXoeVuyAviXtTnBB0BMkuhD5Q45zce37xbFXqb+ishJ5bhWFHcKVNx96gi1hy6sjQIISsluK0XoW2CZsQ3r7AXEmQD3AsvUHOXRDj4NA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362015; c=relaxed/simple; bh=5DAEbzlOq2BwNKWtEj0p8a3G//bik3T3OU4VkG5Ly2s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FHlqiSMLi2oJNLL7cdmo3vFrxhMEtW//p4b5NS1JSo0N+0LGZNBVxEnlu94fRlbF1179sdGzp9RNm9XOo+rew6uasW/dNwe8kF29RdmVR0l9s7bmFzk33Jfl7v3GKET05IAGwiLbK3DUTOqbPL7CLKtkH/XhpUIt/PEe9fdQ6SQ= 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=Dkfm7/ye; 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="Dkfm7/ye" ARC-Seal: i=1; a=rsa-sha256; t=1790361988; cv=none; d=zohomail.com; s=zohoarc; b=TWpg/8V+wLzPJg5gsmIl/txef1P0WpSvYypxW7oAYgXJeOHGhUxZk4RFyW5cfnzMFS+ZFK33vH0fBeC1hxkHRRFpg4ghX5n8TotHpi+9dGHNsXeTTh3cdENw/i9qvnx5StEArvClxe+UFrFACREbNDh9Ftr6jL8PoUKHjE2NAjQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361988; 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=ncPApYC3d9xb55sEOgoNixWFBqr/djU528Bcm4xd5Ww=; b=FCuahLI8S8P4B2gGb7uNmZcI4q8hx3YAHK6v4ZDG67Q60mZLuRXX3qBqvlJd7SbQmXSd6CjUCimLqK9L4xH++zQ0TH+ZuEeZeI7YL85BAfr5Lvs5sIiOkGAHUsz0PrgBtb+0GxVj/NTz2IzEKxdocgC+3LP9k40XYTI4S/mW2Xo= 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=1790361988; 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=ncPApYC3d9xb55sEOgoNixWFBqr/djU528Bcm4xd5Ww=; b=Dkfm7/yeQANURdk8hyHpRfeylitTHkcNcFJAXbygbXVIv8V6zqBrB0enYBGwyayi JVdstKX8Q7LLHy2SvMLIgfleOHCRMbqeckWmSVN9uaWF2VOCtHPQrDkUfC/NS0fQa6K BZOBjQPGSjbxHN7Wz2YHC8KJd2tvJtWJkTTjRRKo= Received: by smtp.zohomail.com with SMTPS id 1790361987635375.41698127528184; Fri, 25 Sep 2026 11:46:27 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:31 +0100 Subject: [PATCH v11 10/15] drm/panfrost: Add debugfs knob for manually triggering a GPU reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-10-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2966; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=5DAEbzlOq2BwNKWtEj0p8a3G//bik3T3OU4VkG5Ly2s=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFEyWLIc39eqvLHd70G3fhUZ2tmPRJUWLgsi hXqoS8uufaJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND PRKnDACvE7OdxG84S6JuOmcQz96Ml/GHnF3XKcTkjm7sSOtrD3YpvQucGw5C9Xz641i0hsFDoGk T6Bz0JRgOiFf1KAbGhf+6BhptmEbx3fB1Ym+FhpLaNpjCChNQCkImCaItt5Tx5pQB9jd84sf00e I8EkNeFf6ze3xAjH2xQtSDucUKSBXtZBmTkTFaUfjRyaaF5q7scWPOE/Q5Sd3Y2bW6zZEcXIunR 1bA36cCja3t1UGVhmbCvhukQeERxi3V1ytxX1AeLR0mk52fypwl35UnZGqRep8I5F1x0IYxjYh5 h8u18BQKDUdnL57gdf8OpjSagrG1c4Kmp5N2m3ByVRc3YwwzFScXfYp1+hwL3p9N6RNIm2daP46 5TLpvGTjoOXR4T70NlkPX3enjxt+yaYNLphP+qEHWh8OusAV/PszT6NvdMhZnZwkXFqn6Dynsis Z2Fm6AFIUyog70MIHX0q3oyPkUAV7XrpkJHUOJlfJNyoXhMmjC8j+k1tLMkuKtfHTED88= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D This will be of great help when testing potential races between the GPU reset sequence and other parts of the code accessing HW registers. We must also disable the reset work item rather than simply cancelling it, to prevent the knob from triggering another reset when the device is being removed. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 42 ++++++++++++++++++++++++++= ++++ drivers/gpu/drm/panfrost/panfrost_job.c | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 967cabd18a72..3cc9540f8f33 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 @@ -592,9 +593,50 @@ EXPORT_GPL_DEV_PM_OPS(panfrost_pm_ops) =3D { }; =20 #ifdef CONFIG_DEBUG_FS +static int reset_get(void *data, u64 *val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + + *val =3D atomic_read(&pfdev->reset.pending); + return 0; +} + +static int reset_set(void *data, u64 val) +{ + struct panfrost_device *pfdev =3D + container_of(data, struct panfrost_device, base); + int ret =3D pm_runtime_get_if_active(pfdev->base.dev); + + if (!ret) + return 0; + + panfrost_device_schedule_reset(pfdev); + flush_work(&pfdev->reset.work); + + /* ret < 0 means runtime PM for the device is disabled, so we + * only need to return the PM reference in the opposite case + */ + if (ret > 0) + pm_runtime_put(pfdev->base.dev); + + return 0; +} + +DEFINE_DEBUGFS_ATTRIBUTE(panfrost_reset_debugfs_fops, + reset_get, reset_set, + "0x%08llx\n"); + +static void panfrost_reset_debugfs_init(struct drm_minor *minor) +{ + debugfs_create_file("reset", 0600, minor->debugfs_root, + minor->dev, &panfrost_reset_debugfs_fops); +} + void panfrost_device_debugfs_init(struct drm_minor *minor) { panfrost_gem_debugfs_init(minor); panfrost_sched_debugfs_init(minor); + panfrost_reset_debugfs_init(minor); } #endif // CONFIG_DEBUG_FS diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 00fb36c577df..ab65786bf63b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -932,7 +932,7 @@ void panfrost_jm_fini(struct panfrost_device *pfdev) drm_sched_fini(&js->queue[j].sched); } =20 - cancel_work_sync(&pfdev->reset.work); + disable_work_sync(&pfdev->reset.work); destroy_workqueue(pfdev->reset.wq); } =20 --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 1DC613955EA for ; Fri, 25 Sep 2026 18:46:59 +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=1790362021; cv=pass; b=GfpFWiRenFN+/siHeLTzlW31mXsQAmRJa0TPwPr7lxtpeSHiMKb0gDrkc0ONg7A+qx/grndP86CtD833sZ9hNkjG/T4A18dhrKFHWNVRX4Lp1Vr1XBN7Is06TOLaUqw1rmHkiULHZIT3uIQ/hBk5NXri4NL1OUI+5xWetVTwX74= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362021; c=relaxed/simple; bh=1NC6JbP9YeSjejJ7XZFftPMwKC3c1jXoMn6zNAHeTm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jcre7d1U5oV8g1atbwf0rLg7Wbn4JcpGCoGpi/C+h89+cgqVm0kxUB4Hw5SNQHr1CQ3lTwr/s8jcDc9OaG6A2Beuo6Y5+yA9EBTtQdcF2nnCwP7drgyG3SlwzY5wa/1zsOh3omDe876NabuYn3X2ER4E8pAgiQMEiRBbgOkZ4IA= 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=er79mu3y; 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="er79mu3y" ARC-Seal: i=1; a=rsa-sha256; t=1790361994; cv=none; d=zohomail.com; s=zohoarc; b=BzqiF2uuy08fsMjkdETN1ukrSrLXX/oCg0NJSoS9q0m/Ym9pqHUDneRv8qoKlAOLuuuG+vMc8zPO2+yuz5v7GCwOeTKfWcKQhGB9n/hVrQvgNRbM5b7k0rdUGKS01G2fkLfR6ABD6xBKGm31gZtTfK6X3OIzOLfWRNrsiAvDFag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790361994; 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=TtMQf9aEbclTFoxIlqRIInGpLV2HI2CKM8BmJ8yhgWWttlIw+W8O2eQ3PvFLOgNT1GOEJisviZjUKp6W5GDCZXqo73WryQPfSA3kG2eJz8p9TxKXpIZUR7lpWLzHXBU81gfX9pv4hYp+CFA8nblt85lWdkkLoFWSDyaTgaZFRus= 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=1790361994; 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=er79mu3yhdztv9WmOXeMLhokegxS7bu2EjIR9zl8LTKQ5Wsh3UzoAUrmXeRUb9nO Uwn1hpKfEvPgJtk9MW8l3L67M4DbD1ZC6+150RucczwcJYdfYI4E2TW4yAGUjE1ZWI3 80jh3paGO10oI0IeXAwj/aHKUrIRREjWNMC4SnAw= Received: by smtp.zohomail.com with SMTPS id 1790361993475106.58735158267552; Fri, 25 Sep 2026 11:46:33 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:32 +0100 Subject: [PATCH v11 11/15] drm/panfrost: Move perfcnt GPU disable sequence into a helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-11-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFE08TLCTIXlpZ9buGZqaT4ojUmD2XuC61Hk p+DIpJd+aiJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND PT1ZDAC09jznVE8p/anJ53l0ubusEQCgOXE0+yKh3yWz+Z1ZUA7dFAhfgkdEz0G3WjefRXgxwzA 6o+y/WBBF3Mg5EcWqQtG0qj42+SaJix9RqMex0g5v3hz3yFK1ZN2CH7x4UycYuvoeXVf5GTGzXx GBkzHe2PD1eIZPN4tPszrJrlw9LIBl2eG9vs1j9z0SOnaCAe/ba2L3AzZlvkbx/G7EM4bUipuR8 DIaTXGkynNye2BWTW5Fs+gjXZxtK8i79w4pOWLQdcVTw/X9xs2Q70p4X14eEKZqu7LXddXoWCjQ 17/94UV+856smk9oXaLaq5O7Z94l3GT568rDNAFCIo88nz2dDKyVuN4QWsQmo9d1J8FRXFHaW6M kx3WU/FUAjkjdliwfU+2jUPjz3Pk2167JpgB1ywOFUXczyjSmblZmGLNkX+kWOLUysBPUI0vp+i Ok+ZtvZUIstdbvaiPEJUT4Q5NLiRe6ruj79/VzUquRwW20qQam74YlZWU9XLpPWmXHt90= 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 23:09:25 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 3ADEE40F743 for ; Fri, 25 Sep 2026 18:47: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=1790362029; cv=pass; b=UoypDK99vAiWLUQOjySgcjKLUzxGmaY1gnn7r9DTltsTwOGUTHle1OAhoGsarJn7GWWl0G2AdrtWN4yKTgNWTb53QOCx55t7CMEgJAqX/EjPbN702t9qYCr0NbMqei6WVrfvRGIORMv8TuPuAfsq2/XFLYnQzm/8ms6VcCp7Y00= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362029; c=relaxed/simple; bh=t0pKAbH0SA2araO3s4z8ycC80JiA92CZd/FQ3/v+S5g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l0g44pD1CuynREPZU6mx2sZiQTaCFFzBh4aYYqUfS2JxxpaiLDzWGtDRblquCLAtfN8kHq67Kwc0HR2Bw5On0dUmiTuudPX2k2dozFHm0qkLSzeS4FagK3WiIeEXiVxbu7DogYTvPfLxzlDGpG/LJTz92A1ljhVh1m6Rzon+xGo= 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=jGVlsM9F; 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="jGVlsM9F" ARC-Seal: i=1; a=rsa-sha256; t=1790362002; cv=none; d=zohomail.com; s=zohoarc; b=QRRZ845cVExKAOfca4ssSzQfLJKQdrmQSJe/9tUVRRe/2XtDUyE59OC8VpI5+ExXp8meNH34mIeHfCQ36hDtYz20IU18VR1MR9wY1AbOAD1ArzQwwvdh7GHEEaKn2deozdeyVlcJa757+dkoSs/lnUqote2hmoJP38T5IFPMexg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790362002; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z6RRS3cshQwsXc3rA/U7BvQ2XdAR4lAqGHrehoKydrQ=; b=lu40QZ6XV4uGV+LtIdlAsEibPACE+IW/8npWp0iOSTzg+5R14NKrje5mpoqYC4edxEE9gQhSKooJ8LPeb9JxH3S6bNJJ9V08nyj+vWmrCSOca2AQcYggPL3B9+gfkOuKg5dJUxhCawmQUpc/g5nKkcHjuTFacig9ARgtFKPjAng= 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=1790362002; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=Z6RRS3cshQwsXc3rA/U7BvQ2XdAR4lAqGHrehoKydrQ=; b=jGVlsM9F+d/phPRkHKVM27PRrck8G7Iuzup1rH0twmk9K0YQn51qSmBBbjt57xxL 3dD8bBh1MqtOFYJmuTt2rfrJH/I79QAVYSeyumkjYlv6HJwcpUoz/ekC+J7wG45EW78 7NjRpiGS9F17x+RQddj/M0y0dtaBDZgJSWYWqvCg= Received: by smtp.zohomail.com with SMTPS id 1790361999845716.5502045892146; Fri, 25 Sep 2026 11:46:39 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:33 +0100 Subject: [PATCH v11 12/15] drm/panfrost: Skip cache flush/invalidate when enabling perfcnt Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-12-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Faith Ekstrand , "Marty E. Plummer" , Tomeu Vizoso , Eric Anholt , Alyssa Rosenzweig , Robin Murphy , Philipp Zabel Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Collabora Kernel Team , =?utf-8?q?Adri=C3=A1n_Larumbe?= , Neil Armstrong X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1716; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=t0pKAbH0SA2araO3s4z8ycC80JiA92CZd/FQ3/v+S5g=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFEnU8MaIxk/nlskpgiIVTgRr6KGp7uVdqN+ hKKvUqrpp+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND Pd/ZDACDnWBy7gzQaFzmuxeIdYtp9mp1IgBSp/aUAzfyfT4q60T86kk/1Xdvt3sjAXnPtkp5aSi ctOUh7PcroYEo+VlqYRHDbEdZHA+Ew/NZ/aTL/WGBnjcoClflyfNI8dAJBxI0woFI1s3qzJQpk/ mpefDR7/V+ZjmLoEKSRrFilaBQMM1zqgSFfP2onrdAMQGqeBSKgQN/sHb/w/Qv5aqkvOwOXoxTb kUVDFwmGyPtSCModcn4Cgzf/djzAkV3aDRLjkO7wwFUOXbiWIu7q4DB3mrH7hFyIE0ZxWQRv5QF VktaSr9oJHHOJ/rI5/htgF/BmQxBDI8i8QtDpzLy5YRv8MUNzA/YzqgXuvbfEoRo5SWRKy7g6QT 9J39a6ODxN3g6FzJ4njRsqcRnvfwZ7fu+l9pEGaI1FRsLQ9EDAeWUssQ8K4XEXNVbEVLqwPgcol U5rqHU+CcmNkdWSxKu5XeWLjYRvq+kF9G1DJHvfyC9fPdLC9X1yBD5A62v8wbyb652rsE= X-Developer-Key: i=adrian.larumbe@collabora.com; a=openpgp; fpr=324030E8C005175DF93707A40E267E4CEE53433D The GPU cache flush/invalidate operation is unnecessary. First off, the GPU doesn't read off the perfcnt sample buffer, only writes into it, so an invalidate doesn't make a difference. Then flushing GPU caches after each sample has been written is enough for the CPU to see updated values. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index f71534e741b6..ffc77121070e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -124,21 +124,10 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer"); =20 /* - * Invalidate the cache and clear the counters to start from a fresh - * state. + * Clear the counters to start from a fresh state. */ - reinit_completion(&pfdev->perfcnt->dump_comp); - gpu_write(pfdev, GPU_INT_CLEAR, - GPU_IRQ_CLEAN_CACHES_COMPLETED | - GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); - gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_INV_CACHES); - ret =3D wait_for_completion_timeout(&pfdev->perfcnt->dump_comp, - msecs_to_jiffies(1000)); - if (!ret) { - ret =3D -ETIMEDOUT; - goto err_vunmap; - } =20 ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); if (ret < 0) --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 BD96C44065A for ; Fri, 25 Sep 2026 18:47:15 +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=1790362037; cv=pass; b=EnwvaJY/VtdI+9BgQT1rpFnpX6YNI6vw2KpHoqqQXcYvSbNeDFxAUIOtqdisrpHIYeq5SGYGSXH438FEr3NKmCGZwx4cB7YKDWEmzXFJc7WsfRmrMaE0Cys5cjH3MUKx5V3f/QHlwdcMQ0mMrxpXK/SCLYVFNEKAHUu6IHbgT/8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362037; c=relaxed/simple; bh=ylClgdA4qjN8YjgAXTrojrPeuTeRxcjN/yXHiltT8+A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GWvZ67FiPGSD6IoWN3L8UzCIC1iCgnp79DOVav2xgpQGOs5CsIHezfsSDPT2ZV/5V4qJ6yW/RvBbF4RoEDnsHQCoAeItU9EeTTVBLk87HIwvJqfGOAK72K+LpAbEaZAAXay8/5T3HJI8lwbljG7WSgSHy+nTNRIqGqDAVPjd5ts= 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=HMMIiT+K; 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="HMMIiT+K" ARC-Seal: i=1; a=rsa-sha256; t=1790362008; cv=none; d=zohomail.com; s=zohoarc; b=IHBN+csVUTg+279zawL3cDeSj3I+h42I8zWI9kaGITyxdWn4+cv1rTSQbVbluH61s1MFC6NdkIjhydjkJs3plN3O357J3vooVKP2YpA7nLLMLcHMb0COkAndsW0hO7Z8gZF2r+ZnNUIxhLYsrH0tZK+SGiSPugTBRrCbHFiJ/ns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790362008; 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=AfgsyxHVwiQc0jlp5sarzRtiMBTck5vruXW8BLi+Tlt4B1LUy638nLH9w2SLWkCZrgiNoSZpeX04BrtctjFsfI2H549C1i6g3wCKuF2FB424X5kKiu8/sHRJwgf+6nyUhEQBZjZlSELZDccy0fe/jEg21Kwgt73+WBeU3Oe7JdU= 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=1790362008; 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=HMMIiT+KAeVfd7YnNqQC+6YvzJYbNvd5JYO9aCA+JN6v0UFwZX4R+5efmMLwP3gG QipkuJFqFmrljhcYnTano1mIDldr2gjaP9pXRmcdBBq2+ZwDZwaNoyr764z4a9kOR2F apcMuUQfXB8H5736eYq6l8rnuYgvlXurFB6kEs1Q= Received: by smtp.zohomail.com with SMTPS id 1790362006274552.8530406652147; Fri, 25 Sep 2026 11:46:46 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:34 +0100 Subject: [PATCH v11 13/15] drm/panfrost: Avoid cache flush after perfcnt sample in fully coherent systems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-13-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFEAvavFHQhpg2ui1rPxkirqK1B1MSHIvD+Y QpvGaqA2NKJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND PeJzC/4+J5fRPwiul01r9JmRKJ5FWp+l0n9rLaXujhXp1BGHlcJdhPh2gXBXY9qZ10TlQbnCJN4 wctGmkmzvZZr7Q8uVOLbsPFTVWah81LA2auQN4NP4xM2muAl5SNp3vJYDvZQruoi/9Xy8290rTz 6Hc/KK3udAv5IWp+EOoeeZqLWHJQmKZEyPbior738UcqY79l+xwsjmsBhBYmJm5vB3p8JHyWeAs nbLAMtI/dcxdp8lO8y1sTRbU1AYIh2e5ZU04XEI4xG07ZJOQEjUxNNfb4JaKweDLsikKVpB1vyp LPe3wYI27TCplW2o7kKi8p5EDM3qx3Xsh1t5e3VC3GcpH72ekUUFnVJrqGo3oqPMVOi36C2tM2n fDIPPyWWCR7yugcxnpShE6WRj5IRI8a5zOGh6uNUpGkCKT9qfF45F9D+VpVUaIYGg9XVJ3bYOda eE5AUaX9W/7nYzXx64s/vm8H2R5LbCu1IPs7f8C8RiC1wK0GR8CXItHQV1WRdY4U7wlmo= 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 23:09:25 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 EA0544137AD for ; Fri, 25 Sep 2026 18:47:21 +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=1790362043; cv=pass; b=T0kQApm2vDHxWqfoIqE+N84z8RxfdoIIhOzZ8B2eoxV1fdWH2SYifOVd1dtEGGRbtRnUYSFNu7SkU9eqCyzqNu6PoiEb2ivdZSLTDjAwuRaLxlxBO/cbmTlSnJa/fYCHyu6jdZXUOLYkdK0hyTD4j0vSHSD8jR7uMUywgeRYbMc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362043; c=relaxed/simple; bh=ScNLEoz/xgrROfFtst5rBsE00tM5S+Iws+qVQdXGlw8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sk3ESKZ+Zj5ANKebGUHngJ4trc59j/Wi+X62ui7DPfOiKVwTClioEItDPnAOI+r4WulQOTJ+0sbbu+cVu6LIVxDC2ZET6a42YlFiuhy73OBGFAb1ooqfygwSvmAJ9yDKV0+rbSQMWEdN41oDggCYpngkIkGDZKonFNjHPiWo8do= 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=OhIhVfHT; 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="OhIhVfHT" ARC-Seal: i=1; a=rsa-sha256; t=1790362014; cv=none; d=zohomail.com; s=zohoarc; b=IjF/rrBaDVLKMQbu+wNECuTFeXtBLvlb6BbhZV33TCEWf2SlQ1n2wV1hQTSGnL3y8LXvzoylgjMxEt5vKH+mIB8Emw406pdLCAWlfBkjD7c0L8Us6K5SDZCWunH4kzPNtKoOOCaVShEFrtPQpoM5+HGj/7R439H2W7++Ci6b6cM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790362014; 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=cjGSqdI1UByjhdXjHyJfzvl5uUQhyxKEiMCZqMcnxFw=; b=SaO/8iXE7CKbX6Ew3nlBEKTrSZjrg2ym9XUaa5EvQkH0/4MoxwNK4/LjpKWOXHAQBOGWXdy2l65Aj+dGZN6puWeQ2yuueH8sXZ5aFZrUE23MJZodvqM8mbEoSNpqELPtRdgFemqf/tmju530m9QBWrGmmBWQDPHXd8NdcQmpC6U= 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=1790362014; 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=cjGSqdI1UByjhdXjHyJfzvl5uUQhyxKEiMCZqMcnxFw=; b=OhIhVfHTuDTfyGzMQz+hXfluYb0Z8znVWcbQUY/iT6BFZDkEcPCrCZxLqktAn2i4 Znw4GYdywTqJWksDV+VX9Q3xG16OdYxIcpy7suya0y2uqiI2DszeQDysEiU2Skrdf19 DFs1PzXpG4jSMJDwVCL6aQcIVfvqnAIGZR4JSX5I= Received: by smtp.zohomail.com with SMTPS id 1790362014041116.49688504232824; Fri, 25 Sep 2026 11:46:54 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:35 +0100 Subject: [PATCH v11 14/15] drm/panfrost: Introduce a reset lock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-14-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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=ScNLEoz/xgrROfFtst5rBsE00tM5S+Iws+qVQdXGlw8=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFExHH7nXHtM4qCm8dY2qnJ4frFZOo9ftc01 MH3I2HFWVyJAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND PbAbC/sGbVcPTAikPZ5xNTDjrcdIcdundVnSjGD6QwaDDQ9c8mMl7/Mak6h9qXFYls6HHswPvlN 6zQyUKrZd8iDTDbpuNG7mSSPQdW/43K7fqmiAxndJVN9bs8QCqWGsR9PEb/USxu8rGbzKykWK6r mRiiXwT4Su5PJ+6ZBHfMKYGhP44T6Gkc3ie67+QM2Tayu2gf1puEjMDBMbA7sTD9cOYBI7N4q/O Y0TfCCEaM9IoF9BgPXqxdAr7pNVdZcGaW98yYV+4+/dLfKArYoRKda1N0d5czfUk7MJJHE0GK9K /B7QNQToX3uU6+WYhDVn0X3HfAL40bw/75BHsxK27OYjC4WVPWZEYyOY/T3b90RLT0nPtl2JiIP hkHJEmw9WZLKYQrWP51YwZblTLHEYvlV/lLifMp8IQIM3y4MlJs8IABEXPvjuoiw+CGADtRq38o 1jI59rMuq+/6bOVZQXN9wk8xYspz+TK1y+1X4hjl8CGgVlVS26MA+KH4xyDbMQvy1cAzk= 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 3cc9540f8f33..0cbd25607fb9 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -478,6 +478,8 @@ bool panfrost_exception_needs_reset(const struct panfro= st_device *pfdev, =20 void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int) { + guard(rwsem_write)(&pfdev->reset.lock); + panfrost_gpu_soft_reset(pfdev); =20 panfrost_gpu_power_on(pfdev); diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index a0b9a2145fc9..63452febb1cf 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -165,6 +165,7 @@ struct panfrost_device { struct { struct workqueue_struct *wq; struct work_struct work; + struct rw_semaphore lock; atomic_t pending; } reset; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index f77780c72a1a..571a26b84126 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -41,9 +41,12 @@ static int panfrost_ioctl_query_timestamp(struct panfros= t_device *pfdev, if (ret) return ret; =20 - panfrost_cycle_counter_get(pfdev); - *arg =3D panfrost_timestamp_read(pfdev); - panfrost_cycle_counter_put(pfdev); + /* We should not read timestamp register while the GPU is being reset */ + scoped_guard(rwsem_read, &pfdev->reset.lock) { + panfrost_cycle_counter_get(pfdev); + *arg =3D panfrost_timestamp_read(pfdev); + panfrost_cycle_counter_put(pfdev); + } =20 pm_runtime_put(pfdev->base.dev); return 0; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index ab65786bf63b..4ddf4b722ddf 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -877,6 +877,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) INIT_WORK(&pfdev->reset.work, panfrost_reset_work); spin_lock_init(&js->job_lock); mutex_init(&pfdev->sched_lock); + init_rwsem(&pfdev->reset.lock); =20 js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->base.dev), = "job"); if (js->irq < 0) --=20 2.55.0 From nobody Fri Sep 25 23:09:25 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 6A0143B6C1C for ; Fri, 25 Sep 2026 18:47:28 +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=1790362050; cv=pass; b=L8q01Bq4AomyyjVf22RNL3YewhiO/p62OVOvxdtX+IgjFMgF1/jhiD5k3fKNj8+kWMgGDkrWyBv0eBtIIIidq4eEGl6YUIhu9MbzVciCFTADbMbqgD/luhVGXPC0HWBWWV/HbVMwXfys3BH175A75cLejBGmc+DsTzcUycwlNAQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790362050; c=relaxed/simple; bh=rHn+SUNSdVHN6V4P0XZnyv78wrYj+JjOWLWbT77mX9w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AJwJwTKMn6O7iRYNUQ54hZSKhRIvYVOuafHJH6PH4OKlV1RsoQ9v1DM1FTI2yrn7sdt9NSgFjqkTemZ7/YuzZX57JT+YLD0kHYVaQxwVfIQEWq5zxqncxM6uv29dQhiiIMj+FljRRLrjgmCICy6yV0ivWvOc9DTu4ozkJXJXNrQ= 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=iuk+Xlrw; 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="iuk+Xlrw" ARC-Seal: i=1; a=rsa-sha256; t=1790362020; cv=none; d=zohomail.com; s=zohoarc; b=LzrcidUfvPu7Z3MD2iyQGh9G1jj0J7e5NQikBfmE0Gg8D4N9eaJgEjjEmO1+NvOw8zFCqlBkB0jtcO0qga2U2oQTOmGpkd0IYSuB1yPIJ/m/gTLVP5J+9i+fTh7C54U/O6u4oEl6wDU6jp4nk0+HFyC/GIPtm9QLfYTPgs70WWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790362020; 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=2j/XDEQYBQPWvnF+R0015ux6PTdOoccDGg4JPjjEpKE=; b=dGOFnPp0zhlj8vg70v4PlKQy8rcObJOd9pq+iYeN+cUmu79n6zsamEhcSkmXFw4ucHIv0rE5BZI9sAsNEO+ogeg0ibI8DMhU2un0nSoyMyKtwb1qQjaVZJVa7ULW2RN+YIjcVjbPUQtI6/el+akJmPl0eGZH6W+kZzh8QcOU+68= 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=1790362020; 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=2j/XDEQYBQPWvnF+R0015ux6PTdOoccDGg4JPjjEpKE=; b=iuk+XlrwcipyOuF6t0qWAQgptvIJP8mEqwYnJVzF9MNEY5m7D6srGgSRJhYenwjB 2/gOU4vjRqVU52IyFB0128a1e+bZhT4MiaK5gXyDS+/AwXOeGfqYceLB4aG6u6rd7gf GLSb/PhfodfzyG1S9l+C5XYGv8rskQl5hcqCFdjg= Received: by smtp.zohomail.com with SMTPS id 1790362019971733.6308922549051; Fri, 25 Sep 2026 11:46:59 -0700 (PDT) From: =?utf-8?q?Adri=C3=A1n_Larumbe?= Date: Fri, 25 Sep 2026 19:45:36 +0100 Subject: [PATCH v11 15/15] drm/panfrost: Fix races between perfcnt and reset sequence Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260925-claude-fixes-v11-15-0dbf5a58e7ce@collabora.com> References: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@collabora.com> In-Reply-To: <20260925-claude-fixes-v11-0-0dbf5a58e7ce@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=17148; i=adrian.larumbe@collabora.com; h=from:subject:message-id; bh=rHn+SUNSdVHN6V4P0XZnyv78wrYj+JjOWLWbT77mX9w=; b=owEB7QES/pANAwAKAQ4mfkzuU0M9AcsmYgBqtsFEvHrfuljkf/oxOyJkWn9Xg3AtJVlTygWYp 9vq+z+qkm+JAbMEAAEKAB0WIQQyQDDowAUXXfk3B6QOJn5M7lNDPQUCarbBRAAKCRAOJn5M7lND PQs2C/wNU7k+llD2kgp6dwq3/lV3JB7xM+M8hVEUsm/O0lvj2gmahFt8w1BHs53WqSnHVcSEJNb De9DP/o8CqpVfEh6arDVBaK9YdEO1e+ne8/hjjX9jvCEeWLE+EElkPyY6G1u/Pywino4TXWI4ZN Z3Wl7OPKJ1hB0zr+sRxen1RMcRJYLokwYkdX9st5ojxtwErysrgoBbhIkxgXhh827pmSVI2zxPI o8lvdAlcn/+6+zofhVFFxu9nqoTVTKoZm83M/P1z+rHKfEXLxbwMyFH/K47i51ty6E7JcWvI8+9 kOc+i8WIoiUFVzM6f+6y9U8K1GCne836w+ZgmRuIrhHH8xHwH8qdlmdI7tQzHAGp/GPLpHeIfTy Sm1gc9do2c0Ex61tfGpg8y39jgzmLURMcEoupaqyTkGAF+ufCOSk5Q8M1QCIq7rJmi7a/BuKwFL 4b+RJRV04Hdn5IXEuuZu2YrSj43rvR87OGnnpb7yfP9I2IO33MFr1RYzOpmCiXmjZrrms= 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 when disabling and re-enabling perfcnt configuration, and also in the sections inside the 'enable'and 'dump' ioctls where device registers are being accessed. On top of that, expand the DRM uAPI for the perfcnt DUMP operation so that user space can be made aware of a reset having happened, whether it succeeded or failed to restore the original configuration. UM needs to know about this condition because counter data is inaccurate after a reset, so the best approach might be simply to try again. Finally, update driver uAPI documentation to explain the meaning of the new perfcnt dump ioctl's state flags, and bump DRM driver minor number to reflect the new DUMP IOCTL req field. Fixes: 73e467f60acd ("drm/panfrost: Consolidate reset handling") Fixes: 7786fd108777 ("drm/panfrost: Expose performance counters through uns= table ioctls") Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 2 + drivers/gpu/drm/panfrost/panfrost_drv.c | 3 +- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 261 +++++++++++++++++++-----= ---- drivers/gpu/drm/panfrost/panfrost_perfcnt.h | 1 + include/uapi/drm/panfrost_drm.h | 29 +++- 5 files changed, 213 insertions(+), 83 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 0cbd25607fb9..3e46c75ada99 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -488,6 +488,8 @@ void panfrost_device_reset(struct panfrost_device *pfde= v, bool enable_job_int) panfrost_jm_reset_interrupts(pfdev); if (enable_job_int) panfrost_jm_enable_interrupts(pfdev); + + panfrost_perfcnt_reset(pfdev); } =20 static int panfrost_device_runtime_resume(struct device *dev) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 571a26b84126..de9b1c115181 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -808,6 +808,7 @@ static const struct file_operations panfrost_drm_driver= _fops =3D { * - 1.6 - adds PANFROST_BO_MAP_WB, PANFROST_IOCTL_SYNC_BO, * PANFROST_IOCTL_QUERY_BO_INFO and * DRM_PANFROST_PARAM_SELECTED_COHERENCY + * - 1.7 - adds PERFCNT_DUMP req state field */ static const struct drm_driver panfrost_drm_driver =3D { .driver_features =3D DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ, @@ -820,7 +821,7 @@ static const struct drm_driver panfrost_drm_driver =3D { .name =3D "panfrost", .desc =3D "panfrost DRM", .major =3D 1, - .minor =3D 6, + .minor =3D 7, =20 .gem_create_object =3D panfrost_gem_create_object, .gem_prime_import =3D panfrost_gem_prime_import, diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index b3f71d7fd82a..96c3c41cd269 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 /* Copyright 2019 Collabora Ltd */ =20 +#include "asm-generic/errno-base.h" #include #include #include @@ -11,6 +12,7 @@ #include #include #include +#include =20 #include "panfrost_device.h" #include "panfrost_features.h" @@ -28,21 +30,31 @@ =20 struct panfrost_perfcnt { struct panfrost_gem_mapping *mapping; + unsigned int counterset; size_t bosize; void *buf; struct panfrost_file_priv *user; struct mutex lock; struct completion dump_comp; + u32 state; + bool owns_as_ref; }; =20 static void panfrost_perfcnt_hw_disable(struct panfrost_device *pfdev) { + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + gpu_write(pfdev, GPU_PERFCNT_CFG, GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0x0); gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0x0); gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0x0); gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + + if (perfcnt->owns_as_ref) { + panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); + perfcnt->owns_as_ref =3D false; + } } =20 void panfrost_perfcnt_clean_cache_done(struct panfrost_device *pfdev) @@ -58,44 +70,154 @@ void panfrost_perfcnt_sample_done(struct panfrost_devi= ce *pfdev) complete(&pfdev->perfcnt->dump_comp); } =20 -static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev) +static int panfrost_perfcnt_hw_enable(struct panfrost_device *pfdev) +{ + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + u32 cfg, as; + int ret; + + drm_WARN_ON(&pfdev->base, perfcnt->owns_as_ref); + + ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); + if (ret < 0) + return ret; + + perfcnt->owns_as_ref =3D true; + + as =3D ret; + cfg =3D GPU_PERFCNT_CFG_AS(as) | + GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_MANUAL); + + /* + * Bifrost GPUs have 2 set of counters, but we're only interested by + * the first one for now. + */ + if (panfrost_model_is_bifrost(pfdev)) + cfg |=3D GPU_PERFCNT_CFG_SETSEL(perfcnt->counterset); + + gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0xffffffff); + gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0xffffffff); + gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0xffffffff); + + /* + * Due to PRLAM-8186 we need to disable the Tiler before we enable HW + * counters. + */ + if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); + else + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + + gpu_write(pfdev, GPU_PERFCNT_CFG, cfg); + + if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) + gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + + return 0; +} + +static int panfrost_perfcnt_dump_locked(struct panfrost_device *pfdev, u32= *state) { - 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) { + *state =3D perfcnt->state; + if (perfcnt->state & PANFROST_PERFCNT_SESSION_DEAD) + return -EIO; + + perfcnt->state =3D 0; + + reinit_completion(&pfdev->perfcnt->dump_comp); + + gpu_write(pfdev, GPU_PERFCNT_BASE_LO, lower_32_bits(gpuva)); + gpu_write(pfdev, GPU_PERFCNT_BASE_HI, upper_32_bits(gpuva)); + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_CLEAN_CACHES_COMPLETED | + GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_SAMPLE); + } + + /* + * Here we release the reset semaphore because perfcnt should not get in = the way + * of a HW reset. Besides, a legitimate reset might be issued during the = wait. + */ ret =3D wait_for_completion_interruptible_timeout(&pfdev->perfcnt->dump_c= omp, msecs_to_jiffies(1000)); + + /* A reset might come through in the gap between the completion returning= and the following + * check, but because no sample was produced, we don't care to relay the = state back to UM. + */ if (!ret) - ret =3D -ETIMEDOUT; - else if (ret > 0) + return -ETIMEDOUT; + + scoped_guard(rwsem_read, &pfdev->reset.lock) { + *state |=3D perfcnt->state; + + /* UM must re-enable their session before requesting new dumps. */ + if (perfcnt->state & PANFROST_PERFCNT_SESSION_DEAD) + return -EIO; + + /* If we faced a reset during our SAMPLE, the user needs to try again. */ + if (perfcnt->state & PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET) + return -EAGAIN; + + /* Only when we know no re-eanble or re-dump is required, we can afford + * to reset the internal state. Otherwise it must be kept so that later + * ioctls know about error situations in this DUMP and work around it. + */ + perfcnt->state =3D 0; + } + + if (ret > 0) ret =3D 0; =20 return ret; } =20 +static int panfrost_perfcnt_disable_locked(struct panfrost_device *pfdev, + struct drm_file *file_priv) +{ + struct panfrost_file_priv *user =3D file_priv->driver_priv; + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + struct iosys_map map =3D IOSYS_MAP_INIT_VADDR(perfcnt->buf); + + if (user !=3D perfcnt->user) + return -EINVAL; + + scoped_guard(rwsem_read, &pfdev->reset.lock) { + panfrost_perfcnt_hw_disable(pfdev); + 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_gem_mapping_put(perfcnt->mapping); + perfcnt->mapping =3D NULL; + pm_runtime_put_autosuspend(pfdev->base.dev); + + return 0; +} + static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, struct drm_file *file_priv, unsigned int counterset) { 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) - return 0; - else if (perfcnt->user) - return -EBUSY; + if (perfcnt->user) { + if (perfcnt->user !=3D user) + return -EBUSY; + + if (perfcnt->state & PANFROST_PERFCNT_SESSION_DEAD) + drm_WARN_ON(&pfdev->base, + panfrost_perfcnt_disable_locked(pfdev, file_priv)); + } =20 ret =3D pm_runtime_get_sync(pfdev->base.dev); if (ret < 0) @@ -122,54 +244,30 @@ static int panfrost_perfcnt_enable_locked(struct panf= rost_device *pfdev, ret =3D drm_gem_vmap(&bo->base, &map); if (ret) goto err_put_mapping; + perfcnt->buf =3D map.vaddr; + perfcnt->counterset =3D counterset; =20 panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer"); =20 - /* - * Clear the counters to start from a fresh state. - */ - gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); - gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); - - ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); - if (ret < 0) - goto err_vunmap; - - as =3D ret; - cfg =3D GPU_PERFCNT_CFG_AS(as) | - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_MANUAL); - - /* - * Bifrost GPUs have 2 set of counters, but we're only interested by - * the first one for now. - */ - if (panfrost_model_is_bifrost(pfdev)) - cfg |=3D GPU_PERFCNT_CFG_SETSEL(counterset); - - gpu_write(pfdev, GPU_PRFCNT_JM_EN, 0xffffffff); - gpu_write(pfdev, GPU_PRFCNT_SHADER_EN, 0xffffffff); - gpu_write(pfdev, GPU_PRFCNT_MMU_L2_EN, 0xffffffff); - - /* - * Due to PRLAM-8186 we need to disable the Tiler before we enable HW - * counters. - */ - if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0); - else - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + scoped_guard(rwsem_read, &pfdev->reset.lock) { + /* + * Clear the counters to start from a fresh state. + */ + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED); + gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR); =20 - gpu_write(pfdev, GPU_PERFCNT_CFG, cfg); + ret =3D panfrost_perfcnt_hw_enable(pfdev); + if (ret) + goto err_vunmap; =20 - if (panfrost_has_hw_issue(pfdev, HW_ISSUE_8186)) - gpu_write(pfdev, GPU_PRFCNT_TILER_EN, 0xffffffff); + perfcnt->user =3D user; + perfcnt->state =3D 0; + } =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: @@ -185,30 +283,6 @@ static int panfrost_perfcnt_enable_locked(struct panfr= ost_device *pfdev, return ret; } =20 -static int panfrost_perfcnt_disable_locked(struct panfrost_device *pfdev, - struct drm_file *file_priv) -{ - struct panfrost_file_priv *user =3D file_priv->driver_priv; - struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; - struct iosys_map map =3D IOSYS_MAP_INIT_VADDR(perfcnt->buf); - - if (user !=3D perfcnt->user) - return -EINVAL; - - panfrost_perfcnt_hw_disable(pfdev); - - 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); - - return 0; -} - int panfrost_ioctl_perfcnt_enable(struct drm_device *dev, void *data, struct drm_file *file_priv) { @@ -249,13 +323,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 +415,25 @@ void panfrost_perfcnt_fini(struct panfrost_device *pfd= ev) /* Disable everything before leaving. */ panfrost_perfcnt_hw_disable(pfdev); } + +void panfrost_perfcnt_reset(struct panfrost_device *pfdev) +{ + struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; + + if (drm_WARN_ON(&pfdev->base, !perfcnt)) + return; + + lockdep_assert_held(&pfdev->reset.lock); + + if (!perfcnt->user) + return; + + /* All active AS are released during the MMU post_reset. */ + perfcnt->owns_as_ref =3D false; + perfcnt->state |=3D PANFROST_PERFCNT_SESSION_INTERRUPTED_BY_RESET; + if (panfrost_perfcnt_hw_enable(pfdev)) + perfcnt->state |=3D PANFROST_PERFCNT_SESSION_DEAD; + + /* Unblock pending sample requests. */ + complete(&perfcnt->dump_comp); +} diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.h b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.h index 8bbcf5f5fb33..8b9bc704b634 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.h +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.h @@ -14,5 +14,6 @@ int panfrost_ioctl_perfcnt_enable(struct drm_device *dev,= void *data, struct drm_file *file_priv); int panfrost_ioctl_perfcnt_dump(struct drm_device *dev, void *data, struct drm_file *file_priv); +void panfrost_perfcnt_reset(struct panfrost_device *pfdev); =20 #endif diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_dr= m.h index 50d5337f35ef..7831c48c59c0 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,35 @@ struct drm_panfrost_perfcnt_enable { __u32 counterset; }; =20 +/* + * The next two flags describe the state of a perfcnt dump request + * as influenced by a device reset. They are the only values the + * perfcnt_dump ioctl state field can take on. + * Only certain state and ioctl retval combinations are legitimate. + */ + +/* A new perfcnt_enable ioctl should be issued before requesting + * more dumps, because a HW reset failed to recreate perfcnt's + * original state. Otherwise further perfcnt_dump's will fail. + * This flag being set means ioctl's retval is always -EIO. + */ +#define PANFROST_PERFCNT_SESSION_DEAD (1 << 0) + +/* A HW reset happened before or during a sample request, and + * perfcnt's internal state was successfully restored. There + * are two possible outcomes depending on the ioctl's retval: + * 0: A reset happened before a dump was requested, but did + * nonetheless succeed. Counter values are relative to last reset. + * -EAGAIN: A reset happened when a counter values sampling + * request was ongoing. Values are undefined so a new dump ioctl + * should be issued. + */ +#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