[PATCH 2/2] drm/i915: ignore forcewake get/put when using vgpu

Tian, Kevin kevin.tian at intel.com
Mon Jan 23 01:42:48 UTC 2017


does it make sense to make below configurable?

> -----Original Message-----
> From: intel-gvt-dev [mailto:intel-gvt-dev-bounces at lists.freedesktop.org] On Behalf Of
> Weinan Li
> Sent: Monday, January 23, 2017 9:25 AM
> To: intel-gvt-dev at lists.freedesktop.org
> Cc: Li, Weinan Z
> Subject: [PATCH 2/2] drm/i915: ignore forcewake get/put when using vgpu
> 
> Host maintian the hardware's forcewake state, guest don't need and also
> can't control it, just ignore. Remove vgpu_read/write.
> 
> Signed-off-by: Weinan Li <weinan.z.li at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_uncore.c | 78 ++++++++++---------------------------
>  1 file changed, 20 insertions(+), 58 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index abe0888..08e1b5f 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -133,6 +133,20 @@
>  }
> 
>  static void
> +vgpu_fw_domains_get(struct drm_i915_private *dev_priv,
> +		    enum forcewake_domains fw_domains)
> +{
> +	/* Guest driver doesn't need to takes care forcewake. */;
> +}
> +
> +static void
> +vgpu_fw_domains_put(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;
> @@ -1045,34 +1059,6 @@ static inline void __force_wake_auto(struct drm_i915_private
> *dev_priv,
>  #undef GEN6_READ_FOOTER
>  #undef GEN6_READ_HEADER
> 
> -#define VGPU_READ_HEADER(x) \
> -	unsigned long irqflags; \
> -	u##x val = 0; \
> -	assert_rpm_device_not_suspended(dev_priv); \
> -	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags)
> -
> -#define VGPU_READ_FOOTER \
> -	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); \
> -	trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
> -	return val
> -
> -#define __vgpu_read(x) \
> -static u##x \
> -vgpu_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) { \
> -	VGPU_READ_HEADER(x); \
> -	val = __raw_i915_read##x(dev_priv, reg); \
> -	VGPU_READ_FOOTER; \
> -}
> -
> -__vgpu_read(8)
> -__vgpu_read(16)
> -__vgpu_read(32)
> -__vgpu_read(64)
> -
> -#undef __vgpu_read
> -#undef VGPU_READ_FOOTER
> -#undef VGPU_READ_HEADER
> -
>  #define GEN2_WRITE_HEADER \
>  	trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
>  	assert_rpm_wakelock_held(dev_priv); \
> @@ -1195,31 +1181,6 @@ static inline void __force_wake_auto(struct drm_i915_private
> *dev_priv,
>  #undef GEN6_WRITE_FOOTER
>  #undef GEN6_WRITE_HEADER
> 
> -#define VGPU_WRITE_HEADER \
> -	unsigned long irqflags; \
> -	trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
> -	assert_rpm_device_not_suspended(dev_priv); \
> -	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags)
> -
> -#define VGPU_WRITE_FOOTER \
> -	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags)
> -
> -#define __vgpu_write(x) \
> -static void vgpu_write##x(struct drm_i915_private *dev_priv, \
> -			  i915_reg_t reg, u##x val, bool trace) { \
> -	VGPU_WRITE_HEADER; \
> -	__raw_i915_write##x(dev_priv, reg, val); \
> -	VGPU_WRITE_FOOTER; \
> -}
> -
> -__vgpu_write(8)
> -__vgpu_write(16)
> -__vgpu_write(32)
> -
> -#undef __vgpu_write
> -#undef VGPU_WRITE_FOOTER
> -#undef VGPU_WRITE_HEADER
> -
>  #define ASSIGN_WRITE_MMIO_VFUNCS(x) \
>  do { \
>  	dev_priv->uncore.funcs.mmio_writeb = x##_write8; \
> @@ -1375,6 +1336,12 @@ static void intel_uncore_fw_domains_init(struct
> drm_i915_private *dev_priv)
>  			       FORCEWAKE, FORCEWAKE_ACK);
>  	}
> 
> +	if (intel_vgpu_active(dev_priv)) {
> +		dev_priv->uncore.funcs.force_wake_get =
> +			vgpu_fw_domains_get;
> +		dev_priv->uncore.funcs.force_wake_put =
> +			vgpu_fw_domains_put;
> +	}
>  	/* All future platforms are expected to require complex power gating */
>  	WARN_ON(dev_priv->uncore.fw_domains == 0);
>  }
> @@ -1449,11 +1416,6 @@ void intel_uncore_init(struct drm_i915_private *dev_priv)
>  	if (INTEL_GEN(dev_priv) >= 8)
>  		intel_shadow_table_check();
> 
> -	if (intel_vgpu_active(dev_priv)) {
> -		ASSIGN_WRITE_MMIO_VFUNCS(vgpu);
> -		ASSIGN_READ_MMIO_VFUNCS(vgpu);
> -	}
> -
>  	i915_check_and_clear_faults(dev_priv);
>  }
>  #undef ASSIGN_WRITE_MMIO_VFUNCS
> --
> 1.9.1
> 
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev


More information about the intel-gvt-dev mailing list