drm/i915/gvt: Enable synchronous flip on handling MI_DISPLAY_FLIP
authorColin Xu <colin.xu@intel.com>
Mon, 25 Mar 2019 01:52:16 +0000 (09:52 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Fri, 29 Mar 2019 03:09:57 +0000 (11:09 +0800)
According to Intel GFX PRM on 01.org, the MI_DISPLAY_FLIP command can
either request display plane flip synchronously or asynchronously.
In synchronous flip, flip will be hold until next vsync, which
is not implemented yet in GVT. In asynchronous flip, flip will happen
immediately, which is current implementation.

The patch enables the sync flip on handling MI_DISPLAY_FLIP,
and increment flip count correctly by only increment on primary plane.

v2:
Use bit operation definition for flip mode. (zhenyu)

Reviewed-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Signed-off-by: Colin Xu <colin.xu@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/cmd_parser.c

index 35b4ec3f7618b887e5661d0d652cca99b6ed02c6..c53dbdbfeaa77c05321a48b814bbb373719d2860 100644 (file)
@@ -1321,8 +1321,14 @@ static int gen8_update_plane_mmio_from_mi_display_flip(
                              info->tile_val << 10);
        }
 
-       vgpu_vreg_t(vgpu, PIPE_FRMCOUNT_G4X(info->pipe))++;
-       intel_vgpu_trigger_virtual_event(vgpu, info->event);
+       if (info->plane == PLANE_PRIMARY)
+               vgpu_vreg_t(vgpu, PIPE_FLIPCOUNT_G4X(info->pipe))++;
+
+       if (info->async_flip)
+               intel_vgpu_trigger_virtual_event(vgpu, info->event);
+       else
+               set_bit(info->event, vgpu->irq.flip_done_event[info->pipe]);
+
        return 0;
 }