Commit 53bc2098 authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/format-helper: Rework format-helper conversion functions

Move destination-buffer clipping from all format-helper conversion
functions into callers. Support destination-buffer pitch. Only
distinguish between system and I/O memory, but use same logic
everywhere.

Simply harmonize the interface and semantics of the existing code.
Not all conversion helpers support all combinations of parameters.
We have to add additional features when we need them.

v2:
	* fix default destination pitch in drm_fb_xrgb8888_to_gray8()
	  (Noralf)
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Tested-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Reviewed-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20211110103702.374-5-tzimmermann@suse.de
parent 3e3543c8
This diff is collapsed.
...@@ -216,7 +216,7 @@ int mipi_dbi_buf_copy(void *dst, struct drm_framebuffer *fb, ...@@ -216,7 +216,7 @@ int mipi_dbi_buf_copy(void *dst, struct drm_framebuffer *fb,
drm_fb_memcpy(dst, 0, src, fb, clip); drm_fb_memcpy(dst, 0, src, fb, clip);
break; break;
case DRM_FORMAT_XRGB8888: case DRM_FORMAT_XRGB8888:
drm_fb_xrgb8888_to_rgb565(dst, src, fb, clip, swap); drm_fb_xrgb8888_to_rgb565(dst, 0, src, fb, clip, swap);
break; break;
default: default:
drm_err_once(fb->dev, "Format is not supported: %p4cc\n", drm_err_once(fb->dev, "Format is not supported: %p4cc\n",
......
...@@ -74,7 +74,7 @@ static size_t gud_xrgb8888_to_r124(u8 *dst, const struct drm_format_info *format ...@@ -74,7 +74,7 @@ static size_t gud_xrgb8888_to_r124(u8 *dst, const struct drm_format_info *format
if (!buf) if (!buf)
return 0; return 0;
drm_fb_xrgb8888_to_gray8(buf, src, fb, rect); drm_fb_xrgb8888_to_gray8(buf, 0, src, fb, rect);
pix8 = buf; pix8 = buf;
for (y = 0; y < height; y++) { for (y = 0; y < height; y++) {
...@@ -190,13 +190,13 @@ static int gud_prep_flush(struct gud_device *gdrm, struct drm_framebuffer *fb, ...@@ -190,13 +190,13 @@ static int gud_prep_flush(struct gud_device *gdrm, struct drm_framebuffer *fb,
goto end_cpu_access; goto end_cpu_access;
} }
} else if (format->format == DRM_FORMAT_R8) { } else if (format->format == DRM_FORMAT_R8) {
drm_fb_xrgb8888_to_gray8(buf, vaddr, fb, rect); drm_fb_xrgb8888_to_gray8(buf, 0, vaddr, fb, rect);
} else if (format->format == DRM_FORMAT_RGB332) { } else if (format->format == DRM_FORMAT_RGB332) {
drm_fb_xrgb8888_to_rgb332(buf, vaddr, fb, rect); drm_fb_xrgb8888_to_rgb332(buf, 0, vaddr, fb, rect);
} else if (format->format == DRM_FORMAT_RGB565) { } else if (format->format == DRM_FORMAT_RGB565) {
drm_fb_xrgb8888_to_rgb565(buf, vaddr, fb, rect, gud_is_big_endian()); drm_fb_xrgb8888_to_rgb565(buf, 0, vaddr, fb, rect, gud_is_big_endian());
} else if (format->format == DRM_FORMAT_RGB888) { } else if (format->format == DRM_FORMAT_RGB888) {
drm_fb_xrgb8888_to_rgb888(buf, vaddr, fb, rect); drm_fb_xrgb8888_to_rgb888(buf, 0, vaddr, fb, rect);
} else { } else {
len = gud_xrgb8888_to_color(buf, format, vaddr, fb, rect); len = gud_xrgb8888_to_color(buf, format, vaddr, fb, rect);
} }
......
...@@ -329,14 +329,12 @@ static int cirrus_fb_blit_rect(struct drm_framebuffer *fb, const struct dma_buf_ ...@@ -329,14 +329,12 @@ static int cirrus_fb_blit_rect(struct drm_framebuffer *fb, const struct dma_buf_
drm_fb_memcpy_toio(dst, fb->pitches[0], vmap, fb, rect); drm_fb_memcpy_toio(dst, fb->pitches[0], vmap, fb, rect);
} else if (fb->format->cpp[0] == 4 && cirrus->cpp == 2) { } else if (fb->format->cpp[0] == 4 && cirrus->cpp == 2) {
drm_fb_xrgb8888_to_rgb565_dstclip(cirrus->vram, dst += drm_fb_clip_offset(cirrus->pitch, fb->format, rect);
cirrus->pitch, drm_fb_xrgb8888_to_rgb565_toio(dst, cirrus->pitch, vmap, fb, rect, false);
vmap, fb, rect, false);
} else if (fb->format->cpp[0] == 4 && cirrus->cpp == 3) { } else if (fb->format->cpp[0] == 4 && cirrus->cpp == 3) {
drm_fb_xrgb8888_to_rgb888_dstclip(cirrus->vram, dst += drm_fb_clip_offset(cirrus->pitch, fb->format, rect);
cirrus->pitch, drm_fb_xrgb8888_to_rgb888_toio(dst, cirrus->pitch, vmap, fb, rect);
vmap, fb, rect);
} else { } else {
WARN_ON_ONCE("cpp mismatch"); WARN_ON_ONCE("cpp mismatch");
......
...@@ -560,7 +560,7 @@ static int repaper_fb_dirty(struct drm_framebuffer *fb) ...@@ -560,7 +560,7 @@ static int repaper_fb_dirty(struct drm_framebuffer *fb)
if (ret) if (ret)
goto out_free; goto out_free;
drm_fb_xrgb8888_to_gray8(buf, cma_obj->vaddr, fb, &clip); drm_fb_xrgb8888_to_gray8(buf, 0, cma_obj->vaddr, fb, &clip);
drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
......
...@@ -73,7 +73,7 @@ static void st7586_xrgb8888_to_gray332(u8 *dst, void *vaddr, ...@@ -73,7 +73,7 @@ static void st7586_xrgb8888_to_gray332(u8 *dst, void *vaddr,
if (!buf) if (!buf)
return; return;
drm_fb_xrgb8888_to_gray8(buf, vaddr, fb, clip); drm_fb_xrgb8888_to_gray8(buf, 0, vaddr, fb, clip);
src = buf; src = buf;
for (y = clip->y1; y < clip->y2; y++) { for (y = clip->y1; y < clip->y2; y++) {
......
...@@ -20,21 +20,21 @@ void drm_fb_memcpy_toio(void __iomem *dst, unsigned int dst_pitch, const void *v ...@@ -20,21 +20,21 @@ void drm_fb_memcpy_toio(void __iomem *dst, unsigned int dst_pitch, const void *v
void drm_fb_swab(void *dst, unsigned int dst_pitch, const void *src, void drm_fb_swab(void *dst, unsigned int dst_pitch, const void *src,
const struct drm_framebuffer *fb, const struct drm_rect *clip, const struct drm_framebuffer *fb, const struct drm_rect *clip,
bool cached); bool cached);
void drm_fb_xrgb8888_to_rgb332(void *dst, void *vaddr, struct drm_framebuffer *fb, void drm_fb_xrgb8888_to_rgb332(void *dst, unsigned int dst_pitch, const void *vaddr,
struct drm_rect *clip); const struct drm_framebuffer *fb, const struct drm_rect *clip);
void drm_fb_xrgb8888_to_rgb565(void *dst, void *vaddr, void drm_fb_xrgb8888_to_rgb565(void *dst, unsigned int dst_pitch, const void *vaddr,
struct drm_framebuffer *fb, const struct drm_framebuffer *fb, const struct drm_rect *clip,
struct drm_rect *clip, bool swab); bool swab);
void drm_fb_xrgb8888_to_rgb565_dstclip(void __iomem *dst, unsigned int dst_pitch, void drm_fb_xrgb8888_to_rgb565_toio(void __iomem *dst, unsigned int dst_pitch,
void *vaddr, struct drm_framebuffer *fb, const void *vaddr, const struct drm_framebuffer *fb,
struct drm_rect *clip, bool swab); const struct drm_rect *clip, bool swab);
void drm_fb_xrgb8888_to_rgb888(void *dst, void *src, struct drm_framebuffer *fb, void drm_fb_xrgb8888_to_rgb888(void *dst, unsigned int dst_pitch, const void *src,
struct drm_rect *clip); const struct drm_framebuffer *fb, const struct drm_rect *clip);
void drm_fb_xrgb8888_to_rgb888_dstclip(void __iomem *dst, unsigned int dst_pitch, void drm_fb_xrgb8888_to_rgb888_toio(void __iomem *dst, unsigned int dst_pitch,
void *vaddr, struct drm_framebuffer *fb, const void *vaddr, const struct drm_framebuffer *fb,
struct drm_rect *clip); const struct drm_rect *clip);
void drm_fb_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, void drm_fb_xrgb8888_to_gray8(void *dst, unsigned int dst_pitch, const void *vaddr,
struct drm_rect *clip); const struct drm_framebuffer *fb, const struct drm_rect *clip);
int drm_fb_blit_rect_dstclip(void __iomem *dst, unsigned int dst_pitch, int drm_fb_blit_rect_dstclip(void __iomem *dst, unsigned int dst_pitch,
uint32_t dst_format, void *vmap, uint32_t dst_format, void *vmap,
......
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