clear-pkgs-linux-iot-lts2018/0602-drm-i915-gvt-add-pvmmi...

62 lines
2.1 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Fei Jiang <fei.jiang@intel.com>
Date: Mon, 26 Feb 2018 20:07:34 +0800
Subject: [PATCH] drm/i915/gvt: add pvmmio support in preempt context
submission
This patch added the pvmmio support in preemption context submission for
gvt-g guest.
And because GVT-g doesn't support preemption in guests, this patch also
disabled preempttion in guest.
Signed-off-by: Fei Jiang <fei.jiang@intel.com>
---
drivers/gpu/drm/i915/intel_lrc.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 8c1eb71f5305..bf537224e505 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -186,7 +186,8 @@ static inline bool need_preempt(const struct intel_engine_cs *engine,
const struct i915_request *last,
int prio)
{
- return (intel_engine_has_preemption(engine) &&
+ return (!intel_vgpu_active(engine->i915) &&
+ intel_engine_has_preemption(engine) &&
__execlists_need_preempt(prio, rq_prio(last)) &&
!i915_request_completed(last));
}
@@ -588,10 +589,24 @@ static void inject_preempt_context(struct intel_engine_cs *engine)
* the state of the GPU is known (idle).
*/
GEM_TRACE("%s\n", engine->name);
- for (n = execlists_num_ports(execlists); --n; )
- write_desc(execlists, 0, n);
- write_desc(execlists, ce->lrc_desc, n);
+ if (intel_vgpu_active(engine->i915) &&
+ PVMMIO_LEVEL(engine->i915, PVMMIO_ELSP_SUBMIT)) {
+ u32 __iomem *elsp_data = engine->i915->shared_page->elsp_data;
+
+ spin_lock(&engine->i915->shared_page_lock);
+ writel(0, elsp_data);
+ writel(0, elsp_data + 1);
+ writel(upper_32_bits(ce->lrc_desc), elsp_data + 2);
+ writel(lower_32_bits(ce->lrc_desc), execlists->submit_reg);
+ spin_unlock(&engine->i915->shared_page_lock);
+
+ } else {
+ for (n = execlists_num_ports(execlists); --n; )
+ write_desc(execlists, 0, n);
+
+ write_desc(execlists, ce->lrc_desc, n);
+ }
/* we need to manually load the submit queue */
if (execlists->ctrl_reg)
--
https://clearlinux.org