diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/mm/nvgpu_mem.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/mm/nvgpu_mem.c | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c b/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c index 855d455d..9f3b6cfa 100644 --- a/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c +++ b/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c | |||
@@ -177,3 +177,112 @@ u64 nvgpu_sgt_alignment(struct gk20a *g, struct nvgpu_sgt *sgt) | |||
177 | 177 | ||
178 | return align; | 178 | return align; |
179 | } | 179 | } |
180 | |||
181 | u32 nvgpu_mem_rd32(struct gk20a *g, struct nvgpu_mem *mem, u32 w) | ||
182 | { | ||
183 | u32 data = 0; | ||
184 | |||
185 | if (mem->aperture == APERTURE_SYSMEM) { | ||
186 | u32 *ptr = mem->cpu_va; | ||
187 | |||
188 | WARN_ON(!ptr); | ||
189 | data = ptr[w]; | ||
190 | } else if (mem->aperture == APERTURE_VIDMEM) { | ||
191 | nvgpu_pramin_rd_n(g, mem, w * sizeof(u32), sizeof(u32), &data); | ||
192 | } else { | ||
193 | WARN_ON("Accessing unallocated nvgpu_mem"); | ||
194 | } | ||
195 | |||
196 | return data; | ||
197 | } | ||
198 | |||
199 | u32 nvgpu_mem_rd(struct gk20a *g, struct nvgpu_mem *mem, u32 offset) | ||
200 | { | ||
201 | WARN_ON(offset & 3); | ||
202 | return nvgpu_mem_rd32(g, mem, offset / sizeof(u32)); | ||
203 | } | ||
204 | |||
205 | void nvgpu_mem_rd_n(struct gk20a *g, struct nvgpu_mem *mem, | ||
206 | u32 offset, void *dest, u32 size) | ||
207 | { | ||
208 | WARN_ON(offset & 3); | ||
209 | WARN_ON(size & 3); | ||
210 | |||
211 | if (mem->aperture == APERTURE_SYSMEM) { | ||
212 | u8 *src = (u8 *)mem->cpu_va + offset; | ||
213 | |||
214 | WARN_ON(!mem->cpu_va); | ||
215 | memcpy(dest, src, size); | ||
216 | } else if (mem->aperture == APERTURE_VIDMEM) { | ||
217 | nvgpu_pramin_rd_n(g, mem, offset, size, dest); | ||
218 | } else { | ||
219 | WARN_ON("Accessing unallocated nvgpu_mem"); | ||
220 | } | ||
221 | } | ||
222 | |||
223 | void nvgpu_mem_wr32(struct gk20a *g, struct nvgpu_mem *mem, u32 w, u32 data) | ||
224 | { | ||
225 | if (mem->aperture == APERTURE_SYSMEM) { | ||
226 | u32 *ptr = mem->cpu_va; | ||
227 | |||
228 | WARN_ON(!ptr); | ||
229 | ptr[w] = data; | ||
230 | } else if (mem->aperture == APERTURE_VIDMEM) { | ||
231 | nvgpu_pramin_wr_n(g, mem, w * sizeof(u32), sizeof(u32), &data); | ||
232 | if (!mem->skip_wmb) | ||
233 | nvgpu_wmb(); | ||
234 | } else { | ||
235 | WARN_ON("Accessing unallocated nvgpu_mem"); | ||
236 | } | ||
237 | } | ||
238 | |||
239 | void nvgpu_mem_wr(struct gk20a *g, struct nvgpu_mem *mem, u32 offset, u32 data) | ||
240 | { | ||
241 | WARN_ON(offset & 3); | ||
242 | nvgpu_mem_wr32(g, mem, offset / sizeof(u32), data); | ||
243 | } | ||
244 | |||
245 | void nvgpu_mem_wr_n(struct gk20a *g, struct nvgpu_mem *mem, u32 offset, | ||
246 | void *src, u32 size) | ||
247 | { | ||
248 | WARN_ON(offset & 3); | ||
249 | WARN_ON(size & 3); | ||
250 | |||
251 | if (mem->aperture == APERTURE_SYSMEM) { | ||
252 | u8 *dest = (u8 *)mem->cpu_va + offset; | ||
253 | |||
254 | WARN_ON(!mem->cpu_va); | ||
255 | memcpy(dest, src, size); | ||
256 | } else if (mem->aperture == APERTURE_VIDMEM) { | ||
257 | nvgpu_pramin_wr_n(g, mem, offset, size, src); | ||
258 | if (!mem->skip_wmb) | ||
259 | nvgpu_wmb(); | ||
260 | } else { | ||
261 | WARN_ON("Accessing unallocated nvgpu_mem"); | ||
262 | } | ||
263 | } | ||
264 | |||
265 | void nvgpu_memset(struct gk20a *g, struct nvgpu_mem *mem, u32 offset, | ||
266 | u32 c, u32 size) | ||
267 | { | ||
268 | WARN_ON(offset & 3); | ||
269 | WARN_ON(size & 3); | ||
270 | WARN_ON(c & ~0xff); | ||
271 | |||
272 | c &= 0xff; | ||
273 | |||
274 | if (mem->aperture == APERTURE_SYSMEM) { | ||
275 | u8 *dest = (u8 *)mem->cpu_va + offset; | ||
276 | |||
277 | WARN_ON(!mem->cpu_va); | ||
278 | memset(dest, c, size); | ||
279 | } else if (mem->aperture == APERTURE_VIDMEM) { | ||
280 | u32 repeat_value = c | (c << 8) | (c << 16) | (c << 24); | ||
281 | |||
282 | nvgpu_pramin_memset(g, mem, offset, size, repeat_value); | ||
283 | if (!mem->skip_wmb) | ||
284 | nvgpu_wmb(); | ||
285 | } else { | ||
286 | WARN_ON("Accessing unallocated nvgpu_mem"); | ||
287 | } | ||
288 | } | ||