summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
diff options
context:
space:
mode:
authorAingara Paramakuru <aparamakuru@nvidia.com>2014-05-05 21:14:22 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:11:01 -0400
commit1fd722f592c2e0523c5e399a2406a4e387057188 (patch)
tree3425fb1a08ec2ccc6397e39c73a5579117e00a05 /drivers/gpu/nvgpu/gk20a/mm_gk20a.h
parent69e0cd3dfd8f39bc8d3529325001dcacd774f669 (diff)
gpu: nvgpu: support gk20a virtualization
The nvgpu driver now supports using the Tegra graphics virtualization interfaces to support gk20a in a virtualized environment. Bug 1509608 Change-Id: I6ede15ee7bf0b0ad8a13e8eb5f557c3516ead676 Signed-off-by: Aingara Paramakuru <aparamakuru@nvidia.com> Reviewed-on: http://git-master/r/440122 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
index b8726c62..f06c465a 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
@@ -318,6 +318,10 @@ struct vm_gk20a {
318 dma_addr_t zero_page_iova; 318 dma_addr_t zero_page_iova;
319 void *zero_page_cpuva; 319 void *zero_page_cpuva;
320 struct sg_table *zero_page_sgt; 320 struct sg_table *zero_page_sgt;
321
322#ifdef CONFIG_TEGRA_GR_VIRTUALIZATION
323 u64 handle;
324#endif
321}; 325};
322 326
323struct gk20a; 327struct gk20a;
@@ -438,11 +442,30 @@ u64 gk20a_gmmu_map(struct vm_gk20a *vm,
438 u32 flags, 442 u32 flags,
439 int rw_flag); 443 int rw_flag);
440 444
445u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm,
446 u64 map_offset,
447 struct sg_table *sgt,
448 u64 buffer_offset,
449 u64 size,
450 int pgsz_idx,
451 u8 kind_v,
452 u32 ctag_offset,
453 u32 flags,
454 int rw_flag,
455 bool clear_ctags);
456
441void gk20a_gmmu_unmap(struct vm_gk20a *vm, 457void gk20a_gmmu_unmap(struct vm_gk20a *vm,
442 u64 vaddr, 458 u64 vaddr,
443 u64 size, 459 u64 size,
444 int rw_flag); 460 int rw_flag);
445 461
462void gk20a_locked_gmmu_unmap(struct vm_gk20a *vm,
463 u64 vaddr,
464 u64 size,
465 int pgsz_idx,
466 bool va_allocated,
467 int rw_flag);
468
446struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf); 469struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf);
447void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf, 470void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf,
448 struct sg_table *sgt); 471 struct sg_table *sgt);
@@ -461,6 +484,8 @@ u64 gk20a_vm_map(struct vm_gk20a *vm,
461/* unmap handle from kernel */ 484/* unmap handle from kernel */
462void gk20a_vm_unmap(struct vm_gk20a *vm, u64 offset); 485void gk20a_vm_unmap(struct vm_gk20a *vm, u64 offset);
463 486
487void gk20a_vm_unmap_locked(struct mapped_buffer_node *mapped_buffer);
488
464/* get reference to all currently mapped buffers */ 489/* get reference to all currently mapped buffers */
465int gk20a_vm_get_buffers(struct vm_gk20a *vm, 490int gk20a_vm_get_buffers(struct vm_gk20a *vm,
466 struct mapped_buffer_node ***mapped_buffers, 491 struct mapped_buffer_node ***mapped_buffers,
@@ -482,6 +507,16 @@ int gk20a_vm_find_buffer(struct vm_gk20a *vm, u64 gpu_va,
482void gk20a_vm_get(struct vm_gk20a *vm); 507void gk20a_vm_get(struct vm_gk20a *vm);
483void gk20a_vm_put(struct vm_gk20a *vm); 508void gk20a_vm_put(struct vm_gk20a *vm);
484 509
510void gk20a_vm_remove_support(struct vm_gk20a *vm);
511
512u64 gk20a_vm_alloc_va(struct vm_gk20a *vm,
513 u64 size,
514 enum gmmu_pgsz_gk20a gmmu_pgsz_idx);
515
516int gk20a_vm_free_va(struct vm_gk20a *vm,
517 u64 offset, u64 size,
518 enum gmmu_pgsz_gk20a pgsz_idx);
519
485/* vm-as interface */ 520/* vm-as interface */
486struct nvhost_as_alloc_space_args; 521struct nvhost_as_alloc_space_args;
487struct nvhost_as_free_space_args; 522struct nvhost_as_free_space_args;