diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lrc.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 23 |
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); |