[PATCH v2] drm/vkms: Add writeback encoders as possible clones
Robert Mader
robert.mader at collabora.com
Thu Jul 31 10:45:52 UTC 2025
Hey Louis, would you be fine to add your Rb on this one? :) Would love
to get it into drm-next / 6.17.
On 18.07.25 14:14, Robert Mader wrote:
> Since commit 41b4b11da0215 ("drm: Add valid clones check") setting
> the `possible_clones` values is a hard requirement for cloning.
> `vkms` supports cloning for writeback connectors in order to capture
> CRTC content, however that broke with said commit.
>
> Writeback connectors are created on a per-CRTC basis, thus mark
> every non-writeback connector that is compatible with a given CRTC
> as possible clone - and vice-versa.
>
> Using a default configuration, the corresponding `drm_info` output
> changes from:
>
> ├───Encoders
> │ ├───Encoder 0
> │ │ ├───Object ID: 40
> │ │ ├───Type: virtual
> │ │ ├───CRTCS: {0}
> │ │ └───Clones: {0}
> │ └───Encoder 1
> │ ├───Object ID: 41
> │ ├───Type: virtual
> │ ├───CRTCS: {0}
> │ └───Clones: {1}
>
> to:
>
> ├───Encoders
> │ ├───Encoder 0
> │ │ ├───Object ID: 44
> │ │ ├───Type: virtual
> │ │ ├───CRTCS: {0}
> │ │ └───Clones: {0, 1}
> │ └───Encoder 1
> │ ├───Object ID: 50
> │ ├───Type: virtual
> │ ├───CRTCS: {0}
> │ └───Clones: {0, 1}
>
> Fixes: dbd9d80c1b2e (drm/vkms: Add support for writeback)
> Signed-off-by: Robert Mader <robert.mader at collabora.com>
> ---
> drivers/gpu/drm/vkms/vkms_output.c | 13 +++++++++++++
> drivers/gpu/drm/vkms/vkms_writeback.c | 2 ++
> 2 files changed, 15 insertions(+)
>
> diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c
> index 8d7ca0cdd79f..2ee3749e2b28 100644
> --- a/drivers/gpu/drm/vkms/vkms_output.c
> +++ b/drivers/gpu/drm/vkms/vkms_output.c
> @@ -77,9 +77,22 @@ int vkms_output_init(struct vkms_device *vkmsdev)
> return ret;
> }
>
> + encoder_cfg->encoder->possible_clones |=
> + drm_encoder_mask(encoder_cfg->encoder);
> +
> vkms_config_encoder_for_each_possible_crtc(encoder_cfg, idx, possible_crtc) {
> encoder_cfg->encoder->possible_crtcs |=
> drm_crtc_mask(&possible_crtc->crtc->crtc);
> +
> + if (vkms_config_crtc_get_writeback(possible_crtc)) {
> + struct drm_encoder *wb_encoder =
> + &possible_crtc->crtc->wb_encoder;
> +
> + encoder_cfg->encoder->possible_clones |=
> + drm_encoder_mask(wb_encoder);
> + wb_encoder->possible_clones |=
> + drm_encoder_mask(encoder_cfg->encoder);
> + }
> }
> }
>
> diff --git a/drivers/gpu/drm/vkms/vkms_writeback.c b/drivers/gpu/drm/vkms/vkms_writeback.c
> index fe163271d5b5..45d69a3b85f6 100644
> --- a/drivers/gpu/drm/vkms/vkms_writeback.c
> +++ b/drivers/gpu/drm/vkms/vkms_writeback.c
> @@ -174,6 +174,8 @@ int vkms_enable_writeback_connector(struct vkms_device *vkmsdev,
> if (ret)
> return ret;
> vkms_output->wb_encoder.possible_crtcs |= drm_crtc_mask(&vkms_output->crtc);
> + vkms_output->wb_encoder.possible_clones |=
> + drm_encoder_mask(&vkms_output->wb_encoder);
>
> drm_connector_helper_add(&wb->base, &vkms_wb_conn_helper_funcs);
>
--
Robert Mader
Consultant Software Developer
Collabora Ltd.
Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
Registered in England & Wales, no. 5513718
More information about the dri-devel
mailing list