On 09/03/2026 15:23, Alessio Belle wrote:
> The soft reset sequence is currently executed from the threaded IRQ
> handler, hence it cannot call disable_irq() which internally waits
> for IRQ handlers, i.e. itself, to complete.
>
> Use disable_irq_nosync() during a soft reset instead.
>
> Fixes: cc1aeedb98ad ("drm/imagination: Implement firmware infrastructure and
> META FW support")
> Cc: [email protected]
> Signed-off-by: Alessio Belle <[email protected]>Reviewed-by: Matt Coster <[email protected]> I'll apply to drm-misc-fixes tomorrow. > --- > drivers/gpu/drm/imagination/pvr_power.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/imagination/pvr_power.c > b/drivers/gpu/drm/imagination/pvr_power.c > index 7a8765c0c1ed..046cce76498a 100644 > --- a/drivers/gpu/drm/imagination/pvr_power.c > +++ b/drivers/gpu/drm/imagination/pvr_power.c > @@ -510,7 +510,16 @@ pvr_power_reset(struct pvr_device *pvr_dev, bool > hard_reset) > } > > /* Disable IRQs for the duration of the reset. */ > - disable_irq(pvr_dev->irq); > + if (hard_reset) { > + disable_irq(pvr_dev->irq); > + } else { > + /* > + * Soft reset is triggered as a response to a FW command to > the Host and is > + * processed from the threaded IRQ handler. This code cannot > (nor needs to) > + * wait for any IRQ processing to complete. > + */ > + disable_irq_nosync(pvr_dev->irq); > + } > > do { > if (hard_reset) { > > --- > base-commit: d2e20c8951e4bb5f4a828aed39813599980353b6 > change-id: 20260309-fix-soft-reset-8f32c3783d3d > > Best regards, > -- > Alessio Belle <[email protected]> > -- Matt Coster E: [email protected]
OpenPGP_signature.asc
Description: OpenPGP digital signature
