From: Tina Zhang <tina.zhang@intel.com>
To: intel-gvt-dev@lists.freedesktop.org, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: Kechen Lu <kechen.lu@intel.com>,
kraxel@redhat.com, zhenyuw@linux.intel.com, zhiyuan.lv@intel.com,
zhi.a.wang@intel.com, kevin.tian@intel.com, hang.yuan@intel.com,
alex.williamson@redhat.com, yi.l.liu@intel.com,
Tina Zhang <tina.zhang@intel.com>
Subject: [PATCH v6 5/6] drm/i915/gvt: Deliver async primary plane page flip events at vblank
Date: Tue, 24 Sep 2019 14:41:42 +0800 [thread overview]
Message-ID: <20190924064143.9282-6-tina.zhang@intel.com> (raw)
In-Reply-To: <20190924064143.9282-1-tina.zhang@intel.com>
From: Kechen Lu <kechen.lu@intel.com>
Only sync primary plane page flip events are checked and delivered
as the display refresh events before, this patch tries to deliver async
primary page flip events bounded by vblanks.
To deliver correct async page flip, the new async flip bitmap is
introduced and in vblank emulation handler to check bitset.
Signed-off-by: Kechen Lu <kechen.lu@intel.com>
Signed-off-by: Tina Zhang <tina.zhang@intel.com>
---
drivers/gpu/drm/i915/gvt/cmd_parser.c | 6 ++++--
drivers/gpu/drm/i915/gvt/display.c | 10 ++++++++++
drivers/gpu/drm/i915/gvt/gvt.h | 2 ++
drivers/gpu/drm/i915/gvt/handlers.c | 5 +++--
4 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index e753b1e706e2..1abb05431177 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -1365,9 +1365,11 @@ static int gen8_update_plane_mmio_from_mi_display_flip(
if (info->plane == PLANE_PRIMARY)
vgpu_vreg_t(vgpu, PIPE_FLIPCOUNT_G4X(info->pipe))++;
- if (info->async_flip)
+ if (info->async_flip) {
intel_vgpu_trigger_virtual_event(vgpu, info->event);
- else
+ set_bit(info->plane,
+ vgpu->display.async_flip_event[info->pipe]);
+ } else
set_bit(info->event, vgpu->irq.flip_done_event[info->pipe]);
return 0;
diff --git a/drivers/gpu/drm/i915/gvt/display.c b/drivers/gpu/drm/i915/gvt/display.c
index 9f2c2cd10369..9acde0bdd5f4 100644
--- a/drivers/gpu/drm/i915/gvt/display.c
+++ b/drivers/gpu/drm/i915/gvt/display.c
@@ -419,6 +419,16 @@ static void emulate_vblank_on_pipe(struct intel_vgpu *vgpu, int pipe)
intel_vgpu_trigger_virtual_event(vgpu, event);
}
+ for_each_set_bit(event, vgpu->display.async_flip_event[pipe],
+ I915_MAX_PLANES) {
+ clear_bit(event, vgpu->display.async_flip_event[pipe]);
+ if (!pipe_is_enabled(vgpu, pipe))
+ continue;
+
+ if (event == PLANE_PRIMARY)
+ eventfd_signal_val |= DISPLAY_PRI_REFRESH_EVENT_VAL;
+ }
+
if (eventfd_signal_val)
vgpu->no_pageflip_count = 0;
else if (!eventfd_signal_val && vgpu->no_pageflip_count > PAGEFLIP_DELAY_THR)
diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h
index cc39b449b061..73769a87b407 100644
--- a/drivers/gpu/drm/i915/gvt/gvt.h
+++ b/drivers/gpu/drm/i915/gvt/gvt.h
@@ -128,6 +128,8 @@ struct intel_vgpu_display {
struct intel_vgpu_i2c_edid i2c_edid;
struct intel_vgpu_port ports[I915_MAX_PORTS];
struct intel_vgpu_sbi sbi;
+ DECLARE_BITMAP(async_flip_event[I915_MAX_PIPES],
+ I915_MAX_PLANES);
};
struct vgpu_sched_ctl {
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index 45a9124e53b6..e5a022c2e7bb 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -760,9 +760,10 @@ static int pri_surf_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
vgpu_vreg_t(vgpu, PIPE_FLIPCOUNT_G4X(pipe))++;
- if (vgpu_vreg_t(vgpu, DSPCNTR(pipe)) & PLANE_CTL_ASYNC_FLIP)
+ if (vgpu_vreg_t(vgpu, DSPCNTR(pipe)) & PLANE_CTL_ASYNC_FLIP) {
intel_vgpu_trigger_virtual_event(vgpu, event);
- else
+ set_bit(PLANE_PRIMARY, vgpu->display.async_flip_event[pipe]);
+ } else
set_bit(event, vgpu->irq.flip_done_event[pipe]);
return 0;
--
2.17.1
next prev parent reply other threads:[~2019-09-24 6:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-24 6:41 [PATCH v6 0/6] Deliver vGPU display refresh event to userspace Tina Zhang
2019-09-24 6:41 ` [PATCH v6 1/6] vfio: Define device specific irq type capability Tina Zhang
2019-09-24 6:41 ` [PATCH v6 2/6] vfio: Introduce vGPU display irq type Tina Zhang
2019-09-24 20:35 ` Alex Williamson
2019-09-24 6:41 ` [PATCH v6 3/6] drm/i915/gvt: Register vGPU display event irq Tina Zhang
2019-09-24 6:41 ` [PATCH v6 4/6] drm/i915/gvt: Deliver vGPU refresh event to userspace Tina Zhang
2019-09-24 9:02 ` kbuild test robot
2019-09-24 20:10 ` Alex Williamson
2019-09-24 6:41 ` Tina Zhang [this message]
2019-09-24 20:14 ` [PATCH v6 5/6] drm/i915/gvt: Deliver async primary plane page flip events at vblank Alex Williamson
2019-09-24 6:41 ` [PATCH v6 6/6] drm/i915/gvt: Add cursor plane reg update trap emulation handler Tina Zhang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190924064143.9282-6-tina.zhang@intel.com \
--to=tina.zhang@intel.com \
--cc=alex.williamson@redhat.com \
--cc=hang.yuan@intel.com \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=kechen.lu@intel.com \
--cc=kevin.tian@intel.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=yi.l.liu@intel.com \
--cc=zhenyuw@linux.intel.com \
--cc=zhi.a.wang@intel.com \
--cc=zhiyuan.lv@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox