Lines Matching full:bb
109 /* First slot is reserved for mapping of PT bo and bb, start from 1 */ in xe_migrate_vm_addr()
473 struct xe_bb *bb, u32 at_pt, in emit_pte() argument
497 bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(chunk); in emit_pte()
498 bb->cs[bb->len++] = ofs; in emit_pte()
499 bb->cs[bb->len++] = 0; in emit_pte()
527 bb->cs[bb->len++] = lower_32_bits(addr); in emit_pte()
528 bb->cs[bb->len++] = upper_32_bits(addr); in emit_pte()
537 static void emit_copy_ccs(struct xe_gt *gt, struct xe_bb *bb, in emit_copy_ccs() argument
543 u32 *cs = bb->cs + bb->len; in emit_copy_ccs()
574 bb->len = cs - bb->cs; in emit_copy_ccs()
578 static void emit_copy(struct xe_gt *gt, struct xe_bb *bb, in emit_copy() argument
596 bb->cs[bb->len++] = XY_FAST_COPY_BLT_CMD | (10 - 2); in emit_copy()
597 bb->cs[bb->len++] = XY_FAST_COPY_BLT_DEPTH_32 | pitch | tile_y | mocs; in emit_copy()
598 bb->cs[bb->len++] = 0; in emit_copy()
599 bb->cs[bb->len++] = (size / pitch) << 16 | pitch / 4; in emit_copy()
600 bb->cs[bb->len++] = lower_32_bits(dst_ofs); in emit_copy()
601 bb->cs[bb->len++] = upper_32_bits(dst_ofs); in emit_copy()
602 bb->cs[bb->len++] = 0; in emit_copy()
603 bb->cs[bb->len++] = pitch | mocs; in emit_copy()
604 bb->cs[bb->len++] = lower_32_bits(src_ofs); in emit_copy()
605 bb->cs[bb->len++] = upper_32_bits(src_ofs); in emit_copy()
620 struct xe_bb *bb, in xe_migrate_ccs_copy() argument
639 emit_copy_ccs(gt, bb, in xe_migrate_ccs_copy()
652 emit_copy_ccs(gt, bb, dst_ofs, dst_is_indirect, src_ofs, in xe_migrate_ccs_copy()
729 struct xe_bb *bb; in xe_migrate_copy() local
767 bb = xe_bb_new(gt, batch_size, usm); in xe_migrate_copy()
768 if (IS_ERR(bb)) { in xe_migrate_copy()
769 err = PTR_ERR(bb); in xe_migrate_copy()
776 emit_pte(m, bb, src_L0_pt, src_is_vram, copy_system_ccs, in xe_migrate_copy()
782 emit_pte(m, bb, dst_L0_pt, dst_is_vram, copy_system_ccs, in xe_migrate_copy()
786 emit_pte(m, bb, ccs_pt, false, false, &ccs_it, ccs_size, src); in xe_migrate_copy()
788 bb->cs[bb->len++] = MI_BATCH_BUFFER_END; in xe_migrate_copy()
789 update_idx = bb->len; in xe_migrate_copy()
792 emit_copy(gt, bb, src_L0_ofs, dst_L0_ofs, src_L0, XE_PAGE_SIZE); in xe_migrate_copy()
794 flush_flags = xe_migrate_ccs_copy(m, bb, src_L0_ofs, in xe_migrate_copy()
801 job = xe_bb_create_migration_job(m->q, bb, in xe_migrate_copy()
830 xe_bb_free(bb, fence); in xe_migrate_copy()
838 xe_bb_free(bb, NULL); in xe_migrate_copy()
853 static void emit_clear_link_copy(struct xe_gt *gt, struct xe_bb *bb, u64 src_ofs, in emit_clear_link_copy() argument
857 u32 *cs = bb->cs + bb->len; in emit_clear_link_copy()
871 xe_gt_assert(gt, cs - bb->cs == len + bb->len); in emit_clear_link_copy()
873 bb->len += len; in emit_clear_link_copy()
876 static void emit_clear_main_copy(struct xe_gt *gt, struct xe_bb *bb, in emit_clear_main_copy() argument
880 u32 *cs = bb->cs + bb->len; in emit_clear_main_copy()
912 xe_gt_assert(gt, cs - bb->cs == len + bb->len); in emit_clear_main_copy()
914 bb->len += len; in emit_clear_main_copy()
939 static void emit_clear(struct xe_gt *gt, struct xe_bb *bb, u64 src_ofs, in emit_clear() argument
943 emit_clear_link_copy(gt, bb, src_ofs, size, pitch); in emit_clear()
945 emit_clear_main_copy(gt, bb, src_ofs, size, pitch, in emit_clear()
989 struct xe_bb *bb; in xe_migrate_clear() local
1014 bb = xe_bb_new(gt, batch_size, usm); in xe_migrate_clear()
1015 if (IS_ERR(bb)) { in xe_migrate_clear()
1016 err = PTR_ERR(bb); in xe_migrate_clear()
1025 emit_pte(m, bb, clear_L0_pt, clear_vram, clear_system_ccs, in xe_migrate_clear()
1028 bb->cs[bb->len++] = MI_BATCH_BUFFER_END; in xe_migrate_clear()
1029 update_idx = bb->len; in xe_migrate_clear()
1032 emit_clear(gt, bb, clear_L0_ofs, clear_L0, XE_PAGE_SIZE, clear_vram); in xe_migrate_clear()
1035 emit_copy_ccs(gt, bb, clear_L0_ofs, true, in xe_migrate_clear()
1041 job = xe_bb_create_migration_job(m->q, bb, in xe_migrate_clear()
1073 xe_bb_free(bb, fence); in xe_migrate_clear()
1080 xe_bb_free(bb, NULL); in xe_migrate_clear()
1097 static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs, in write_pgtable() argument
1125 /* Ensure populatefn can do memset64 by aligning bb->cs */ in write_pgtable()
1126 if (!(bb->len & 1)) in write_pgtable()
1127 bb->cs[bb->len++] = MI_NOOP; in write_pgtable()
1129 bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(chunk); in write_pgtable()
1130 bb->cs[bb->len++] = lower_32_bits(addr); in write_pgtable()
1131 bb->cs[bb->len++] = upper_32_bits(addr); in write_pgtable()
1132 ops->populate(pt_update, tile, NULL, bb->cs + bb->len, ofs, chunk, in write_pgtable()
1135 bb->len += chunk * 2; in write_pgtable()
1275 struct xe_bb *bb; in xe_migrate_update_pgtables() local
1316 bb = xe_bb_new(gt, batch_size, !q && xe->info.has_usm); in xe_migrate_update_pgtables()
1317 if (IS_ERR(bb)) in xe_migrate_update_pgtables()
1318 return ERR_CAST(bb); in xe_migrate_update_pgtables()
1342 bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(num_updates); in xe_migrate_update_pgtables()
1343 bb->cs[bb->len++] = ppgtt_ofs * XE_PAGE_SIZE + page_ofs; in xe_migrate_update_pgtables()
1344 bb->cs[bb->len++] = 0; /* upper_32_bits */ in xe_migrate_update_pgtables()
1352 bb->cs[bb->len++] = lower_32_bits(addr); in xe_migrate_update_pgtables()
1353 bb->cs[bb->len++] = upper_32_bits(addr); in xe_migrate_update_pgtables()
1356 bb->cs[bb->len++] = MI_BATCH_BUFFER_END; in xe_migrate_update_pgtables()
1357 update_idx = bb->len; in xe_migrate_update_pgtables()
1362 write_pgtable(tile, bb, addr + i * XE_PAGE_SIZE, in xe_migrate_update_pgtables()
1366 bb->cs[bb->len++] = MI_BATCH_BUFFER_END; in xe_migrate_update_pgtables()
1367 update_idx = bb->len; in xe_migrate_update_pgtables()
1370 write_pgtable(tile, bb, 0, &updates[i], pt_update); in xe_migrate_update_pgtables()
1376 job = xe_bb_create_migration_job(q ?: m->q, bb, in xe_migrate_update_pgtables()
1423 xe_bb_free(bb, fence); in xe_migrate_update_pgtables()
1433 xe_bb_free(bb, NULL); in xe_migrate_update_pgtables()