drm/nouveau/core: add gpuobj memcpy helper functions
authorAlexandre Courbot <acourbot@nvidia.com>
Wed, 24 Feb 2016 05:42:14 +0000 (14:42 +0900)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 14 Mar 2016 00:13:19 +0000 (10:13 +1000)
Add memcpy functions to copy a buffer to a gpuobj and vice-versa. This
will be used by the secure boot code.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/core/gpuobj.h
drivers/gpu/drm/nouveau/nvkm/core/gpuobj.c

index d4f56ea..c23da4f 100644 (file)
@@ -37,4 +37,8 @@ int nvkm_gpuobj_wrap(struct nvkm_memory *, struct nvkm_gpuobj **);
 int nvkm_gpuobj_map(struct nvkm_gpuobj *, struct nvkm_vm *, u32 access,
                    struct nvkm_vma *);
 void nvkm_gpuobj_unmap(struct nvkm_vma *);
+void nvkm_gpuobj_memcpy_to(struct nvkm_gpuobj *dst, u32 dstoffset, void *src,
+                          u32 length);
+void nvkm_gpuobj_memcpy_from(void *dst, struct nvkm_gpuobj *src, u32 srcoffset,
+                            u32 length);
 #endif
index c3a790e..a7bd227 100644 (file)
@@ -253,3 +253,23 @@ nvkm_gpuobj_wrap(struct nvkm_memory *memory, struct nvkm_gpuobj **pgpuobj)
        (*pgpuobj)->size = nvkm_memory_size(memory);
        return 0;
 }
+
+void
+nvkm_gpuobj_memcpy_to(struct nvkm_gpuobj *dst, u32 dstoffset, void *src,
+                     u32 length)
+{
+       int i;
+
+       for (i = 0; i < length; i += 4)
+               nvkm_wo32(dst, dstoffset + i, *(u32 *)(src + i));
+}
+
+void
+nvkm_gpuobj_memcpy_from(void *dst, struct nvkm_gpuobj *src, u32 srcoffset,
+                       u32 length)
+{
+       int i;
+
+       for (i = 0; i < length; i += 4)
+               ((u32 *)src)[i / 4] = nvkm_ro32(src, srcoffset + i);
+}