summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorArto Merilainen <amerilainen@nvidia.com>2014-04-09 14:15:32 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:09:05 -0400
commit542f729aa9ea9c5eb845c35d855e3925f45ab24f (patch)
tree75db3574ecaf392fe1e1aa0df9d7757497c7ae22 /drivers
parentd4586cc3ab132fd03dce731e1e053bd70d9122cf (diff)
gpu: nvgpu: Allow mapping backing store
Backing store sgt needs to be mapped to gpuva to enable CDE swizzling. This patch adds necessary code to create sgt during initialisation so that the sgt is available when needed. Bug 1409151 Change-Id: I9d4671386fe9204d780c2e286b5f9b2dd87af35a Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/ltc_common.c12
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h1
2 files changed, 11 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ltc_common.c b/drivers/gpu/nvgpu/gk20a/ltc_common.c
index 2d2516d9..8f9bd8c2 100644
--- a/drivers/gpu/nvgpu/gk20a/ltc_common.c
+++ b/drivers/gpu/nvgpu/gk20a/ltc_common.c
@@ -220,8 +220,7 @@ static int gk20a_ltc_alloc_phys_cbc(struct gk20a *g,
220 *gr->compbit_store.pages = pages; 220 *gr->compbit_store.pages = pages;
221 gr->compbit_store.base_iova = sg_phys(sgt->sgl); 221 gr->compbit_store.base_iova = sg_phys(sgt->sgl);
222 gr->compbit_store.size = compbit_backing_size; 222 gr->compbit_store.size = compbit_backing_size;
223 223 gr->compbit_store.sgt = sgt;
224 kfree(sgt);
225 224
226 return 0; 225 return 0;
227 226
@@ -241,6 +240,7 @@ static int gk20a_ltc_alloc_virt_cbc(struct gk20a *g,
241 struct gr_gk20a *gr = &g->gr; 240 struct gr_gk20a *gr = &g->gr;
242 DEFINE_DMA_ATTRS(attrs); 241 DEFINE_DMA_ATTRS(attrs);
243 dma_addr_t iova; 242 dma_addr_t iova;
243 int err;
244 244
245 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs); 245 dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs);
246 246
@@ -255,6 +255,14 @@ static int gk20a_ltc_alloc_virt_cbc(struct gk20a *g,
255 255
256 gr->compbit_store.base_iova = iova; 256 gr->compbit_store.base_iova = iova;
257 gr->compbit_store.size = compbit_backing_size; 257 gr->compbit_store.size = compbit_backing_size;
258 err = gk20a_get_sgtable_from_pages(d,
259 &gr->compbit_store.sgt,
260 gr->compbit_store.pages, iova,
261 compbit_backing_size);
262 if (err) {
263 gk20a_err(dev_from_gk20a(g), "failed to allocate sgt for backing store");
264 return err;
265 }
258 266
259 return 0; 267 return 0;
260} 268}
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
index d583849d..e5d76f8f 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
@@ -157,6 +157,7 @@ struct gr_ctx_desc {
157 157
158struct compbit_store_desc { 158struct compbit_store_desc {
159 struct page **pages; 159 struct page **pages;
160 struct sg_table *sgt;
160 size_t size; 161 size_t size;
161 u64 base_iova; 162 u64 base_iova;
162}; 163};