Am 17.03.21 um 16:43 schrieb Maxime Ripard: > The vc4_set_crtc_possible_masks is meant to run over all the encoders > and then set their possible_crtcs mask to their associated pixelvalve. > > However, since the commit 39fcb2808376 ("drm/vc4: txp: Turn the TXP into > a CRTC of its own"), the TXP has been turned to a CRTC and encoder of > its own, and while it does indeed register an encoder, it no longer has > an associated pixelvalve. The code will thus run over the TXP encoder > and set a bogus possible_crtcs mask, overriding the one set in the TXP > bind function. > > In order to fix this, let's skip any virtual encoder. > > Fixes: 39fcb2808376 ("drm/vc4: txp: Turn the TXP into a CRTC of its own") > Signed-off-by: Maxime Ripard dim fixes 39fcb2808376 Fixes: 39fcb2808376 ("drm/vc4: txp: Turn the TXP into a CRTC of its own") Cc: Maxime Ripard Cc: Eric Anholt Cc: Maxime Ripard Cc: # v5.9+ At least the CC: stable line should be there. Acked-by: Thomas Zimmermann > --- > drivers/gpu/drm/vc4/vc4_crtc.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c > index 269390bc586e..f1f2e8cbce79 100644 > --- a/drivers/gpu/drm/vc4/vc4_crtc.c > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c > @@ -1018,6 +1018,9 @@ static void vc4_set_crtc_possible_masks(struct drm_device *drm, > struct vc4_encoder *vc4_encoder; > int i; > > + if (encoder->encoder_type == DRM_MODE_ENCODER_VIRTUAL) > + continue; > + > vc4_encoder = to_vc4_encoder(encoder); > for (i = 0; i < ARRAY_SIZE(pv_data->encoder_types); i++) { > if (vc4_encoder->type == encoder_types[i]) { > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 Nürnberg, Germany (HRB 36809, AG Nürnberg) Geschäftsführer: Felix Imendörffer