diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/nvgpu_mem.c | 49 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/pramin.c | 49 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/include/nvgpu/pramin.h | 7 |
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 | ||
105 | static 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 | |||
105 | u32 nvgpu_mem_rd32(struct gk20a *g, struct nvgpu_mem *mem, u32 w) | 122 | u32 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 | ||
182 | static 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 | |||
165 | void nvgpu_mem_wr32(struct gk20a *g, struct nvgpu_mem *mem, u32 w, u32 data) | 199 | void 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 | ||
256 | static 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 | |||
222 | void nvgpu_memset(struct gk20a *g, struct nvgpu_mem *mem, u32 offset, | 271 | void 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 | ||
37 | void 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 | |||
54 | void 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 | |||
71 | void 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; | |||
36 | typedef void (*pramin_access_batch_fn)(struct gk20a *g, u32 start, u32 words, | 36 | typedef 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 | */ | ||
42 | void pramin_access_batch_rd_n(struct gk20a *g, u32 start, u32 words, u32 **arg); | ||
43 | void pramin_access_batch_wr_n(struct gk20a *g, u32 start, u32 words, u32 **arg); | ||
44 | void pramin_access_batch_set(struct gk20a *g, u32 start, u32 words, u32 **arg); | ||
45 | |||
46 | void nvgpu_pramin_access_batched(struct gk20a *g, struct nvgpu_mem *mem, | 39 | void 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); |