[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