All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiaolin Zhang <xiaolin.zhang@intel.com>
To: intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Cc: zhenyu.z.wang@intel.com, hang.yuan@intel.com,
	joonas.lahtinen@intel.com, fei.jiang@intel.com,
	zhiyuan.lv@intel.com
Subject: [RFC 03/10] drm/i915/gvt: context submission pvmmio optimization
Date: Thu, 27 Sep 2018 12:37:48 -0400	[thread overview]
Message-ID: <1538066275-52932-4-git-send-email-xiaolin.zhang@intel.com> (raw)
In-Reply-To: <1538066275-52932-1-git-send-email-xiaolin.zhang@intel.com>

It is performance optimization to reduce mmio trap numbers from 4 to
1 durning ELSP porting writing (context submission).

When context subission, to cache elsp_data[4] values in
the shared page, the last elsp_data[0] port writing will be trapped
to gvt for real context submission.

Use PVMMIO_ELSP_SUBMIT to control this level of pvmmio optimization.

Signed-off-by: Xiaolin Zhang <xiaolin.zhang@intel.com>
---
 drivers/gpu/drm/i915/i915_params.h |  2 +-
 drivers/gpu/drm/i915/intel_lrc.c   | 37 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 0f6a38b..6c81c87 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -69,7 +69,7 @@
 	param(bool, enable_dp_mst, true) \
 	param(bool, enable_dpcd_backlight, false) \
 	param(bool, enable_gvt, false) \
-	param(int, enable_pvmmio, 0)
+	param(int, enable_pvmmio, PVMMIO_ELSP_SUBMIT)
 
 #define MEMBER(T, member, ...) T member;
 struct i915_params {
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 4b28225..cdc713c 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -451,7 +451,12 @@ static void execlists_submit_ports(struct intel_engine_cs *engine)
 {
 	struct intel_engine_execlists *execlists = &engine->execlists;
 	struct execlist_port *port = execlists->port;
+	u32 __iomem *elsp =
+		engine->i915->regs + i915_mmio_reg_offset(RING_ELSP(engine));
+	u32 *elsp_data;
 	unsigned int n;
+	u32 descs[4];
+	int i = 0;
 
 	/*
 	 * We can skip acquiring intel_runtime_pm_get() here as it was taken
@@ -494,8 +499,24 @@ static void execlists_submit_ports(struct intel_engine_cs *engine)
 			GEM_BUG_ON(!n);
 			desc = 0;
 		}
+		if (PVMMIO_LEVEL_ENABLE(engine->i915, PVMMIO_ELSP_SUBMIT)) {
+			GEM_BUG_ON(i >= 4);
+			descs[i] = upper_32_bits(desc);
+			descs[i + 1] = lower_32_bits(desc);
+			i += 2;
+		} else {
+			write_desc(execlists, desc, n);
+		}
+	}
 
-		write_desc(execlists, desc, n);
+	if (PVMMIO_LEVEL_ENABLE(engine->i915, PVMMIO_ELSP_SUBMIT)) {
+		spin_lock(&engine->i915->shared_page_lock);
+		elsp_data = engine->i915->shared_page->elsp_data;
+		*elsp_data = descs[0];
+		*(elsp_data + 1) = descs[1];
+		*(elsp_data + 2) = descs[2];
+		writel(descs[3], elsp);
+		spin_unlock(&engine->i915->shared_page_lock);
 	}
 
 	/* we need to manually load the submit queue */
@@ -538,11 +559,25 @@ static void inject_preempt_context(struct intel_engine_cs *engine)
 	struct intel_engine_execlists *execlists = &engine->execlists;
 	struct intel_context *ce =
 		to_intel_context(engine->i915->preempt_context, engine);
+	u32 __iomem *elsp =
+		engine->i915->regs + i915_mmio_reg_offset(RING_ELSP(engine));
+	u32 *elsp_data;
 	unsigned int n;
 
 	GEM_BUG_ON(execlists->preempt_complete_status !=
 		   upper_32_bits(ce->lrc_desc));
 
+	if (PVMMIO_LEVEL_ENABLE(engine->i915, PVMMIO_ELSP_SUBMIT)) {
+		spin_lock(&engine->i915->shared_page_lock);
+		elsp_data = engine->i915->shared_page->elsp_data;
+		*elsp_data = 0;
+		*(elsp_data + 1) = 0;
+		*(elsp_data + 2) = upper_32_bits(ce->lrc_desc);
+		writel(lower_32_bits(ce->lrc_desc), elsp);
+		spin_unlock(&engine->i915->shared_page_lock);
+		return;
+	}
+
 	/*
 	 * Switch to our empty preempt context so
 	 * the state of the GPU is known (idle).
-- 
1.8.3.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2018-09-27 16:37 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-27 16:37 [RFC 00/10] i915 pvmmio to improve GVTg performance Xiaolin Zhang
2018-09-27  7:20 ` ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
2018-09-27  7:24 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-09-27  7:43 ` ✓ Fi.CI.BAT: success " Patchwork
2018-09-27 10:25 ` ✓ Fi.CI.IGT: " Patchwork
2018-09-27 11:07 ` [RFC 00/10] " Joonas Lahtinen
2018-09-28  6:11   ` Zhang, Xiaolin
2018-09-27 16:37 ` [RFC 01/10] drm/i915/gvt: add module parameter enable_pvmmio Xiaolin Zhang
2018-09-27  7:16   ` Chris Wilson
2018-09-27 11:03   ` Joonas Lahtinen
2018-09-28  6:09     ` Zhang, Xiaolin
2018-10-09  2:26       ` Zhenyu Wang
2018-10-10  6:48         ` Zhang, Xiaolin
2018-09-27 16:37 ` [RFC 02/10] drm/i915/gvt: get ready of memory for pvmmio Xiaolin Zhang
2018-09-27  7:17   ` Chris Wilson
2018-09-28  7:31     ` Zhang, Xiaolin
2018-10-09  2:31   ` Zhenyu Wang
2018-09-27 16:37 ` Xiaolin Zhang [this message]
2018-09-27  7:19   ` [RFC 03/10] drm/i915/gvt: context submission pvmmio optimization Chris Wilson
2018-09-28  5:31     ` Zhang, Xiaolin
2018-09-27 11:13   ` Joonas Lahtinen
2018-09-27 16:37 ` [RFC 04/10] drm/i915/gvt: master irq " Xiaolin Zhang
2018-09-27 16:37 ` [RFC 05/10] drm/i915/gvt: ppgtt update " Xiaolin Zhang
2018-09-27 16:37 ` [RFC 06/10] drm/i915/gvt: GVTg handle enable_pvmmio PVINFO register Xiaolin Zhang
2018-09-27 16:37 ` [RFC 07/10] drm/i915/gvt: GVTg read_shared_page implementation Xiaolin Zhang
2018-09-27 16:37 ` [RFC 08/10] drm/i915/gvt: GVTg support context submission pvmmio optimization Xiaolin Zhang
2018-09-27 16:37 ` [RFC 09/10] drm/i915/gvt: GVTg support master irq " Xiaolin Zhang
2018-09-27 16:37 ` [RFC 10/10] drm/i915/gvt: GVTg support ppgtt " Xiaolin 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=1538066275-52932-4-git-send-email-xiaolin.zhang@intel.com \
    --to=xiaolin.zhang@intel.com \
    --cc=fei.jiang@intel.com \
    --cc=hang.yuan@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=joonas.lahtinen@intel.com \
    --cc=zhenyu.z.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.