Some compositors (mainly Mutter) needs this property to be set in order
to read suggested_x/y values. This property, along with suggested_x/y
will be useful for virtual GPU drivers to share the Host output/window
layout with the Guest compositor.

v2: Improve the commit message.

Cc: Gerd Hoffmann <kra...@redhat.com>
Cc: Dongwon Kim <dongwon....@intel.com>
Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com>
---
 drivers/gpu/drm/virtio/virtgpu_display.c | 14 ++++++++++++++
 drivers/gpu/drm/virtio/virtgpu_drv.h     |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c 
b/drivers/gpu/drm/virtio/virtgpu_display.c
index 868b0183c6df..09a8089bb62a 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -286,6 +286,8 @@ static int vgdev_output_init(struct virtio_gpu_device 
*vgdev, int index)
                                   dev->mode_config.suggested_x_property, 0);
        drm_object_attach_property(&connector->base,
                                   dev->mode_config.suggested_y_property, 0);
+       drm_object_attach_property(&connector->base,
+                                  vgdev->hotplug_mode_update_property, 1);
 
        drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_VIRTUAL);
        drm_encoder_helper_add(encoder, &virtio_gpu_enc_helper_funcs);
@@ -336,6 +338,17 @@ static const struct drm_mode_config_funcs 
virtio_gpu_mode_funcs = {
        .atomic_commit = drm_atomic_helper_commit,
 };
 
+static void
+virtio_gpu_create_hotplug_mode_update_property(struct virtio_gpu_device *vgdev)
+{
+       if (vgdev->hotplug_mode_update_property)
+               return;
+
+       vgdev->hotplug_mode_update_property =
+               drm_property_create_range(vgdev->ddev, DRM_MODE_PROP_IMMUTABLE,
+                                         "hotplug_mode_update", 0, 1);
+}
+
 int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
 {
        int i, ret;
@@ -355,6 +368,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
 
        vgdev->ddev->mode_config.fb_modifiers_not_supported = true;
        drm_mode_create_suggested_offset_properties(vgdev->ddev);
+       virtio_gpu_create_hotplug_mode_update_property(vgdev);
 
        for (i = 0 ; i < vgdev->num_scanouts; ++i)
                vgdev_output_init(vgdev, i);
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h 
b/drivers/gpu/drm/virtio/virtgpu_drv.h
index af6ffb696086..8689a589d3d2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -260,6 +260,8 @@ struct virtio_gpu_device {
        uint64_t capset_id_mask;
        struct list_head cap_cache;
 
+       struct drm_property *hotplug_mode_update_property;
+
        /* protects uuid state when exporting */
        spinlock_t resource_export_lock;
        /* protects map state and host_visible_mm */
-- 
2.37.2

Reply via email to