<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">On 18.07.25 12:23, Louis Chauvet wrote:<br>
</div>
<blockquote type="cite"
cite="mid:8449716a-9c8b-424b-b12f-d5b272e051b3@bootlin.com">
<br>
<br>
Le 03/07/2025 à 11:03, Robert Mader a écrit :
<br>
<blockquote type="cite">Since commit 41b4b11da0215 ("drm: Add
valid clones check") setting
<br>
the `possible_clones` values is a hard requirement for cloning.
<br>
`vkms` supports cloning for writeback connectors in order to
capture
<br>
CRTC content, however that broke with said commit.
<br>
<br>
Writeback connectors are created on a per-CRTC basis, thus mark
<br>
every non-writeback connector that is compatible with a given
CRTC
<br>
as possible clone - and vice-versa.
<br>
<br>
Using a default configuration, the corresponding `drm_info`
output
<br>
changes from:
<br>
<br>
├───Encoders
<br>
│ ├───Encoder 0
<br>
│ │ ├───Object ID: 40
<br>
│ │ ├───Type: virtual
<br>
│ │ ├───CRTCS: {0}
<br>
│ │ └───Clones: {0}
<br>
│ └───Encoder 1
<br>
│ ├───Object ID: 41
<br>
│ ├───Type: virtual
<br>
│ ├───CRTCS: {0}
<br>
│ └───Clones: {1}
<br>
<br>
to:
<br>
<br>
├───Encoders
<br>
│ ├───Encoder 0
<br>
│ │ ├───Object ID: 44
<br>
│ │ ├───Type: virtual
<br>
│ │ ├───CRTCS: {0}
<br>
│ │ └───Clones: {0, 1}
<br>
│ └───Encoder 1
<br>
│ ├───Object ID: 50
<br>
│ ├───Type: virtual
<br>
│ ├───CRTCS: {0}
<br>
│ └───Clones: {0, 1}
<br>
<br>
Signed-off-by: Robert Mader <a class="moz-txt-link-rfc2396E" href="mailto:robert.mader@collabora.com"><robert.mader@collabora.com></a>
<br>
</blockquote>
<br>
Hi,
<br>
<br>
About the Fixes tag, I think you can add it anyway, if the patch
is not applicable on previous kernel version, this is not an
issue, it will just be ignored.<br>
</blockquote>
<p>Alright, added</p>
<pre>Fixes: dbd9d80c1b2e (drm/vkms: Add support for writeback)
</pre>
<p>in v2.<br>
</p>
<blockquote type="cite"
cite="mid:8449716a-9c8b-424b-b12f-d5b272e051b3@bootlin.com">
<br>
<blockquote type="cite">---
<br>
drivers/gpu/drm/vkms/vkms_output.c | 12 ++++++++++++
<br>
drivers/gpu/drm/vkms/vkms_writeback.c | 2 ++
<br>
2 files changed, 14 insertions(+)
<br>
<br>
diff --git a/drivers/gpu/drm/vkms/vkms_output.c
b/drivers/gpu/drm/vkms/vkms_output.c
<br>
index 8d7ca0cdd79f..21935eb88198 100644
<br>
--- a/drivers/gpu/drm/vkms/vkms_output.c
<br>
+++ b/drivers/gpu/drm/vkms/vkms_output.c
<br>
@@ -77,9 +77,21 @@ int vkms_output_init(struct vkms_device
*vkmsdev)
<br>
return ret;
<br>
}
<br>
+ encoder_cfg->encoder->possible_clones |=
BIT(drm_encoder_index(encoder_cfg->encoder));
<br>
+
<br>
vkms_config_encoder_for_each_possible_crtc(encoder_cfg, idx,
possible_crtc) {
<br>
encoder_cfg->encoder->possible_crtcs |=
<br>
drm_crtc_mask(&possible_crtc->crtc->crtc);
<br>
+
<br>
+ if (vkms_config_crtc_get_writeback(possible_crtc))
{
<br>
+ struct drm_encoder *wb_encoder =
<br>
+ &possible_crtc->crtc->wb_encoder;
<br>
+
<br>
+ encoder_cfg->encoder->possible_clones |=
<br>
+ BIT(drm_encoder_index(wb_encoder));
<br>
+ wb_encoder->possible_clones |=
<br>
+
BIT(drm_encoder_index(encoder_cfg->encoder));
<br>
</blockquote>
<br>
Can you use drm_encoder_mask directly?
<br>
</blockquote>
Much better, done for all places in v2.<br>
<blockquote type="cite"
cite="mid:8449716a-9c8b-424b-b12f-d5b272e051b3@bootlin.com">
<br>
Thanks a lot for this patch,
<br>
Louis Chauvet
<br>
</blockquote>
Thanks for the feedback!
<blockquote type="cite"
cite="mid:8449716a-9c8b-424b-b12f-d5b272e051b3@bootlin.com">
<br>
<blockquote type="cite">+ }
<br>
}
<br>
}
<br>
diff --git a/drivers/gpu/drm/vkms/vkms_writeback.c
b/drivers/gpu/drm/vkms/vkms_writeback.c
<br>
index fe163271d5b5..12b60fb97c68 100644
<br>
--- a/drivers/gpu/drm/vkms/vkms_writeback.c
<br>
+++ b/drivers/gpu/drm/vkms/vkms_writeback.c
<br>
@@ -174,6 +174,8 @@ int vkms_enable_writeback_connector(struct
vkms_device *vkmsdev,
<br>
if (ret)
<br>
return ret;
<br>
vkms_output->wb_encoder.possible_crtcs |=
drm_crtc_mask(&vkms_output->crtc);
<br>
+ vkms_output->wb_encoder.possible_clones |=
<br>
+
BIT(drm_encoder_index(&vkms_output->wb_encoder));
<br>
drm_connector_helper_add(&wb->base,
&vkms_wb_conn_helper_funcs);
<br>
</blockquote>
<br>
</blockquote>
<pre class="moz-signature" cols="72">--
Robert Mader
Consultant Software Developer
Collabora Ltd.
Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
Registered in England & Wales, no. 5513718</pre>
</body>
</html>