[PATCH v2 3/9] drm/format-helper: Add destination-buffer pitch to drm_fb_swab()
Thomas Zimmermann
tzimmermann at suse.de
Wed Nov 10 09:17:48 UTC 2021
Am 08.11.21 um 19:57 schrieb Amanoel Dawod:
> Hi,
>
> On Mon, Nov 1, 2021, at 10:15 AM, Thomas Zimmermann wrote:
>> Add destination-buffer pitch as argument to drm_fb_swab(). Done for
>> consistency with the rest of the interface.
>>
>> v2:
>> * update documentation (Noralf)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> Tested-by: Noralf Trønnes <noralf at tronnes.org>
>> Reviewed-by: Noralf Trønnes <noralf at tronnes.org>
>> ---
>> drivers/gpu/drm/drm_format_helper.c | 21 ++++++++++++++++-----
>> drivers/gpu/drm/drm_mipi_dbi.c | 2 +-
>> drivers/gpu/drm/gud/gud_pipe.c | 2 +-
>> include/drm/drm_format_helper.h | 5 +++--
>> 4 files changed, 21 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_format_helper.c
>> b/drivers/gpu/drm/drm_format_helper.c
>> index fac37c697d8b..dac355320287 100644
>> --- a/drivers/gpu/drm/drm_format_helper.c
>> +++ b/drivers/gpu/drm/drm_format_helper.c
>> @@ -101,6 +101,7 @@ EXPORT_SYMBOL(drm_fb_memcpy_toio);
>> /**
>> * drm_fb_swab - Swap bytes into clip buffer
>> * @dst: Destination buffer
>> + * @dst_pitch: Number of bytes between two consecutive scanlines
>> within dst
>> * @src: Source buffer
>> * @fb: DRM framebuffer
>> * @clip: Clip rectangle area to copy
>> @@ -110,21 +111,27 @@ EXPORT_SYMBOL(drm_fb_memcpy_toio);
>> * time to speed up slow uncached reads.
>> *
>> * This function does not apply clipping on dst, i.e. the destination
>> - * is a small buffer containing the clip rect only.
>> + * is at the top-left corner.
>> */
>> -void drm_fb_swab(void *dst, void *src, struct drm_framebuffer *fb,
>> - struct drm_rect *clip, bool cached)
>> +void drm_fb_swab(void *dst, unsigned int dst_pitch, const void *src,
>> + const struct drm_framebuffer *fb, const struct drm_rect *clip,
>> + bool cached)
>> {
>> u8 cpp = fb->format->cpp[0];
>> size_t len = drm_rect_width(clip) * cpp;
>> - u16 *src16, *dst16 = dst;
>> - u32 *src32, *dst32 = dst;
>> + const u16 *src16;
>> + const u32 *src32;
>> + u16 *dst16;
>> + u32 *dst32;
>> unsigned int x, y;
>> void *buf = NULL;
>>
>> if (WARN_ON_ONCE(cpp != 2 && cpp != 4))
>> return;
>>
>> + if (!dst_pitch)
>> + dst_pitch = len;
>> +
>> if (!cached)
>> buf = kmalloc(len, GFP_KERNEL);
>>
>> @@ -140,6 +147,9 @@ void drm_fb_swab(void *dst, void *src, struct
>> drm_framebuffer *fb,
>> src32 = src;
>> }
>>
>> + dst16 = dst;
>> + dst32 = dst;
>> +
>> for (x = clip->x1; x < clip->x2; x++) {
>> if (cpp == 4)
>> *dst32++ = swab32(*src32++);
>> @@ -148,6 +158,7 @@ void drm_fb_swab(void *dst, void *src, struct
>> drm_framebuffer *fb,
>> }
>>
>> src += fb->pitches[0];
>> + dst += dst_pitch;
>> }
>>
>> kfree(buf);
>> diff --git a/drivers/gpu/drm/drm_mipi_dbi.c
>> b/drivers/gpu/drm/drm_mipi_dbi.c
>> index c09df8b06c7a..7ce89917d761 100644
>> --- a/drivers/gpu/drm/drm_mipi_dbi.c
>> +++ b/drivers/gpu/drm/drm_mipi_dbi.c
>> @@ -211,7 +211,7 @@ int mipi_dbi_buf_copy(void *dst, struct
>> drm_framebuffer *fb,
>> switch (fb->format->format) {
>> case DRM_FORMAT_RGB565:
>> if (swap)
>> - drm_fb_swab(dst, src, fb, clip, !gem->import_attach);
>> + drm_fb_swab(dst, 0, src, fb, clip, !gem->import_attach);
>> else
>> drm_fb_memcpy(dst, 0, src, fb, clip);
>> break;
>> diff --git a/drivers/gpu/drm/gud/gud_pipe.c
>> b/drivers/gpu/drm/gud/gud_pipe.c
>> index a92112ffd37a..e0b117b2559f 100644
>> --- a/drivers/gpu/drm/gud/gud_pipe.c
>> +++ b/drivers/gpu/drm/gud/gud_pipe.c
>> @@ -201,7 +201,7 @@ static int gud_prep_flush(struct gud_device *gdrm,
>> struct drm_framebuffer *fb,
>> len = gud_xrgb8888_to_color(buf, format, vaddr, fb, rect);
>> }
>> } else if (gud_is_big_endian() && format->cpp[0] > 1) {
>> - drm_fb_swab(buf, vaddr, fb, rect, !import_attach);
>> + drm_fb_swab(buf, 0, vaddr, fb, rect, !import_attach);
>> } else if (compression && !import_attach && pitch == fb->pitches[0]) {
>> /* can compress directly from the framebuffer */
>> buf = vaddr + rect->y1 * pitch;
>> diff --git a/include/drm/drm_format_helper.h
>> b/include/drm/drm_format_helper.h
>> index 1fc3ba7b6060..ddcba5abe306 100644
>> --- a/include/drm/drm_format_helper.h
>> +++ b/include/drm/drm_format_helper.h
>> @@ -17,8 +17,9 @@ void drm_fb_memcpy(void *dst, unsigned int dst_pitch,
>> const void *vaddr,
>> const struct drm_framebuffer *fb, const struct drm_rect *clip);
>> void drm_fb_memcpy_toio(void __iomem *dst, unsigned int dst_pitch,
>> const void *vaddr,
>> const struct drm_framebuffer *fb, const struct drm_rect *clip);
>> -void drm_fb_swab(void *dst, void *src, struct drm_framebuffer *fb,
>> - struct drm_rect *clip, bool cached);
>> +void drm_fb_swab(void *dst, unsigned int dst_pitch, const void *src,
>> + const struct drm_framebuffer *fb, const struct drm_rect *clip,
>> + bool cached);
>> void drm_fb_xrgb8888_to_rgb332(void *dst, void *vaddr, struct
>> drm_framebuffer *fb,
>> struct drm_rect *clip);
>> void drm_fb_xrgb8888_to_rgb565(void *dst, void *vaddr,
>> --
>> 2.33.1
>
> Applying this fails for me (tested against 5.14 and 5.15 trees).
> Example:
> patching file include/drm/drm_format_helper.h
> Hunk #1 FAILED at 17.
Thanks for testing. The patches are written against a recent drm-tip tree.
Best regard
Thomas
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20211110/89bd15e2/attachment.sig>
More information about the dri-devel
mailing list