forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.h
....@@ -67,6 +67,10 @@
6767 nvkm_vmm_pte_func mem;
6868 nvkm_vmm_pte_func dma;
6969 nvkm_vmm_pte_func sgl;
70
+
71
+ nvkm_vmm_pte_func pfn;
72
+ bool (*pfn_clear)(struct nvkm_vmm *, struct nvkm_mmu_pt *, u32 ptei, u32 ptes);
73
+ nvkm_vmm_pxe_func pfn_unmap;
7074 };
7175
7276 extern const struct nvkm_vmm_desc_func gf100_vmm_pgd;
....@@ -141,6 +145,11 @@
141145 struct nvkm_vmm_map *);
142146 void (*flush)(struct nvkm_vmm *, int depth);
143147
148
+ int (*mthd)(struct nvkm_vmm *, struct nvkm_client *,
149
+ u32 mthd, void *argv, u32 argc);
150
+
151
+ void (*invalidate_pdb)(struct nvkm_vmm *, u64 addr);
152
+
144153 u64 page_block;
145154 const struct nvkm_vmm_page page[];
146155 };
....@@ -151,24 +160,35 @@
151160 };
152161
153162 int nvkm_vmm_new_(const struct nvkm_vmm_func *, struct nvkm_mmu *,
154
- u32 pd_header, u64 addr, u64 size, struct lock_class_key *,
155
- const char *name, struct nvkm_vmm **);
156
-int nvkm_vmm_ctor(const struct nvkm_vmm_func *, struct nvkm_mmu *,
157
- u32 pd_header, u64 addr, u64 size, struct lock_class_key *,
158
- const char *name, struct nvkm_vmm *);
163
+ u32 pd_header, bool managed, u64 addr, u64 size,
164
+ struct lock_class_key *, const char *name,
165
+ struct nvkm_vmm **);
159166 struct nvkm_vma *nvkm_vmm_node_search(struct nvkm_vmm *, u64 addr);
167
+struct nvkm_vma *nvkm_vmm_node_split(struct nvkm_vmm *, struct nvkm_vma *,
168
+ u64 addr, u64 size);
160169 int nvkm_vmm_get_locked(struct nvkm_vmm *, bool getref, bool mapref,
161170 bool sparse, u8 page, u8 align, u64 size,
162171 struct nvkm_vma **pvma);
163172 void nvkm_vmm_put_locked(struct nvkm_vmm *, struct nvkm_vma *);
164
-void nvkm_vmm_unmap_locked(struct nvkm_vmm *, struct nvkm_vma *);
165
-void nvkm_vmm_unmap_region(struct nvkm_vmm *vmm, struct nvkm_vma *vma);
173
+void nvkm_vmm_unmap_locked(struct nvkm_vmm *, struct nvkm_vma *, bool pfn);
174
+void nvkm_vmm_unmap_region(struct nvkm_vmm *, struct nvkm_vma *);
175
+
176
+#define NVKM_VMM_PFN_ADDR 0xfffffffffffff000ULL
177
+#define NVKM_VMM_PFN_ADDR_SHIFT 12
178
+#define NVKM_VMM_PFN_APER 0x00000000000000f0ULL
179
+#define NVKM_VMM_PFN_HOST 0x0000000000000000ULL
180
+#define NVKM_VMM_PFN_VRAM 0x0000000000000010ULL
181
+#define NVKM_VMM_PFN_W 0x0000000000000002ULL
182
+#define NVKM_VMM_PFN_V 0x0000000000000001ULL
183
+#define NVKM_VMM_PFN_NONE 0x0000000000000000ULL
184
+
185
+int nvkm_vmm_pfn_map(struct nvkm_vmm *, u8 page, u64 addr, u64 size, u64 *pfn);
186
+int nvkm_vmm_pfn_unmap(struct nvkm_vmm *, u64 addr, u64 size);
166187
167188 struct nvkm_vma *nvkm_vma_tail(struct nvkm_vma *, u64 tail);
168
-void nvkm_vmm_node_insert(struct nvkm_vmm *, struct nvkm_vma *);
169189
170190 int nv04_vmm_new_(const struct nvkm_vmm_func *, struct nvkm_mmu *, u32,
171
- u64, u64, void *, u32, struct lock_class_key *,
191
+ bool, u64, u64, void *, u32, struct lock_class_key *,
172192 const char *, struct nvkm_vmm **);
173193 int nv04_vmm_valid(struct nvkm_vmm *, void *, u32, struct nvkm_vmm_map *);
174194
....@@ -178,65 +198,76 @@
178198 void nv50_vmm_flush(struct nvkm_vmm *, int);
179199
180200 int gf100_vmm_new_(const struct nvkm_vmm_func *, const struct nvkm_vmm_func *,
181
- struct nvkm_mmu *, u64, u64, void *, u32,
201
+ struct nvkm_mmu *, bool, u64, u64, void *, u32,
182202 struct lock_class_key *, const char *, struct nvkm_vmm **);
183203 int gf100_vmm_join_(struct nvkm_vmm *, struct nvkm_memory *, u64 base);
184204 int gf100_vmm_join(struct nvkm_vmm *, struct nvkm_memory *);
185205 void gf100_vmm_part(struct nvkm_vmm *, struct nvkm_memory *);
186206 int gf100_vmm_aper(enum nvkm_memory_target);
187207 int gf100_vmm_valid(struct nvkm_vmm *, void *, u32, struct nvkm_vmm_map *);
188
-void gf100_vmm_flush_(struct nvkm_vmm *, int);
189208 void gf100_vmm_flush(struct nvkm_vmm *, int);
209
+void gf100_vmm_invalidate(struct nvkm_vmm *, u32 type);
210
+void gf100_vmm_invalidate_pdb(struct nvkm_vmm *, u64 addr);
190211
191212 int gk20a_vmm_aper(enum nvkm_memory_target);
192213
193214 int gm200_vmm_new_(const struct nvkm_vmm_func *, const struct nvkm_vmm_func *,
194
- struct nvkm_mmu *, u64, u64, void *, u32,
215
+ struct nvkm_mmu *, bool, u64, u64, void *, u32,
195216 struct lock_class_key *, const char *, struct nvkm_vmm **);
196217 int gm200_vmm_join_(struct nvkm_vmm *, struct nvkm_memory *, u64 base);
197218 int gm200_vmm_join(struct nvkm_vmm *, struct nvkm_memory *);
198219
220
+int gp100_vmm_new_(const struct nvkm_vmm_func *,
221
+ struct nvkm_mmu *, bool, u64, u64, void *, u32,
222
+ struct lock_class_key *, const char *, struct nvkm_vmm **);
199223 int gp100_vmm_join(struct nvkm_vmm *, struct nvkm_memory *);
200224 int gp100_vmm_valid(struct nvkm_vmm *, void *, u32, struct nvkm_vmm_map *);
201225 void gp100_vmm_flush(struct nvkm_vmm *, int);
226
+int gp100_vmm_mthd(struct nvkm_vmm *, struct nvkm_client *, u32, void *, u32);
227
+void gp100_vmm_invalidate_pdb(struct nvkm_vmm *, u64 addr);
202228
203
-int nv04_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
229
+int gv100_vmm_join(struct nvkm_vmm *, struct nvkm_memory *);
230
+
231
+int nv04_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
204232 struct lock_class_key *, const char *, struct nvkm_vmm **);
205
-int nv41_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
233
+int nv41_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
206234 struct lock_class_key *, const char *, struct nvkm_vmm **);
207
-int nv44_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
235
+int nv44_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
208236 struct lock_class_key *, const char *, struct nvkm_vmm **);
209
-int nv50_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
237
+int nv50_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
210238 struct lock_class_key *, const char *, struct nvkm_vmm **);
211
-int mcp77_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
239
+int mcp77_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
212240 struct lock_class_key *, const char *, struct nvkm_vmm **);
213
-int g84_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
241
+int g84_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
214242 struct lock_class_key *, const char *, struct nvkm_vmm **);
215
-int gf100_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
243
+int gf100_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
216244 struct lock_class_key *, const char *, struct nvkm_vmm **);
217
-int gk104_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
245
+int gk104_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
218246 struct lock_class_key *, const char *, struct nvkm_vmm **);
219
-int gk20a_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
247
+int gk20a_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
220248 struct lock_class_key *, const char *, struct nvkm_vmm **);
221
-int gm200_vmm_new_fixed(struct nvkm_mmu *, u64, u64, void *, u32,
249
+int gm200_vmm_new_fixed(struct nvkm_mmu *, bool, u64, u64, void *, u32,
222250 struct lock_class_key *, const char *,
223251 struct nvkm_vmm **);
224
-int gm200_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
252
+int gm200_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
225253 struct lock_class_key *, const char *,
226254 struct nvkm_vmm **);
227
-int gm20b_vmm_new_fixed(struct nvkm_mmu *, u64, u64, void *, u32,
255
+int gm20b_vmm_new_fixed(struct nvkm_mmu *, bool, u64, u64, void *, u32,
228256 struct lock_class_key *, const char *,
229257 struct nvkm_vmm **);
230
-int gm20b_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
258
+int gm20b_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
231259 struct lock_class_key *, const char *,
232260 struct nvkm_vmm **);
233
-int gp100_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
261
+int gp100_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
234262 struct lock_class_key *, const char *,
235263 struct nvkm_vmm **);
236
-int gp10b_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
264
+int gp10b_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
237265 struct lock_class_key *, const char *,
238266 struct nvkm_vmm **);
239
-int gv100_vmm_new(struct nvkm_mmu *, u64, u64, void *, u32,
267
+int gv100_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
268
+ struct lock_class_key *, const char *,
269
+ struct nvkm_vmm **);
270
+int tu102_vmm_new(struct nvkm_mmu *, bool, u64, u64, void *, u32,
240271 struct lock_class_key *, const char *,
241272 struct nvkm_vmm **);
242273
....@@ -270,7 +301,7 @@
270301 FILL(VMM, PT, PTEI, _ptes, MAP, _addr); \
271302 PTEI += _ptes; \
272303 PTEN -= _ptes; \
273
- }; \
304
+ } \
274305 nvkm_done((PT)->memory); \
275306 } while(0)
276307