diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 25 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 8 |
2 files changed, 24 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index e580732a..e7a97207 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -111,11 +111,6 @@ static const u64 gmmu_page_offset_masks[gmmu_nr_page_sizes] = { 0xfffLL, | |||
111 | 0x1ffffLL }; | 111 | 0x1ffffLL }; |
112 | static const u64 gmmu_page_masks[gmmu_nr_page_sizes] = { ~0xfffLL, ~0x1ffffLL }; | 112 | static const u64 gmmu_page_masks[gmmu_nr_page_sizes] = { ~0xfffLL, ~0x1ffffLL }; |
113 | 113 | ||
114 | struct gk20a_comptags { | ||
115 | u32 offset; | ||
116 | u32 lines; | ||
117 | }; | ||
118 | |||
119 | struct gk20a_dmabuf_priv { | 114 | struct gk20a_dmabuf_priv { |
120 | struct mutex lock; | 115 | struct mutex lock; |
121 | 116 | ||
@@ -197,10 +192,8 @@ void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf, | |||
197 | mutex_unlock(&priv->lock); | 192 | mutex_unlock(&priv->lock); |
198 | } | 193 | } |
199 | 194 | ||
200 | 195 | void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf, | |
201 | static void gk20a_get_comptags(struct device *dev, | 196 | struct gk20a_comptags *comptags) |
202 | struct dma_buf *dmabuf, | ||
203 | struct gk20a_comptags *comptags) | ||
204 | { | 197 | { |
205 | struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(dmabuf, dev); | 198 | struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(dmabuf, dev); |
206 | 199 | ||
@@ -1539,6 +1532,20 @@ u64 gk20a_gmmu_map(struct vm_gk20a *vm, | |||
1539 | return vaddr; | 1532 | return vaddr; |
1540 | } | 1533 | } |
1541 | 1534 | ||
1535 | dma_addr_t gk20a_mm_gpuva_to_iova(struct vm_gk20a *vm, u64 gpu_vaddr) | ||
1536 | { | ||
1537 | struct mapped_buffer_node *buffer; | ||
1538 | dma_addr_t addr = 0; | ||
1539 | |||
1540 | mutex_lock(&vm->update_gmmu_lock); | ||
1541 | buffer = find_mapped_buffer_locked(&vm->mapped_buffers, gpu_vaddr); | ||
1542 | if (buffer) | ||
1543 | addr = gk20a_mm_iova_addr(buffer->sgt->sgl); | ||
1544 | mutex_unlock(&vm->update_gmmu_lock); | ||
1545 | |||
1546 | return addr; | ||
1547 | } | ||
1548 | |||
1542 | void gk20a_gmmu_unmap(struct vm_gk20a *vm, | 1549 | void gk20a_gmmu_unmap(struct vm_gk20a *vm, |
1543 | u64 vaddr, | 1550 | u64 vaddr, |
1544 | u64 size, | 1551 | u64 size, |
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index b0f3536e..30f9e50b 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |||
@@ -198,6 +198,11 @@ enum gmmu_pgsz_gk20a { | |||
198 | gmmu_nr_page_sizes = 2 | 198 | gmmu_nr_page_sizes = 2 |
199 | }; | 199 | }; |
200 | 200 | ||
201 | struct gk20a_comptags { | ||
202 | u32 offset; | ||
203 | u32 lines; | ||
204 | }; | ||
205 | |||
201 | 206 | ||
202 | struct page_directory_gk20a { | 207 | struct page_directory_gk20a { |
203 | /* backing for */ | 208 | /* backing for */ |
@@ -473,6 +478,9 @@ int gk20a_vm_map_buffer(struct gk20a_as_share *as_share, | |||
473 | u64 buffer_offset, | 478 | u64 buffer_offset, |
474 | u64 mapping_size); | 479 | u64 mapping_size); |
475 | int gk20a_vm_unmap_buffer(struct gk20a_as_share *, u64 offset); | 480 | int gk20a_vm_unmap_buffer(struct gk20a_as_share *, u64 offset); |
481 | void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf, | ||
482 | struct gk20a_comptags *comptags); | ||
483 | dma_addr_t gk20a_mm_gpuva_to_iova(struct vm_gk20a *vm, u64 gpu_vaddr); | ||
476 | 484 | ||
477 | int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev); | 485 | int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev); |
478 | 486 | ||