xref: /linux/drivers/gpu/drm/xe/xe_tlb_inval.h (revision 9fd2da71c301184d98fe37674ca8d017d1ce6600)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2025 Intel Corporation
4  */
5 
6 #ifndef _XE_TLB_INVAL_H_
7 #define _XE_TLB_INVAL_H_
8 
9 #include <linux/types.h>
10 
11 #include "xe_tlb_inval_types.h"
12 
13 struct xe_gt;
14 struct xe_guc;
15 struct xe_vm;
16 
17 int xe_gt_tlb_inval_init_early(struct xe_gt *gt);
18 
19 void xe_tlb_inval_reset(struct xe_tlb_inval *tlb_inval);
20 int xe_tlb_inval_all(struct xe_tlb_inval *tlb_inval,
21 		     struct xe_tlb_inval_fence *fence);
22 int xe_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval);
23 void xe_tlb_inval_vm(struct xe_tlb_inval *tlb_inval, struct xe_vm *vm);
24 int xe_tlb_inval_range(struct xe_tlb_inval *tlb_inval,
25 		       struct xe_tlb_inval_fence *fence,
26 		       u64 start, u64 end, u32 asid);
27 
28 void xe_tlb_inval_fence_init(struct xe_tlb_inval *tlb_inval,
29 			     struct xe_tlb_inval_fence *fence,
30 			     bool stack);
31 
32 /**
33  * xe_tlb_inval_fence_wait() - TLB invalidiation fence wait
34  * @fence: TLB invalidation fence to wait on
35  *
36  * Wait on a TLB invalidiation fence until it signals, non interruptable
37  */
38 static inline void
39 xe_tlb_inval_fence_wait(struct xe_tlb_inval_fence *fence)
40 {
41 	dma_fence_wait(&fence->base, false);
42 }
43 
44 void xe_tlb_inval_done_handler(struct xe_tlb_inval *tlb_inval, int seqno);
45 
46 #endif	/* _XE_TLB_INVAL_ */
47