[PATCH] drm/i915/gvt: support MI_SEMAPHORE_WAIT

Yan Zhao yan.y.zhao at intel.com
Mon Mar 25 06:15:14 UTC 2019


in linux 5.0, i915 driver now uses MI_SEMAPHORE_WAIT to sync requests.
GVT-g should add support for this command now

Signed-off-by: Yan Zhao <yan.y.zhao at intel.com>
---
 drivers/gpu/drm/i915/gvt/cmd_parser.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index a16e527e9f02..e98f0a0d3083 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -1538,7 +1538,30 @@ static int cmd_handler_mi_store_data_imm(struct parser_exec_state *s)
 
 static int cmd_handler_mi_semaphore_wait(struct parser_exec_state *s)
 {
-	return unexpected_cmd(s);
+	unsigned long gma, gma_high;
+	int ret = 0;
+	int cmd_len = cmd_length(s);
+	struct intel_vgpu *vgpu = s->vgpu;
+	int gma_len = sizeof(u32);
+
+	if (cmd_len != 4 && cmd_len != 5) {
+		gvt_vgpu_err("Illegal cmd length %d\n", cmd_len);
+		return -EINVAL;
+	}
+
+	/* ppgtt is always safe */
+	if (!(cmd_val(s, 0) & (1 << 22)))
+		return ret;
+
+	gma = cmd_val(s, 2) & GENMASK(31, 0);
+	if (cmd_len == 5) {
+		gma_high = cmd_val(s, 3) & GENMASK(31, 0);
+		gma = (gma_high << 32) | gma;
+		gma_len = sizeof(u64);
+	}
+	ret = cmd_address_audit(s, gma, gma_len, false);
+	return ret;
+
 }
 
 static int cmd_handler_mi_report_perf_count(struct parser_exec_state *s)
-- 
2.17.1



More information about the intel-gvt-dev mailing list