summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2017-09-27 18:13:45 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-10-10 11:49:05 -0400
commit37ec670601a879781e40ec71d9f713fa9c28564c (patch)
tree83573899a8c3620d66120da202a5518f3aabcc44 /drivers/gpu/nvgpu
parent3c37701377459fbea2b460e1b9c65a863dfb04b2 (diff)
gpu: nvgpu: Move PRAMIN functions to nvgpu_mem
PRAMIN batch access functions are only used by nvgpu_mem. The way the functions are written is Linux specific, so move the implementation from common PRAMIN code. JIRA NVGPU-259 Change-Id: I6e2aba08c98568c651a86fe8ca7f9f5220d67348 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1569697 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/common/linux/nvgpu_mem.c49
-rw-r--r--drivers/gpu/nvgpu/common/pramin.c49
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/pramin.h7
3 files changed, 49 insertions, 56 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c b/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c
index e8aea0be..9b9f58e1 100644
--- a/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c
+++ b/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c
@@ -102,6 +102,23 @@ void nvgpu_mem_end(struct gk20a *g, struct nvgpu_mem *mem)
102 mem->cpu_va = NULL; 102 mem->cpu_va = NULL;
103} 103}
104 104
105static void pramin_access_batch_rd_n(struct gk20a *g, u32 start, u32 words, u32 **arg)
106{
107 u32 r = start, *dest_u32 = *arg;
108
109 if (!g->regs) {
110 __gk20a_warn_on_no_regs();
111 return;
112 }
113
114 while (words--) {
115 *dest_u32++ = gk20a_readl(g, r);
116 r += sizeof(u32);
117 }
118
119 *arg = dest_u32;
120}
121
105u32 nvgpu_mem_rd32(struct gk20a *g, struct nvgpu_mem *mem, u32 w) 122u32 nvgpu_mem_rd32(struct gk20a *g, struct nvgpu_mem *mem, u32 w)
106{ 123{
107 u32 data = 0; 124 u32 data = 0;
@@ -162,6 +179,23 @@ void nvgpu_mem_rd_n(struct gk20a *g, struct nvgpu_mem *mem,
162 } 179 }
163} 180}
164 181
182static void pramin_access_batch_wr_n(struct gk20a *g, u32 start, u32 words, u32 **arg)
183{
184 u32 r = start, *src_u32 = *arg;
185
186 if (!g->regs) {
187 __gk20a_warn_on_no_regs();
188 return;
189 }
190
191 while (words--) {
192 writel_relaxed(*src_u32++, g->regs + r);
193 r += sizeof(u32);
194 }
195
196 *arg = src_u32;
197}
198
165void nvgpu_mem_wr32(struct gk20a *g, struct nvgpu_mem *mem, u32 w, u32 data) 199void nvgpu_mem_wr32(struct gk20a *g, struct nvgpu_mem *mem, u32 w, u32 data)
166{ 200{
167 if (mem->aperture == APERTURE_SYSMEM && !g->mm.force_pramin) { 201 if (mem->aperture == APERTURE_SYSMEM && !g->mm.force_pramin) {
@@ -219,6 +253,21 @@ void nvgpu_mem_wr_n(struct gk20a *g, struct nvgpu_mem *mem, u32 offset,
219 } 253 }
220} 254}
221 255
256static void pramin_access_batch_set(struct gk20a *g, u32 start, u32 words, u32 **arg)
257{
258 u32 r = start, repeat = **arg;
259
260 if (!g->regs) {
261 __gk20a_warn_on_no_regs();
262 return;
263 }
264
265 while (words--) {
266 writel_relaxed(repeat, g->regs + r);
267 r += sizeof(u32);
268 }
269}
270
222void nvgpu_memset(struct gk20a *g, struct nvgpu_mem *mem, u32 offset, 271void nvgpu_memset(struct gk20a *g, struct nvgpu_mem *mem, u32 offset,
223 u32 c, u32 size) 272 u32 c, u32 size)
224{ 273{
diff --git a/drivers/gpu/nvgpu/common/pramin.c b/drivers/gpu/nvgpu/common/pramin.c
index 56179a6b..abe5b561 100644
--- a/drivers/gpu/nvgpu/common/pramin.c
+++ b/drivers/gpu/nvgpu/common/pramin.c
@@ -34,55 +34,6 @@
34 */ 34 */
35#define GK20A_FORCE_PRAMIN_DEFAULT false 35#define GK20A_FORCE_PRAMIN_DEFAULT false
36 36
37void pramin_access_batch_rd_n(struct gk20a *g, u32 start, u32 words, u32 **arg)
38{
39 u32 r = start, *dest_u32 = *arg;
40
41 if (!g->regs) {
42 __gk20a_warn_on_no_regs();
43 return;
44 }
45
46 while (words--) {
47 *dest_u32++ = gk20a_readl(g, r);
48 r += sizeof(u32);
49 }
50
51 *arg = dest_u32;
52}
53
54void pramin_access_batch_wr_n(struct gk20a *g, u32 start, u32 words, u32 **arg)
55{
56 u32 r = start, *src_u32 = *arg;
57
58 if (!g->regs) {
59 __gk20a_warn_on_no_regs();
60 return;
61 }
62
63 while (words--) {
64 writel_relaxed(*src_u32++, g->regs + r);
65 r += sizeof(u32);
66 }
67
68 *arg = src_u32;
69}
70
71void pramin_access_batch_set(struct gk20a *g, u32 start, u32 words, u32 **arg)
72{
73 u32 r = start, repeat = **arg;
74
75 if (!g->regs) {
76 __gk20a_warn_on_no_regs();
77 return;
78 }
79
80 while (words--) {
81 writel_relaxed(repeat, g->regs + r);
82 r += sizeof(u32);
83 }
84}
85
86/* 37/*
87 * The PRAMIN range is 1 MB, must change base addr if a buffer crosses that. 38 * The PRAMIN range is 1 MB, must change base addr if a buffer crosses that.
88 * This same loop is used for read/write/memset. Offset and size in bytes. 39 * This same loop is used for read/write/memset. Offset and size in bytes.
diff --git a/drivers/gpu/nvgpu/include/nvgpu/pramin.h b/drivers/gpu/nvgpu/include/nvgpu/pramin.h
index 4c0fea14..687f247a 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/pramin.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/pramin.h
@@ -36,13 +36,6 @@ struct nvgpu_mem;
36typedef void (*pramin_access_batch_fn)(struct gk20a *g, u32 start, u32 words, 36typedef void (*pramin_access_batch_fn)(struct gk20a *g, u32 start, u32 words,
37 u32 **arg); 37 u32 **arg);
38 38
39/*
40 * Generally useful batch functions.
41 */
42void pramin_access_batch_rd_n(struct gk20a *g, u32 start, u32 words, u32 **arg);
43void pramin_access_batch_wr_n(struct gk20a *g, u32 start, u32 words, u32 **arg);
44void pramin_access_batch_set(struct gk20a *g, u32 start, u32 words, u32 **arg);
45
46void nvgpu_pramin_access_batched(struct gk20a *g, struct nvgpu_mem *mem, 39void nvgpu_pramin_access_batched(struct gk20a *g, struct nvgpu_mem *mem,
47 u32 offset, u32 size, 40 u32 offset, u32 size,
48 pramin_access_batch_fn loop, u32 **arg); 41 pramin_access_batch_fn loop, u32 **arg);