On 31.07.25 13:45, Louis Chauvet wrote:
Oops, sorry, I just tested it, it works

Reviewed-by: Louis Chauvet <[email protected]>

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 <[email protected]>
---
   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

Reply via email to