diff options
| author | Maíra Canal <mcanal@igalia.com> | 2026-09-15 17:51:26 -0300 |
|---|---|---|
| committer | Maíra Canal <mcanal@igalia.com> | 2026-09-18 15:23:28 -0300 |
| commit | b4448823f151d0b4a3f3f4c5622c6ade51422c4e (patch) | |
| tree | aa144efb4a4ed0a1539167db5968c4e45be2b393 /tools/perf/scripts/python | |
| parent | 6ab4aad3481903ac3743513517c290a3ebd39232 (diff) | |
| download | linux-b4448823f151d0b4a3f3f4c5622c6ade51422c4e.tar.gz linux-b4448823f151d0b4a3f3f4c5622c6ade51422c4e.zip | |
drm/vc4: Use the reset controller to recover from a GPU hang
vc4_reset() recovers a hung GPU by dropping the runtime PM usage count to
zero so that the power domain goes down, and then taking it again. Such an
unconventional approach only works if the driver knows exactly how many
references it holds, which is why vc4 wrapped every pm_runtime_get_sync()
call in a private refcount and mutex.
Commit 670c672608a1 ("soc: bcm: bcm2835-pm: Add support for power domains
under a new binding.") exposed a V3D reset line for exactly this reason,
so that the block can be reset without power-cycling its domain, but the
vc4 driver never picked it up. Use it now, which removes the need for the
private refcount and leaves vc4_v3d_pm_get/put() as plain runtime PM
wrappers.
The reset line is optional, to accommodate older device trees. Device
trees that do not describe one still get the driver-side recovery in
vc4_irq_reset(), but the hardware is left untouched. Two in-tree platforms
use the VC4 V3D block: BCM2835 gains the resets property in the next
commit, and Cygnus is no worse off than it was, as its V3D node has no
power domain and the power-cycle only ever gated its clock.
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://patch.msgid.link/20260915-vc4-reset-control-v2-3-cb3a25b07822@igalia.com
Signed-off-by: Maíra Canal <mcanal@igalia.com>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions
