[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