[Intel-gfx] [PATCH] drm/i915: Make wa list per-gt

Yokoyama, Caz caz.yokoyama at intel.com
Mon Sep 20 19:06:26 UTC 2021


On Fri, 2021-09-17 at 10:08 -0700, Matt Roper wrote:
> From: Venkata Sandeep Dhanalakota <venkata.s.dhanalakota at intel.com>
> 
> Support for multiple GT's within a single i915 device will be
> arriving
> soon.  Since each GT may have its own fusing and require different
> workarounds, we need to make the GT workaround functions and
> multicast
> steering setup per-gt.
> 
> Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Signed-off-by: Venkata Sandeep Dhanalakota <
> venkata.s.dhanalakota at intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
>  drivers/gpu/drm/i915/gt/intel_gt.c            |   3 +
>  drivers/gpu/drm/i915/gt/intel_gt_types.h      |   2 +
>  drivers/gpu/drm/i915/gt/intel_workarounds.c   | 143 +++++++++-------
> --
>  drivers/gpu/drm/i915/gt/intel_workarounds.h   |   2 +-
>  .../gpu/drm/i915/gt/selftest_workarounds.c    |   2 +-
>  drivers/gpu/drm/i915/i915_drv.c               |   2 -
>  drivers/gpu/drm/i915/i915_drv.h               |   2 -
>  drivers/gpu/drm/i915/i915_gem.c               |   2 -
>  8 files changed, 81 insertions(+), 77 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c
> b/drivers/gpu/drm/i915/gt/intel_gt.c
> index 55e87aff51d2..449ff6e83543 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt.c
> @@ -660,6 +660,8 @@ int intel_gt_init(struct intel_gt *gt)
>  	if (err)
>  		return err;
>  
> +	intel_gt_init_workarounds(gt);
> +
>  	/*
>  	 * This is just a security blanket to placate dragons.
>  	 * On some systems, we very sporadically observe that the first
> TLBs
> @@ -767,6 +769,7 @@ void intel_gt_driver_release(struct intel_gt *gt)
>  	if (vm) /* FIXME being called twice on error paths :( */
>  		i915_vm_put(vm);
>  
> +	intel_wa_list_free(&gt->wa_list);
>  	intel_gt_pm_fini(gt);
>  	intel_gt_fini_scratch(gt);
>  	intel_gt_fini_buffer_pool(gt);
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h
> b/drivers/gpu/drm/i915/gt/intel_gt_types.h
> index 6fdcde64c180..ce127cae9e49 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h
> @@ -72,6 +72,8 @@ struct intel_gt {
>  
>  	struct intel_uc uc;
>  
> +	struct i915_wa_list wa_list;
> +
>  	struct intel_gt_timelines {
>  		spinlock_t lock; /* protects active_list */
>  		struct list_head active_list;
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> index c314d4917b6b..1f0a54b383d9 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> @@ -804,7 +804,7 @@ int intel_engine_emit_ctx_wa(struct i915_request
> *rq)
>  }
>  
>  static void
> -gen4_gt_workarounds_init(struct drm_i915_private *i915,
> +gen4_gt_workarounds_init(struct intel_gt *gt,
>  			 struct i915_wa_list *wal)
>  {
>  	/* WaDisable_RenderCache_OperationalFlush:gen4,ilk */
> @@ -812,29 +812,29 @@ gen4_gt_workarounds_init(struct
> drm_i915_private *i915,
>  }
>  
>  static void
> -g4x_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +g4x_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen4_gt_workarounds_init(i915, wal);
> +	gen4_gt_workarounds_init(gt, wal);
>  
>  	/* WaDisableRenderCachePipelinedFlush:g4x,ilk */
>  	wa_masked_en(wal, CACHE_MODE_0,
> CM0_PIPELINED_RENDER_FLUSH_DISABLE);
>  }
>  
>  static void
> -ilk_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +ilk_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	g4x_gt_workarounds_init(i915, wal);
> +	g4x_gt_workarounds_init(gt, wal);
>  
>  	wa_masked_en(wal, _3D_CHICKEN2,
> _3D_CHICKEN2_WM_READ_PIPELINED);
>  }
>  
>  static void
> -snb_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +snb_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
>  }
>  
>  static void
> -ivb_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +ivb_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
>  	/* Apply the WaDisableRHWOOptimizationForRenderHang:ivb
> workaround. */
>  	wa_masked_dis(wal,
> @@ -850,7 +850,7 @@ ivb_gt_workarounds_init(struct drm_i915_private
> *i915, struct i915_wa_list *wal)
>  }
>  
>  static void
> -vlv_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +vlv_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
>  	/* WaForceL3Serialization:vlv */
>  	wa_write_clr(wal, GEN7_L3SQCREG4,
> L3SQ_URB_READ_CAM_MATCH_DISABLE);
> @@ -863,7 +863,7 @@ vlv_gt_workarounds_init(struct drm_i915_private
> *i915, struct i915_wa_list *wal)
>  }
>  
>  static void
> -hsw_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +hsw_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
>  	/* L3 caching of data atomics doesn't work -- disable it. */
>  	wa_write(wal, HSW_SCRATCH1,
> HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE);
> @@ -878,15 +878,15 @@ hsw_gt_workarounds_init(struct drm_i915_private
> *i915, struct i915_wa_list *wal)
>  }
>  
>  static void
> -gen9_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +gen9_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
>  	/* WaDisableKillLogic:bxt,skl,kbl */
> -	if (!IS_COFFEELAKE(i915) && !IS_COMETLAKE(i915))
> +	if (!IS_COFFEELAKE(gt->i915) && !IS_COMETLAKE(gt->i915))
>  		wa_write_or(wal,
>  			    GAM_ECOCHK,
>  			    ECOCHK_DIS_TLB);
>  
> -	if (HAS_LLC(i915)) {
> +	if (HAS_LLC(gt->i915)) {
>  		/*
> WaCompressedResourceSamplerPbeMediaNewHashMode:skl,kbl
>  		 *
>  		 * Must match Display Engine. See
> @@ -904,9 +904,9 @@ gen9_gt_workarounds_init(struct drm_i915_private
> *i915, struct i915_wa_list *wal
>  }
>  
>  static void
> -skl_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +skl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen9_gt_workarounds_init(i915, wal);
> +	gen9_gt_workarounds_init(gt, wal);
>  
>  	/* WaDisableGafsUnitClkGating:skl */
>  	wa_write_or(wal,
> @@ -914,19 +914,19 @@ skl_gt_workarounds_init(struct drm_i915_private
> *i915, struct i915_wa_list *wal)
>  		    GEN8_EU_GAUNIT_CLOCK_GATE_DISABLE);
>  
>  	/* WaInPlaceDecompressionHang:skl */
> -	if (IS_SKL_GT_STEP(i915, STEP_A0, STEP_H0))
> +	if (IS_SKL_GT_STEP(gt->i915, STEP_A0, STEP_H0))
>  		wa_write_or(wal,
>  			    GEN9_GAMT_ECO_REG_RW_IA,
>  			    GAMT_ECO_ENABLE_IN_PLACE_DECOMPRESS);
>  }
>  
>  static void
> -kbl_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +kbl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen9_gt_workarounds_init(i915, wal);
> +	gen9_gt_workarounds_init(gt, wal);
>  
>  	/* WaDisableDynamicCreditSharing:kbl */
> -	if (IS_KBL_GT_STEP(i915, 0, STEP_C0))
> +	if (IS_KBL_GT_STEP(gt->i915, 0, STEP_C0))
>  		wa_write_or(wal,
>  			    GAMT_CHKN_BIT_REG,
>  			    GAMT_CHKN_DISABLE_DYNAMIC_CREDIT_SHARING);
> @@ -943,15 +943,15 @@ kbl_gt_workarounds_init(struct drm_i915_private
> *i915, struct i915_wa_list *wal)
>  }
>  
>  static void
> -glk_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +glk_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen9_gt_workarounds_init(i915, wal);
> +	gen9_gt_workarounds_init(gt, wal);
>  }
>  
>  static void
> -cfl_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +cfl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen9_gt_workarounds_init(i915, wal);
> +	gen9_gt_workarounds_init(gt, wal);
>  
>  	/* WaDisableGafsUnitClkGating:cfl */
>  	wa_write_or(wal,
> @@ -976,21 +976,21 @@ static void __set_mcr_steering(struct
> i915_wa_list *wal,
>  	wa_write_clr_set(wal, steering_reg, mcr_mask, mcr);
>  }
>  
> -static void __add_mcr_wa(struct drm_i915_private *i915, struct
> i915_wa_list *wal,
> +static void __add_mcr_wa(struct intel_gt *gt, struct i915_wa_list
> *wal,
>  			 unsigned int slice, unsigned int subslice)
>  {
> -	drm_dbg(&i915->drm, "MCR slice=0x%x, subslice=0x%x\n", slice,
> subslice);
> +	drm_dbg(&gt->i915->drm, "MCR slice=0x%x, subslice=0x%x\n",
> slice, subslice);
>  
>  	__set_mcr_steering(wal, GEN8_MCR_SELECTOR, slice, subslice);
>  }
>  
>  static void
> -icl_wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list
> *wal)
> +icl_wa_init_mcr(struct intel_gt *gt, struct i915_wa_list *wal)
>  {
> -	const struct sseu_dev_info *sseu = &i915->gt.info.sseu;
> +	const struct sseu_dev_info *sseu = &gt->info.sseu;
>  	unsigned int slice, subslice;
>  
> -	GEM_BUG_ON(GRAPHICS_VER(i915) < 11);
> +	GEM_BUG_ON(GRAPHICS_VER(gt->i915) < 11);
>  	GEM_BUG_ON(hweight8(sseu->slice_mask) > 1);
>  	slice = 0;
>  
> @@ -1010,16 +1010,15 @@ icl_wa_init_mcr(struct drm_i915_private
> *i915, struct i915_wa_list *wal)
>  	 * then we can just rely on the default steering and won't need
> to
>  	 * worry about explicitly re-steering L3BANK reads later.
>  	 */
> -	if (i915->gt.info.l3bank_mask & BIT(subslice))
> -		i915->gt.steering_table[L3BANK] = NULL;
> +	if (gt->info.l3bank_mask & BIT(subslice))
> +		gt->steering_table[L3BANK] = NULL;
>  
> -	__add_mcr_wa(i915, wal, slice, subslice);
> +	__add_mcr_wa(gt, wal, slice, subslice);
>  }
>  
>  static void
>  xehp_init_mcr(struct intel_gt *gt, struct i915_wa_list *wal)
>  {
> -	struct drm_i915_private *i915 = gt->i915;
>  	const struct sseu_dev_info *sseu = &gt->info.sseu;
>  	unsigned long slice, subslice = 0, slice_mask = 0;
>  	u64 dss_mask = 0;
> @@ -1083,7 +1082,7 @@ xehp_init_mcr(struct intel_gt *gt, struct
> i915_wa_list *wal)
>  	WARN_ON(subslice > GEN_DSS_PER_GSLICE);
>  	WARN_ON(dss_mask >> (slice * GEN_DSS_PER_GSLICE) == 0);
>  
> -	__add_mcr_wa(i915, wal, slice, subslice);
> +	__add_mcr_wa(gt, wal, slice, subslice);
>  
>  	/*
>  	 * SQIDI ranges are special because they use different steering
> @@ -1099,9 +1098,11 @@ xehp_init_mcr(struct intel_gt *gt, struct
> i915_wa_list *wal)
>  }
>  
>  static void
> -icl_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +icl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	icl_wa_init_mcr(i915, wal);
> +	struct drm_i915_private *i915 = gt->i915;
> +
> +	icl_wa_init_mcr(gt, wal);
>  
>  	/* WaModifyGamTlbPartitioning:icl */
>  	wa_write_clr_set(wal,
> @@ -1152,10 +1153,9 @@ icl_gt_workarounds_init(struct
> drm_i915_private *i915, struct i915_wa_list *wal)
>   * the engine-specific workaround list.
>   */
>  static void
> -wa_14011060649(struct drm_i915_private *i915, struct i915_wa_list
> *wal)
> +wa_14011060649(struct intel_gt *gt, struct i915_wa_list *wal)
>  {
>  	struct intel_engine_cs *engine;
> -	struct intel_gt *gt = &i915->gt;
>  	int id;
>  
>  	for_each_engine(engine, gt, id) {
> @@ -1169,22 +1169,23 @@ wa_14011060649(struct drm_i915_private *i915,
> struct i915_wa_list *wal)
>  }
>  
>  static void
> -gen12_gt_workarounds_init(struct drm_i915_private *i915,
> -			  struct i915_wa_list *wal)
> +gen12_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	icl_wa_init_mcr(i915, wal);
> +	icl_wa_init_mcr(gt, wal);
>  
>  	/* Wa_14011060649:tgl,rkl,dg1,adl-s,adl-p */
> -	wa_14011060649(i915, wal);
> +	wa_14011060649(gt, wal);
>  
>  	/* Wa_14011059788:tgl,rkl,adl-s,dg1,adl-p */
>  	wa_write_or(wal, GEN10_DFR_RATIO_EN_AND_CHICKEN, DFR_DISABLE);
>  }
>  
>  static void
> -tgl_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +tgl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen12_gt_workarounds_init(i915, wal);
> +	struct drm_i915_private *i915 = gt->i915;
Do you need i915? I don't find i915 in tgl_gt_workarounds_init().
-caz

> +
> +	gen12_gt_workarounds_init(gt, wal);
>  
>  	/* Wa_1409420604:tgl */
>  	if (IS_TGL_UY_GT_STEP(i915, STEP_A0, STEP_B0))
> @@ -1205,9 +1206,11 @@ tgl_gt_workarounds_init(struct
> drm_i915_private *i915, struct i915_wa_list *wal)
>  }
>  
>  static void
> -dg1_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +dg1_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	gen12_gt_workarounds_init(i915, wal);
> +	struct drm_i915_private *i915 = gt->i915;
> +
> +	gen12_gt_workarounds_init(gt, wal);
>  
>  	/* Wa_1607087056:dg1 */
>  	if (IS_DG1_GT_STEP(i915, STEP_A0, STEP_B0))
> @@ -1229,60 +1232,62 @@ dg1_gt_workarounds_init(struct
> drm_i915_private *i915, struct i915_wa_list *wal)
>  }
>  
>  static void
> -xehpsdv_gt_workarounds_init(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +xehpsdv_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list
> *wal)
>  {
> -	xehp_init_mcr(&i915->gt, wal);
> +	xehp_init_mcr(gt, wal);
>  }
>  
>  static void
> -gt_init_workarounds(struct drm_i915_private *i915, struct
> i915_wa_list *wal)
> +gt_init_workarounds(struct intel_gt *gt, struct i915_wa_list *wal)
>  {
> +	struct drm_i915_private *i915 = gt->i915;
> +
>  	if (IS_XEHPSDV(i915))
> -		xehpsdv_gt_workarounds_init(i915, wal);
> +		xehpsdv_gt_workarounds_init(gt, wal);
>  	else if (IS_DG1(i915))
> -		dg1_gt_workarounds_init(i915, wal);
> +		dg1_gt_workarounds_init(gt, wal);
>  	else if (IS_TIGERLAKE(i915))
> -		tgl_gt_workarounds_init(i915, wal);
> +		tgl_gt_workarounds_init(gt, wal);
>  	else if (GRAPHICS_VER(i915) == 12)
> -		gen12_gt_workarounds_init(i915, wal);
> +		gen12_gt_workarounds_init(gt, wal);
>  	else if (GRAPHICS_VER(i915) == 11)
> -		icl_gt_workarounds_init(i915, wal);
> +		icl_gt_workarounds_init(gt, wal);
>  	else if (IS_COFFEELAKE(i915) || IS_COMETLAKE(i915))
> -		cfl_gt_workarounds_init(i915, wal);
> +		cfl_gt_workarounds_init(gt, wal);
>  	else if (IS_GEMINILAKE(i915))
> -		glk_gt_workarounds_init(i915, wal);
> +		glk_gt_workarounds_init(gt, wal);
>  	else if (IS_KABYLAKE(i915))
> -		kbl_gt_workarounds_init(i915, wal);
> +		kbl_gt_workarounds_init(gt, wal);
>  	else if (IS_BROXTON(i915))
> -		gen9_gt_workarounds_init(i915, wal);
> +		gen9_gt_workarounds_init(gt, wal);
>  	else if (IS_SKYLAKE(i915))
> -		skl_gt_workarounds_init(i915, wal);
> +		skl_gt_workarounds_init(gt, wal);
>  	else if (IS_HASWELL(i915))
> -		hsw_gt_workarounds_init(i915, wal);
> +		hsw_gt_workarounds_init(gt, wal);
>  	else if (IS_VALLEYVIEW(i915))
> -		vlv_gt_workarounds_init(i915, wal);
> +		vlv_gt_workarounds_init(gt, wal);
>  	else if (IS_IVYBRIDGE(i915))
> -		ivb_gt_workarounds_init(i915, wal);
> +		ivb_gt_workarounds_init(gt, wal);
>  	else if (GRAPHICS_VER(i915) == 6)
> -		snb_gt_workarounds_init(i915, wal);
> +		snb_gt_workarounds_init(gt, wal);
>  	else if (GRAPHICS_VER(i915) == 5)
> -		ilk_gt_workarounds_init(i915, wal);
> +		ilk_gt_workarounds_init(gt, wal);
>  	else if (IS_G4X(i915))
> -		g4x_gt_workarounds_init(i915, wal);
> +		g4x_gt_workarounds_init(gt, wal);
>  	else if (GRAPHICS_VER(i915) == 4)
> -		gen4_gt_workarounds_init(i915, wal);
> +		gen4_gt_workarounds_init(gt, wal);
>  	else if (GRAPHICS_VER(i915) <= 8)
>  		;
>  	else
>  		MISSING_CASE(GRAPHICS_VER(i915));
>  }
>  
> -void intel_gt_init_workarounds(struct drm_i915_private *i915)
> +void intel_gt_init_workarounds(struct intel_gt *gt)
>  {
> -	struct i915_wa_list *wal = &i915->gt_wa_list;
> +	struct i915_wa_list *wal = &gt->wa_list;
>  
>  	wa_init_start(wal, "GT", "global");
> -	gt_init_workarounds(i915, wal);
> +	gt_init_workarounds(gt, wal);
>  	wa_init_finish(wal);
>  }
>  
> @@ -1353,7 +1358,7 @@ wa_list_apply(struct intel_gt *gt, const struct
> i915_wa_list *wal)
>  
>  void intel_gt_apply_workarounds(struct intel_gt *gt)
>  {
> -	wa_list_apply(gt, &gt->i915->gt_wa_list);
> +	wa_list_apply(gt, &gt->wa_list);
>  }
>  
>  static bool wa_list_verify(struct intel_gt *gt,
> @@ -1385,7 +1390,7 @@ static bool wa_list_verify(struct intel_gt *gt,
>  
>  bool intel_gt_verify_workarounds(struct intel_gt *gt, const char
> *from)
>  {
> -	return wa_list_verify(gt, &gt->i915->gt_wa_list, from);
> +	return wa_list_verify(gt, &gt->wa_list, from);
>  }
>  
>  __maybe_unused
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.h
> b/drivers/gpu/drm/i915/gt/intel_workarounds.h
> index 15abb68b6c00..9beaab77c7f0 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.h
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.h
> @@ -24,7 +24,7 @@ static inline void intel_wa_list_free(struct
> i915_wa_list *wal)
>  void intel_engine_init_ctx_wa(struct intel_engine_cs *engine);
>  int intel_engine_emit_ctx_wa(struct i915_request *rq);
>  
> -void intel_gt_init_workarounds(struct drm_i915_private *i915);
> +void intel_gt_init_workarounds(struct intel_gt *gt);
>  void intel_gt_apply_workarounds(struct intel_gt *gt);
>  bool intel_gt_verify_workarounds(struct intel_gt *gt, const char
> *from);
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> index e623ac45f4aa..962e91ba3be4 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> @@ -66,7 +66,7 @@ reference_lists_init(struct intel_gt *gt, struct
> wa_lists *lists)
>  	memset(lists, 0, sizeof(*lists));
>  
>  	wa_init_start(&lists->gt_wa_list, "GT_REF", "global");
> -	gt_init_workarounds(gt->i915, &lists->gt_wa_list);
> +	gt_init_workarounds(gt, &lists->gt_wa_list);
>  	wa_init_finish(&lists->gt_wa_list);
>  
>  	for_each_engine(engine, gt, id) {
> diff --git a/drivers/gpu/drm/i915/i915_drv.c
> b/drivers/gpu/drm/i915/i915_drv.c
> index 59fb4c710c8c..3cf61bead2f6 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -588,8 +588,6 @@ static int i915_driver_hw_probe(struct
> drm_i915_private *dev_priv)
>  
>  	pci_set_master(pdev);
>  
> -	intel_gt_init_workarounds(dev_priv);
> -
>  	/* On the 945G/GM, the chipset reports the MSI capability on
> the
>  	 * integrated graphics even though the support isn't actually
> there
>  	 * according to the published specs.  It doesn't appear to
> function
> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> b/drivers/gpu/drm/i915/i915_drv.h
> index 37c1ca266bcd..93c23eaf3fc7 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -998,8 +998,6 @@ struct drm_i915_private {
>  
>  	struct list_head global_obj_list;
>  
> -	struct i915_wa_list gt_wa_list;
> -
>  	struct i915_frontbuffer_tracking fb_tracking;
>  
>  	struct intel_atomic_helper {
> diff --git a/drivers/gpu/drm/i915/i915_gem.c
> b/drivers/gpu/drm/i915/i915_gem.c
> index 590efc8b0265..981e383d1a5d 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1139,8 +1139,6 @@ void i915_gem_driver_release(struct
> drm_i915_private *dev_priv)
>  {
>  	intel_gt_driver_release(&dev_priv->gt);
>  
> -	intel_wa_list_free(&dev_priv->gt_wa_list);
> -
>  	intel_uc_cleanup_firmwares(&dev_priv->gt.uc);
>  
>  	i915_gem_drain_freed_objects(dev_priv);


More information about the dri-devel mailing list