aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Kasireddy <vivek.kasireddy@intel.com>2022-11-17 17:30:54 -0800
committerGerd Hoffmann <kraxel@redhat.com>2023-01-26 08:31:41 +0100
commit678d45faf3684f4ec694cc19b70db7f2a0c9c841 (patch)
treee8c63beab97808b4f300641e5f27fa2087f15bce
parent347d001a65ba84c02ebd403000bf4e524cf678e6 (diff)
downloadlinux-678d45faf3684f4ec694cc19b70db7f2a0c9c841.tar.gz
drm/virtio: Add the hotplug_mode_update property for rescanning of modesdrm-qemu-next
Setting this property will allow the userspace to look for new modes or position info when a hotplug event occurs. This is really helpful for virtual GPU drivers to handle Host window resizing events which are propogated as hotplug interrupts to the Guest drivers. Mutter already uses this property while configuring the outputs. Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20221118013054.182304-3-vivek.kasireddy@intel.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_display.c14
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_drv.h2
2 files changed, 16 insertions, 0 deletions
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 */