diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-02-26 17:37:43 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-04-04 21:59:26 -0400 |
commit | 7290a6cbd5d03145d6f1ca4c3eacba40f6d4f93c (patch) | |
tree | de452c09f5eef76af273041dc64997fdc351dbd6 /drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |
parent | bb51cf9ec6482b50f3020179965ef82f58d91a0a (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.h | 79 |
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 | ||
47 | struct mem_desc { | 47 | struct 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 | ||
73 | struct mmu_desc { | ||
74 | void *cpuva; | ||
75 | u64 iova; | ||
76 | size_t size; | ||
77 | }; | ||
78 | |||
79 | struct inst_desc { | ||
80 | u64 iova; | ||
81 | void *cpuva; | ||
82 | phys_addr_t cpu_pa; | ||
83 | size_t size; | ||
84 | }; | ||
85 | |||
86 | struct surface_mem_desc { | ||
87 | u64 iova; | ||
88 | void *cpuva; | ||
89 | struct sg_table *sgt; | ||
90 | size_t size; | ||
91 | }; | ||
92 | |||
93 | struct userd_desc { | ||
94 | struct sg_table *sgt; | ||
95 | u64 iova; | ||
96 | void *cpuva; | ||
97 | size_t size; | ||
98 | u64 gpu_va; | ||
99 | }; | ||
100 | |||
101 | struct runlist_mem_desc { | ||
102 | u64 iova; | ||
103 | void *cpuva; | ||
104 | size_t size; | ||
105 | }; | ||
106 | |||
107 | struct patch_desc { | 73 | struct 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 | ||
116 | struct pmu_mem_desc { | ||
117 | void *cpuva; | ||
118 | u64 iova; | ||
119 | u64 pmu_va; | ||
120 | size_t size; | ||
121 | }; | ||
122 | |||
123 | struct priv_cmd_queue_mem_desc { | 82 | struct 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 | ||
409 | int gk20a_alloc_inst_block(struct gk20a *g, struct inst_desc *inst_block); | 368 | int gk20a_alloc_inst_block(struct gk20a *g, struct mem_desc *inst_block); |
410 | void gk20a_free_inst_block(struct gk20a *g, struct inst_desc *inst_block); | 369 | void gk20a_free_inst_block(struct gk20a *g, struct mem_desc *inst_block); |
411 | void gk20a_init_inst_block(struct inst_desc *inst_block, struct vm_gk20a *vm, | 370 | void 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 | ||
414 | void gk20a_mm_dump_vm(struct vm_gk20a *vm, | 373 | void 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 | ||
410 | int gk20a_gmmu_alloc_map_attr(struct vm_gk20a *vm, | ||
411 | enum dma_attr attr, | ||
412 | size_t size, | ||
413 | struct mem_desc *mem); | ||
414 | |||
451 | void gk20a_gmmu_unmap_free(struct vm_gk20a *vm, | 415 | void gk20a_gmmu_unmap_free(struct vm_gk20a *vm, |
452 | struct mem_desc *mem); | 416 | struct mem_desc *mem); |
453 | 417 | ||
418 | int gk20a_gmmu_alloc(struct gk20a *g, | ||
419 | size_t size, | ||
420 | struct mem_desc *mem); | ||
421 | |||
422 | int gk20a_gmmu_alloc_attr(struct gk20a *g, | ||
423 | enum dma_attr attr, | ||
424 | size_t size, | ||
425 | struct mem_desc *mem); | ||
426 | |||
427 | void gk20a_gmmu_free(struct gk20a *g, | ||
428 | struct mem_desc *mem); | ||
429 | |||
430 | static inline phys_addr_t gk20a_mem_phys(struct mem_desc *mem) | ||
431 | { | ||
432 | return sg_phys(mem->sgt->sgl); | ||
433 | } | ||
434 | |||
454 | u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm, | 435 | u64 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, |