Raspberry Pi boards should recover from a hung GPU more cleanly in Linux 7.4. A four-patch series from Maíra Canal at Igalia moves the vc4 kernel driver onto the V3D block’s reset line, a mechanism the BCM2835 power-management block has exposed since it gained power-domain support, added for exactly this reason. The driver never picked it up, and the series is now in the DRM tree after going to the dri-devel list in mid-August.
How reset works today
When the GPU hangs, vc4_reset() recovers it by dropping the runtime PM usage count to zero so that the V3D power domain goes down, then taking it again. Forcing the count to zero only works if the driver knows exactly how many references it holds, so vc4 wraps every pm_runtime_get_sync() call in a private refcount and a mutex. It works. The cover letter calls it cumbersome, and the refcount around every runtime PM call is the reason.
What the series changes
The series switches vc4 to the reset controller and drops the private refcount, leaving the power get and put calls as plain runtime PM wrappers. The reset line is optional in the device tree: boards that do not describe one keep the driver-side recovery path, with the hardware left untouched. Of the two in-tree platforms, BCM2835 gains the property in the fourth patch, and Cygnus has no V3D power domain to begin with, so its power cycle only ever gated a clock.
The first patch is an independent cleanup: the brcm,vc4-v3d compatible string was never documented and was never used by an in-tree device tree, so it is a candidate for removal, and it can be dropped from the series if it proves contentious.
Canal tested the series on the Raspberry Pi 3B and 3B+. The diff comes out even, 51 lines added and 51 removed across seven files, which is what replacing a workaround with the intended mechanism tends to look like.
When
The patches are in this week’s DRM-Misc-Next pull request, queued for the Linux 7.4 merge window in October. The stable release of 7.4 should follow before the year is out, and distributions that track mainline pick the change up then.
My read
Plumbing of the good kind: a workaround dies, the mechanism built for exactly this job takes over, and the diff nets out even. Nobody notices a cleaner reset until the day the GPU hangs and comes back, which is the only day it exists for. That is most kernel work, and it is the kind that keeps a board in a closet running without anyone thinking about it.
Source: the patch series cover letter and Phoronix’s write-up of the pull request.

