Commit cccd73d6 authored by Lucas De Marchi's avatar Lucas De Marchi

iosys-map: Add offset to iosys_map_memcpy_to()

In certain situations it's useful to be able to write to an
offset of the mapping. Add a dst_offset to iosys_map_memcpy_to().

Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: Christian König <christian.koenig@amd.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: dri-devel@lists.freedesktop.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20220216174147.3073235-2-lucas.demarchi@intel.com
parent 2f8a6699
...@@ -221,7 +221,7 @@ static void memcpy_fallback(struct iosys_map *dst, ...@@ -221,7 +221,7 @@ static void memcpy_fallback(struct iosys_map *dst,
if (!dst->is_iomem && !src->is_iomem) { if (!dst->is_iomem && !src->is_iomem) {
memcpy(dst->vaddr, src->vaddr, len); memcpy(dst->vaddr, src->vaddr, len);
} else if (!src->is_iomem) { } else if (!src->is_iomem) {
iosys_map_memcpy_to(dst, src->vaddr, len); iosys_map_memcpy_to(dst, 0, src->vaddr, len);
} else if (!dst->is_iomem) { } else if (!dst->is_iomem) {
memcpy_fromio(dst->vaddr, src->vaddr_iomem, len); memcpy_fromio(dst->vaddr, src->vaddr_iomem, len);
} else { } else {
......
...@@ -385,7 +385,7 @@ static void drm_fb_helper_damage_blit_real(struct drm_fb_helper *fb_helper, ...@@ -385,7 +385,7 @@ static void drm_fb_helper_damage_blit_real(struct drm_fb_helper *fb_helper,
iosys_map_incr(dst, offset); /* go to first pixel within clip rect */ iosys_map_incr(dst, offset); /* go to first pixel within clip rect */
for (y = clip->y1; y < clip->y2; y++) { for (y = clip->y1; y < clip->y2; y++) {
iosys_map_memcpy_to(dst, src, len); iosys_map_memcpy_to(dst, 0, src, len);
iosys_map_incr(dst, fb->pitches[0]); iosys_map_incr(dst, fb->pitches[0]);
src += fb->pitches[0]; src += fb->pitches[0];
} }
......
...@@ -220,22 +220,23 @@ static inline void iosys_map_clear(struct iosys_map *map) ...@@ -220,22 +220,23 @@ static inline void iosys_map_clear(struct iosys_map *map)
} }
/** /**
* iosys_map_memcpy_to - Memcpy into iosys mapping * iosys_map_memcpy_to - Memcpy into offset of iosys_map
* @dst: The iosys_map structure * @dst: The iosys_map structure
* @dst_offset: The offset from which to copy
* @src: The source buffer * @src: The source buffer
* @len: The number of byte in src * @len: The number of byte in src
* *
* Copies data into a iosys mapping. The source buffer is in system * Copies data into a iosys_map with an offset. The source buffer is in
* memory. Depending on the buffer's location, the helper picks the correct * system memory. Depending on the buffer's location, the helper picks the
* method of accessing the memory. * correct method of accessing the memory.
*/ */
static inline void iosys_map_memcpy_to(struct iosys_map *dst, const void *src, static inline void iosys_map_memcpy_to(struct iosys_map *dst, size_t dst_offset,
size_t len) const void *src, size_t len)
{ {
if (dst->is_iomem) if (dst->is_iomem)
memcpy_toio(dst->vaddr_iomem, src, len); memcpy_toio(dst->vaddr_iomem + dst_offset, src, len);
else else
memcpy(dst->vaddr, src, len); memcpy(dst->vaddr + dst_offset, src, len);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment