Re: [Intel-gfx] [PATCH v2 2/3] drm/i915: noop forcewake get/put when vgpu activated

2017-01-25 Thread Chris Wilson
On Wed, Jan 25, 2017 at 09:44:51PM +0800, Weinan Li wrote:
> Host maintian the hardware's forcewake state, guest don't need and also
> can't control it. Although vgpu_read/write bypass forcewake_get/put in MMIO
> read/write, but still have separate path called by
> "intel_uncore_forcewake_get/put" and
> "intel_uncore_forcewake_get/put__locked". Unnecessary MMIO access in guest
> waste much CPU cost. Since we full virtualize the MMIO, just noop the
> forcewake get/put.

For a virtualised GPU, the host maintains the forcewake state on the
real device. As we don't control forcewake ourselves, we can simply
set force_wake_get() and force_wake_put() to be no-ops. By setting the
vfuncs, we adjust both the manual control of forcewake and around the
mmio accessors (making our vgpu specific mmio routines redundant and
to be removed in the next patch).

> Signed-off-by: Weinan Li 
Reviewed-by: Chris Wilson 
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH v2 2/3] drm/i915: noop forcewake get/put when vgpu activated

2017-01-25 Thread Weinan Li
Host maintian the hardware's forcewake state, guest don't need and also
can't control it. Although vgpu_read/write bypass forcewake_get/put in MMIO
read/write, but still have separate path called by
"intel_uncore_forcewake_get/put" and
"intel_uncore_forcewake_get/put__locked". Unnecessary MMIO access in guest
waste much CPU cost. Since we full virtualize the MMIO, just noop the
forcewake get/put.

Signed-off-by: Weinan Li 
---
 drivers/gpu/drm/i915/intel_uncore.c | 13 +
 1 file changed, 13 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_uncore.c 
b/drivers/gpu/drm/i915/intel_uncore.c
index abe0888..9fad4de 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -133,6 +133,13 @@
 }
 
 static void
+vgpu_fw_domains_nop(struct drm_i915_private *dev_priv,
+   enum forcewake_domains fw_domains)
+{
+   /* Guest driver doesn't need to takes care forcewake. */
+}
+
+static void
 fw_domains_posting_read(struct drm_i915_private *dev_priv)
 {
struct intel_uncore_forcewake_domain *d;
@@ -1374,6 +1381,12 @@ static void intel_uncore_fw_domains_init(struct 
drm_i915_private *dev_priv)
fw_domain_init(dev_priv, FW_DOMAIN_ID_RENDER,
   FORCEWAKE, FORCEWAKE_ACK);
}
+   if (intel_vgpu_active(dev_priv)) {
+   dev_priv->uncore.funcs.force_wake_get =
+   vgpu_fw_domains_nop;
+   dev_priv->uncore.funcs.force_wake_put =
+   vgpu_fw_domains_nop;
+   }
 
/* All future platforms are expected to require complex power gating */
WARN_ON(dev_priv->uncore.fw_domains == 0);
-- 
1.9.1

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