summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/common/linux/cde.c6
-rw-r--r--drivers/gpu/nvgpu/common/linux/comptags.c13
-rw-r--r--drivers/gpu/nvgpu/common/linux/dmabuf.h13
-rw-r--r--drivers/gpu/nvgpu/common/linux/vm.c8
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/comptags.h12
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/linux/vm.h6
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/vm.h6
7 files changed, 41 insertions, 23 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/cde.c b/drivers/gpu/nvgpu/common/linux/cde.c
index 5063ba88..003da143 100644
--- a/drivers/gpu/nvgpu/common/linux/cde.c
+++ b/drivers/gpu/nvgpu/common/linux/cde.c
@@ -973,6 +973,10 @@ __releases(&l->cde_app->mutex)
973 struct gk20a *g = &l->g; 973 struct gk20a *g = &l->g;
974 struct gk20a_cde_ctx *cde_ctx = NULL; 974 struct gk20a_cde_ctx *cde_ctx = NULL;
975 struct gk20a_comptags comptags; 975 struct gk20a_comptags comptags;
976 struct nvgpu_os_buffer os_buf = {
977 compbits_scatter_buf,
978 dev_from_gk20a(g)
979 };
976 u64 mapped_compbits_offset = 0; 980 u64 mapped_compbits_offset = 0;
977 u64 compbits_size = 0; 981 u64 compbits_size = 0;
978 u64 mapped_scatterbuffer_offset = 0; 982 u64 mapped_scatterbuffer_offset = 0;
@@ -1103,7 +1107,7 @@ __releases(&l->cde_app->mutex)
1103 } 1107 }
1104 1108
1105 /* store source buffer compression tags */ 1109 /* store source buffer compression tags */
1106 gk20a_get_comptags(dev_from_gk20a(g), compbits_scatter_buf, &comptags); 1110 gk20a_get_comptags(&os_buf, &comptags);
1107 cde_ctx->surf_param_offset = comptags.offset; 1111 cde_ctx->surf_param_offset = comptags.offset;
1108 cde_ctx->surf_param_lines = comptags.lines; 1112 cde_ctx->surf_param_lines = comptags.lines;
1109 1113
diff --git a/drivers/gpu/nvgpu/common/linux/comptags.c b/drivers/gpu/nvgpu/common/linux/comptags.c
index 517429d8..f55989f7 100644
--- a/drivers/gpu/nvgpu/common/linux/comptags.c
+++ b/drivers/gpu/nvgpu/common/linux/comptags.c
@@ -18,12 +18,15 @@
18 18
19#include <nvgpu/comptags.h> 19#include <nvgpu/comptags.h>
20 20
21#include <nvgpu/linux/vm.h>
22
21#include "dmabuf.h" 23#include "dmabuf.h"
22 24
23void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf, 25void gk20a_get_comptags(struct nvgpu_os_buffer *buf,
24 struct gk20a_comptags *comptags) 26 struct gk20a_comptags *comptags)
25{ 27{
26 struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(dmabuf, dev); 28 struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(buf->dmabuf,
29 buf->dev);
27 30
28 if (!comptags) 31 if (!comptags)
29 return; 32 return;
@@ -37,12 +40,12 @@ void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf,
37} 40}
38 41
39int gk20a_alloc_comptags(struct gk20a *g, 42int gk20a_alloc_comptags(struct gk20a *g,
40 struct device *dev, 43 struct nvgpu_os_buffer *buf,
41 struct dma_buf *dmabuf,
42 struct gk20a_comptag_allocator *allocator, 44 struct gk20a_comptag_allocator *allocator,
43 u32 lines) 45 u32 lines)
44{ 46{
45 struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(dmabuf, dev); 47 struct gk20a_dmabuf_priv *priv = dma_buf_get_drvdata(buf->dmabuf,
48 buf->dev);
46 u32 ctaglines_allocsize; 49 u32 ctaglines_allocsize;
47 u32 offset; 50 u32 offset;
48 int err; 51 int err;
diff --git a/drivers/gpu/nvgpu/common/linux/dmabuf.h b/drivers/gpu/nvgpu/common/linux/dmabuf.h
index b4b61459..8e6c139b 100644
--- a/drivers/gpu/nvgpu/common/linux/dmabuf.h
+++ b/drivers/gpu/nvgpu/common/linux/dmabuf.h
@@ -48,19 +48,6 @@ struct gk20a_dmabuf_priv {
48 u64 buffer_id; 48 u64 buffer_id;
49}; 49};
50 50
51/*
52 * These are implemented in common/linux/comptags.c - these are dmabuf related
53 * functions though so they are defined here. They cannot be defined in
54 * <nvgpu/comptags.h> since that file must be OS agnostic.
55 */
56int gk20a_alloc_comptags(struct gk20a *g,
57 struct device *dev,
58 struct dma_buf *dmabuf,
59 struct gk20a_comptag_allocator *allocator,
60 u32 lines);
61void gk20a_get_comptags(struct device *dev, struct dma_buf *dmabuf,
62 struct gk20a_comptags *comptags);
63
64struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf); 51struct sg_table *gk20a_mm_pin(struct device *dev, struct dma_buf *dmabuf);
65void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf, 52void gk20a_mm_unpin(struct device *dev, struct dma_buf *dmabuf,
66 struct sg_table *sgt); 53 struct sg_table *sgt);
diff --git a/drivers/gpu/nvgpu/common/linux/vm.c b/drivers/gpu/nvgpu/common/linux/vm.c
index 006216c2..9178a0b0 100644
--- a/drivers/gpu/nvgpu/common/linux/vm.c
+++ b/drivers/gpu/nvgpu/common/linux/vm.c
@@ -165,6 +165,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
165 struct nvgpu_sgt *nvgpu_sgt = NULL; 165 struct nvgpu_sgt *nvgpu_sgt = NULL;
166 struct sg_table *sgt; 166 struct sg_table *sgt;
167 struct nvgpu_mapped_buf *mapped_buffer = NULL; 167 struct nvgpu_mapped_buf *mapped_buffer = NULL;
168 struct nvgpu_os_buffer os_buf = { dmabuf, dev };
168 enum nvgpu_aperture aperture; 169 enum nvgpu_aperture aperture;
169 bool va_allocated = false; 170 bool va_allocated = false;
170 bool clear_ctags = false; 171 bool clear_ctags = false;
@@ -277,11 +278,11 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
277 if (!vm->enable_ctag) 278 if (!vm->enable_ctag)
278 binfo.ctag_lines = 0; 279 binfo.ctag_lines = 0;
279 280
280 gk20a_get_comptags(dev, dmabuf, &comptags); 281 gk20a_get_comptags(&os_buf, &comptags);
281 282
282 if (binfo.ctag_lines && !comptags.lines) { 283 if (binfo.ctag_lines && !comptags.lines) {
283 /* allocate compression resources if needed */ 284 /* allocate compression resources if needed */
284 err = gk20a_alloc_comptags(g, dev, dmabuf, 285 err = gk20a_alloc_comptags(g, &os_buf,
285 &g->gr.comp_tags, 286 &g->gr.comp_tags,
286 binfo.ctag_lines); 287 binfo.ctag_lines);
287 if (err) { 288 if (err) {
@@ -296,8 +297,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
296 goto clean_up; 297 goto clean_up;
297 } 298 }
298 } else { 299 } else {
299 gk20a_get_comptags(dev, 300 gk20a_get_comptags(&os_buf, &comptags);
300 dmabuf, &comptags);
301 301
302 if (g->ops.ltc.cbc_ctrl) 302 if (g->ops.ltc.cbc_ctrl)
303 g->ops.ltc.cbc_ctrl(g, gk20a_cbc_op_clear, 303 g->ops.ltc.cbc_ctrl(g, gk20a_cbc_op_clear,
diff --git a/drivers/gpu/nvgpu/include/nvgpu/comptags.h b/drivers/gpu/nvgpu/include/nvgpu/comptags.h
index 6e3062ec..5482d0ce 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/comptags.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/comptags.h
@@ -20,6 +20,7 @@
20#include <nvgpu/lock.h> 20#include <nvgpu/lock.h>
21 21
22struct gk20a; 22struct gk20a;
23struct nvgpu_os_buffer;
23 24
24struct gk20a_comptags { 25struct gk20a_comptags {
25 u32 offset; 26 u32 offset;
@@ -52,6 +53,17 @@ int gk20a_comptaglines_alloc(struct gk20a_comptag_allocator *allocator,
52void gk20a_comptaglines_free(struct gk20a_comptag_allocator *allocator, 53void gk20a_comptaglines_free(struct gk20a_comptag_allocator *allocator,
53 u32 offset, u32 len); 54 u32 offset, u32 len);
54 55
56/*
57 * Defined by OS specific code since comptags are stored in a highly OS specific
58 * way.
59 */
60int gk20a_alloc_comptags(struct gk20a *g,
61 struct nvgpu_os_buffer *buf,
62 struct gk20a_comptag_allocator *allocator,
63 u32 lines);
64void gk20a_get_comptags(struct nvgpu_os_buffer *buf,
65 struct gk20a_comptags *comptags);
66
55 67
56 68
57#endif 69#endif
diff --git a/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h b/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h
index dee8fa09..39deeb69 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h
@@ -33,11 +33,17 @@
33 33
34struct sg_table; 34struct sg_table;
35struct dma_buf; 35struct dma_buf;
36struct device;
36 37
37struct vm_gk20a; 38struct vm_gk20a;
38struct vm_gk20a_mapping_batch; 39struct vm_gk20a_mapping_batch;
39struct nvgpu_vm_area; 40struct nvgpu_vm_area;
40 41
42struct nvgpu_os_buffer {
43 struct dma_buf *dmabuf;
44 struct device *dev;
45};
46
41/* NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL must be set */ 47/* NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL must be set */
42int nvgpu_vm_map_linux(struct vm_gk20a *vm, 48int nvgpu_vm_map_linux(struct vm_gk20a *vm,
43 struct dma_buf *dmabuf, 49 struct dma_buf *dmabuf,
diff --git a/drivers/gpu/nvgpu/include/nvgpu/vm.h b/drivers/gpu/nvgpu/include/nvgpu/vm.h
index 10a7f7ce..b91b41e4 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/vm.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/vm.h
@@ -107,6 +107,12 @@ struct nvgpu_mapped_buf {
107 bool va_allocated; 107 bool va_allocated;
108}; 108};
109 109
110/*
111 * Defined by each OS. Allows the common VM code do things to the OS specific
112 * buffer structures.
113 */
114struct nvgpu_os_buffer;
115
110static inline struct nvgpu_mapped_buf * 116static inline struct nvgpu_mapped_buf *
111nvgpu_mapped_buf_from_buffer_list(struct nvgpu_list_node *node) 117nvgpu_mapped_buf_from_buffer_list(struct nvgpu_list_node *node)
112{ 118{