summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-02-26 17:37:43 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:59:26 -0400
commit7290a6cbd5d03145d6f1ca4c3eacba40f6d4f93c (patch)
treede452c09f5eef76af273041dc64997fdc351dbd6 /drivers/gpu/nvgpu/gk20a/mm_gk20a.h
parentbb51cf9ec6482b50f3020179965ef82f58d91a0a (diff)
gpu: nvgpu: Implement common allocator and mem_desc
Introduce mem_desc, which holds all information needed for a buffer. Implement helper functions for allocation and freeing that use this data type. Change-Id: I82c88595d058d4fb8c5c5fbf19d13269e48e422f Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/712699
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h79
1 files changed, 30 insertions, 49 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
index 54028e73..ca7fef01 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
@@ -46,7 +46,7 @@
46 46
47struct mem_desc { 47struct mem_desc {
48 void *cpu_va; 48 void *cpu_va;
49 dma_addr_t iova; 49 struct sg_table *sgt;
50 size_t size; 50 size_t size;
51 u64 gpu_va; 51 u64 gpu_va;
52}; 52};
@@ -70,40 +70,6 @@ struct gpfifo_desc {
70 u64 gpu_va; 70 u64 gpu_va;
71}; 71};
72 72
73struct mmu_desc {
74 void *cpuva;
75 u64 iova;
76 size_t size;
77};
78
79struct inst_desc {
80 u64 iova;
81 void *cpuva;
82 phys_addr_t cpu_pa;
83 size_t size;
84};
85
86struct surface_mem_desc {
87 u64 iova;
88 void *cpuva;
89 struct sg_table *sgt;
90 size_t size;
91};
92
93struct userd_desc {
94 struct sg_table *sgt;
95 u64 iova;
96 void *cpuva;
97 size_t size;
98 u64 gpu_va;
99};
100
101struct runlist_mem_desc {
102 u64 iova;
103 void *cpuva;
104 size_t size;
105};
106
107struct patch_desc { 73struct patch_desc {
108 struct page **pages; 74 struct page **pages;
109 u64 iova; 75 u64 iova;
@@ -113,13 +79,6 @@ struct patch_desc {
113 u32 data_count; 79 u32 data_count;
114}; 80};
115 81
116struct pmu_mem_desc {
117 void *cpuva;
118 u64 iova;
119 u64 pmu_va;
120 size_t size;
121};
122
123struct priv_cmd_queue_mem_desc { 82struct priv_cmd_queue_mem_desc {
124 u64 base_iova; 83 u64 base_iova;
125 u32 *base_cpuva; 84 u32 *base_cpuva;
@@ -336,24 +295,24 @@ struct mm_gk20a {
336 struct { 295 struct {
337 u32 aperture_size; 296 u32 aperture_size;
338 struct vm_gk20a vm; 297 struct vm_gk20a vm;
339 struct inst_desc inst_block; 298 struct mem_desc inst_block;
340 } bar1; 299 } bar1;
341 300
342 struct { 301 struct {
343 u32 aperture_size; 302 u32 aperture_size;
344 struct vm_gk20a vm; 303 struct vm_gk20a vm;
345 struct inst_desc inst_block; 304 struct mem_desc inst_block;
346 } bar2; 305 } bar2;
347 306
348 struct { 307 struct {
349 u32 aperture_size; 308 u32 aperture_size;
350 struct vm_gk20a vm; 309 struct vm_gk20a vm;
351 struct inst_desc inst_block; 310 struct mem_desc inst_block;
352 } pmu; 311 } pmu;
353 312
354 struct { 313 struct {
355 /* using pmu vm currently */ 314 /* using pmu vm currently */
356 struct inst_desc inst_block; 315 struct mem_desc inst_block;
357 } hwpm; 316 } hwpm;
358 317
359 318
@@ -406,9 +365,9 @@ static inline int max_vaddr_bits_gk20a(void)
406#define bar1_instance_block_shift_gk20a() bus_bar1_block_ptr_shift_v() 365#define bar1_instance_block_shift_gk20a() bus_bar1_block_ptr_shift_v()
407#endif 366#endif
408 367
409int gk20a_alloc_inst_block(struct gk20a *g, struct inst_desc *inst_block); 368int gk20a_alloc_inst_block(struct gk20a *g, struct mem_desc *inst_block);
410void gk20a_free_inst_block(struct gk20a *g, struct inst_desc *inst_block); 369void gk20a_free_inst_block(struct gk20a *g, struct mem_desc *inst_block);
411void gk20a_init_inst_block(struct inst_desc *inst_block, struct vm_gk20a *vm, 370void gk20a_init_inst_block(struct mem_desc *inst_block, struct vm_gk20a *vm,
412 u32 big_page_size); 371 u32 big_page_size);
413 372
414void gk20a_mm_dump_vm(struct vm_gk20a *vm, 373void gk20a_mm_dump_vm(struct vm_gk20a *vm,
@@ -448,9 +407,31 @@ int gk20a_gmmu_alloc_map(struct vm_gk20a *vm,
448 size_t size, 407 size_t size,
449 struct mem_desc *mem); 408 struct mem_desc *mem);
450 409
410int gk20a_gmmu_alloc_map_attr(struct vm_gk20a *vm,
411 enum dma_attr attr,
412 size_t size,
413 struct mem_desc *mem);
414
451void gk20a_gmmu_unmap_free(struct vm_gk20a *vm, 415void gk20a_gmmu_unmap_free(struct vm_gk20a *vm,
452 struct mem_desc *mem); 416 struct mem_desc *mem);
453 417
418int gk20a_gmmu_alloc(struct gk20a *g,
419 size_t size,
420 struct mem_desc *mem);
421
422int gk20a_gmmu_alloc_attr(struct gk20a *g,
423 enum dma_attr attr,
424 size_t size,
425 struct mem_desc *mem);
426
427void gk20a_gmmu_free(struct gk20a *g,
428 struct mem_desc *mem);
429
430static inline phys_addr_t gk20a_mem_phys(struct mem_desc *mem)
431{
432 return sg_phys(mem->sgt->sgl);
433}
434
454u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm, 435u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm,
455 u64 map_offset, 436 u64 map_offset,
456 struct sg_table *sgt, 437 struct sg_table *sgt,