From 4cb6f6b357963b2eab6a0d02974a6f64c874bd89 Mon Sep 17 00:00:00 2001 From: Arto Merilainen Date: Mon, 21 Jul 2014 10:19:27 +0300 Subject: gpu: nvgpu: Add helpers for backing store access This patch adds mm helpers to access compression backing store from in-kernel shader. Bug 1409151 Change-Id: Icb4f6dc0b5a35fdb97bc4221ab3657866f775fae Signed-off-by: Arto Merilainen Reviewed-on: http://git-master/r/440263 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Lauri Peltonen GVS: Gerrit_Virtual_Submit --- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 25 ++++++++++++++++--------- drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 8 ++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'drivers/gpu/nvgpu') 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, 0x1ffffLL }; static const u64 gmmu_page_masks[gmmu_nr_page_sizes] = { ~0xfffLL, ~0x1ffffLL }; -struct gk20a_comptags { - u32 offset; - u32 lines; -}; - struct gk20a_dmabuf_priv { struct mutex lock; @@ -197,10 +192,8 @@ void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf, mutex_unlock(&priv->lock); } - -static void gk20a_get_comptags(struct device *dev, - struct dma_buf *dmabuf, - struct gk20a_comptags *comptags) +void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf, + struct gk20a_comptags *comptags) { struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(dmabuf, dev); @@ -1539,6 +1532,20 @@ u64 gk20a_gmmu_map(struct vm_gk20a *vm, return vaddr; } +dma_addr_t gk20a_mm_gpuva_to_iova(struct vm_gk20a *vm, u64 gpu_vaddr) +{ + struct mapped_buffer_node *buffer; + dma_addr_t addr = 0; + + mutex_lock(&vm->update_gmmu_lock); + buffer = find_mapped_buffer_locked(&vm->mapped_buffers, gpu_vaddr); + if (buffer) + addr = gk20a_mm_iova_addr(buffer->sgt->sgl); + mutex_unlock(&vm->update_gmmu_lock); + + return addr; +} + void gk20a_gmmu_unmap(struct vm_gk20a *vm, u64 vaddr, 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 { gmmu_nr_page_sizes = 2 }; +struct gk20a_comptags { + u32 offset; + u32 lines; +}; + struct page_directory_gk20a { /* backing for */ @@ -473,6 +478,9 @@ int gk20a_vm_map_buffer(struct gk20a_as_share *as_share, u64 buffer_offset, u64 mapping_size); int gk20a_vm_unmap_buffer(struct gk20a_as_share *, u64 offset); +void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf, + struct gk20a_comptags *comptags); +dma_addr_t gk20a_mm_gpuva_to_iova(struct vm_gk20a *vm, u64 gpu_vaddr); int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev); -- cgit v1.2.2