xref: /linux/drivers/gpu/drm/xe/xe_tlb_inval.h (revision ec2e0fb07d789976c601bec19ecced7a501c3705)
115366239SMatthew Brost /* SPDX-License-Identifier: MIT */
215366239SMatthew Brost /*
315366239SMatthew Brost  * Copyright © 2025 Intel Corporation
415366239SMatthew Brost  */
515366239SMatthew Brost 
615366239SMatthew Brost #ifndef _XE_TLB_INVAL_H_
715366239SMatthew Brost #define _XE_TLB_INVAL_H_
815366239SMatthew Brost 
915366239SMatthew Brost #include <linux/types.h>
1015366239SMatthew Brost 
1115366239SMatthew Brost #include "xe_tlb_inval_types.h"
1215366239SMatthew Brost 
1315366239SMatthew Brost struct xe_gt;
1415366239SMatthew Brost struct xe_guc;
1515366239SMatthew Brost struct xe_vm;
1615366239SMatthew Brost 
1715366239SMatthew Brost int xe_gt_tlb_inval_init_early(struct xe_gt *gt);
1815366239SMatthew Brost 
1915366239SMatthew Brost void xe_tlb_inval_reset(struct xe_tlb_inval *tlb_inval);
2015366239SMatthew Brost int xe_tlb_inval_all(struct xe_tlb_inval *tlb_inval,
2115366239SMatthew Brost 		     struct xe_tlb_inval_fence *fence);
22*db16f9d9SMatthew Brost int xe_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval);
23*db16f9d9SMatthew Brost void xe_tlb_inval_vm(struct xe_tlb_inval *tlb_inval, struct xe_vm *vm);
2415366239SMatthew Brost int xe_tlb_inval_range(struct xe_tlb_inval *tlb_inval,
2515366239SMatthew Brost 		       struct xe_tlb_inval_fence *fence,
2615366239SMatthew Brost 		       u64 start, u64 end, u32 asid);
2715366239SMatthew Brost 
2815366239SMatthew Brost void xe_tlb_inval_fence_init(struct xe_tlb_inval *tlb_inval,
2915366239SMatthew Brost 			     struct xe_tlb_inval_fence *fence,
3015366239SMatthew Brost 			     bool stack);
3115366239SMatthew Brost 
32*db16f9d9SMatthew Brost /**
33*db16f9d9SMatthew Brost  * xe_tlb_inval_fence_wait() - TLB invalidiation fence wait
34*db16f9d9SMatthew Brost  * @fence: TLB invalidation fence to wait on
35*db16f9d9SMatthew Brost  *
36*db16f9d9SMatthew Brost  * Wait on a TLB invalidiation fence until it signals, non interruptable
37*db16f9d9SMatthew Brost  */
3815366239SMatthew Brost static inline void
3915366239SMatthew Brost xe_tlb_inval_fence_wait(struct xe_tlb_inval_fence *fence)
4015366239SMatthew Brost {
4115366239SMatthew Brost 	dma_fence_wait(&fence->base, false);
4215366239SMatthew Brost }
4315366239SMatthew Brost 
44*db16f9d9SMatthew Brost void xe_tlb_inval_done_handler(struct xe_tlb_inval *tlb_inval, int seqno);
45*db16f9d9SMatthew Brost 
4615366239SMatthew Brost #endif	/* _XE_TLB_INVAL_ */
47