return i;
}
-static int emit_pipe_invalidate(u32 mask_flags, u32 *dw, int i)
-{
- u32 flags = PIPE_CONTROL_CS_STALL |
- PIPE_CONTROL_COMMAND_CACHE_INVALIDATE |
- PIPE_CONTROL_TLB_INVALIDATE |
- PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE |
- PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
- PIPE_CONTROL_VF_CACHE_INVALIDATE |
- PIPE_CONTROL_CONST_CACHE_INVALIDATE |
- PIPE_CONTROL_STATE_CACHE_INVALIDATE |
- PIPE_CONTROL_QW_WRITE |
- PIPE_CONTROL_STORE_DATA_INDEX;
-
- flags &= ~mask_flags;
-
- dw[i++] = GFX_OP_PIPE_CONTROL(6);
- dw[i++] = flags;
- dw[i++] = LRC_PPHWSP_SCRATCH_ADDR;
- dw[i++] = 0;
- dw[i++] = 0;
- dw[i++] = 0;
-
- return i;
-}
-
#define MI_STORE_QWORD_IMM_GEN8_POSTED (MI_INSTR(0x20, 3) | (1 << 21))
static int emit_store_imm_ppgtt_posted(u64 addr, u64 value,
u32 dw[MAX_JOB_SIZE_DW], i = 0;
u32 ppgtt_flag = get_ppgtt_flag(job);
- /* XXX: Conditional flushing possible */
- dw[i++] = preparser_disable(true);
- i = emit_flush_invalidate(0, dw, i);
- dw[i++] = preparser_disable(false);
-
i = emit_store_imm_ggtt(xe_lrc_start_seqno_ggtt_addr(lrc),
seqno, dw, i);
struct xe_device *xe = gt_to_xe(gt);
bool decode = job->engine->class == XE_ENGINE_CLASS_VIDEO_DECODE;
- /* XXX: Conditional flushing possible */
dw[i++] = preparser_disable(true);
- i = emit_flush_invalidate(decode ? MI_INVALIDATE_BSD : 0, dw, i);
/* Wa_1809175790 */
if (!xe->info.has_flat_ccs) {
if (decode)
struct xe_gt *gt = job->engine->gt;
struct xe_device *xe = gt_to_xe(gt);
bool pvc = xe->info.platform == XE_PVC;
- u32 mask_flags = 0;
- /* XXX: Conditional flushing possible */
dw[i++] = preparser_disable(true);
- if (pvc)
- mask_flags = PIPE_CONTROL_3D_ARCH_FLAGS;
- else if (job->engine->class == XE_ENGINE_CLASS_COMPUTE)
- mask_flags = PIPE_CONTROL_3D_ENGINE_FLAGS;
- i = emit_pipe_invalidate(mask_flags, dw, i);
/* Wa_1809175790 */
if (!xe->info.has_flat_ccs)
i = emit_aux_table_inv(gt, GEN12_CCS_AUX_INV.reg, dw, i);
i = emit_bb_start(job->batch_addr[0], BIT(8), dw, i);
+ /* XXX: Do we need this? Leaving for now. */
dw[i++] = preparser_disable(true);
i = emit_flush_invalidate(0, dw, i);
dw[i++] = preparser_disable(false);