aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-06-16 00:25:34 -0400
committerGerd Hoffmann <kraxel@redhat.com>2015-06-16 05:22:40 -0400
commit441012aff674c8d2d9b371e1a19320de38eecc84 (patch)
tree90c56017b5fa4d915f199a942f61739d9fe16399
parent50cb941a26b9311c39ba59567fcfad48f5eab4a3 (diff)
drm/virtgpu: initialise fbdev after getting initial display info
This should avoid issues with the fbdev path trying to render before we've gotten the display info. Signed-off-by: Dave Airlie <airlied@redhat.com> [ kraxel: wait for display-info reply ] Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_drv.h1
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_kms.c4
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_vq.c2
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index e5a2c092460b..ff8de3d6f0b2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -171,6 +171,7 @@ struct virtio_gpu_device {
171 wait_queue_head_t resp_wq; 171 wait_queue_head_t resp_wq;
172 /* current display info */ 172 /* current display info */
173 spinlock_t display_info_lock; 173 spinlock_t display_info_lock;
174 bool display_info_pending;
174 175
175 struct virtio_gpu_fence_driver fence_drv; 176 struct virtio_gpu_fence_driver fence_drv;
176 177
diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c
index 132405f15389..782766c00d70 100644
--- a/drivers/gpu/drm/virtio/virtgpu_kms.c
+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
@@ -137,9 +137,11 @@ int virtio_gpu_driver_load(struct drm_device *dev, unsigned long flags)
137 virtio_device_ready(vgdev->vdev); 137 virtio_device_ready(vgdev->vdev);
138 vgdev->vqs_ready = true; 138 vgdev->vqs_ready = true;
139 139
140 virtio_gpu_cmd_get_display_info(vgdev);
141 wait_event_timeout(vgdev->resp_wq, !vgdev->display_info_pending,
142 5 * HZ);
140 if (virtio_gpu_fbdev) 143 if (virtio_gpu_fbdev)
141 virtio_gpu_fbdev_init(vgdev); 144 virtio_gpu_fbdev_init(vgdev);
142 virtio_gpu_cmd_get_display_info(vgdev);
143 145
144 return 0; 146 return 0;
145 147
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index 8fa6513eb3bc..c5067926401f 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -534,6 +534,7 @@ static void virtio_gpu_cmd_get_display_info_cb(struct virtio_gpu_device *vgdev,
534 } 534 }
535 } 535 }
536 536
537 vgdev->display_info_pending = false;
537 spin_unlock(&vgdev->display_info_lock); 538 spin_unlock(&vgdev->display_info_lock);
538 wake_up(&vgdev->resp_wq); 539 wake_up(&vgdev->resp_wq);
539 540
@@ -558,6 +559,7 @@ int virtio_gpu_cmd_get_display_info(struct virtio_gpu_device *vgdev)
558 resp_buf); 559 resp_buf);
559 memset(cmd_p, 0, sizeof(*cmd_p)); 560 memset(cmd_p, 0, sizeof(*cmd_p));
560 561
562 vgdev->display_info_pending = true;
561 cmd_p->type = cpu_to_le32(VIRTIO_GPU_CMD_GET_DISPLAY_INFO); 563 cmd_p->type = cpu_to_le32(VIRTIO_GPU_CMD_GET_DISPLAY_INFO);
562 virtio_gpu_queue_ctrl_buffer(vgdev, vbuf); 564 virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
563 return 0; 565 return 0;