Skip to content

Commit 695a2b1

Browse files
icklejlahtine-intel
authored andcommitted
drm/i915/gt: Move vlv GT workarounds from init_clock_gating to workarounds
Rescue the GT workarounds from being buried inside init_clock_gating so that we remember to apply them after a GT reset, and that they are included in our verification that the workarounds are applied. Signed-off-by: Chris Wilson <[email protected]> Reviewed-by: Mika Kuoppala <[email protected]> Cc: [email protected] Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit 7331c35) Signed-off-by: Joonas Lahtinen <[email protected]>
1 parent 7237b19 commit 695a2b1

File tree

2 files changed

+59
-61
lines changed

2 files changed

+59
-61
lines changed

drivers/gpu/drm/i915/gt/intel_workarounds.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,63 @@ ivb_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
752752
GEN6_WIZ_HASHING_16x4);
753753
}
754754

755+
static void
756+
vlv_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
757+
{
758+
/* WaDisableEarlyCull:vlv */
759+
wa_masked_en(wal, _3D_CHICKEN3, _3D_CHICKEN_SF_DISABLE_OBJEND_CULL);
760+
761+
/* WaPsdDispatchEnable:vlv */
762+
/* WaDisablePSDDualDispatchEnable:vlv */
763+
wa_masked_en(wal,
764+
GEN7_HALF_SLICE_CHICKEN1,
765+
GEN7_MAX_PS_THREAD_DEP |
766+
GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE);
767+
768+
/* WaDisable_RenderCache_OperationalFlush:vlv */
769+
wa_masked_dis(wal, CACHE_MODE_0_GEN7, RC_OP_FLUSH_ENABLE);
770+
771+
/* WaForceL3Serialization:vlv */
772+
wa_write_clr(wal, GEN7_L3SQCREG4, L3SQ_URB_READ_CAM_MATCH_DISABLE);
773+
774+
/*
775+
* WaVSThreadDispatchOverride:ivb,vlv
776+
*
777+
* This actually overrides the dispatch
778+
* mode for all thread types.
779+
*/
780+
wa_write_masked_or(wal,
781+
GEN7_FF_THREAD_MODE,
782+
GEN7_FF_SCHED_MASK,
783+
GEN7_FF_TS_SCHED_HW |
784+
GEN7_FF_VS_SCHED_HW |
785+
GEN7_FF_DS_SCHED_HW);
786+
787+
/*
788+
* BSpec says this must be set, even though
789+
* WaDisable4x2SubspanOptimization isn't listed for VLV.
790+
*/
791+
wa_masked_en(wal, CACHE_MODE_1, PIXEL_SUBSPAN_COLLECT_OPT_DISABLE);
792+
793+
/*
794+
* BSpec recommends 8x4 when MSAA is used,
795+
* however in practice 16x4 seems fastest.
796+
*
797+
* Note that PS/WM thread counts depend on the WIZ hashing
798+
* disable bit, which we don't touch here, but it's good
799+
* to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
800+
*/
801+
wa_add(wal, GEN7_GT_MODE, 0,
802+
_MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4),
803+
GEN6_WIZ_HASHING_16x4);
804+
805+
/*
806+
* WaIncreaseL3CreditsForVLVB0:vlv
807+
* This is the hardware default actually.
808+
*/
809+
wa_write(wal, GEN7_L3SQCREG1, VLV_B0_WA_L3SQCREG1_VALUE);
810+
}
811+
755812
static void
756813
hsw_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
757814
{
@@ -1071,6 +1128,8 @@ gt_init_workarounds(struct drm_i915_private *i915, struct i915_wa_list *wal)
10711128
skl_gt_workarounds_init(i915, wal);
10721129
else if (IS_HASWELL(i915))
10731130
hsw_gt_workarounds_init(i915, wal);
1131+
else if (IS_VALLEYVIEW(i915))
1132+
vlv_gt_workarounds_init(i915, wal);
10741133
else if (IS_IVYBRIDGE(i915))
10751134
ivb_gt_workarounds_init(i915, wal);
10761135
else if (INTEL_GEN(i915) <= 8)

drivers/gpu/drm/i915/intel_pm.c

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6986,24 +6986,6 @@ static void gen6_init_clock_gating(struct drm_i915_private *dev_priv)
69866986
gen6_check_mch_setup(dev_priv);
69876987
}
69886988

6989-
static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
6990-
{
6991-
u32 reg = I915_READ(GEN7_FF_THREAD_MODE);
6992-
6993-
/*
6994-
* WaVSThreadDispatchOverride:ivb,vlv
6995-
*
6996-
* This actually overrides the dispatch
6997-
* mode for all thread types.
6998-
*/
6999-
reg &= ~GEN7_FF_SCHED_MASK;
7000-
reg |= GEN7_FF_TS_SCHED_HW;
7001-
reg |= GEN7_FF_VS_SCHED_HW;
7002-
reg |= GEN7_FF_DS_SCHED_HW;
7003-
7004-
I915_WRITE(GEN7_FF_THREAD_MODE, reg);
7005-
}
7006-
70076989
static void lpt_init_clock_gating(struct drm_i915_private *dev_priv)
70086990
{
70096991
/*
@@ -7290,28 +7272,11 @@ static void ivb_init_clock_gating(struct drm_i915_private *dev_priv)
72907272

72917273
static void vlv_init_clock_gating(struct drm_i915_private *dev_priv)
72927274
{
7293-
/* WaDisableEarlyCull:vlv */
7294-
I915_WRITE(_3D_CHICKEN3,
7295-
_MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL));
7296-
72977275
/* WaDisableBackToBackFlipFix:vlv */
72987276
I915_WRITE(IVB_CHICKEN3,
72997277
CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
73007278
CHICKEN3_DGMG_DONE_FIX_DISABLE);
73017279

7302-
/* WaPsdDispatchEnable:vlv */
7303-
/* WaDisablePSDDualDispatchEnable:vlv */
7304-
I915_WRITE(GEN7_HALF_SLICE_CHICKEN1,
7305-
_MASKED_BIT_ENABLE(GEN7_MAX_PS_THREAD_DEP |
7306-
GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE));
7307-
7308-
/* WaDisable_RenderCache_OperationalFlush:vlv */
7309-
I915_WRITE(CACHE_MODE_0_GEN7, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
7310-
7311-
/* WaForceL3Serialization:vlv */
7312-
I915_WRITE(GEN7_L3SQCREG4, I915_READ(GEN7_L3SQCREG4) &
7313-
~L3SQ_URB_READ_CAM_MATCH_DISABLE);
7314-
73157280
/* WaDisableDopClockGating:vlv */
73167281
I915_WRITE(GEN7_ROW_CHICKEN2,
73177282
_MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
@@ -7321,8 +7286,6 @@ static void vlv_init_clock_gating(struct drm_i915_private *dev_priv)
73217286
I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
73227287
GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
73237288

7324-
gen7_setup_fixed_func_scheduler(dev_priv);
7325-
73267289
/*
73277290
* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
73287291
* This implements the WaDisableRCZUnitClockGating:vlv workaround.
@@ -7336,30 +7299,6 @@ static void vlv_init_clock_gating(struct drm_i915_private *dev_priv)
73367299
I915_WRITE(GEN7_UCGCTL4,
73377300
I915_READ(GEN7_UCGCTL4) | GEN7_L3BANK2X_CLOCK_GATE_DISABLE);
73387301

7339-
/*
7340-
* BSpec says this must be set, even though
7341-
* WaDisable4x2SubspanOptimization isn't listed for VLV.
7342-
*/
7343-
I915_WRITE(CACHE_MODE_1,
7344-
_MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
7345-
7346-
/*
7347-
* BSpec recommends 8x4 when MSAA is used,
7348-
* however in practice 16x4 seems fastest.
7349-
*
7350-
* Note that PS/WM thread counts depend on the WIZ hashing
7351-
* disable bit, which we don't touch here, but it's good
7352-
* to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
7353-
*/
7354-
I915_WRITE(GEN7_GT_MODE,
7355-
_MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
7356-
7357-
/*
7358-
* WaIncreaseL3CreditsForVLVB0:vlv
7359-
* This is the hardware default actually.
7360-
*/
7361-
I915_WRITE(GEN7_L3SQCREG1, VLV_B0_WA_L3SQCREG1_VALUE);
7362-
73637302
/*
73647303
* WaDisableVLVClockGating_VBIIssue:vlv
73657304
* Disable clock gating on th GCFG unit to prevent a delay

0 commit comments

Comments
 (0)