[Intel-gfx] [PATCH 03/12] drm/i915: Switch over to the LLC/eLLC hotspot avoidance hash mode for CCS

Ben Widawsky ben at bwidawsk.net
Fri Aug 25 04:55:54 UTC 2017


On 17-08-24 22:10:51, Ville Syrjälä wrote:
>From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
>Use the LLC/eLLC hotspot avoidance mode for CCS on LLC machines. This is
>reported to give better performance.
>

Not seeing in the diff how this only hits eLLC machines. Am I misreading when
this is needed.

>Testing has indicated that we don't need to enforce any massive 2 or 4
>MiB alignment for all compressed resources even though there are still
>plenty of stale comments in the spec suggesting that we do.
>
>We do need to make sure every hardware unit that deals with the
>compressed data uses the same hash mode.
>
>Cc: Ben Widawsky <ben at bwidawsk.net>
>Cc: Jason Ekstrand <jason at jlekstrand.net>
>Cc: Daniel Stone <daniels at collabora.com>
>Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>---
> drivers/gpu/drm/i915/i915_reg.h        |  8 +++++++-
> drivers/gpu/drm/i915/intel_engine_cs.c | 13 +++++++++++++
> drivers/gpu/drm/i915/intel_pm.c        | 27 +++++++++++++--------------
> 3 files changed, 33 insertions(+), 15 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
>index c59c590e45c4..aa354874c2c1 100644
>--- a/drivers/gpu/drm/i915/i915_reg.h
>+++ b/drivers/gpu/drm/i915/i915_reg.h
>@@ -6909,7 +6909,7 @@ enum {
> # define CHICKEN3_DGMG_DONE_FIX_DISABLE		(1 << 2)
>
> #define CHICKEN_PAR1_1		_MMIO(0x42080)
>-#define  SKL_RC_HASH_OUTSIDE	(1 << 15)
>+#define  SKL_DE_COMPRESSED_HASH_MODE	(1 << 15)
> #define  DPA_MASK_VBLANK_SRD	(1 << 15)
> #define  FORCE_ARB_IDLE_PLANES	(1 << 14)
> #define  SKL_EDP_PSR_FIX_RDWRAP	(1 << 3)
>@@ -6982,6 +6982,7 @@ enum {
> # define GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC	((1<<10) | (1<<26))
> # define GEN9_RHWO_OPTIMIZATION_DISABLE		(1<<14)
> #define COMMON_SLICE_CHICKEN2			_MMIO(0x7014)
>+# define GEN9_PBE_COMPRESSED_HASH_SELECTION	(1<<13)
> # define GEN9_DISABLE_GATHER_AT_SET_SHADER_COMMON_SLICE (1<<12)
> # define GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION (1<<8)
> # define GEN8_CSC2_SBE_VUE_CACHE_CONSERVATIVE	(1<<0)
>@@ -8071,6 +8072,7 @@ enum {
> #define   GEN8_SAMPLER_POWER_BYPASS_DIS	(1<<1)
>
> #define GEN9_HALF_SLICE_CHICKEN7	_MMIO(0xe194)
>+#define   GEN9_SAMPLER_HASH_COMPRESSED_READ_ADDR	(1<<8)
> #define   GEN9_ENABLE_YV12_BUGFIX	(1<<4)
> #define   GEN9_ENABLE_GPGPU_PREEMPTION	(1<<2)
>
>@@ -9371,4 +9373,8 @@ enum skl_power_gate {
> #define   GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_SKL  0x67F1427F /*    "        " */
> #define   GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_BXT  0x5FF101FF /*    "        " */
>
>+#define MMCD_MISC_CTRL		_MMIO(0x4ddc) /* skl+ */
>+#define  MMCD_PCLA		(1 << 31)
>+#define  MMCD_HOTSPOT_EN	(1 << 27)
>+
> #endif /* _I915_REG_H_ */
>diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
>index a6ac9d0a4156..61d9d79452c4 100644
>--- a/drivers/gpu/drm/i915/intel_engine_cs.c
>+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
>@@ -812,6 +812,19 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
> 		I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) |
> 			   ECOCHK_DIS_TLB);
>
>+	if (HAS_LLC(dev_priv)) {
>+		/* WaCompressedResourceSamplerPbeMediaNewHashMode:skl,kbl
>+		 *
>+		 * Must match Display Engine. See
>+		 * WaCompressedResourceDisplayNewHashMode.
>+		 */
>+		WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2,
>+				  GEN9_PBE_COMPRESSED_HASH_SELECTION);
>+		WA_SET_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN7,
>+				  GEN9_SAMPLER_HASH_COMPRESSED_READ_ADDR);
>+		WA_SET_BIT(MMCD_MISC_CTRL, MMCD_PCLA | MMCD_HOTSPOT_EN);
>+	}
>+
> 	/* WaClearFlowControlGpgpuContextSave:skl,bxt,kbl,glk,cfl */
> 	/* WaDisablePartialInstShootdown:skl,bxt,kbl,glk,cfl */
> 	WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN,
>diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
>index d5ff0b9f999f..45be01ce8e68 100644
>--- a/drivers/gpu/drm/i915/intel_pm.c
>+++ b/drivers/gpu/drm/i915/intel_pm.c
>@@ -58,24 +58,23 @@
>
> static void gen9_init_clock_gating(struct drm_i915_private *dev_priv)
> {
>+	if (HAS_LLC(dev_priv)) {
>+		/*
>+		 * WaCompressedResourceDisplayNewHashMode:skl,kbl
>+		 * Display WA#0390: skl,kbl
>+		 *
>+		 * Must match Sampler, Pixel Back End, and Media. See
>+		 * WaCompressedResourceSamplerPbeMediaNewHashMode.
>+		 */
>+		I915_WRITE(CHICKEN_PAR1_1,
>+			   I915_READ(CHICKEN_PAR1_1) |
>+			   SKL_DE_COMPRESSED_HASH_MODE);
>+	}
>+
> 	/* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,bxt,kbl,cfl */
> 	I915_WRITE(CHICKEN_PAR1_1,
> 		   I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP);
>
>-	/*
>-	 * Display WA#0390: skl,bxt,kbl,glk
>-	 *
>-	 * Must match Sampler, Pixel Back End, and Media
>-	 * (0xE194 bit 8, 0x7014 bit 13, 0x4DDC bits 27 and 31).
>-	 *
>-	 * Including bits outside the page in the hash would
>-	 * require 2 (or 4?) MiB alignment of resources. Just
>-	 * assume the defaul hashing mode which only uses bits
>-	 * within the page.
>-	 */
>-	I915_WRITE(CHICKEN_PAR1_1,
>-		   I915_READ(CHICKEN_PAR1_1) & ~SKL_RC_HASH_OUTSIDE);
>-
> 	I915_WRITE(GEN8_CONFIG0,
> 		   I915_READ(GEN8_CONFIG0) | GEN9_DEFAULT_FIXES);
>
>-- 
>2.13.0
>

-- 
Ben Widawsky, Intel Open Source Technology Center


More information about the Intel-gfx mailing list