diff options
author | Aingara Paramakuru <aparamakuru@nvidia.com> | 2014-05-05 21:14:22 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:11:01 -0400 |
commit | 1fd722f592c2e0523c5e399a2406a4e387057188 (patch) | |
tree | 3425fb1a08ec2ccc6397e39c73a5579117e00a05 /drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |
parent | 69e0cd3dfd8f39bc8d3529325001dcacd774f669 (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.h | 35 |
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 | ||
323 | struct gk20a; | 327 | struct 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 | ||
445 | u64 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 | |||
441 | void gk20a_gmmu_unmap(struct vm_gk20a *vm, | 457 | void 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 | ||
462 | void 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 | |||
446 | struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf); | 469 | struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf); |
447 | void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf, | 470 | void 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 */ |
462 | void gk20a_vm_unmap(struct vm_gk20a *vm, u64 offset); | 485 | void gk20a_vm_unmap(struct vm_gk20a *vm, u64 offset); |
463 | 486 | ||
487 | void 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 */ |
465 | int gk20a_vm_get_buffers(struct vm_gk20a *vm, | 490 | int 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, | |||
482 | void gk20a_vm_get(struct vm_gk20a *vm); | 507 | void gk20a_vm_get(struct vm_gk20a *vm); |
483 | void gk20a_vm_put(struct vm_gk20a *vm); | 508 | void gk20a_vm_put(struct vm_gk20a *vm); |
484 | 509 | ||
510 | void gk20a_vm_remove_support(struct vm_gk20a *vm); | ||
511 | |||
512 | u64 gk20a_vm_alloc_va(struct vm_gk20a *vm, | ||
513 | u64 size, | ||
514 | enum gmmu_pgsz_gk20a gmmu_pgsz_idx); | ||
515 | |||
516 | int 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 */ |
486 | struct nvhost_as_alloc_space_args; | 521 | struct nvhost_as_alloc_space_args; |
487 | struct nvhost_as_free_space_args; | 522 | struct nvhost_as_free_space_args; |