From: Adrian Larumbe <adrian.larumbe@collabora.com>
To: Boris Brezillon <boris.brezillon@collabora.com>
Cc: Steven Price <steven.price@arm.com>,
Liviu Dudau <liviu.dudau@arm.com>,
Chris Diamand <chris.diamand@arm.com>,
Akash Goel <akash.goel@arm.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>,
Simona Vetter <simona@ffwll.ch>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 18/18] drm/panthor: Add debugfs knobs to simulate reset failures
Date: Sat, 12 Sep 2026 20:27:28 +0100 [thread overview]
Message-ID: <aqWmIbT_46Enz8VH@sobremesa> (raw)
In-Reply-To: <20260826-panthor-unplug-fixes-v4-18-982cc8f4234b@collabora.com>
I've tried poking the knob that fakes an error in the reset path and got two different kinds of oputput:
Either
```
[ 1950.080236] panthor fb000000.gpu: [drm] *ERROR* Failed to boot MCU after reset, making device unusable.
[ 1951.167384] panthor fb000000.gpu: [drm] Timed out waiting for MCU to halt
[ 1951.167543] panthor fb000000.gpu: [drm] Failed to cleanly suspend MCU
```
or just
```
[ 2022.804466] panthor fb000000.gpu: [drm] *ERROR* Failed to boot MCU after reset, making device unusable.
```
I guess the former happens when after device unplug, there are still inflight jobs that keep a PM reference.
On 26.08.2026 16:56, Boris Brezillon wrote:
> It's almost impossible to trigger a situation where the reset
> doesn't work now that the driver is more mature, so let's add two
> knobs to exercise this error path:
>
> - a knob to trigger a reset
> - a knob to fake an error in the reset path
>
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
> drivers/gpu/drm/panthor/panthor_device.c | 48 +++++++++++++++++++++++++++++++-
> drivers/gpu/drm/panthor/panthor_device.h | 8 ++++++
> 2 files changed, 55 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/panthor/panthor_device.c
> index 328e601d80e8..8bdc511310c0 100644
> --- a/drivers/gpu/drm/panthor/panthor_device.c
> +++ b/drivers/gpu/drm/panthor/panthor_device.c
> @@ -5,6 +5,7 @@
> /* Copyright 2025 ARM Limited. All rights reserved. */
>
> #include <linux/clk.h>
> +#include <linux/debugfs.h>
> #include <linux/mm.h>
> #include <linux/platform_device.h>
> #include <linux/pm_domain.h>
> @@ -182,7 +183,10 @@ static void panthor_device_reset_work(struct work_struct *work)
> panthor_hw_soft_reset(ptdev);
> panthor_hw_l2_power_on(ptdev);
> panthor_mmu_post_reset(ptdev);
> - ret = panthor_fw_post_reset(ptdev);
> + if (ptdev->reset.fake_failure)
> + ret = -EIO;
> + else
> + ret = panthor_fw_post_reset(ptdev);
> atomic_set(&ptdev->reset.pending, 0);
> panthor_sched_post_reset(ptdev, ret != 0);
> drm_dev_exit(cookie);
> @@ -690,8 +694,50 @@ int panthor_device_suspend(struct device *dev)
> }
>
> #ifdef CONFIG_DEBUG_FS
> +static int panthor_device_fake_fw_reset_failure_get(void *data, u64 *val)
> +{
> + struct panthor_device *ptdev = data;
> +
> + *val = ptdev->reset.fake_failure ? 1 : 0;
> + return 0;
> +}
> +
> +static int panthor_device_fake_fw_reset_failure_set(void *data, u64 val)
> +{
> + struct panthor_device *ptdev = data;
> +
> + ptdev->reset.fake_failure = val ? true : false;
> + return 0;
> +}
> +
> +DEFINE_DEBUGFS_ATTRIBUTE(panthor_device_fake_fw_reset_failure_fops,
> + panthor_device_fake_fw_reset_failure_get,
> + panthor_device_fake_fw_reset_failure_set, "%llu\n");
> +
> +static ssize_t panthor_device_reset_file_write(struct file *file,
> + const char __user *, size_t size,
> + loff_t *)
> +{
> + struct panthor_device *ptdev = file_inode(file)->i_private;
> +
> + panthor_device_schedule_reset(ptdev);
> + return size;
> +}
> +
> +static const struct debugfs_short_fops panthor_device_reset_fops = {
> + .write = panthor_device_reset_file_write,
> +};
> +
> void panthor_device_debugfs_init(struct drm_minor *minor)
> {
> + struct panthor_device *ptdev = container_of(minor->dev, struct panthor_device, base);
> +
> + debugfs_create_file("fake_fw_reset_failure", 0644,
> + minor->debugfs_root, ptdev,
> + &panthor_device_fake_fw_reset_failure_fops);
> + debugfs_create_file("reset", 0200,
> + minor->debugfs_root, ptdev,
> + &panthor_device_reset_fops);
> panthor_mmu_debugfs_init(minor);
> panthor_gem_debugfs_init(minor);
> }
> diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/panthor/panthor_device.h
> index e12049961912..82ec34347eba 100644
> --- a/drivers/gpu/drm/panthor/panthor_device.h
> +++ b/drivers/gpu/drm/panthor/panthor_device.h
> @@ -294,6 +294,14 @@ struct panthor_device {
> * all FW sections to make sure we start from a fresh state.
> */
> bool fast;
> +
> + /**
> + * @fake_failure: When true, pretend the FW boot in the reset path failed.
> + *
> + * This is important to check that we're doing the right thing in this very
> + * unlikely case.
> + */
> + bool fake_failure;
> } reset;
>
> /** @pm: Power management related data. */
>
> --
> 2.55.0
Adrian Larumbe
prev parent reply other threads:[~2026-09-12 19:27 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-26 14:55 [PATCH v4 00/18] drm/panthor: Fix the unplug logic Boris Brezillon
2026-08-26 14:56 ` [PATCH v4 01/18] drm/panthor: Disable reset work before unplug Boris Brezillon
2026-08-27 13:00 ` Liviu Dudau
2026-09-10 1:12 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 02/18] drm/panthor: Revisit the reset logic to avoid reset request loss Boris Brezillon
2026-08-27 15:04 ` Liviu Dudau
2026-09-10 1:13 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 03/18] drm/panthor: Make panthor_device::pm::state non-atomic Boris Brezillon
2026-08-27 15:12 ` Liviu Dudau
2026-09-10 1:13 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 04/18] drm/panthor: Flush the cleanup_wq in the unplug path Boris Brezillon
2026-08-27 15:14 ` Liviu Dudau
2026-09-10 1:14 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 05/18] drm/panthor: Make the page table cache and cleanup workqueue device-local Boris Brezillon
2026-08-27 15:20 ` Liviu Dudau
2026-09-10 1:14 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 06/18] drm/panthor: Drop unused vm argument passed to panthor_vm_prepare_sync_only_op_ctx() Boris Brezillon
2026-08-27 15:21 ` Liviu Dudau
2026-09-10 1:15 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 07/18] drm/panthor: Move the debugfs initialization to panthor_device.c Boris Brezillon
2026-09-10 1:18 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 08/18] drm/panthor: Split panthor_vm Boris Brezillon
2026-09-11 3:37 ` Adrian Larumbe
2026-09-11 9:48 ` Boris Brezillon
2026-09-11 22:55 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 09/18] drm/panthor: Add fine-grained restrictions on VMs Boris Brezillon
2026-09-11 3:38 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 10/18] drm/panthor: Check AS state before disabling Boris Brezillon
2026-09-11 3:38 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 11/18] drm/panthor: Don't pre-allocate VMAs or page tables when preparing a full VM unmap Boris Brezillon
2026-09-11 3:38 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 12/18] drm/panthor: Let l2_power_off return errors and force users to check it Boris Brezillon
2026-09-11 3:39 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 13/18] drm/panthor: Complain if the SOFT_RESET fails Boris Brezillon
2026-09-11 3:40 ` Adrian Larumbe
2026-09-11 9:54 ` Boris Brezillon
2026-08-26 14:56 ` [PATCH v4 14/18] drm/panthor: Make the VM cleanup path more robust against UAF Boris Brezillon
2026-09-11 19:15 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 15/18] drm/panthor: Track user owned VMs Boris Brezillon
2026-09-11 19:17 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 16/18] drm/panthor: Track user owned groups Boris Brezillon
2026-09-11 19:17 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 17/18] drm/panthor: Fix the unplug logic Boris Brezillon
2026-09-11 22:44 ` Adrian Larumbe
2026-08-26 14:56 ` [PATCH v4 18/18] drm/panthor: Add debugfs knobs to simulate reset failures Boris Brezillon
2026-09-11 19:18 ` Adrian Larumbe
2026-09-12 19:27 ` Adrian Larumbe [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aqWmIbT_46Enz8VH@sobremesa \
--to=adrian.larumbe@collabora.com \
--cc=airlied@gmail.com \
--cc=akash.goel@arm.com \
--cc=boris.brezillon@collabora.com \
--cc=chris.diamand@arm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.