Re: [PATCH v2 2/2] drm/komeda: Set display/writeback clone masks
Liviu Dudau <[email protected]> Mon, 3 Aug 2026 15:46:08 +0100
| Newsgroups | org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <anCpsHmX-dpM8PFW@e142607> |
On Mon, Aug 03, 2026 at 03:21:22PM +0100, Raveendra Talabattula wrote: > From: Vincenzo Frascino <[email protected]> > > Since commit 41b4b11da0215 ("drm: Add valid clones check"), > all encoders attached to the same CRTC must advertise > each other through possible_clones. > > Komeda creates one writeback connector per CRTC. Allow the writeback > encoder to be cloned only with encoders that can drive the same CRTC, > and update those encoders reciprocally. > > Do this when the writeback connector is created rather than modifying > every encoder registered with the DRM device from komeda_kms_attach(). > This leaves encoders associated with other CRTCs untouched. If you don't mind I will drop the paragraph above when I commit the patch as it makes reference to code that has not been merged so likely to create confusion. I think the comment in the code is sufficient. With that, Reviewed-by: Liviu Dudau <[email protected]> Will push this to drm-misc-next in the next couple of days. Best regards, Liviu > > Signed-off-by: Asad Malik <[email protected]> > Signed-off-by: Vincenzo Frascino <[email protected]> > Co-developed-by: Raveendra Talabattula <[email protected]> > Signed-off-by: Raveendra Talabattula <[email protected]> > --- > .../arm/display/komeda/komeda_wb_connector.c | 33 +++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c > index 41cc3e080dc9..4872253a2449 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c > @@ -143,12 +143,17 @@ static int komeda_wb_connector_add(struct komeda_kms_dev *kms, > struct komeda_wb_connector *kwb_conn; > struct drm_writeback_connector *wb_conn; > struct drm_display_info *info; > + struct drm_encoder *encoder; > + struct drm_encoder *wb_encoder; > u32 *formats, n_formats = 0; > + u32 crtc_mask; > int err; > > if (!kcrtc->master->wb_layer) > return 0; > > + crtc_mask = drm_crtc_mask(&kcrtc->base); > + > kwb_conn = kzalloc_obj(*kwb_conn); > if (!kwb_conn) > return -ENOMEM; > @@ -176,6 +181,34 @@ static int komeda_wb_connector_add(struct komeda_kms_dev *kms, > return err; > } > > + wb_encoder = &wb_conn->encoder; > + > + /* > + * The writeback connector is associated with a single CRTC. Make its > + * encoder clone-compatible only with encoders that can drive that CRTC. > + * > + * possible_clones must contain the encoder's own bit whenever it is > + * non-zero. Add both the encoder itself and the writeback encoder when > + * updating the reciprocal clone relationship. > + */ > + wb_encoder->possible_clones = drm_encoder_mask(wb_encoder); > + > + drm_for_each_encoder(encoder, &kms->base) { > + u32 encoder_mask; > + > + if (encoder == wb_encoder) > + continue; > + > + if (!(encoder->possible_crtcs & crtc_mask)) > + continue; > + > + encoder_mask = drm_encoder_mask(encoder); > + > + wb_encoder->possible_clones |= encoder_mask; > + encoder->possible_clones |= encoder_mask | > + drm_encoder_mask(wb_encoder); > + } > + > drm_connector_helper_add(&wb_conn->base, &komeda_wb_conn_helper_funcs); > > info = &kwb_conn->base.base.display_info; > -- > 2.43.0 > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯