drm/virtio: Simplify virtio_gpu_primary_plane_update workflow.
authorGerd Hoffmann <kraxel@redhat.com>
Wed, 23 Oct 2019 06:25:38 +0000 (08:25 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 20 Nov 2019 08:22:27 +0000 (09:22 +0100)
Return early for the no framebuffer (or disabled output) case.
Results in a simpler code flow for the remaining cases.
No functional change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20191023062539.11728-3-kraxel@redhat.com
drivers/gpu/drm/virtio/virtgpu_plane.c

index 390524143139b6999a05f3413726780558114e2c..0b5a760bc293706e8aec01d5a571e0c79f4b8c49 100644 (file)
@@ -110,7 +110,6 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane,
        struct virtio_gpu_output *output = NULL;
        struct virtio_gpu_framebuffer *vgfb;
        struct virtio_gpu_object *bo;
-       uint32_t handle;
 
        if (plane->state->crtc)
                output = drm_crtc_to_virtio_gpu_output(plane->state->crtc);
@@ -119,47 +118,52 @@ static void virtio_gpu_primary_plane_update(struct drm_plane *plane,
        if (WARN_ON(!output))
                return;
 
-       if (plane->state->fb && output->enabled) {
-               vgfb = to_virtio_gpu_framebuffer(plane->state->fb);
-               bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]);
-               handle = bo->hw_res_handle;
-               if (bo->dumb) {
-                       struct virtio_gpu_object_array *objs;
-
-                       objs = virtio_gpu_array_alloc(1);
-                       if (!objs)
-                               return;
-                       virtio_gpu_array_add_obj(objs, vgfb->base.obj[0]);
-                       virtio_gpu_cmd_transfer_to_host_2d
-                               (vgdev, 0,
-                                plane->state->src_w >> 16,
-                                plane->state->src_h >> 16,
-                                plane->state->src_x >> 16,
-                                plane->state->src_y >> 16,
-                                objs, NULL);
-               }
-       } else {
-               handle = 0;
+       if (!plane->state->fb || !output->enabled) {
+               DRM_DEBUG("nofb\n");
+               virtio_gpu_cmd_set_scanout(vgdev, output->index, 0,
+                                          plane->state->src_w >> 16,
+                                          plane->state->src_h >> 16,
+                                          0, 0);
+               return;
+       }
+
+       vgfb = to_virtio_gpu_framebuffer(plane->state->fb);
+       bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]);
+       if (bo->dumb) {
+               struct virtio_gpu_object_array *objs;
+
+               objs = virtio_gpu_array_alloc(1);
+               if (!objs)
+                       return;
+               virtio_gpu_array_add_obj(objs, vgfb->base.obj[0]);
+               virtio_gpu_cmd_transfer_to_host_2d
+                       (vgdev, 0,
+                        plane->state->src_w >> 16,
+                        plane->state->src_h >> 16,
+                        plane->state->src_x >> 16,
+                        plane->state->src_y >> 16,
+                        objs, NULL);
        }
 
-       DRM_DEBUG("handle 0x%x, crtc %dx%d+%d+%d, src %dx%d+%d+%d\n", handle,
+       DRM_DEBUG("handle 0x%x, crtc %dx%d+%d+%d, src %dx%d+%d+%d\n",
+                 bo->hw_res_handle,
                  plane->state->crtc_w, plane->state->crtc_h,
                  plane->state->crtc_x, plane->state->crtc_y,
                  plane->state->src_w >> 16,
                  plane->state->src_h >> 16,
                  plane->state->src_x >> 16,
                  plane->state->src_y >> 16);
-       virtio_gpu_cmd_set_scanout(vgdev, output->index, handle,
+       virtio_gpu_cmd_set_scanout(vgdev, output->index,
+                                  bo->hw_res_handle,
                                   plane->state->src_w >> 16,
                                   plane->state->src_h >> 16,
                                   plane->state->src_x >> 16,
                                   plane->state->src_y >> 16);
-       if (handle)
-               virtio_gpu_cmd_resource_flush(vgdev, handle,
-                                             plane->state->src_x >> 16,
-                                             plane->state->src_y >> 16,
-                                             plane->state->src_w >> 16,
-                                             plane->state->src_h >> 16);
+       virtio_gpu_cmd_resource_flush(vgdev, bo->hw_res_handle,
+                                     plane->state->src_x >> 16,
+                                     plane->state->src_y >> 16,
+                                     plane->state->src_w >> 16,
+                                     plane->state->src_h >> 16);
 }
 
 static int virtio_gpu_cursor_prepare_fb(struct drm_plane *plane,