[PATCH v2] drm/vkms: Add writeback encoders as possible clones
Robert Mader
robert.mader at collabora.com
Thu Jul 31 14:07:36 UTC 2025
On 31.07.25 13:45, Louis Chauvet wrote:
> Oops, sorry, I just tested it, it works
>
> Reviewed-by: Louis Chauvet <louis.chauvet at bootlin.com>
Nice, thank a lot!
Quick follow-up: do you think it could already be included in
drm-misc-next? And if so, could you do that?
Best regards
>
> Le 31/07/2025 à 12:45, Robert Mader a écrit :
>> 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