<!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>