[CI 08/17] drm/xe/xelp: Add AuxCCS invalidation to the buffer migration path
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Thu Jul 17 21:52:18 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 | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ring_ops.c b/drivers/gpu/drm/xe/xe_ring_ops.c
index db94b475cd32..6d41cea86b0f 100644
--- a/drivers/gpu/drm/xe/xe_ring_ops.c
+++ b/drivers/gpu/drm/xe/xe_ring_ops.c
@@ -404,11 +404,28 @@ static void emit_migration_job_gen12(struct xe_sched_job *job,
struct xe_lrc *lrc, u32 seqno)
{
u32 saddr = xe_lrc_start_seqno_ggtt_addr(lrc);
+ 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(saddr, seqno, dw, i);
+ if (invalidate_tlb) {
+ dw[i++] = preparser_disable(true);
+ i = emit_flush_imm_ggtt(saddr, 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(saddr, seqno, dw, i);
+ }
dw[i++] = MI_ARB_ON_OFF | MI_ARB_DISABLE; /* Enabled again below */
@@ -416,12 +433,16 @@ static void emit_migration_job_gen12(struct xe_sched_job *job,
dw[i++] = preparser_disable(true);
i = emit_flush_invalidate(saddr, seqno, 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