drm/vc4: crtc: Keep the previously assigned HVS FIFO
authorMaxime Ripard <maxime@cerno.tech>
Wed, 23 Sep 2020 08:40:32 +0000 (10:40 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Fri, 25 Sep 2020 14:56:21 +0000 (16:56 +0200)
commit8ba0b6d196315f68c271f549e8585129caefce97
tree0946123bdc8d9cf092fd01781d8890763f08e010
parent427c4a0680a28f87bb9c7bbfeac26b39ef8682ad
drm/vc4: crtc: Keep the previously assigned HVS FIFO

The HVS FIFOs are currently assigned each time we have an atomic_check
for all the enabled CRTCs.

However, if we are running multiple outputs in parallel and we happen to
disable the first (by index) CRTC, we end up changing the assigned FIFO
of the second CRTC without disabling and reenabling the pixelvalve which
ends up in a stall and eventually a VBLANK timeout.

In order to fix this, we can create a special value for our assigned
channel to mark it as disabled, and if our CRTC already had an assigned
channel in its previous state, we keep on using it.

Fixes: 87ebcd42fb7b ("drm/vc4: crtc: Assign output to channel automatically")
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Tested-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200923084032.218619-2-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_crtc.c
drivers/gpu/drm/vc4/vc4_drv.h
drivers/gpu/drm/vc4/vc4_kms.c