Lines Matching refs:pt

60 	struct xe_lmtt_pt *pt;  in lmtt_pt_alloc()  local
64 pt = kzalloc(struct_size(pt, entries, num_entries), GFP_KERNEL); in lmtt_pt_alloc()
65 if (!pt) { in lmtt_pt_alloc()
86 pt->level = level; in lmtt_pt_alloc()
87 pt->bo = bo; in lmtt_pt_alloc()
88 return pt; in lmtt_pt_alloc()
91 kfree(pt); in lmtt_pt_alloc()
96 static void lmtt_pt_free(struct xe_lmtt_pt *pt) in lmtt_pt_free() argument
98 lmtt_debug(&pt->bo->tile->sriov.pf.lmtt, "level=%u addr=%llx\n", in lmtt_pt_free()
99 pt->level, (u64)xe_bo_main_addr(pt->bo, XE_PAGE_SIZE)); in lmtt_pt_free()
101 xe_bo_unpin_map_no_vm(pt->bo); in lmtt_pt_free()
102 kfree(pt); in lmtt_pt_free()
281 static void lmtt_write_pte(struct xe_lmtt *lmtt, struct xe_lmtt_pt *pt, in lmtt_write_pte() argument
284 unsigned int level = pt->level; in lmtt_write_pte()
292 lmtt_assert(lmtt, !pte || !iosys_map_rd(&pt->bo->vmap, idx * sizeof(u32), u32)); in lmtt_write_pte()
294 xe_map_wr(lmtt_to_xe(lmtt), &pt->bo->vmap, idx * sizeof(u32), u32, pte); in lmtt_write_pte()
297 lmtt_assert(lmtt, !pte || !iosys_map_rd(&pt->bo->vmap, idx * sizeof(u64), u64)); in lmtt_write_pte()
299 xe_map_wr(lmtt_to_xe(lmtt), &pt->bo->vmap, idx * sizeof(u64), u64, pte); in lmtt_write_pte()
309 struct xe_lmtt_pt *pt; in lmtt_destroy_pt() local
313 pt = pd->entries[i]; in lmtt_destroy_pt()
315 if (!pt) in lmtt_destroy_pt()
318 lmtt_destroy_pt(lmtt, pt); in lmtt_destroy_pt()
327 struct xe_lmtt_pt *pt; in lmtt_drop_pages() local
329 pt = pd->entries[vfid]; in lmtt_drop_pages()
331 if (!pt) in lmtt_drop_pages()
338 lmtt_assert(lmtt, pt->level == pd->level - 1); in lmtt_drop_pages()
339 lmtt_destroy_pt(lmtt, pt); in lmtt_drop_pages()
353 struct xe_lmtt_pt *pt; in __lmtt_alloc_range() local
357 pt = lmtt_pt_alloc(lmtt, pd->level - 1); in __lmtt_alloc_range()
358 if (IS_ERR(pt)) in __lmtt_alloc_range()
359 return PTR_ERR(pt); in __lmtt_alloc_range()
361 pt_addr = xe_bo_main_addr(pt->bo, XE_PAGE_SIZE); in __lmtt_alloc_range()
368 pd->entries[idx] = pt; in __lmtt_alloc_range()
372 if (pt->level != 0) { in __lmtt_alloc_range()
373 err = __lmtt_alloc_range(lmtt, pt, offset, next); in __lmtt_alloc_range()
387 struct xe_lmtt_pt *pt; in lmtt_alloc_range() local
400 pt = lmtt_pt_alloc(lmtt, pd->level - 1); in lmtt_alloc_range()
401 if (IS_ERR(pt)) in lmtt_alloc_range()
402 return PTR_ERR(pt); in lmtt_alloc_range()
404 pt_addr = xe_bo_main_addr(pt->bo, XE_PAGE_SIZE); in lmtt_alloc_range()
410 pd->entries[vfid] = pt; in lmtt_alloc_range()
412 if (pt->level != 0) { in lmtt_alloc_range()
413 err = __lmtt_alloc_range(lmtt, pt, start, end); in lmtt_alloc_range()
421 lmtt_pt_free(pt); in lmtt_alloc_range()
428 struct xe_lmtt_pt *pt; in lmtt_leaf_pt() local
431 pt = pd->entries[vfid]; in lmtt_leaf_pt()
433 while (pt->level) { in lmtt_leaf_pt()
434 lmtt_assert(lmtt, lmtt->ops->lmtt_pte_index(addr, pt->level) <= in lmtt_leaf_pt()
435 lmtt->ops->lmtt_pte_num(pt->level)); in lmtt_leaf_pt()
437 pt = pt->entries[lmtt->ops->lmtt_pte_index(addr, pt->level)]; in lmtt_leaf_pt()
439 addr >>= lmtt->ops->lmtt_pte_shift(pt->level); in lmtt_leaf_pt()
442 lmtt_assert(lmtt, lmtt->ops->lmtt_pte_index(addr, pt->level) <= in lmtt_leaf_pt()
443 lmtt->ops->lmtt_pte_num(pt->level)); in lmtt_leaf_pt()
444 lmtt_assert(lmtt, pt->level != pd->level); in lmtt_leaf_pt()
445 lmtt_assert(lmtt, pt->level == 0); in lmtt_leaf_pt()
446 return pt; in lmtt_leaf_pt()
453 struct xe_lmtt_pt *pt; in lmtt_insert_bo() local
466 pt = lmtt_leaf_pt(lmtt, vfid, start); in lmtt_insert_bo()
468 lmtt_write_pte(lmtt, pt, lmtt->ops->lmtt_pte_encode(addr, 0), in lmtt_insert_bo()