[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