aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_lrc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lrc.c')
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index a1198baf34aa..2b65d29c4801 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1143,6 +1143,29 @@ static int gen8_init_indirectctx_bb(struct intel_engine_cs *ring,
1143 /* WaDisableCtxRestoreArbitration:bdw,chv */ 1143 /* WaDisableCtxRestoreArbitration:bdw,chv */
1144 wa_ctx_emit(batch, MI_ARB_ON_OFF | MI_ARB_DISABLE); 1144 wa_ctx_emit(batch, MI_ARB_ON_OFF | MI_ARB_DISABLE);
1145 1145
1146 /* WaFlushCoherentL3CacheLinesAtContextSwitch:bdw */
1147 if (IS_BROADWELL(ring->dev)) {
1148 struct drm_i915_private *dev_priv = to_i915(ring->dev);
1149 uint32_t l3sqc4_flush = (I915_READ(GEN8_L3SQCREG4) |
1150 GEN8_LQSC_FLUSH_COHERENT_LINES);
1151
1152 wa_ctx_emit(batch, MI_LOAD_REGISTER_IMM(1));
1153 wa_ctx_emit(batch, GEN8_L3SQCREG4);
1154 wa_ctx_emit(batch, l3sqc4_flush);
1155
1156 wa_ctx_emit(batch, GFX_OP_PIPE_CONTROL(6));
1157 wa_ctx_emit(batch, (PIPE_CONTROL_CS_STALL |
1158 PIPE_CONTROL_DC_FLUSH_ENABLE));
1159 wa_ctx_emit(batch, 0);
1160 wa_ctx_emit(batch, 0);
1161 wa_ctx_emit(batch, 0);
1162 wa_ctx_emit(batch, 0);
1163
1164 wa_ctx_emit(batch, MI_LOAD_REGISTER_IMM(1));
1165 wa_ctx_emit(batch, GEN8_L3SQCREG4);
1166 wa_ctx_emit(batch, l3sqc4_flush & ~GEN8_LQSC_FLUSH_COHERENT_LINES);
1167 }
1168
1146 /* Pad to end of cacheline */ 1169 /* Pad to end of cacheline */
1147 while (index % CACHELINE_DWORDS) 1170 while (index % CACHELINE_DWORDS)
1148 wa_ctx_emit(batch, MI_NOOP); 1171 wa_ctx_emit(batch, MI_NOOP);