xref: /linux/drivers/gpu/drm/xe/xe_ggtt.h (revision 53597deca0e38c30e6cd4ba2114fa42d2bcd85bb)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2021 Intel Corporation
4  */
5 
6 #ifndef _XE_GGTT_H_
7 #define _XE_GGTT_H_
8 
9 #include "xe_ggtt_types.h"
10 
11 struct drm_printer;
12 struct xe_bo;
13 struct xe_tile;
14 struct drm_exec;
15 
16 struct xe_ggtt *xe_ggtt_alloc(struct xe_tile *tile);
17 int xe_ggtt_init_early(struct xe_ggtt *ggtt);
18 int xe_ggtt_init_kunit(struct xe_ggtt *ggtt, u32 reserved, u32 size);
19 int xe_ggtt_init(struct xe_ggtt *ggtt);
20 
21 void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_base);
22 u64 xe_ggtt_start(struct xe_ggtt *ggtt);
23 u64 xe_ggtt_size(struct xe_ggtt *ggtt);
24 
25 struct xe_ggtt_node *
26 xe_ggtt_insert_node(struct xe_ggtt *ggtt, u32 size, u32 align);
27 struct xe_ggtt_node *
28 xe_ggtt_insert_node_transform(struct xe_ggtt *ggtt,
29 			      struct xe_bo *bo, u64 pte,
30 			      u64 size, u32 align,
31 			      xe_ggtt_transform_cb transform, void *arg);
32 void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate);
33 size_t xe_ggtt_node_pt_size(const struct xe_ggtt_node *node);
34 void xe_ggtt_map_bo_unlocked(struct xe_ggtt *ggtt, struct xe_bo *bo);
35 int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec);
36 int xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
37 			 u64 start, u64 end, struct drm_exec *exec);
38 void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
39 u64 xe_ggtt_largest_hole(struct xe_ggtt *ggtt, u64 alignment, u64 *spare);
40 
41 int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
42 u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
43 
44 #ifdef CONFIG_PCI_IOV
45 void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid);
46 int xe_ggtt_node_save(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid);
47 int xe_ggtt_node_load(struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid);
48 #endif
49 
50 #ifndef CONFIG_LOCKDEP
51 static inline void xe_ggtt_might_lock(struct xe_ggtt *ggtt)
52 { }
53 #else
54 void xe_ggtt_might_lock(struct xe_ggtt *ggtt);
55 #endif
56 
57 u64 xe_ggtt_encode_pte_flags(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index);
58 u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset);
59 
60 u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node);
61 u64 xe_ggtt_node_size(const struct xe_ggtt_node *node);
62 
63 #endif
64