[PATCH v5 09/16] drm/xe/xelp: Add AuxCCS invalidation to the buffer migration path
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Thu Apr 3 19:03:09 UTC 2025
Buffer migration path has to handle the AuxCCS invalidation too.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
---
drivers/gpu/drm/xe/xe_ring_ops.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ring_ops.c b/drivers/gpu/drm/xe/xe_ring_ops.c
index 62e62f0c6787..2036abf448d4 100644
--- a/drivers/gpu/drm/xe/xe_ring_ops.c
+++ b/drivers/gpu/drm/xe/xe_ring_ops.c
@@ -405,12 +405,30 @@ static void __emit_job_gen12_render_compute(struct xe_sched_job *job,
static void emit_migration_job_gen12(struct xe_sched_job *job,
struct xe_lrc *lrc, u32 seqno)
{
+ struct xe_gt *gt = job->q->gt;
+ struct xe_device *xe = gt_to_xe(gt);
+ const bool aux_ccs = has_aux_ccs(xe);
+ const bool invalidate_tlb = aux_ccs || job->ring_ops_flush_tlb;
u32 dw[MAX_JOB_SIZE_DW], i = 0;
i = emit_copy_timestamp(lrc, dw, i);
- i = emit_store_imm_ggtt(xe_lrc_start_seqno_ggtt_addr(lrc),
- seqno, dw, i);
+ if (invalidate_tlb) {
+ dw[i++] = preparser_disable(true);
+ i = emit_flush_imm_ggtt(xe_lrc_start_seqno_ggtt_addr(lrc),
+ seqno,
+ MI_INVALIDATE_TLB |
+ (aux_ccs ? MI_FLUSH_DW_CCS : 0) |
+ job->migrate_flush_flags,
+ dw, i);
+ /* hsdes: 1809175790 */
+ if (aux_ccs)
+ i = emit_aux_table_inv(gt, BCS_AUX_INV, dw, i);
+ dw[i++] = preparser_disable(false);
+ } else {
+ i = emit_store_imm_ggtt(xe_lrc_start_seqno_ggtt_addr(lrc),
+ seqno, dw, i);
+ }
dw[i++] = MI_ARB_ON_OFF | MI_ARB_DISABLE; /* Enabled again below */
@@ -420,13 +438,17 @@ static void emit_migration_job_gen12(struct xe_sched_job *job,
/* XXX: Do we need this? Leaving for now. */
dw[i++] = preparser_disable(true);
i = emit_flush_invalidate(dw, i);
+ if (aux_ccs)
+ i = emit_aux_table_inv(gt, BCS_AUX_INV, dw, i);
dw[i++] = preparser_disable(false);
}
i = emit_bb_start(job->ptrs[1].batch_addr, BIT(8), dw, i);
i = emit_flush_imm_ggtt(xe_lrc_seqno_ggtt_addr(lrc), seqno,
- MI_INVALIDATE_TLB | job->migrate_flush_flags,
+ MI_INVALIDATE_TLB |
+ (aux_ccs ? MI_FLUSH_DW_CCS : 0) |
+ job->migrate_flush_flags,
dw, i);
i = emit_user_interrupt(dw, i);
--
2.48.0
More information about the Intel-xe
mailing list